题目与解答
题目描述:
某系统有A、B、C三类资源(数量分别为17、5、20)和P1~P5五个进程,在T0时刻系统状态如下表所示:
进程 | 最大资源需求量(A,B,C) | 已分配资源数量(A,B,C) |
---|---|---|
P1 | (5,5,9) | (2,1,2) |
P2 | (5,3,6) | (4,0,2) |
P3 | (4,0,11) | (4,0,5) |
P4 | (4,2,5) | (2,0,4) |
P5 | (4,2,4) | (3,1,4) |
系统采用银行家算法实施死锁避免策略,回答下列问题:
- T0时刻是否为安全状态?若是,请给出安全序列。
- 在T0时刻若进程P2请求资源(0,3,4),是否能实施资源分配?为什么?
- 在②的基础上,若进程P4请求资源(2,0,1),是否能实施资源分配?为什么?
解答:
① T0时刻安全性判断
计算Need矩阵和Available向量:
进程 | Need (A,B,C) | Available (A,B,C) |
---|---|---|
P1 | (3,4,7) | 2,3,3 |
P2 | (1,3,4) | |
P3 | (0,0,6) | |
P4 | (2,2,1) | |
P5 | (1,1,0) |
安全序列推导过程:
进程 | Work | Need | Allocation | Work+Allocation | Finish |
---|---|---|---|---|---|
P4 | 2,3,3 | 2,2,1 | 2,0,4 | 4,3,7 | ✓ |
P2 | 4,3,7 | 1,3,4 | 4,0,2 | 8,3,9 | ✓ |
P3 | 8,3,9 | 0,0,6 | 4,0,5 | 12,3,14 | ✓ |
P5 | 12,3,14 | 1,1,0 | 3,1,4 | 15,4,18 | ✓ |
P1 | 15,4,18 | 3,4,7 | 2,1,2 | 17,5,20 | ✓ |
结论:
T0时刻是安全状态,安全序列为 P4→P2→P3→P5→P1。
注意:这里的资源为什么要这样先判断呢是因为你的所有资源都是不能超过题目给你的总的数据量也就是(17、5、20)然后你要必须要计算need所以这里已经计算过系统要的need还会流出多余的没有分配的资源量(2,3,3)所以当多余的need请求满足:need>=availatble的时候系统给出的资源量就已经超出了所以就不满足后面的银行家算法了
② T0时刻P2请求(0,3,4)的分配判断
-
检查请求合法性:
- P2的Need = (1,3,4),请求(0,3,4) ≤ Need,合法。
- 当前Available = (2,3,3),请求的C类资源为4,超过Available的C资源(3)。
-
结论:
不能分配,因为C类资源不足,P2阻塞。
注意:如果再次请求的资源量累加到need之后要同步更新系统当前可以支持的分配的资源量这样才可以进行下一步的银行家算法求证安全序列
③ 在②的基础上P4请求(2,0,1)的分配判断
-
检查请求合法性:
- P4的Need = (2,2,1),请求(2,0,1) ≤ Need,合法。
- 当前Available = (2,3,3),请求(2,0,1) ≤ Available,可分配。
-
模拟分配后安全性验证:
- 分配后Available更新为 (0,3,2),安全序列仍存在(P4→P2→P3→P5→P1)。
-
结论:
可以分配,系统仍处于安全状态。
最终答案:
- T0时刻是安全的,安全序列为 P4→P2→P3→P5→P1。
- P2请求(0,3,4)不可分配,因C类资源不足。
- P4请求(2,0,1)可分配,满足后系统仍安全。