死锁相关习题 10道 附详解
2022
设系统中有三种类型的资源(A,B,C)和五个进程(P1,P2,P3,P4,P5),A资源的数量是17,B资源的数量是6,C资源的数量是19。在T0时刻系统的状态:
最大资源需求量 | 已分配资源量 | |
---|---|---|
A,B,C | A,B,C | |
P1 | 4,0,11 | 4,0,5 |
P2 | 5,3,6 | 4,0,2 |
P3 | 4,2,5 | 2,1,4 |
P4 | 5,5,9 | 2,1,2 |
P5 | 4,2,4 | 3,1,3 |
- 当前系统是否处于安全状态,并解释原因
- 简述银行家算法的缺点是什么
A:17,B:6,C:19
计算已分配的资源总量
A:=4+4+2+2+3=15
B:=1+1+1=3
C:=5+2+4+2+3=16
计算可用资源(Available):
Available=总资源-已分配资源
A:17-15=2
B:6-3=3
C:19-16=3
计算尚需资源:Need
P1:0,0,6
P2:1,3,4
P3:2,1,1
P4:3,4,7
P5:1,1,1
安全性检测:检查是否能找到一个安全序列
初始可用资源,Work:2,3,3
P1:0,0,6<=2,3,3,NO
P2:1,3,4<=2,3,3,NO
P3:2,1,1<=2,3,3,YES
执行P3,释放资源:
Work=2,3,3+2,1,4=4,4,7
检查下一个进程:
P1:0,0,6<=4,4,7,YES
执行P1,释放资源:
Work=4,4,7+4,0,5=8,4,12
检查下一个进程:
P2:1,3,4<=8,4,12,YES
执行P2,释放资源:
Work=8,4,12+4,0,2=12,4,14
检查下一个进程:
P4:3,4,7<=12,4,14,YES
执行P4,释放资源:
Work=12,4,14+2,1,2=14,5,16
检查下一个进程:
P5:1,1,1<=14,5,16
执行P5,释放资源:
Work=14,5,16+3,1,3=17,6,19
安全序列:P3->P1->P2->P4->P5
2. 银行家算法在避免死锁问题上十分有效,但是需要在进程运行前就知道其所需资源的最大值,且进程数也需要提前确定。但是实际上,内存中进程数往往是动态变化的,而且它们所需要资源的数目也是动态变化的,因此有局限性
2020
- 某系统有3个并发进程都需要4个同类资源,不会发生死锁的资源数目最少是多少,请给出理由
- 某系统有11个同类资源,X个进程共享该资源,每个进程最多请求使用3个该资源,则系统不会产生死锁的最大X值是多少?请给出理由
当资源数为9时,存在3个进程都各自占用3个资源,这时每个进程都在等待别的进程释放资源,造成死锁。
当资源数目为10时,必然存在一个进程可以获得4个资源,然后顺利执行完毕,释放资源供其他进程使用,系统不会产生死锁
2.
系统不会产生死锁的最大X值是5
假设每个进程已经分配到两个资源,其中任一进程再获得一个资源便可顺利执行完毕,然后再将资源归还给系统供其他进程使用。因此,系统中只要满足2X+1=11这个条件便不会造成死锁,解得X=5,所以系统中最多可以有5个并发进程共享该资源不会产生死锁
2013
某计算机系统有8台磁带机,它们由4个进程竞争使用,每个进程需要3台磁带机。问该系统有没有死锁危险,并说明原因
有死锁风险,若此时这个进程各占用2台磁带机,此时4个进程都不满足,继续向系统发出请求,但此时已无可分配资源
满足死锁的请求和保持条件,不可抢占条件,循环等待条件。若推进顺序不当有产生死锁的危险
2012
简述死锁避免的思想?试用银行家算法判断下述两个状态是否安全。如果一个状态是安全的,说明所有进程是如何能够运行完毕的;如果一个状态是不安全的,说明为什么可能产生死锁。
状态A
进程名 | 已分配资源数 | 最大需求 |
---|---|---|
P1 | 2 | 6 |
P2 | 4 | 7 |
P3 | 2 | 6 |
P4 | 1 | 2 |
当前可用进程数:1 |
状态B
进程名 | 已分配资源数 | 最大需求 |
---|---|---|
P1 | 4 | 8 |
P2 | 3 | 9 |
P3 | 5 | 8 |
当前可用进程数:3 |
死锁避免:属于事先预防死锁发生策略,在资源动态分配过程中,防止系统进入不安全状态,以避免发生死锁。
状态A不安全:把当前可用的1个资源给P4进程,P4运行完,释放2个资源,不满足P1,P2,P3的最大需求量
状态B安全:把当前可用的3个资源给P3进程,P3运行完后释放8个资源,此时P2需要6个,P1需要四个,任选个进程满足,若先满足P1,P1运行完后释放4个资源,再分配给P2
安全序列:P3->P2->P1或P3->P1->P2
出现死锁的原因:
- 当前可用资源数不满足任意进程的需求
- 由于进程推进顺序不当,致使各进程抢夺资源造成循环等局面
2014
- 什么是死锁?处理死锁的基本方法有哪些?
死锁:指多个进程因竞争资源而造成的一种僵局(相互等待),若无外力作用,这些进程都将无法向外推进
基本方法:
-
预防死锁
-
避免死锁
-
死锁检测与解除
-
给出分配/回收一块的基本流程,假设系统中有同类资源9个,有3个进程竞争使用该类资源,每个进程最多需要4个,请问该系统是否会发生死锁,为什么?
会,若每个进程请求并拥有3个资源,当他们都要请求第四个资源时,发生死锁
填空题
- 解决死锁的方法可以有多种,其中死锁的预防是通过(破坏死锁的必要条件之一)来实现的,死锁的避免是通过(防止系统进入不安全状态)来实现的。
- 死锁的避免,就是通过保持系统处于(安全状态)来避免死锁,所以每当有进程提出资源分配请求时,系统应分析(各进程已占进程数)、(尚需资源数)和(系统中可以分配的剩余资源数),然后决定是否为当前的申请者分配资源。
- 死锁检测要解决两个问题,一是(判断系统)是否出现了死锁,二是当有死锁发生时怎样去(解除死锁)
- 为了避免死锁,可以采用(银行家)算法进行资源安全分配。
- 系统出现死锁,不仅与(设备)分配策略有关,而且与(进程)执行的相对速度有关。
- 当检测到系统发生死锁时,可采用(解除所有死锁进程)、(逐个撤销死锁进程)和(抢占死锁进程的资源供其他进程使用)来解除死锁。
死锁定义,死锁和不安全状态的关系
在多道程序系统中,由于多个进程的并发执行,改善了系统资源的利用率并提高了系统理能力。然而,多个进程的并发执行也带来了新的问题一死锁。
所谓死锁,是指多个进程因竞争某一资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进
注意:
并非所有的不安全状态都是死锁状态,但当系统进入不安全状态后,便可能进入死锁状态;
反之,只要系统处于安全状态,系统便可避免进入死锁状态。
1
设系统中有下述解决死锁的方法:
- 银行家算法
- 检测死锁,终止处于死锁状态的进程,释放该进程占有的资源。
- 资源预分配。
简述哪种办法允许最大的并发性,即哪种办法允许更多的进程无等待地向前推进。请按“并发性”从大到小对上述三种办法排序。
死锁在系统中不可能完全消灭,但我们要尽可能地减少死锁的发生。对死锁的处理有4种方法:忽略、检测与恢复、避免与预防,每种方法对死锁的处理从宽到严,同时系统并发性由大到小。这里银行家算法属于避免死锁,资源预分配属于预防死锁
死锁检测方法可以获得最大的并发性
并发性排序:死锁检测方法、银行家算法、资源预分配法
3
设有进程P1和进程P2并发执行,都需要使用资源R1和R2,使用资源的情况见下表。
进程P1 | 进程P2 |
---|---|
申请资源R1 | 申请资源R2 |
申请资源R2 | 申请资源R1 |
释放资源R1 | 释放资源R2 |
试判断是否会发生死锁,并解释和说明产生死锁的原因与必要条件。
这段程序在不同的运行推进速度下,可能会产生死锁,
进程P1先申请R1,得到资源R1,然后进程P2申请资源R2,得到资源R2,进程P1又申请R2,因资源R2已分配,使得进程P1阻塞
进程P1和进程P2都因申请不到资源而形成死锁。若改变进程的运行顺序,则这两个进程就不会出现死锁现象
产生死锁的原因可归结为两点
- 竞争资源
- 进程推进顺序非法
产生死锁的必要条件: - 互斥条件
- 请求并保持条件
- 不剥夺条件
- 环路等待条件
4
系统有同类资源m个,供n个进程共享,若每个进程对资源的最大需求量为k,试问:
当m,n,k的值分别为下列情况时(见下表),是否会发生死锁?
序号 | m | n | k | 是否会死锁 | 说明 |
---|---|---|---|---|---|
1 | 6 | 3 | 3 | ||
2 | 9 | 3 | 3 | ||
3 | 13 | 6 | 3 |
不发生死锁要求,必须保证至少有一个进程得到所需的全部资源并执行完毕,m>=n(k-1)+1时,一定不会发生死锁
序号 | m | n | k | 是否会死锁 | 说明 |
---|---|---|---|---|---|
1 | 6 | 3 | 3 | 可能会 | 6<3(3-1)+1 |
2 | 9 | 3 | 3 | 不会 | 9>3(3-1)+1 |
3 | 13 | 6 | 3 | 不会 | 13=6(3-1)+1 |