多个资源的银行家算法习题
银行家算法中,若出现下述的资源分配情况:
进程 | Allocated | Need | Available |
---|---|---|---|
P0 | 0 0 3 2 | 0 0 1 2 | 1 6 2 2 |
P1 | 1 0 0 0 | 1 7 5 0 | |
P2 | 1 3 5 4 | 2 3 5 6 | |
P3 | 0 3 3 2 | 0 6 5 2 | |
P4 | 0 0 1 4 | 0 6 5 6 |
问:
此时通过剩余资源计算是否有安全序列来判断:
进程 | work | need | allocation | work+allocation | finish |
---|---|---|---|---|---|
P0 | 1 6 2 2 | 0 0 1 2 | 0 0 3 2 | 1 6 5 4 | ture |
P3 | 1 6 5 4 | 0 6 5 2 | 0 3 3 2 | 1 9 8 6 | ture |
P4 | 1 9 8 6 | 0 6 5 6 | 0 0 1 4 | 1 9 9 10 | ture |
P1 | 1 9 9 10 | 1 7 5 0 | 1 0 0 0 | 2 9 9 10 | ture |
P2 | 2 9 9 10 | 2 3 5 6 | 1 3 5 4 | 3 12 14 14 | ture |
在计算过程中对 available 和 need 计算可以发现有多个安全序列,此处只选取一例,可以找到安全序列{P0, P3,P4,P1,P2},因此,此时系统是安全的。
由于 Request(0, 0, 0, 1)<= Need(2,3,5 ,6),
Request(0, 0, 0, 1)<=Available(1,6, 2, 1)
因此可以先假定为P2分配资源,此时的资源变化情况如图:
进程 | Allocated | Need | Available |
---|---|---|---|
P0 | 0 0 3 2 | 0 0 1 2 | 1 6 2 1 |
P1 | 1 0 0 0 | 1 7 5 0 | |
P2 | 1 3 5 5 | 2 3 5 5 | |
P3 | 0 3 3 2 | 0 6 5 2 | |
P4 | 0 0 1 4 | 0 6 5 6 |
此时对这一时刻的安全性进行检查,会发现:
此时Available中的资源,无法满足各个进程所需,故没有一个安全序列,所以不可以分配。