四、银行家算法
操作系统——银行家算法(Banker's Algorithm) - 王陸 - 博客园 (cnblogs.com)
问题1:题目会给你一个表格,然后让你判断是否安全
Process | Allocation | Need | Available |
---|---|---|---|
A B C D | A B C D | A B C D | |
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 |
(1)该状态是否安全? (2)若进程P2提出请求Request(1,2,2,2)后,系统能否将资源分配给它?
解题过程:
-
先构建出以下表格(别管为什么,只写英文就行)
进程/资源 work可提供的 Need需要的 Allocation分配 work+Allocation分配释放收回 finish -
把available抄到work第一行
-
然后找题目的need全都小于等于work的填到表上面(能找到finish就是ture)
-
allocation照抄
-
最后把work和Allocation两个加起来填到work+Allocation
进程/资源 work可提供的 Need需要的 Allocation分配 work+Allocation分配释放收回 finish P0 1 6 2 2 0 0 1 2 0 0 3 2 1 6 8 4 true -
将work+Allocation作为下一行的work,重复该过程
进程/资源 work可提供的 Need需要的 Allocation分配 work+Allocation分配释放收回 finish P0 1 6 2 2 0 0 1 2 0 0 3 2 1 6 8 4 true P3 1 6 5 4 0 6 5 2 0 3 3 2 1 9 8 6 true P1 1 9 8 6 1 7 5 0 1 0 0 0 2 9 8 6 true P2 2 9 8 6 2 3 5 6 1 3 5 4 3 12 13 10 true P4 3 12 13 10 0 6 5 6 0 0 1 4 3 12 14 14 true
如果finish全是true,那么他就是安全的,安全序列为{P0、P3、P1、P2、P4}
问题2
如果某进程P2提出请求Request(1,2,2,2)后,系统能否将资源分配给它?
解题过程:
-
先看R是否小于Need,若不则失败
-
先看Request是否小于Need,若不小于则失败
Request(1,2,2,2) ≤ Need(2,3,5,6)
-
再看R是否小于Available,若不小于则等待
Request(1,2,2,2) ≤ Available(1,6,2,2)
-
如果以上条件都满足则尝试分配,修改以下值
Available = Available - Request Need = Need - Request Allocation = Allocation + Request
Process | Allocation | Need | Available |
---|---|---|---|
A B C D | A B C D | A B C D | |
P0 | 0 0 3 2 | 0 0 1 2 | 0 4 0 0 |
P1 | 1 0 0 0 | 1 7 5 0 | |
P2 | 2 5 7 6 | 1 1 3 4 | |
P3 | 0 3 3 2 | 0 6 5 2 | |
P4 | 0 0 1 4 | 0 6 5 6 |
之后再使用第一题的安全检查,重新检查一遍,如果还是安全,那就是可以,否则不行