4. 银行家算法举例

2026 旧版 · 非 2027 主源 · 原书检索 · 文字用于定位,公式与图表请回原页核验 · 本次导入快照

## 4. 银行家算法举例

安全性算法是银行家算法的核心,在银行家算法的题目中,一般会有某个进程的一个资源请求向量,读者只要执行上面所介绍的银行家算法的前三步,马上就会得到更新的 Allocation 矩阵和 Need 矩阵,再按照上例的安全性算法判断,就能知道系统能否满足进程提出的资源请求。

假设当前系统中资源的分配和剩余情况如表 2.7 所示。

(1)$\mathbf{P}_1$ 请求资源:$\mathbf{P}_1$ 发出请求向量 $\mathrm{Request}_1(1,0,2)$,系统按银行家算法进行检查:

$$
\mathrm{Request}_1(1, 0, 2) \leqslant \mathrm{Need}_1(1, 2, 2)
$$

$$
\mathrm{Request}_1(1, 0, 2) \leqslant \text{Available}_1(3, 3, 2)
$$

系统先假定可为 $\mathbf{P}_1$ 分配资源,并修改


<!-- page: 167 -->

Available = Available - Request₁ = (2, 3, 0)

Allocation₁ = Allocation₁ + Request₁ = (3, 0, 2)

Need₁ = Need₁ - Request₁ = (0, 2, 0)

由此形成的资源变化情况如表2.7中的圆括号所示。

令 Work = Available = (2, 3, 0),再利用安全性算法检查此时系统是否安全,如表2.9所示。

表 2.9 P₁ 申请资源时的安全性检查

[tbl-45.md](tbl-45.md)

由所进行的安全性检查得知,可找到一个安全序列 $\{P_1, P_3, P_4, P_0, P_2\}$。因此,系统是安全的,可以立即将 $P_1$ 所申请的资源分配给它。分配后系统中的资源情况如表2.10所示。

表 2.10 为 P₁ 分配资源后的有关资源数据

[tbl-46.md](tbl-46.md)

(2)P₄请求资源:P₄发出请求向量 Request₄(3, 3, 0),系统按银行家算法进行检查:

Request₄(3, 3, 0) ≤ Need₄(4, 3, 1);

Request₄(3, 3, 0) &gt; Available(2, 3, 0),让 P₄ 等待。

(3)P₀请求资源:P₀发出请求向量 Request₀(0, 2, 0),系统按银行家算法进行检查:

Request₀(0, 2, 0) ≤ Need₀(7, 4, 3);

Request₀(0, 2, 0) ≤ Available(2, 3, 0)

系统暂时先假定可为 P₀ 分配资源,并修改有关数据:

Available = Available - Request₀ = (2, 1, 0)

Allocation₀ = Allocation₀ + Request₀ = (0, 3, 0)

Need₀ = Need₀ - Request₀ = (7, 2, 3),结果如表2.11所示。

表 2.11 为 P₀ 分配资源后的有关资源数据

[tbl-47.md](tbl-47.md)


<!-- page: 168 -->

进行安全性检查:可用资源 Available(2,1,0)已不能满足任何进程的需要,系统进入不安全状态,因此拒绝 $\mathrm{P_0}$ 的请求,让 $\mathrm{P_0}$ 等待,并将 Available, Allocation, Need $_{\text{0}}$ 恢复为之前的值。

## 2.4.4 死锁检测和解除

**前瞻测验** ▶ 死锁避免和死锁检测的区分(2015)

前面介绍的死锁预防和避免算法,都是在为进程分配资源时施加限制条件或进行检测,若系统为进程分配资源时不采取任何预防或避免措施,则应该提供死锁检测和解除的手段。

### I. 死锁检测

**前瞻测验** ▶ 死锁避免和死锁检测对比(2015)公众号:小兔网盘免费分享无水印PDF

死锁避免和死锁检测的对比。死锁避免需要在进程的运行过程中一直保证之后不可能出现死锁,因此需要知道进程从开始到结束的所有资源请求。而死锁检测是检测某个时刻是否发生死锁,不需要知道进程在整个生命周期中的资源请求,只需知道对应时刻的资源请求。

**前瞻测验** ▶ 多在资源竞争时发生死锁的临界条件分析(2016、2021)

