408考研逐题详解:2009年第25题
2009年第25题
某计算机系统中有 8 台打印机,由 K 个进程竞争使用,每个进程最多需要 3 台打印机。该系统可能会发生死锁的 K 的最小值是( )
A. 2 \qquad B. 3 \qquad C. 4 \qquad D. 5
解析
本题所涉及到的是操作系统中死锁。死锁是操作系统中一种多个进程(或线程)因竞争系统资源而陷入的一种无限期互相等待的状态。在这种状态下,每个进程都在等待另一个进程释放其占有的资源,但没有任何进程会主动释放自己已持有的资源,导致所有进程都无法向前推进。
死锁的发生必须同时满足以下四个条件,缺一不可:
-
互斥使用:资源本身具有排他性,即一个资源在同一时刻只能被一个进程使用。如果其他进程请求该资源,请求进程必须等待,直到该资源被释放。例如,打印机、扫描仪、临界区代码、某些特定的数据记录等。本题中的打印机就是典型的互斥资源(一台打印机不能同时被两个进程使用)。
-
持有并等待:进程在已经持有了至少一个资源的情况下,又请求新的资源;而该新资源此时可能已被其他进程持有,因此请求进程进入等待状态,在等待期间它不会释放自己已持有的资源。例如,进程 A 占用了打印机 1,同时请求打印机 2;而进程 B 占用了打印机 2,同时请求打印机 1。本题中,每个进程都可能已经持有 1 或 2 台打印机,同时请求第 2 或第 3 台打印机。
-
不可抢占:进程已获得的资源,在其使用完主动释放之前,不能被系统或其他进程强行剥夺(抢占)。例如,打印机任务打印到一半,系统不能强行把打印机从进程 A 手里抢过来给进程 B 用。进程必须完成打印任务后自愿释放打印机。本题中的打印机资源满足不可抢占条件。
-
循环等待:存在一个进程等待环路
{P0, P1, ..., Pn}
,其中:P0 正在等待 P1 持有的资源,P1 正在等待 P2 持有的资源,… ,Pn 正在等待 P0 持有的资源。例如,进程 A 持有资源 R1,请求资源 R2;进程 B 持有资源 R2,请求资源 R1。A 和 B 就形成了一个循环等待环路。本题中,当多个进程各自持有部分打印机(如每人2台)并互相等待对方释放打印机以凑齐自己所需的 3 台时,就可能形成循环等待。
在本题中,有 8 台打印机,打印机是互斥、不可抢占资源。有 K 个进程竞争使用,每个进程最大需求 3 台。要求找出 K 的最小值,也就是找到一种资源分配序列,导致系统进入一个满足死锁四个必要条件的状态(特别是循环等待状态)。
考虑最坏的情况,每个进程都持有了尽可能多的资源(只差 1 个资源就能完成),但都不足以完成(从而不会释放资源),并且它们请求的资源又被其他进程以同样的方式持有。这会导致所有进程都阻塞在等待状态(循环等待)。
对于本题,每个进程最大需要 3 台,那么“只差 1 台就能完成”的状态就是它已经持有 2 台。如果所有进程都恰好持有 2 台打印机,那么: 总已分配资源数 = K * 2
。系统要陷入这种最坏的状态(可能导致死锁),必须满足: 总已分配资源数 >= 总资源数
(即所有资源都被分配光了,没有空闲资源可以满足任何一个进程的最后 1 台需求)也就是: K * 2 >= 8
=> K >= 4
。
当 K=4 时,K * 2 = 8
。把8台打印机恰好平均分配给4个进程,每个进程获得 2 台。此时:
- 互斥:打印机是互斥资源。满足。
- 持有并等待:每个进程都持有 2 台(部分资源),并等待获取第 3 台(新的资源)。满足。
- 不可抢占:打印机不可抢占。满足。
- 循环等待:所有 4 个进程都在等待获取第 3 台打印机,但系统中已无空闲打印机。任何一个进程要完成,都需要另外 3 个进程中某一个释放其持有的打印机。但由于所有进程都阻塞在等待状态,没有进程能完成并释放资源。虽然没有特定的顺序依赖(每个进程都在等待“系统”提供一台打印机,而不是特定某台),但在这种所有资源耗尽、所有进程都只缺一个资源且互相卡住的情况下,可以认为形成了一个隐式的循环等待(例如,P1 等待的资源被 {P2, P3, P4} 间接持有,P2 等待的资源被 {P1, P3, P4} 间接持有,等等),或者更严格地说,系统处于一个不安全状态,可能导致死锁(例如,如果进程对打印机的请求有特定顺序依赖,则显式循环等待更容易形成)。
在多个相同类型资源(如打印机)的分配中,死锁可能发生的数学条件是:
R ≤ K × ( m − 1 ) R \leq K \times (m - 1) R≤K×(m−1)
其中, R R R 是总资源数; K K K 是进程数; m m m 是每个进程的最大资源需求。如果该条件成立,则存在一种资源分配序列,使得所有进程都持有部分资源但无法继续执行,从而导致死锁可能发生。
本题答案:C