Skip to content

2021年 408 操作系统 第 31 题

操作系统2021年选择题2分

题目

若系统中有 n(n≥2)个进程,每个进程均需要使用某类临界资源 2 个,则系统不会发生死锁所需的该类资源总数至少是( )。

错因

A

把"每个进程要 2 个"误读成"全系统只需要 2 个"。但 2 个资源面对 n≥2 个进程,每进程都想要 2 个,僧多粥少——稍微极端一点的场景,比如 P1 拿到这 2 个、其他进程都阻塞,但要是 2 个被两个进程各拿 1 个,俩都在等对方放,立马死锁。2 个根本不够。

B

精确踩中死锁临界点:n 个进程每人各持 1 个还差 1 个、刚好用完所有 n 个资源——这正是死锁的最坏情况,所以 n 个资源仍可能死锁。题问"不会发生死锁",需要至少能再多 1 个让链条续上,n 是不够的。

D

走了另一个极端:每进程要 2 个 × n 个进程 = 2n 个资源,认为这样人手两份完全够用。这确实绝对不死锁,但题问的是"至少"——n+1 已经够保证了,2n 是过度配置,不是最少。

总解析

死锁本质是"每个进程都拿了点资源、都不够、都在等别人放"的循环等待。本题的资源是同类的(不分 A、B、C),所以分析简单:

最坏情况推导(鸽笼原理): 假设系统有 个资源,n 个进程每人最多持 1 个时(拿到第二个就完成、释放):

最坏分配方式是否死锁
不够每人 1 个,至少有进程 0 持有,剩 0 个让其他人凑不齐可能死锁
刚好每人 1 个,剩 0 个,人人都在等另 1 个可能死锁(最坏情况就是这样)
即使每人各持 1 个,还剩 1 个——必有某进程能拿到第 2 个完成,释放后其他人陆续完成绝对不死锁

具体到 :n 个进程每人拿到 1 个后,仍有 1 个空闲资源;空闲资源给任意一个进程,它凑齐 2 个就能完成 → 释放 2 个 → 链式推动其他进程完成。

具体到 :极端分配下每人 1 个、谁都不能凑齐第 2 个,进入死锁。

所以"不会发生死锁所需的资源总数至少是 "。

通用公式(同类资源、k 个进程每个最多需 m 个):保证不死锁的资源数下限:

代入本题 ✓。

最终答案是 C

最后更新:

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

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