可用资源分配图来检测系统所处的状态是否为死锁状态。如图2.15(a)所示,用圆圈表示一个进程,用框表示一类资源。一种类型的资源可能有多个,因此用框中的一个圆表示一类资源中的一个资源。从进程到资源的有向边称为请求边,表示该进程申请一个单位的该类资源;从资源到进程的有向边称为分配边,表示该类资源已有一个资源分配给了该进程。

在图2.15(a)所示的资源分配图中,进程 $\mathrm{P_1}$ 已分得了两个 $\mathbf{R}_1$ 资源,并又请求一个 $\mathbf{R}_2$ 资源;进程 $\mathrm{P_2}$ 分得了一个 $\mathbf{R}_1$ 资源和一个 $\mathbf{R}_2$ 资源,并又请求一个 $\mathbf{R}_1$ 资源。

图2.15 资源分配图及其化简过程


简化资源分配图可检测系统状态S是否为死锁状态。简化方法如下:

1)在资源分配图中,找出既不阻塞又不孤立的进程 $\mathrm{P_i}$ (找出一条有向边与它相连,且该有向边对应资源的申请数量小于或等于系统中已有的空闲资源数量,如在图2.15(a)中, $\mathbf{R}_1$ 没有空闲资源, $\mathbf{R}_2$ 有一个空闲资源。若所有连接该进程的边均满足上述条件,则这个进程能继续运行直至完成,然后释放它所占有的所有资源)。消去它所有的请求边和分配边,使之成为孤立的节点。在图2.15(a)中, $\mathrm{P_i}$ 是满足这一条件的进程节点,将 $\mathrm{P_1}$ 的所有边消去,便得到图2.15(b)所示的情况。

这里要注意一个问题,判断某种资源是否有空闲,应该用它的资源数量减去它在资源分配图中的出度,例如在图2.15(a)中, $\mathbf{R}_1$ 的资源数为3,而出度也为3,所以 $\mathbf{R}_1$ 没有空闲资源, $\mathbf{R}_2$ 的资源数为2,出度为1,所以 $\mathbf{R}_2$ 有一个空闲资源。

2)进程 $\mathrm{P_i}$ 所释放的资源,可以唤醒某些因等待这些资源而阻塞的进程,原来的阻塞进程可


<!-- page: 169 -->

能变为非阻塞进程。在图 2.15(a)中,P₂ 就满足这样的条件。根据 1)中的方法进行一系列简化后,若能消去图中所有的边,则称该图是可完全简化的,如图 2.15(c)所示。

S 为死锁的条件是当且仅当 S 状态的资源分配图是不可完全简化的,该条件为死锁定理。

## 2. 死锁解除

### 前期追踪

解除死锁的方式(2019)

一旦检测出死锁,就应立即采取相应的措施来解除死锁。死锁解除的主要方法有:

1)资源剥夺法。挂起某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但应防止被挂起的进程长时间得不到资源而处于资源匮乏的状态。

### 注意

在资源分配图中,用死锁定理化简后,还有边相连的那些进程就是死锁进程。

2)撤销进程法。强制撤销部分、甚至全部死锁进程,并剥夺这些进程的资源。撤销的原则可以按进程优先级和撤销进程代价的高低进行。这种方式实现简单,但付出的代价可能很大,因为有些进程可能已经接近结束,一旦被终止,以后还得从头再来。

3)进程回退法。让一个或多个死锁进程回退到足以回避死锁的地步,进程回退时自愿释放资源而非被剥夺。要求系统保持进程的历史信息,设置还原点。

## 2.4.5 本节小结

本节开头提出的问题的参考答案如下。

1)为什么会产生死锁?产生死锁有什么条件?

由于系统中存在一些不可剥夺资源,当两个或两个以上的进程占有自身的资源并请求对方的资源时,会导致每个进程都无法向前推进,这就是死锁。死锁产生的必要条件有 4 个,分别是互斥条件、不剥夺条件、请求并保持条件和循环等待条件。

互斥条件是指进程要求分配的资源是排他性的,即最多只能同时供一个进程使用。

不剥夺条件是指进程在使用完资源之前,资源不能被强制夺走。

请求并保持条件是指进程占有自身本来拥有的资源并要求其他资源。

循环等待条件是指存在一种进程资源的循环等待链。

