银行家算法作业

Author Avatar
小包
发表:2025-06-02 18:03:00
修改:2025-06-02 18:03:00

问题(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,因为分配后系统将进入不安全状态

评论