银行家算法-避免死锁的算法之一
设系统中有三种类型的资源(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.P3,P1,P4,P2,P5
B.P1,P3,P5,P2,P4
C.P4,P2,P3,P5,P1
D.P2,P3,P1,P4,P5
A总数是17个,已经分配出去了4+4+2+2+3=15个,还剩2个,同理B还剩下6-(1+1+1)=3个,C还剩下19-(5+2+4+2+3)=3个,所以在T0时刻,A,B,C三个资源能够自由分配的只有(2,3,3)个了,再看五个进程还差多少,P1还差0个A,0个B,6个C,其他进程还需要分配的资源看下表
P1 | P2 | P3 | P4 | P5 | |
A,B,C | 0,0,6 | 1,3,4 | 2,1,1 | 3,4,7 | 1,1,1 |
再看,我只有(2,3,3)个资源,可以分配给P3或者P6,都分配给他们之后,他们执行完之后还会主动释放资源。看选项A,先分配给P3,P3得到这些资源后能完全执行下去,执行完毕后释放自己的资源,P3释放后总共资源个数为(4,4,7)这些资源分配给哪个进程都能执行完毕,所以A是安全序列,不会出现死锁。其他选项在第一步就不行,因为资源给他们,那些进程也执行不下去。
资源分配图怎么看
先看资源还剩多少个,R1、R2、R3是资源,分别有2,3,2个。从R1开始的箭头有俩,分别指向P1和P3,说明给了P1和P3一人一个(所以还剩下0个);同理,R2给了P1一个,P3一个,P2一个(还剩下0个),R3给了P2一个(还剩下1个)。
再看进程还需要多少资源,有个从P1到R2的线,说明P1还需要一个R2,同理,P2还需要一个R1,P3还需要一个R3.
因为只有R3还剩一个,所以只能分配给P3,所以P3是非堵塞结点。
化简的问题,就把非堵塞结点周围所有的边(因为非阻塞结点执行完之后就释放资源了,所以线没用了),看看剩下资源按照上述步骤是否能够分配,若最后只能下孤立的点,说明这个图可以化简的。