2)有什么办法可以解决死锁问题?

死锁的处理策略可以分为预防死锁、避免死锁及死锁的检测与解除。

死锁预防是指通过设立一些限制条件,破坏死锁的一些必要条件,让死锁无法发生。

死锁避免指在动态分配资源的过程中,用一些算法防止系统进入不安全状态,从而避免死锁。

死锁的检测和解除是指在死锁产生前不采取任何措施,只检测当前系统有没有发生死锁,若有,则采取一些措施解除死锁。

## 2.4.6 本节习题精选

### 一、单项选择题

01. 下列情况中,可能导致死锁的是()。

A. 进程释放资源

B. 一个进程进入死循环

C. 多个进程竞争资源出现了循环等待

D. 多个进程竞争使用共享型设备

02. 在哲学家进餐问题中,若所有哲学家同时拿起左筷子,则发生死锁,因为他们都需要右

关注公众号[考研小肖]
免费考研资料&amp;无水印PDF


<!-- page: 170 -->

159

筷子才能用餐。为了让尽可能多的哲学家可以同时用餐,并且不发生死锁,可以利用信号量PV操作实现同步互斥,下列说法中正确的是()。

A. 使用信号量进行控制的方法一定可以避免死锁
B. 同时检查两支筷子是否可用的方法可以预防死锁,但是会导致饥饿问题
C. 限制允许拿起筷子的哲学家数量可以预防死锁,它破坏了“循环等待”条件
D. 对哲学家顺序编号,奇数号哲学家先拿左筷子,然后拿右筷子,而偶数号哲学家刚好相反,可以预防死锁,它破坏了“互斥”条件

03. 下列关于进程死锁的描述中,错误的是()。

A. 若每个进程只能同时申请或拥有一个资源,则不会发生死锁
B. 若多个进程可以无冲突共享访问所有资源,则不会发生死锁
C. 若所有进程的执行严格区分优先级,则不会发生死锁
D. 若进程资源请求之间不存在循环等待,则不会发生死锁

04. 一次分配所有资源的方法可以预防死锁的发生,它破坏死锁4个必要条件中的()。

A. 互斥
B. 占有并请求
C. 非剥夺
D. 循环等待

05. 系统产生死锁的可能原因是()。

A. 独占资源分配不当
B. 系统资源不足
C. 进程运行太快
D. CPU 内核太多

06. 死锁的避免是根据()采取措施实现的。

A. 配置足够的系统资源
B. 使进程的推进顺序合理
C. 破坏死锁的四个必要条件之一
D. 防止系统进入不安全状态

07. 死锁预防是保证系统不进入死锁状态的静态策略,其解决办法是破坏产生死锁的四个必要条件之一。下列方法中破坏了“循环等待”条件的是()。

A. 银行家算法
B. 一次性分配策略
C. 剥夺资源法
D. 资源有序分配策略

08. 可以防止系统出现死锁的手段是()。

A. 用PV操作管理共享资源
B. 使进程互斥地使用共享资源
C. 采用资源静态分配策略
D. 定时运行死锁检测程序

09. 某系统中有三个并发进程都需要四个同类资源,则该系统必然不会发生死锁的最少资源是()。

A. 9
B. 10
C. 11
D. 12

10. 某系统中共有 11 台磁带机, $X$ 个进程共享此磁带机设备,每个进程最多请求使用 3 台,则系统必然不会死锁的最大 $X$ 值是()。

A. 4
B. 5
C. 6
D. 7

11. 若系统中有5个某类资源供若干进程共享,则不会引起死锁的情况是()。

A. 有6个进程,每个进程需1个资源
B. 有5个进程,每个进程需2个资源
C. 有4个进程,每个进程需3个资源
D. 有3个进程,每个进程需4个资源

12. 解除死锁通常不采用的方法是()。

A. 终止一个死锁进程
B. 终止所有死锁进程


<!-- page: 171 -->

C. 从死锁进程处抢夺资源
D. 从非死锁进程处抢夺资源

13. 采用资源剥夺法可以解除死锁,还可以采用( )方法解除死锁。
A. 执行并行操作
B. 撤销进程
C. 拒绝分配新资源
D. 修改信号量

