Skip to content

2012年 408 操作系统 第 27 题

操作系统2012年选择题2分

题目

假设 5 个进程P0-P4共享三类资源R1、R2、R3,这些资源总数分别为 18、6、22。T0 时刻的资源分配情况如下表所示,此时存在的一个安全序列是( )。 [含图]

image-20260426232651604

图示资源分配表(资源总数 R1=18、R2=6、R3=22):

进程已分配 R1, R2, R3资源最大需求 R1, R2, R3
P03, 2, 35, 5, 10
P14, 0, 35, 3, 6
P24, 0, 54, 0, 11
P32, 0, 44, 2, 5
P43, 1, 44, 2, 4

错因

A

让 P0 第一个跑,但 P0 的 Need = (2, 3, 7)——R3 还需 7 个,而 Available 只有 3 个,P0 跑不动。把"序列里能开始的那个"算错了,没先验证 Need ≤ Available。

B

让 P1 第一个跑(Need = (1, 3, 3) ≤ Available (2, 3, 3),能开始);P1 释放 (4, 0, 3) 后 Available = (6, 3, 6)。但接下来要 P0(Need = (2, 3, 7))—— R3 还需 7,可用只 6,P0 跑不了。序列在第二步断。

C

让 P2 第一个跑,但 P2 的 Need = (0, 0, 6)——R3 需 6,Available 只 3,P2 跑不了。第一步就断。

总解析

银行家安全性检测:算 Need 和 Available,然后逐步看哪个进程能先跑、跑完释放后能让谁跑、能否走完所有进程。

第 1 步:算 Need 和 Available

进程Need (R1, R2, R3)
P0 → (2, 3, 7)
P1 → (1, 3, 3)
P2 → (0, 0, 6)
P3 → (2, 2, 1)
P4 → (1, 1, 0)

第 2 步:验证序列 D(P3 → P4 → P2 → P1 → P0)

跑哪个NeedAvailable 是否够?跑完释放(=Allocation)新 Available
1P3(2, 2, 1)✓ ≤ (2, 3, 3)(2, 0, 4)(2+2, 3+0, 3+4) = (4, 3, 7)
2P4(1, 1, 0)✓ ≤ (4, 3, 7)(3, 1, 4)(4+3, 3+1, 7+4) = (7, 4, 11)
3P2(0, 0, 6)✓ ≤ (7, 4, 11)(4, 0, 5)(7+4, 4+0, 11+5) = (11, 4, 16)
4P1(1, 3, 3)✓ ≤ (11, 4, 16)(4, 0, 3)(11+4, 4+0, 16+3) = (15, 4, 19)
5P0(2, 3, 7)✓ ≤ (15, 4, 19)(3, 2, 3)(15+3, 4+2, 19+3) = (18, 6, 22)

5 步都能走通,所有进程跑完,资源全部回收 → D 是合法安全序列

反向验证 A、B、C 都在某一步断(错因里已说明)

  • A 第 1 步:P0 Need (2, 3, 7) 不满足 Available (2, 3, 3)
  • B 第 2 步:P0 Need (2, 3, 7) 不满足 Available (6, 3, 6)
  • C 第 1 步:P2 Need (0, 0, 6) 不满足 Available (2, 3, 3)

关键原则:先看哪个进程的 Need 全部 ≤ 当前 Available,让它先跑;跑完释放,更新 Available 再选下一个。Need 在任一资源维度上 > Available 都不能跑——多资源类型只要一类不够就失败。

最终答案是 D

最后更新:

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

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