首页/操作系统/进程管理/死锁的预防 🔗 在 Obsidian 中打开
操作系统 · 进程管理

死锁的预防

重要度 ★★★★ 死锁预防破坏条件静态分配资源有序
速查
死锁预防是事前策略:通过限制资源申请方式,破坏四个必要条件之一(互斥除外)。方法:静态分配(破坏请求和保持)、可抢占(破坏不可抢占)、资源有序分配(破坏循环等待)。

核心概念

死锁预防是一种事前策略,通过限制资源申请方式,破坏死锁四个必要条件中的至少一个,使死锁不可能发生。

破坏四个条件的方法

1. 破坏「请求和保持」条件

  • 静态分配法:进程在运行前一次性申请所有需要的资源。
  • 优点:简单有效;缺点:资源利用率低,进程可能长期持有不需要的资源。

2. 破坏「不可抢占」条件

  • 允许 OS 抢占已分配的资源;进程请求新资源被拒时,释放已持有的所有资源。
  • 缺点:实现复杂,只适用于状态可保存和恢复的资源(如 CPU、内存)。

3. 破坏「循环等待」条件

  • 资源有序分配法:给所有资源编号,进程只能按编号递增顺序请求资源。
  • 如:已持有资源 3,只能请求编号 > 3 的资源。
  • 优点:资源利用率比静态分配高;缺点:编号不便,新资源加入困难。

关键性质

破坏条件方法优点缺点
请求和保持静态分配法简单资源利用率低
不可抢占允许抢占灵活实现复杂,资源类型受限
循环等待资源有序分配利用率较高编号不便
互斥几乎无法破坏互斥是资源固有属性

常见考法

考法解题套路
破坏哪个条件静态分配 → 请求和保持;资源有序 → 循环等待
资源有序分配验证检查进程是否按编号递增顺序请求
为什么不能破坏互斥互斥是资源本身的属性(如打印机),不是 OS 决定的
预防 vs 避免预防是事前限制(更保守),避免是事中检查(银行家算法)

易错点

必记
  1. ⚠️ 互斥条件无法破坏——它是资源本身的属性(如打印机不能同时被两个进程使用)。
  2. ⚠️ 静态分配法的缺点是资源利用率低
  3. ⚠️ 资源有序分配法要求所有进程都遵守编号规则,一个违规就可能死锁。
  4. ⚠️ 死锁预防比死锁避免更保守——预防从根源限制,避免在分配时检查。

记忆卡片

死锁预防核心思想?
破坏四个必要条件之一(除互斥外)。
静态分配法破坏哪个条件?
破坏「请求和保持」——运行前一次性申请所有资源。
资源有序分配法破坏哪个?
破坏「循环等待」——按编号递增顺序请求。
为什么不能破坏互斥?
互斥是资源固有属性(如打印机不能同时被两人用)。

交互动画 · 四条预防策略与资源分配图

第 0 步
P0进程 R0资源 1 实例 P1进程 R1资源 1 实例 选择策略后逐步查看资源分配图变化
先选策略,再点「下一步」逐步演示
四种策略:互斥不可破坏;其余三条分别用 静态分配 / 允许抢占 / 资源有序 破坏。
资源分配图:实线 = 持有,橙色虚线 = 请求,红色虚线 = 环形等待/违规。先演示「不满足该策略 → 死锁可能」的对比场景。

相关知识点

deadlock deadlock-avoidance

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。