14. 在下列死锁的解决方法中,属于死锁预防策略的是( )。
A. 银行家算法
B. 资源有序分配算法
C. 死锁检测算法
D. 资源分配图化简法

15. 三个进程共享四个同类资源,这些资源的分配与释放只能一次一个。已知每个进程最多需要两个该类资源,则该系统( )。
A. 有些进程可能永远得不到该类资源
B. 必然有死锁
C. 进程请求该类资源必然能得到
D. 必然是死锁

16. 以下有关资源分配图的描述中,正确的是( )。
A. 有向边包括进程指向资源类的分配边和资源类指向进程申请边两类
B. 矩形框表示进程,其中圆点表示申请同一类资源的各个进程
C. 圆圈节点表示资源类
D. 资源分配图是一个有向图,用于表示某时刻系统资源与进程之间的状态

17. 死锁的四个必要条件中,无法破坏的是( )。
A. 环路等待资源
B. 互斥使用资源
C. 占有且等待资源
D. 非抢夺式分配

18. 死锁与安全状态的关系是( )。
A. 死锁状态有可能是安全状态
B. 安全状态有可能成为死锁状态
C. 不安全状态就是死锁状态
D. 死锁状态一定是不安全状态

19. 死锁检测时检查的是( )。
A. 资源有向图
B. 前驱图
C. 搜索树
D. 安全图

20. 某个系统采用下列资源分配策略。若一个进程提出资源请求得不到满足,而此时没有由于等待资源而被阻塞的进程,则自己就被阻塞。而当此时已有等待资源而被阻塞的进程,则检查所有由于等待资源而被阻塞的进程。若它们有申请进程所需要的资源,则将这些资源取出并分配给申请进程。这种分配策略会导致( )。
A. 死锁
B. 颠簸
C. 回退
D. 饥饿

21. 系统的资源分配图在下列情况下,无法判断是否处于死锁状态的有( )。
I. 出现了环路
II. 没有环路
III. 每种资源只有一个,并出现环路
IV. 每个进程节点至少有一条请求边
A. I、II、III、IV
B. I、III、IV
C. I、IV
D. 以上答案都不正确

22. 下列关于死锁的说法中,正确的有( )。
I. 死锁状态一定是不安全状态
II. 产生死锁的根本原因是系统资源分配不足和进程推进顺序非法
III. 资源的有序分配策略可以破坏死锁的循环等待条件
IV. 采用资源剥夺法可以解除死锁,还可以采用撤销进程方法解除死锁
A. I、III
B. II
C. IV
D. 四个说法都对

23. 下面是并发进程的程序代码,正确的是( )。


<!-- page: 172 -->

