Skip to content

2020年 408 操作系统 第 32 题

操作系统2020年选择题2分

题目

下列准则中,实现临界区互斥机制必须遵循的是( )。

Ⅰ、两个进程不能同时进入临界区

Ⅱ、允许进程访问空闲的临界资源

Ⅲ、进程等待进入临界区的时间是有限的

Ⅳ、不能进入临界区的执行态进程立即放弃 CPU

错因

A

只挑了"互斥"和"让权"两个最直观的准则。漏了 Ⅱ"空闲让进"和 Ⅲ"有限等待"——但这两个才是互斥机制不能塌的底线:临界区空着却谁也进不去(Ⅱ 不成立),或者某个进程被排在队尾永远轮不到(Ⅲ 不成立),都是死锁 / 饥饿,互斥机制就废了。Ⅳ 反而不是必要条件(见 Ⅳ 说明)。

B

只看到 Ⅱ"空闲让进"和 Ⅲ"有限等待"是温和合理的描述,反而漏了最硬核的 Ⅰ"互斥进入"——这恰恰是互斥机制存在的全部理由,没有这条整个机制就名存实亡。漏选 Ⅰ 一般是看走眼或读题太快,把视线锁死在了"温和的"准则上。

D

把 Ⅳ"立即放弃 CPU"误当成必要条件。让权等待确实是常见的好实践(避免忙等浪费 CPU),但"必须"这个词太强——自旋锁(spin lock)就是典型的不让权互斥机制:拿不到锁就在原地反复测试,照样保证互斥、空闲让进、有限等待。所以 Ⅳ 是"经常这么做"而不是"必须这么做"。

总解析

互斥机制的四条经典准则需要分清"必须遵循"和"通常这么做":

准则含义必须遵循?
Ⅰ 空闲让进临界资源空闲时,请求的进程应能进入✓ 不然临界区永远没人用,机制失败
Ⅱ 忙则等待(题面"两个进程不能同时进入")已有进程在临界区,别的不能再进✓ 这就是互斥的本意
Ⅲ 有限等待等待进入的进程等待时间不能无限长✓ 不然某个进程会饿死
Ⅳ 让权等待进不去临界区的进程应让出 CPU✗ 是优化建议,不是硬性要求(自旋锁不让权也能互斥)

题面四条 Ⅰ、Ⅱ、Ⅲ、Ⅳ 与上面对应(注意题里的"Ⅰ 两个进程不能同时进入"对应表里的"忙则等待","Ⅱ 允许进程访问空闲临界资源"对应"空闲让进"——名字略微对调,含义不变)。

互斥机制必须遵循的是 Ⅰ、Ⅱ、Ⅲ 这三条;Ⅳ 让权等待是为了避免忙等浪费 CPU,但自旋锁这种不让权的机制依然是合法的互斥实现,所以 Ⅳ 不是"必须"。

最终答案是 C

编者注(解题技巧):四准则里让权等待是唯一可选项——记住反例自旋锁就不会失分。问"必须遵循"答 Ⅰ Ⅱ Ⅲ;问"通常遵循 / 应当遵循"才答四条。

最后更新:

⚠️ 这道题暂未配可视化,欢迎在 CodeBrick 反馈区告诉我们你想看哪道题