银行家算法作业
问题(1):判断当前状态是否安全
安全性算法步骤:
初始化:
Work = Available = (1,6,2)
Finish = [F,F,F,F,F]
安全序列 = []
第一轮查找:
检查P0: Need[0]=(0,0,1) ≤ Work=(1,6,2)? ✓
P0可执行完毕
Work = Work + Allocation[0] = (1,6,2) + (0,0,3) = (1,6,5)
Finish[0] = True
安全序列 = [P0]
第二轮查找:
检查P1: Need[1]=(1,7,5) ≤ Work=(1,6,5)? ✗ (7>6)
检查P2: Need[2]=(2,3,5) ≤ Work=(1,6,5)? ✗ (2>1)
检查P3: Need[3]=(0,6,5) ≤ Work=(1,6,5)? ✓
P3可执行完毕
Work = (1,6,5) + (0,3,3) = (1,9,8)
Finish[3] = True
安全序列 = [P0,P3]
第三轮查找:
检查P1: Need[1]=(1,7,5) ≤ Work=(1,9,8)? ✓
P1可执行完毕
Work = (1,9,8) + (1,0,0) = (2,9,8)
Finish[1] = True
安全序列 = [P0,P3,P1]
第四轮查找:
检查P2: Need[2]=(2,3,5) ≤ Work=(2,9,8)? ✓
P2可执行完毕
Work = (2,9,8) + (1,3,5) = (3,12,13)
Finish[2] = True
安全序列 = [P0,P3,P1,P2]
第五轮查找:
检查P4: Need[4]=(0,6,5) ≤ Work=(3,12,13)? ✓
P4可执行完毕
Work = (3,12,13) + (0,0,1) = (3,12,14)
Finish[4] = True
安全序列 = [P0,P3,P1,P2,P4]
结论: 所有进程都能完成,系统处于安全状态。 安全序列为:P0→P3→P1→P2→P4
问题(2):P2申请Request(1,2,2)后能否分配
第一步:检查申请合法性
Request[2] = (1,2,2)
Need[2] = (2,3,5)
Request[2] ≤ Need[2]? (1,2,2) ≤ (2,3,5)? ✓
第二步:检查资源充足性
Available = (1,6,2)
Request[2] ≤ Available? (1,2,2) ≤ (1,6,2)? ✓
第三步:试分配并检查安全性
更新后的状态:
Available' = (1,6,2) - (1,2,2) = (0,4,0)
Allocation[2]' = (1,3,5) + (1,2,2) = (2,5,7)
Need[2]' = (2,3,5) - (1,2,2) = (1,1,3)
新状态安全性检查:
初始化:Work = (0,4,0)
第一轮:
P0: Need=(0,0,1) ≤ (0,4,0)? ✗ (1>0)
P1: Need=(1,7,5) ≤ (0,4,0)? ✗
P2: Need=(1,1,3) ≤ (0,4,0)? ✗ (1>0)
P3: Need=(0,6,5) ≤ (0,4,0)? ✗ (6>4)
P4: Need=(0,6,5) ≤ (0,4,0)? ✗ (6>4)
结论: 没有进程能够完成,系统进入不安全状态。
最终答案: (1) 当前状态是安全的,安全序列为:P0→P3→P1→P2→P4 (2) 不能将资源分配给P2,因为分配后系统将进入不安全状态