Skip to content

2019年 408 操作系统 第 30 题

操作系统2019年选择题2分

题目

下列关于死锁的叙述中,正确的是( )。

Ⅰ、可以通过剥夺进程资源解除死锁 Ⅱ、死锁的预防方法能确保系统不发生死锁 Ⅲ、银行家算法可以判断系统是否处于死锁状态 Ⅳ、当系统出现死锁时,必然有两个或两个以上的进程处于阻塞态

错因

A

承认 Ⅱ Ⅲ 而不要 Ⅰ Ⅳ,最致命的是漏了 Ⅰ——剥夺资源就是死锁解除的标准手段(资源剥夺法)。同时 Ⅲ 也是错的:银行家算法用于避免死锁(事前不让系统进入不安全状态),不是检测已经发生的死锁。死锁的"避免 / 检测 / 解除"是三件不同的事,混了就走偏。

C

承认 Ⅰ Ⅱ Ⅲ。Ⅰ Ⅱ 都对,但选了 Ⅲ 同样掉进"避免 vs 检测"的坑——银行家算法是事前判定一次资源分配会不会让系统进不安全状态,做的是预防性放行;判断系统当前是不是真的死了得用死锁检测算法(基于资源分配图查环、或简化算法)。两者目标和算法都不同。

D

承认 Ⅰ Ⅲ Ⅳ,漏了 Ⅱ 反而把错的 Ⅲ 选上了——可能在权衡 Ⅱ 时被"预防能不能 100% 保证"这种学术怀疑卡住,但教材给的预防四种方法(破坏互斥/请求保持/不剥夺/循环等待之一)任选一种就能绝对避免死锁,这是设计的硬保证,不该排除。

总解析

死锁知识点容易混的是"预防 / 避免 / 检测 / 解除"四件事的角色,先理清:

策略时机做什么典型方法
预防事前(系统设计时)破坏死锁四条件之一一次性分配 / 顺序申请 / 可剥夺
避免运行时分配前判断"分配后是否仍安全",否则不分配银行家算法
检测运行时定期查看现在是不是已经死锁了资源分配图算法 / 检测算法
解除检测到死锁后让系统恢复剥夺资源 / 撤销进程 / 回滚

逐条判:

  • Ⅰ 剥夺资源解除死锁 → ✓ 这是死锁解除的标准手段(资源剥夺法)
  • Ⅱ 预防方法能确保不发生死锁 → ✓ 预防的设计目标就是绝对杜绝(破坏 4 条件之一)
  • Ⅲ 银行家算法判断是否处于死锁状态 → ✗ 银行家是避免算法(事前判断分配后是否仍安全),不是检测算法。判定"现在是否死锁"是检测算法的工作
  • Ⅳ 死锁时必有 ≥2 进程阻塞 → ✓ 死锁本质是"循环等待",至少要 2 个进程互相等才能形成循环

正确的是 Ⅰ Ⅱ Ⅳ。

最终答案是 B

最后更新:

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

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