Skip to content

2020年 408 操作系统 第 27 题

操作系统2020年选择题2分

题目

某系统中有 A、B 两类资源各 6 个,t 时刻资源分配及需求情况如下表所示。

进程A 已分配数量B 已分配数量A 需求总量B 需求总量
P12344
P22131
P31234

t 时刻安全性检测结果是( )。

错因

A

第一步就跳到 P1。可 t 时刻 Available 只有 (1, 0),P1 的 Need 是 (2, 1)——A 维 1 < 2 直接卡住,P1 根本上不了第一棒。这个错的根源是看到题面有 P1、P2、P3 三个序号就按序号顺序试,没先把 Available 与 Need 对比一下挑可跑的。

C

走对了第一步(P2 先跑通),但第二步选了 P3。P2 跑完后 Available = (1,0) + (2,1) = (3,1),此时 P3 的 Need 是 (2,2)——B 维 1 < 2 还过不去,跑不动。第二步只能挑 P1(Need (2,1) ≤ (3,1)),不是 P3。

D

可能算 Available 时算错了,或者觉得"Available A=1、B=0 太小"直觉上不安全。其实 P2 的 Need (1,0) 刚好被 (1,0) 卡着边吃下,P2 跑完释放出 (2,1) 让 Available 涨到 (3,1),链条就能接着推下去——别被起始 Available 太小吓住。

总解析

安全性检测就是反复做一件事:维护 Work = Available,从未完成进程里挑一个 Need ≤ Work 的让它跑完,把它的 Alloc 加回 Work,直到全部跑完(安全)或没有可挑的(不安全)。

第 0 步:算 Available 和 Need

总资源 (A=6, B=6),已分配总和:

  • A:
  • B:

Available =

各进程 Need = Max - Alloc:

进程AllocNeed
P1(2, 3)(2, 1)
P2(2, 1)(1, 0)
P3(1, 2)(2, 2)

第 1 步:Work = (1, 0)

进程NeedNeed ≤ (1,0) ?
P1(2, 1)✗(A 维 2 > 1)
P2(1, 0)
P3(2, 2)✗(A 维 2 > 1)

只有 P2 通过。P2 跑完,Work = (1,0) + (2,1) = (3, 1)

第 2 步:Work = (3, 1)

进程NeedNeed ≤ (3,1) ?
P1(2, 1)
P3(2, 2)✗(B 维 2 > 1)

只有 P1 通过。P1 跑完,Work = (3,1) + (2,3) = (5, 4)

第 3 步:Work = (5, 4)

进程NeedNeed ≤ (5,4) ?
P3(2, 2)

P3 跑完,全部进程结束。

唯一安全序列:P2 → P1 → P3

最终答案是 B

最后更新:

🎬 可视化演示
加载中...

提示:可在可视化区直接操作播放、步进、修改参数