题目
在银行家算法中,若出现下述资源分配情况:ProcessAllocationNeedAvailableP0 003200121622P110001750P213542356P3 03320652P400140656试问:(1)该状态是否安全?(2)若进程P2 提出请求Request(1,2,2,2)后,系统能否将资源分配给它?
在银行家算法中,若出现下述资源分配情况:
Process
Allocation
Need
Available
P0
0032
0012
1622
P1
1000
1750
P2
1354
2356
P3
0332
0652
P4
0014
0656
试问:(1)该状态是否安全?
(2)若进程P2 提出请求Request(1,2,2,2)后,系统能否将资源分配给它?
题目解答
答案
答:(1)安全。原因见下表:
| Work | Need | Allocation | Work+Allocation | Finish | |
| P0 | 1622 | 0012 | 0032 | 1654 | True | 
| P3 | 1654 | 0652 | 0332 | 1986 | True | 
| P1 | 1986 | 1750 | 1000 | 2986 | True | 
| P2 | 2986 | 2356 | 1354 | 3 12 13 10 | True | 
| P4 | 3 12 13 10 | 0656 | 0014 | 3 12 14 14 | True | 
(2) 若进程P2 提出请求Request(1,2,2,2)后,系统不能将资源分配给它。因为系统将资源分配给它后,系统所剩余空闲资源为0400,而各进程的需求为:
| Process | Need | 
| P0 | 0012 | 
| P1 | 1750 | 
| P2 | 1133 | 
| P3 | 0652 | 
| P4 | 0656 | 
由上表可见,系统剩余空闲资源不能满足任何进程,也就是系统将进入不安全状态。
解析
银行家算法用于判断系统是否处于安全状态,以及在资源请求时是否能安全分配。
- 安全状态判断:通过安全性算法,检查是否存在一个进程执行序列,使得所有进程最终能完成。核心步骤是:  - 初始化Work为Available资源。
- 选择Need ≤ Work的进程,将其Allocation加到Work中,并标记为完成。
- 重复直到所有进程完成或无法继续。
 
- 初始化
- 资源分配判断:若进程请求资源,需先临时分配资源,再用安全性算法验证新状态是否安全。若安全则正式分配,否则拒绝。
第(1)题
判断当前状态是否安全
- 初始化:Work = Available = [1,6,2,2]。
- 选择可运行进程:  - P0:Need = [0,0,1,2] ≤ Work = [1,6,2,2],运行后Work += Allocation = [0,0,3,2] → [1,6,5,4]。
- P3:Need = [0,6,5,2] ≤ Work = [1,6,5,4],运行后Work += Allocation = [0,3,3,2] → [1,9,8,6]。
- P1:Need = [1,7,5,0] ≤ Work = [1,9,8,6],运行后Work += Allocation = [1,0,0,0] → [2,9,8,6]。
- P2:Need = [2,3,5,6] ≤ Work = [2,9,8,6],运行后Work += Allocation = [1,3,5,4] → [3,12,13,10]。
- P4:Need = [0,6,5,6] ≤ Work = [3,12,13,10],运行后Work += Allocation = [0,0,1,4] → [3,12,14,14]。
 
- P0:
- 结论:所有进程完成,系统安全。
第(2)题
判断P2请求资源后是否可分配
- 临时分配资源:  - Available减少请求- [1,2,2,2] → [0,4,0,0]。
- P2的Allocation增加[1,2,2,2] → [2,5,7,6],Need减少[2,3,5,6] - [1,2,2,2] = [1,1,3,4]。
 
- 检查安全性:  - Work = Available = [0,4,0,0],所有进程的- Need均不满足- Work(如P0需R2=1,但- Work中R2=0)。
- 无进程可运行,系统不安全。
 
- 结论:不能分配资源。