Semaphore x1=x2=y=1;
int c1=c2=0;
P1() P2()
{
while(1) {
while(1) {
P(x1);
if (++c1==1) P(y);
if (++c2==1) P(y);
V(x1);
V(x2);
computer(B);
P(x1);
if (--c1==0) V(y);
if (--c2==0) V(y);
V(x1);
}
}
}
A. 进程不会死锁,也不会“饥饿” B. 进程不会死锁,但是会“饥饿” C. 进程会死锁,但是不会“饥饿” D. 进程会死锁,也会“饥饿” 24. 有两个并发进程,对于如下这段程序的运行,正确的说法是()。
int x,y,z,t,u;
P1() P2()
{
while(1) {
x=1;
y=0;
if x&amp;gt;=1 then y=y+1;
z=y;
}
}
A. 程序能正确运行,结果唯一 B. 程序不能正确运行,可能有两种结果 C. 程序不能正确运行,结果不确定 D. 程序不能正确运行,可能死锁 25. 一个进程在获得资源后,只能在使用完资源后由自己释放,这属于死锁必要条件的()。 A. 互斥条件 B. 请求和释放条件 C. 不剥夺条件 D. 防止系统进入不安全状态 26. 假设具有 5 个进程的进程集合 $P = \{P_0, P_1, P_2, P_3, P_4\}$,系统中有三类资源 A, B, C,假设在某时刻有如下状态,见下表。 [tbl-48.md](tbl-48.md) 系统是处于安全状态的,则 x,y,z 的取值可能是()。 I. 1,4,0 II. 0,6,2 III. 1,1,1 IV. 0,4,7 A. I, II, IV B. I, II C. 仅 I D. I, III 27. 死锁定理是用于处理死锁的( )方法。 A. 预防死锁 B. 避免死锁 C. 检测死锁 D. 解除死锁 28. 某系统有 $m$ 个同类资源供 $n$ 个进程共享,若每个进程最多申请 $k$ 个资源 $(k \geqslant 1)$,采用银行家算法分配资源,为保证系统不发生死锁,则各进程的最大需求量之和应()。 A. 等于 $m$ B. 等于 $m + n$ C. 小于 $m + n$ D. 大于 $m + n$ <!-- page: 173 --> 29. 采用银行家算法可以避免死锁的发生,这是因为该算法( )。 A. 可以抢夺已分配的资源 B. 能及时为各进程分配资源 C. 任何时刻都能保证每个进程能得到所需的资源 D. 任何时刻都能保证至少有一个进程可以得到所需的全部资源 30. 用银行家算法避免死锁时,检测到()时才分配资源。 A. 进程首次申请资源时对资源的最大需求量超过系统现存的资源量 B. 进程已占有的资源数与本次申请的资源数之和超过对资源的最大需求量 C. 进程已占有的资源数与本次申请的资源数之和不超过对资源的最大需求量,且现存资源量能满足尚需的最大资源量 D. 进程已占有的资源数与本次申请的资源数之和不超过对资源的最大需求量,且现存资源量能满足本次申请量,但不能满足尚需的最大资源量 31. 下列各种方法中,可用于解除已发生死锁的是( )。 A. 撤销部分或全部死锁进程 B. 剥夺部分或全部死锁进程的资源 C. 降低部分或全部死锁进程的优先级 D. A 和 B 都可以 32. 假定某计算机系统有 R₁ 和 R₂ 两类可使用资源(其中 R₁ 有两个单位,R₂ 有一个单位),它们被进程 P₁ 和 P₂ 所共享,且已知两个进程均按下列顺序使用两类资源:申请 R₁→申请 R₂→申请 R₁→释放 R₁→释放 R₂→释放 R₁,则在系统运行过程中,( )。 A. 不可能产生死锁 B. 有可能产生死锁,因为 R₁ 资源不足 C. 有可能产生死锁,因为 R₂ 资源不足 D. 只有一种进程执行序列可能导致死锁 33. 【2009 统考真题】某计算机系统中有 8 台打印机,由 K 个进程竞争使用,每个进程最多需要 3 台打印机。该系统可能发生死锁的 K 的最小值是( )。 A. 2 B. 3 C. 4 D. 5 34. 【2011 统考真题】某时刻进程的资源使用情况见下表,此时的安全序列是( )。 A. P₁, P₂, P₃, P₄ B. P₁, P₃, P₂, P₄ C. P₁, P₄, P₃, P₂ D. 不存在 [tbl-49.md](tbl-49.md) 35. 【2012 统考真题】假设 5 个进程 P₀, P₁, P₂, P₃, P₄ 共享三类资源 R₁, R₂, R₃,这些资源总数分别为 18, 6, 22。T₀ 时刻的资源分配情况如下表所示,此时存在的一个安全序列是( )。 [tbl-50.md](tbl-50.md) <!-- page: 174 --> A. $\mathrm{P}_0, \mathrm{P}_2, \mathrm{P}_4, \mathrm{P}_1, \mathrm{P}_3$ B. $\mathrm{P}_{1}, \mathrm{P}_{0}, \mathrm{P}_{3}, \mathrm{P}_{4}, \mathrm{P}_{2}$ C. $\mathrm{P}_{2}, \mathrm{P}_{1}, \mathrm{P}_{0}, \mathrm{P}_{3}, \mathrm{P}_{4}$ D. $\mathrm{P}_{3}, \mathrm{P}_{4}, \mathrm{P}_{2}, \mathrm{P}_{1}, \mathrm{P}_{0}$ 36.【2013 统考真题】下列关于银行家算法的叙述中,正确的是()。 A. 银行家算法可以预防死锁 B. 当系统处于安全状态时,系统中一定无死锁进程 C. 当系统处于不安全状态时,系统中一定会出现死锁进程 D. 银行家算法破坏了死锁必要条件中的“请求和保持”条件 37.【2014 统考真题】某系统有 $n$ 台互斥使用的同类设备,三个并发进程分别需要 3,4,5 台设备,可确保系统不发生死锁的设备数 $n$ 最小为()。 A. 9 B. 10 C. 11 D. 12 38.【2015 统考真题】若系统 $S_{1}$ 采用死锁避免方法, $S_{2}$ 采用死锁检测方法。下列叙述中,正确的是()。 I. $S_{1}$ 会限制用户申请资源的顺序,而 $S_{2}$ 不会 II. $S_{1}$ 需要进程运行所需的资源总量信息,而 $S_{2}$ 不需要 III. $S_{1}$ 不会给可能导致死锁的进程分配资源,而 $S_{2}$ 会 A. 仅 I、II B. 仅 II、III C. 仅 I、III D. I、II、III 39.【2016 统考真题】系统中有 3 个不同的临界资源 $\mathbf{R}_1$ , $\mathbf{R}_2$ 和 $\mathbf{R}_3$ , 被 4 个进程 $\mathbf{P}_1$ , $\mathbf{P}_2$ , $\mathbf{P}_3$ , $\mathbf{P}_4$ 共享。各进程对资源的需求为: $\mathbf{P}_1$ 申请 $\mathbf{R}_1$ 和 $\mathbf{R}_2$ , $\mathbf{P}_2$ 申请 $\mathbf{R}_2$ 和 $\mathbf{R}_3$ , $\mathbf{P}_3$ 申请 $\mathbf{R}_1$ 和 $\mathbf{R}_3$ , $\mathbf{P}_4$ 申请 $\mathbf{R}_2$ 。若系统出现死锁,则处于死锁状态的进程数至少是()。 A. 1 B. 2 C. 3 D. 4 40.【2018 统考真题】假设系统中有 4 个同类资源,进程 $\mathrm{P}_1$ , $\mathrm{P}_2$ 和 $\mathrm{P}_3$ 需要的资源数分别为 4,3 和 1, $\mathrm{P}_1$ , $\mathrm{P}_2$ 和 $\mathrm{P}_3$ 已申请到的资源数分别为 2,1 和 0,则执行安全性检测算法的结果是()。 A. 不存在安全序列,系统处于不安全状态 B. 存在多个安全序列,系统处于安全状态 C. 存在唯一安全序列 $\mathrm{P}_3, \mathrm{P}_1, \mathrm{P}_2$ , 系统处于安全状态 D. 存在唯一安全序列 $\mathrm{P}_3, \mathrm{P}_2, \mathrm{P}_1$ , 系统处于安全状态 41.【2019 统考真题】下列关于死锁的叙述中,正确的是()。 I. 可以通过剥夺进程资源解除死锁 II. 死锁的预防方法能确保系统不发生死锁 III. 银行家算法可以判断系统是否处于死锁状态 IV. 当系统出现死锁时,必然有两个或两个以上的进程处于阻塞态 A. 仅 II、III B. 仅 I、II、IV C. 仅 I、II、III D. 仅 I、III、IV 42.【2020 统考真题】某系统中有 A、B 两类资源各 6 个, $t$ 时刻的资源分配及需求情况如下表所示。 [tbl-51.md](tbl-51.md) $t$ 时刻安全性检测结果是()。 A. 存在安全序列 $\mathrm{P}_1$ , $\mathrm{P}_2$ , $\mathrm{P}_3$ B. 存在安全序列 $\mathrm{P}_2$ , $\mathrm{P}_1$ , $\mathrm{P}_3$ C. 存在安全序列 $\mathrm{P}_2$ , $\mathrm{P}_3$ , $\mathrm{P}_1$ D. 不存在安全序列 43.【2021 统考真题】若系统中有 $n(n \geqslant 2)$ 个进程,每个进程均需要使用某类临界资源 2 <!-- page: 175 --> 个,则系统不会发生死锁所需的该类资源总数至少是( )。 A. 2 B. $n$ C. $n + 1$ D. $2n$ 44.【2022 统考真题】系统中有三个进程 $\mathrm{P}_0, \mathrm{P}_1, \mathrm{P}_2$ 及三类资源 A、B、C。若某时刻系统分配资源的情况如下表所示,则此时系统中存在的安全序列的个数为( )。 [tbl-52.md](tbl-52.md) A. 1 B. 2 C. 3 D. 4