【操作系统】死锁检测与死锁恢复

考点频率:★★★☆☆(选择题常考,下午题偶尔结合资源分配图考查)
难度:⭐⭐⭐
建议:掌握资源分配图的简化方法,理解死锁恢复的两种策略及适用场景

1️⃣ 回顾:死锁处理的四种策略

整个死锁处理策略可以分为四个层次,前两篇已经讲了预防和避免:

策略时机核心思想
预防系统设计时破坏四个必要条件之一
避免(银行家算法)分配时每次分配前检查是否安全
检测运行中定期检查是否存在死锁
恢复死锁发生后解除死锁,让系统继续运行

本篇聚焦于后两个策略:检测恢复

2️⃣ 死锁检测

2.1 检测的时机

  • 定时检测:系统每隔一段时间(如每10分钟)运行一次死锁检测算法
  • 事件触发:当进程等待超时或资源请求被阻塞时触发检测

2.2 核心工具:资源分配图

资源分配图是一种有向图,用于描述进程与资源之间的占用和等待关系,是死锁检测的核心工具。

  • 节点:矩形表示资源类型(圆圈内数字表示资源数量),圆形表示进程
    • 资源 → 进程(分配边):表示该资源已被分配给该进程
    • 进程 → 资源(请求边):表示该进程正在请求该资源

2.3 资源分配图的简化(判断是否死锁)

简化步骤:

  1. 在资源分配图中,找出一个既不阻塞又非孤立的进程结点:
    • 该进程所请求的所有资源都能被满足(请求边能全部变为分配边)
    • 如果存在这样的进程,则它可以运行完毕并释放所有资源
  2. 释放该进程占用的所有资源,删除该进程的所有边
  3. 重复步骤1-2,直到所有进程都能被简化删除(无死锁)或剩余进程无法简化(有死锁)

判定结论

  • 如果资源分配图可以完全简化(所有进程都被删除)→ 无死锁
  • 如果资源分配图中存在环路且无法简化 → 有死锁(环路中的进程就是死锁进程)

2.4 单资源 vs 多资源实例

资源类型环路与死锁的关系说明
每类资源只有1个实例环路 ⇔ 死锁有环必死锁,等价关系
每类资源有多个实例环路 ≠ 死锁有环不一定死锁(可能通过其他实例满足)

软考常考:画出资源分配图,要求判断是否发生死锁,并说明理由。

3️⃣ 死锁恢复

检测到死锁后,系统需要采取措施解除死锁,让进程继续运行。

3.1 恢复策略一:终止进程(最常用)

强制终止一个或多个死锁进程,回收其占用的资源。

终止策略的选择

  • 终止所有死锁进程:简单粗暴,但代价大
  • 逐个终止:每次终止一个进程,释放资源后重新检测,直到死锁解除

选择终止哪个进程的依据

考虑因素说明
进程优先级先终止优先级低的
已执行时间先终止运行时间短的(损失小)
占用资源数量先终止占用资源多的(释放资源多)
剩余执行时间先终止剩余时间长的
进程类型交互式进程优先于批处理进程

3.2 恢复策略二:资源抢占

从死锁进程中强行剥夺部分资源,分配给其他进程,打破循环等待。

资源抢占的三个问题

  1. 选择被抢占的资源:通常选择代价最小的资源(如CPU寄存器状态比打印机缓冲区更容易保存)
  2. 被抢占进程的回滚:必须将进程回滚到某个安全状态(如检查点)
  3. 防止饥饿:同一个进程不能被反复抢占,否则永远无法完成

3.3 两种恢复策略的对比

对比项终止进程资源抢占
实现复杂度简单复杂(需回滚机制)
恢复速度较慢
损失终止进程的全部工作丢失仅丢失部分工作(可回滚)
适用场景批处理系统、对实时性要求高的系统交互式系统、事务型系统(如数据库)

4️⃣ 死锁、饥饿、活锁的对比

这是软考中容易混淆的三个概念:

对比项死锁饥饿活锁
定义多个进程互相等待对方占有的资源某个进程长期得不到所需资源进程不断改变状态,但始终无法推进
进程状态所有相关进程阻塞被饿死的进程阻塞,其他进程可能正常运行进程在运行(非阻塞),但没有实质性进展
能否自行解除不能,需要外部干预如果调度策略改变(如优先级老化)可能自行解除可能自行解除(如果冲突碰巧解决)
典型场景A等B,B等A低优先级任务永远等不到CPU两个进程在走廊里互相让路,但总是让到同一侧,永远过不去
资源占用每个进程都占有一些资源被饿死的进程可能没有资源(一直在等待)进程可能在占用资源,但无法推进

区分要点:死锁是“大家都在等”,饥饿是“你一个人在等”,活锁是“大家都在动但没人前进”。

5️⃣ 经典例题

例题1:某系统资源分配图如下:

  • 资源R1有1个实例,被P1占用,P2正在请求R1
  • 资源R2有1个实例,被P2占用,P1正在请求R2

问:系统是否发生死锁?

解析

  • 分配边:R1→P1,R2→P2
  • 请求边:P1→R2,P2→R1
  • 形成环路:P1 → R2 → P2 → R1 → P1
  • 每个资源都是单实例,环路上的进程无法继续推进

答案:发生了死锁,死锁进程为P1和P2。


例题2:下列关于死锁检测和恢复的叙述中,正确的是( )。

A. 资源分配图中存在环路,则系统一定发生死锁
B. 死锁检测只能在系统死锁后才能进行
C. 终止所有死锁进程是常用的死锁恢复方法
D. 资源抢占策略不需要进程回滚

解析

  • A错误:多实例资源场景下,存在环路不一定死锁
  • B错误:检测可以定期运行,不一定要等到系统完全卡死
  • C正确:终止进程是最常用的恢复策略
  • D错误:资源抢占通常需要进程回滚

答案:C


例题3(活锁辨析):两个进程P1和P2共享两个资源R1和R2,它们都在不断尝试获取两个资源,每次拿到一个后发现另一个被占用就释放已拿到的资源,如此反复。这种情况属于( )。

A. 死锁
B. 饥饿
C. 活锁
D. 互斥

解析:进程没有阻塞(每次尝试都在运行),但始终无法取得两个资源完成工作,属于活锁。选 C

6️⃣ 记忆口诀

死锁检测看资源图,简化删除找路径。
全部删除算安全,剩环说明已死锁。
恢复终止或抢占,终止简单回滚难。
死锁活锁与饥饿,三者区分要记全。

7️⃣ 小测验(评论区对答案)

某系统有3个进程P1、P2、P3,资源R1和R2各有1个实例。当前分配:R1被P1占用,R2被P2占用。P1请求R2,P2请求R1,P3正在运行且不请求任何资源。问:

  1. 当前系统是否发生了死锁?
  2. 如果死锁发生,死锁进程是哪些?

🔔 本专栏日更2篇,点击头像 → 专栏《软考中级高频考点》订阅,第一时间接收新内容

#软考中级 #软件设计师 #死锁检测 #死锁恢复 #资源分配图 #操作系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值