1.设有三个进程P1,P1,P3,各按如下所示顺序执行程序代码:
进程P1 进程P2 进程P3
¯ ¯ ¯
P(s1) P(s3) P(s2)
P(s2) P(s1) P(s3)
… … …
V(s1) V(s3) V(s2)
V(s2) V(s1) V(s3)
¯ ¯ ¯
其中s1,s2,s3是信号量,且初值均为1.
在执行时能否产生死锁?如果可能产生死锁,请说明在什么情况下产生死锁?并给出一个防止死锁产生的修改办法。
参考答案:
可能产生死锁。
当进程P1执行P(s1),进程P2执行P(s3),进程P3执行P(s2)后,三个资源(即信号量s1,s2,s3)被三个进程分别占用,接下来任何一个进程都无法得到所申请的资源,于是都无限地循环等待,造成死锁。
一个防止死锁产生的办法是:进程申请信号量时,按序申请,如图:
进程P1 进程P2 进程P3
¯ ¯ ¯
P(s1) P(s1) P(s2)
P(s2) P(s3) P(s3)
┉ ┉ ┉
V(s1) V(s1) V(s2)
V(s2) V(s3) V(s3)
¯ ¯ ¯
这里是按s1,s2,s3顺序申请信号量,也可按相反顺序申请,即s3,s2,s1
另外,也可以采用资源预分配策略(同时申请两个信号量)防止死锁发生。
2..设系统中有三种类型的资源(A,B,C)和五个进程(P1,P2,P3,P4,P5),A资源的数量为17,B资源的数量为5,C资源的数量为20.在T0时刻系统状态如表1所示。系统采用银行家算法来避免死锁。
① T0时刻是否为安全状态?若是,请给出安全序列。
② 在T0时刻,若进程P2请求资源(0,3,4),能否实现资源分配,为什么?
③ 在②的基础上,若进程P4请求资源(2,0,1),能否实现资源分配,为什么?
④ 在③的基础上,若进程P1请求资源(0,2,0),能否实现资源分配,为什么?
进程 |
最大资源需求量 |
已分配资源数量 |
系统剩余资源数量 |
A B C |
A B C |
A B C |
|
P1 P2 P3 P4 P5 |
5 5 9 5 3 6 4 0 11 4 2 5 4 2 4 |
2 1 2 4 0 2 4 0 5 2 0 4 3 1 4 |
2 3 3 |
解答:(1)A(17)、B(5)、C(20) Work=(2,3,3)
进程 |
Work 剩余数 |
Allocation
|