Skip to content

2022年 408 操作系统 第 26 题

操作系统2022年选择题2分

题目

系统中有三个进程 P0、P1、P2 及三类资源 A、B、C。若某时刻系统分配资源的情况如下表所示,则此时系统中存在的安全序列的个数为( )。

进程已分配资源数尚需资源数可用资源数ABCABCABCP0201021P1020123P2101013132

错因

A

找到一条 P0→P1→P2 的安全序列就停手了,以为题目问的是"安全 / 不安全"。其实问的是个数,第一步定下 P0 之后,第二步谁先谁后还要继续往下推——P0 完成后 Work 变得宽松,P1 和 P2 都满足条件,分叉成两条路径。

C

多半在第一步把 P1 或 P2 也误判成可跑了,凑出三条序列。但仔细对一下三维:P1 的 Need C 维需要 3,P2 的 Need C 维也需要 3,而 Available 的 C 只有 2——两个都卡在 C 上过不了第一关。第一步只有 P0 一个候选。

D

直接拿 3! = 6 个排列减掉"显然不行"的,凭感觉留 4。但其实第一步定死 P0、第二步分叉成 P1 / P2 两选一、第三步就剩最后那个,分支结构是 1 × 2 × 1 = 2 条,没有更多。

总解析

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

要数所有安全序列,每次遇到分叉就要每条路径都走一遍。

第一步:Work = (1, 3, 2)

进程NeedNeed ≤ (1,3,2) ?
P0(0, 2, 1)
P1(1, 2, 3)✗ C 维 3 > 2
P2(0, 1, 3)✗ C 维 3 > 2

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

进程已分配资源数尚需资源数可用资源数ABCABCABCP0201021P1020123P2101013333

第二步:Work = (3, 3, 3)

进程NeedNeed ≤ (3,3,3) ?
P1(1, 2, 3)
P2(0, 1, 3)

P1、P2 都满足 → 分叉,两条路都要走。

分支 a:P0 → P1 → P2

P1 跑完,Work = (3,3,3) + (0,2,0) = (3,5,3)。P2 的 Need (0,1,3) ≤ (3,5,3) ✓,P2 跑完。✅ 安全。

分支 b:P0 → P2 → P1

P2 跑完,Work = (3,3,3) + (1,0,1) = (4,3,4)。P1 的 Need (1,2,3) ≤ (4,3,4) ✓,P1 跑完。✅ 安全。

两条分支都走通,安全序列共 2 条P0 → P1 → P2P0 → P2 → P1

最终答案是 B

最后更新:

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

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