Skip to content

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是否忙碌是(其他进程可用)是(但做无用功)
解决方法预防/避免/检测解除老化(提高优先级)随机等待

三、记忆与理解辅助

  1. 口诀记忆四个必要条件:"互请不循"——互斥、请求与保持、不可剥夺、循环等待
  2. 一句话理解死锁:"你拿我的,我拿你的,谁也不放手"
  3. 打破任一条件即可防死锁:破坏互斥(假脱机)、破坏请求与保持(一次性申请)、破坏不可剥夺(强制回收)、破坏循环等待(有序分配)
  4. 死锁 vs 饥饿:死锁是"互相等"(至少两个进程),饥饿是"一直等"(通常一个进程)

四、例题与精解

例题1(基础巩固)

题目:死锁发生的必要条件是( )

A. 互斥、请求与保持、可剥夺、循环等待 B. 互斥、请求与保持、不可剥夺、循环等待 C. 共享、请求与保持、不可剥夺、线性等待 D. 互斥、一次性分配、不可剥夺、循环等待

命题意图:考查死锁四个必要条件的准确记忆。

精解

  1. 审题分析:需要准确回忆四个必要条件
  2. 解题思路:口诀"互请不循"
  3. 完整步骤
    • 互斥条件:正确(资源互斥使用)
    • 请求与保持条件:正确(持有旧资源的同时请求新资源)
    • 不可剥夺条件:正确(不能强制回收资源)
    • 循环等待条件:正确(存在等待环路)
    • B选项四个条件完全正确
    • A选项错在"可剥夺"(应该是不可剥夺)
    • C选项错在"共享"和"线性等待"
    • D选项错在"一次性分配"(这是预防方法,不是必要条件)
  4. 方法反思:死锁的四个条件是"必要条件",不是预防方法

答案:B

例题2(中等提升)

题目:以下哪种做法可以破坏死锁的"请求与保持"条件?( )

A. 资源一次性分配——进程开始前必须一次性申请所有资源 B. 资源有序分配——按编号顺序申请资源 C. 剥夺式分配——可以强制回收进程的资源 D. 假脱机技术——将独占设备改为共享设备

命题意图:考查死锁预防策略与四个条件的对应关系。

精解

  1. 审题分析:需要将各预防策略与四个必要条件对应
  2. 解题思路:每个预防策略对应破坏一个必要条件
  3. 完整步骤
    • A选项:一次性分配所有资源,进程执行过程中不再请求新资源。这样就不会出现"持有旧资源的同时请求新资源"的情况,破坏了请求与保持条件。正确
    • B选项:有序分配破坏的是循环等待条件(按编号顺序申请不会形成环路)
    • C选项:剥夺式分配破坏的是不可剥夺条件
    • D选项:假脱机技术破坏的是互斥条件(将独占设备虚拟为共享设备)
  4. 方法反思:死锁预防的四种策略分别对应破坏四个必要条件——一次性分配→请求与保持,有序分配→循环等待,剥夺→不可剥夺,假脱机→互斥

答案:A


五、考情分析

  • 考查频次:近5年约3–4次
  • 常见题型:选择题
  • 分值占比:2分/题
  • 命题趋势:四个必要条件的识别和死锁预防策略的对应关系是常考内容,可能与银行家算法结合出题

六、易错点提醒

  1. 错误表现:认为满足四个条件就一定会死锁 错误原因:混淆"必要条件"和"充分条件" 正确理解:四个条件是必要条件(死锁一定满足),不是充分条件(满足不一定死锁,还需要资源分配恰好形成环路)

  2. 错误表现:混淆"死锁"和"饥饿" 错误原因:两者都导致进程无法推进 正确理解:死锁是多个进程互相等待(循环等待),饥饿是单个进程长期得不到资源

  3. 错误表现:将预防策略和必要条件搞混 错误原因:一次性分配是策略,请求与保持是条件 正确理解:必要条件是死锁的特征,预防策略是破坏这些条件的方法

  4. 错误表现:认为死锁只会发生在硬件资源上 错误原因:忽略了软件资源(如锁、信号量、文件)也可能导致死锁 正确理解:任何互斥使用的资源(硬件或软件)都可能导致死锁


七、来源标注

  • 依据2026考研统考408大纲
  • 依据《计算机操作系统》(汤小丹/汤子瀛版)第2章
  • 依据《操作系统概念》(Silberschatz版)第7章

考研全科复习资料 - 基于2026考研统考大纲