Appearance
408
操作系统
死锁的概念与必要条件
一、定位信息
- 所属圈层:核心层
- 前置知识:了解进程间通信和资源竞争(OS-02-05),了解互斥的概念(OS-02-09)
- 知识网络位置:本单元是死锁三节(概念→预防/避免→检测/解除)的起点,理解死锁的四个必要条件是后续学习银行家算法的基础
- 考点热度等级:H级(高频重点)——死锁概念和四个必要条件几乎每年必考
二、知识点讲解
2.1 死锁的定义
**死锁(Deadlock)**是指两个或多个进程互相等待对方持有的资源,导致所有进程都无法继续执行的状态。
直观理解:A拿着B需要的资源等B释放资源,B拿着A需要的资源等A释放资源——双方都等对方,谁也动不了。
2.2 死锁的四个必要条件
死锁发生必须同时满足以下四个条件(缺一不可):
| 条件 | 含义 | 说明 |
|---|---|---|
| 互斥条件 | 资源一次只能被一个进程使用 | 如打印机不能同时被两个进程使用 |
| 请求与保持条件 | 进程持有资源的同时请求新资源 | "拿着旧的要新的" |
| 不可剥夺条件 | 已获得的资源不能被强制剥夺 | 资源只能由持有者主动释放 |
| 循环等待条件 | 存在进程的循环等待链 | P1等P2的资源,P2等P3的资源,...,Pn等P1的资源 |
关键理解:四个条件是必要条件——死锁一定满足这四个条件,但满足这四个条件不一定死锁(还需要资源分配恰好形成环路)。
2.3 死锁的起因
- 资源竞争:系统资源不足以满足所有进程的需求
- 进程推进顺序不当:进程请求资源的顺序不合理
2.4 死锁 vs 饥饿 vs 活锁
| 维度 | 死锁 | 饥饿 | 活锁 |
|---|---|---|---|
| 进程状态 | 阻塞(等待资源) | 就绪(等待调度) | 运行(但无进展) |
| 原因 | 循环等待资源 | 优先级太低,长期得不到调度 | 进程不断改变状态但不前进 |
| 涉及进程数 | ≥2 | 通常1个 | ≥1 |
| CPU是否忙碌 | 是(其他进程可用) | 是 | 是(但做无用功) |
| 解决方法 | 预防/避免/检测解除 | 老化(提高优先级) | 随机等待 |
三、记忆与理解辅助
- 口诀记忆四个必要条件:"互请不循"——互斥、请求与保持、不可剥夺、循环等待
- 一句话理解死锁:"你拿我的,我拿你的,谁也不放手"
- 打破任一条件即可防死锁:破坏互斥(假脱机)、破坏请求与保持(一次性申请)、破坏不可剥夺(强制回收)、破坏循环等待(有序分配)
- 死锁 vs 饥饿:死锁是"互相等"(至少两个进程),饥饿是"一直等"(通常一个进程)
四、例题与精解
例题1(基础巩固)
题目:死锁发生的必要条件是( )
A. 互斥、请求与保持、可剥夺、循环等待 B. 互斥、请求与保持、不可剥夺、循环等待 C. 共享、请求与保持、不可剥夺、线性等待 D. 互斥、一次性分配、不可剥夺、循环等待
命题意图:考查死锁四个必要条件的准确记忆。
精解:
- 审题分析:需要准确回忆四个必要条件
- 解题思路:口诀"互请不循"
- 完整步骤:
- 互斥条件:正确(资源互斥使用)
- 请求与保持条件:正确(持有旧资源的同时请求新资源)
- 不可剥夺条件:正确(不能强制回收资源)
- 循环等待条件:正确(存在等待环路)
- B选项四个条件完全正确
- A选项错在"可剥夺"(应该是不可剥夺)
- C选项错在"共享"和"线性等待"
- D选项错在"一次性分配"(这是预防方法,不是必要条件)
- 方法反思:死锁的四个条件是"必要条件",不是预防方法
答案:B
例题2(中等提升)
题目:以下哪种做法可以破坏死锁的"请求与保持"条件?( )
A. 资源一次性分配——进程开始前必须一次性申请所有资源 B. 资源有序分配——按编号顺序申请资源 C. 剥夺式分配——可以强制回收进程的资源 D. 假脱机技术——将独占设备改为共享设备
命题意图:考查死锁预防策略与四个条件的对应关系。
精解:
- 审题分析:需要将各预防策略与四个必要条件对应
- 解题思路:每个预防策略对应破坏一个必要条件
- 完整步骤:
- A选项:一次性分配所有资源,进程执行过程中不再请求新资源。这样就不会出现"持有旧资源的同时请求新资源"的情况,破坏了请求与保持条件。正确
- B选项:有序分配破坏的是循环等待条件(按编号顺序申请不会形成环路)
- C选项:剥夺式分配破坏的是不可剥夺条件
- D选项:假脱机技术破坏的是互斥条件(将独占设备虚拟为共享设备)
- 方法反思:死锁预防的四种策略分别对应破坏四个必要条件——一次性分配→请求与保持,有序分配→循环等待,剥夺→不可剥夺,假脱机→互斥
答案:A
五、考情分析
- 考查频次:近5年约3–4次
- 常见题型:选择题
- 分值占比:2分/题
- 命题趋势:四个必要条件的识别和死锁预防策略的对应关系是常考内容,可能与银行家算法结合出题
六、易错点提醒
错误表现:认为满足四个条件就一定会死锁 错误原因:混淆"必要条件"和"充分条件" 正确理解:四个条件是必要条件(死锁一定满足),不是充分条件(满足不一定死锁,还需要资源分配恰好形成环路)
错误表现:混淆"死锁"和"饥饿" 错误原因:两者都导致进程无法推进 正确理解:死锁是多个进程互相等待(循环等待),饥饿是单个进程长期得不到资源
错误表现:将预防策略和必要条件搞混 错误原因:一次性分配是策略,请求与保持是条件 正确理解:必要条件是死锁的特征,预防策略是破坏这些条件的方法
错误表现:认为死锁只会发生在硬件资源上 错误原因:忽略了软件资源(如锁、信号量、文件)也可能导致死锁 正确理解:任何互斥使用的资源(硬件或软件)都可能导致死锁
七、来源标注
- 依据2026考研统考408大纲
- 依据《计算机操作系统》(汤小丹/汤子瀛版)第2章
- 依据《操作系统概念》(Silberschatz版)第7章