1、考虑某一系统,他有4类资源R1,R2,R3,R4,有5个并发进程P0,P1,P2,P3,P4。各进程的最大资源需求、已分配的资源矩阵和系统当前资源剩余向量如下图所示。请按银行家算法回答下列问题:
⑴ 计算由各进程的剩余请求向量组成的矩阵。
⑵ 系统当前是处于安全状态吗?
⑶ 当进程P4申请的资源分别为(0,2,0,2)时,系统能立即满足吗?
分配矩阵(Allocation) | 最大需求量(Max) | 剩余请求向量(Need) | ||||||||||
R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | |
P0 | 0 | 0 | 1 | 2 | 0 | 0 | 1 | 2 | 0 | 0 | 0 | 0 |
P1 | 1 | 0 | 0 | 0 | 1 | 7 | 5 | 0 | 0 | 7 | 5 | 0 |
P2 | 1 | 3 | 5 | 4 | 2 | 3 | 5 | 6 | 1 | 0 | 0 | 2 |
P3 | 0 | 6 | 3 | 2 | 0 | 6 | 5 | 2 | 0 | 0 | 2 | 0 |
P4 | 0 | 0 | 1 | 4 | 0 | 6 | 5 | 6 | 0 | 6 | 4 | 2 |
注:剩余请求向量 = Max - All0cation
(2)判断系统是否安全,只要检查系统剩余资源向量(可利用的资源)是否能在各进程的剩余请求向量中能找到一个安全序列,分析如下:
当前剩余资源向量(可利用资源):
R1 | R2 | R3 | R4 |
1 | 5 | 0 | 2 |
进程资源情况 | Work(剩余资源都给某个进程用) | 剩余请求向量(Need) | 分配矩阵(Allocation) | Work+Allocation | Finish | ||||||||||||
R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | ||
P0 | 1 | 5 | 0 | 2 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 2 | 1 | 5 | 1 | 4 | true |
P2 | 1 | 5 | 1 | 4 | 1 | 0 | 0 | 2 | 1 | 3 | 5 | 4 | 2 | 8 | 6 | 8 | true |
P1 | 2 | 8 | 6 | 8 | 0 | 7 | 5 | 0 | 1 | 0 | 0 | 0 | 3 | 8 | 6 | 8 | true |
P3 | 3 | 8 | 6 | 8 | 0 | 0 | 2 | 0 | 0 | 6 | 3 | 2 | 3 | 14 | 9 | 10 | true |
P4 | 3 | 14 | 9 | 10 | 0 | 6 | 4 | 2 | 0 | 0 | 1 | 4 | 3 | 14 | 10 | 14 | true |
在T0时刻存在着一个安全序列{P0,P2,P1,P3,P4},故系统是安全的。
(3)当P4申请资源Request4(0,2,0,2)时;
- Request4(0,2,0,2)<= Need(0,6,4,2)
- Request4(0,2,0,2)<= Available(1,5,0,2)
- 系统先假定可为P4分配资源,并修改向量值,如图所示
- 再利用安全性算法检查此时系统是否安全
分配矩阵(Allocation) | 最大需求量(Max) | 剩余请求向量(Need) | ||||||||||
R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | |
P0 | 0 | 0 | 1 | 2 | 0 | 0 | 1 | 2 | 0 | 0 | 0 | 0 |
P1 | 1 | 0 | 0 | 0 | 1 | 7 | 5 | 0 | 0 | 7 | 5 | 0 |
P2 | 1 | 3 | 5 | 4 | 2 | 3 | 5 | 6 | 1 | 0 | 0 | 2 |
P3 | 0 | 6 | 3 | 2 | 0 | 6 | 5 | 2 | 0 | 0 | 2 | 0 |
P4 | 0 | 2 | 1 | 6 | 0 | 6 | 5 | 6 | 0 | 4 | 4 | 0 |
当前剩余资源向量(可利用资源):
R1 | R2 | R3 | R4 |
1 | 3 | 0 | 0 |
进程资源情况 | Work(剩余资源都给某个进程用) | 剩余请求向量(Need) | 分配矩阵(Allocation) | Work+Allocation | Finish | ||||||||||||
R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | R1 | R2 | R3 | R4 | ||
P0 | 1 | 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 2 | 1 | 3 | 1 | 2 | true |
P2 | 1 | 3 | 1 | 2 | 1 | 0 | 0 | 2 | 1 | 3 | 5 | 4 | 2 | 6 | 6 | 6 | true |
P3 | 2 | 6 | 6 | 6 | 0 | 0 | 2 | 0 | 0 | 6 | 3 | 2 | 2 | 12 | 9 | 8 | true |
P1 | 2 | 12 | 9 | 8 | 0 | 7 | 5 | 0 | 1 | 0 | 0 | 0 | 3 | 12 | 9 | 8 | true |
P4 | 3 | 12 | 9 | 8 | 0 | 4 | 4 | 0 | 0 | 2 | 1 | 6 | 3 | 14 | 10 | 14 | true |
由所进行的安全性算法检查得知,可以找到一个安全序列{P0,P2,P3,P1,P4},因此,系统是安全的,可以立即将P4所申请的资源分配给它。