news 2026/8/17 18:23:34

死锁与银行家算法详解:读透Operating_System笔记中的经典考点

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
死锁与银行家算法详解:读透Operating_System笔记中的经典考点

死锁与银行家算法详解:读透Operating_System笔记中的经典考点

【免费下载链接】Operating_SystemResources , Notes , Videos of Operating System项目地址: https://gitcode.com/gh_mirrors/op/Operating_System

死锁与银行家算法,是操作系统课程与考研、面试中几乎每年必考的经典考点。很多初学者一看到"安全序列""安全性算法"就头疼,其实只要掌握了底层逻辑,这类题目反而是最容易拿分的送分题。本文结合开源项目 Operating_System(一份汇集了操作系统学习资源、笔记与视频的开源笔记仓库),用最通俗的语言,带你一次看懂死锁的四个必要条件、四种处理策略,以及银行家算法的完整解题流程,最后附上高频面试题速记,助你轻松过关。

什么是死锁?先搞懂死锁的四个必要条件 🚧

死锁(Deadlock)指的是:两个或多个进程在运行过程中,因争夺资源而造成的一种互相等待的现象,若无外力干涉,它们都将无法推进。

举一个生活化的例子:你和室友各拿了一把钥匙,但你的锁需要对方的钥匙才能开,对方也卡在你的钥匙上——两个人谁都无法进门,这就是典型的死锁。

操作系统课程中,死锁发生的四个必要条件缺一不可,务必背熟:

必要条件含义通俗理解
互斥(Mutual Exclusion)资源同一时刻只能被一个进程使用一把钥匙一次只能给一个人
占有并等待(Hold and Wait)进程已占有资源,又在等待别的资源攥着手里的,还盯着别人的
不可剥夺(No Preemption)资源在未使用完前不能被强行抢走没锁完门,钥匙不能被抢
循环等待(Circular Wait)存在一个进程资源的循环等待链A等B、B等C、C又等A

💡 记忆口诀:"互斥、占有、不剥夺、循环"。只要破坏其中任意一个条件,死锁就不会发生——这正是"死锁预防"的解题思路。

死锁处理四大策略:预防、避免、检测与解除,一次分清

处理死锁主要有四种策略,面试中经常让你对比它们的区别,先用一张表记住整体框架:

策略时机核心思想代表方法
死锁预防运行前(静态)破坏四个必要条件之一资源一次性分配、按序分配
死锁避免运行中(动态)每次分配前判断安全性银行家算法
死锁检测运行中允许死锁,定期检查资源分配图
死锁解除发生后撤销进程或剥夺资源强制终止、回滚

死锁预防:如何破坏四个必要条件

  • 破坏"互斥":让资源可共享,但现实中多数资源做不到;
  • 破坏"占有并等待":要求进程一次性申请全部资源(资源一次性分配法),缺点是资源利用率低、可能饥饿;
  • 破坏"不可剥夺":允许系统强行剥夺,适用于可保存恢复的资源;
  • 破坏"循环等待":给资源编号,要求进程按编号递增的顺序申请资源(资源有序分配法),这是最常用的预防手段。

死锁避免:动态判断的核心思路

预防是"事前设限",而避免是"每次分配资源前,先算一算:如果分给你,系统还能不能找到一个让所有进程都完成的顺序(安全序列)"。银行家算法就是死锁避免最经典的实现

银行家算法原理:为什么偏偏叫"银行家"?🏦

银行家算法的灵感来自银行贷款:银行不会一次性把所有钱贷给一个客户,而是只在"贷出后仍能收回全部贷款"的前提下才放款

类比到操作系统:

  • 银行家 = 操作系统客户 = 进程资金 = 资源
  • 进程申请资源时,系统先模拟分配,若分配后仍存在安全序列,才真正批准;否则宁可让进程等待。

银行家算法依赖的四个核心数据结构

判断前,需要维护四张表,面试常考它们的含义:

  • Max:每个进程对每类资源的最大需求;
  • Allocation:每个进程已占有的资源数;
  • Need:每个进程还需要的资源数(Need = Max − Allocation);
  • Available:系统当前剩余可用的资源数。

安全性算法:三步判断安全序列

判断系统是否处于安全状态,只需循环执行三步:

  1. 找一个Need ≤ Available的进程(它当前的需求能被满足);
  2. 假设把资源分配给它,进程完成后归还全部资源:Available += Allocation;
  3. 标记该进程完成,重复以上过程。若所有进程都能完成,则存在安全序列,系统安全;否则不安全。

银行家算法例题演练:手把手算出安全序列 ✍️

光看原理不够,考试最爱考的就是"给你一张表,判断是否存在安全序列"。我们用经典例题走一遍完整流程。

假设系统有 5 个进程,3 类资源 A、B、C,当前 Available = (3, 3, 2),各进程数据如下:

进程Max (A,B,C)Allocation (A,B,C)Need (A,B,C)
P0(7, 5, 3)(0, 1, 0)(7, 4, 3)
P1(3, 2, 2)(2, 0, 0)(1, 2, 2)
P2(9, 0, 2)(3, 0, 2)(6, 0, 0)
P3(2, 2, 2)(2, 1, 1)(0, 1, 1)
P4(4, 3, 3)(0, 0, 2)(4, 3, 1)

第一步:从 P0~P4 中找 Need ≤ Available = (3,3,2) 的进程:

  • P1:Need (1,2,2) ≤ (3,3,2) ✅,P3:Need (0,1,1) ≤ (3,3,2) ✅,其余进程不满足。

第二步:先选 P1 执行,完成后归还资源:Available = (3,3,2) + (2,0,0) = (5,3,2)。此时 P3 仍满足,执行 P3 后 Available = (5,3,2) + (2,1,1) = (7,4,3)。

第三步:此时 P0、P2、P4 的 Need 均 ≤ (7,4,3),任意挑选继续推进,例如 P0 → P2 → P4。

最终得到一个安全序列:P1 → P3 → P0 → P2 → P4,系统处于安全状态,可以放心分配。

⚠️ 易错点提醒:安全序列不唯一;若某一步找不到 Need ≤ Available 的进程,说明系统将进入不安全状态,此时必须拒绝本次资源请求

死锁高频面试题与易错点速记 🎯

  • 死锁与饥饿有什么区别?死锁是进程互相等待、谁也不让;饥饿是进程长期得不到资源,可能因优先级过低被无限推迟。
  • 死锁避免一定能预防死锁吗?能,前提是每个进程必须提前声明最大资源需求,且分配后保持系统安全。
  • 银行家算法为什么不常用在实际系统中?因为进程很难提前准确声明 Max,且算法开销较大。
  • 安全状态和不安全状态的关系?安全状态一定不会死锁;不安全状态不一定死锁,只是有死锁风险。
  • 循环等待一定是死锁吗?不一定,循环等待只是必要条件之一,四个条件同时满足才是死锁。

结合Operating_System笔记,高效复习死锁考点 📚

死锁与银行家算法作为操作系统的高频考点,建议配合系统的笔记+视频资源反复练习。开源项目 Operating_System 正是为此而生——它收录了完整的操作系统学习资源、笔记整理与配套视频,涵盖了进程管理、死锁、内存管理、文件系统等核心章节,非常适合考研、期末复习和面试冲刺时对照学习。

复习建议:先背熟四个必要条件和四种处理策略,再动手算 3~5 道银行家算法例题,最后用上面的面试题自测,死锁这块基本就能稳稳拿下了。祝你考试顺利,一次过关!🎉

【免费下载链接】Operating_SystemResources , Notes , Videos of Operating System项目地址: https://gitcode.com/gh_mirrors/op/Operating_System

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/17 18:21:15

靠谱的杭州园林绿化排名靠前的公司

在城市建设与美化中,园林绿化扮演着重要的角色。在杭州,有许多从事园林绿化的公司,为这座美丽的城市增添了一道道亮丽的风景线。今天,就让我们来了解一下在2026年8月全网排名较为专业的园林绿化公司,尤其是 杭州世纪春…

作者头像 李华
网站建设 2026/8/17 18:21:13

网易NeoX引擎NPK文件解包全攻略:用unnpk从零提取游戏资源与脚本源码

网易NeoX引擎NPK文件解包全攻略:用unnpk从零提取游戏资源与脚本源码 【免费下载链接】unnpk 解包网易游戏NeoX引擎NPK文件,如阴阳师、魔法禁书目录。 项目地址: https://gitcode.com/gh_mirrors/un/unnpk 如果你玩过《阴阳师》或《魔法禁书目录》…

作者头像 李华
网站建设 2026/8/17 18:20:26

MyBatis mapper.xml深度解析:从基础语法到高级实战技巧

1. 项目概述:为什么mapper.xml是MyBatis的灵魂如果你用过MyBatis,那你肯定绕不开mapper.xml。很多人觉得它就是个写SQL的地方,简单得很。但在我过去十多年的Java后端开发经历里,踩过最多的坑、解决过最棘手的问题,往往…

作者头像 李华
网站建设 2026/8/17 18:17:59

AI如何自动识别关键设备参数未响应导致废标废标风险?智能评审项目实践

这里写自定义目录标题欢迎使用Ma rkdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个…

作者头像 李华
网站建设 2026/8/17 18:17:43

产品设计思考-AI+面向个人用户的丧葬产业

AI丧葬产品思考。白事是每个人必然要面对的事情,无论是逝者是自己家人还是朋友家人,或者影响自己事业前途之人的家人。有AI辅助,可以让自己快速完善的准备需要关注的内容。提前帮助对方分担一些需要处理的事情,让自己的发展能更进…

作者头像 李华
网站建设 2026/8/17 18:16:19

学会这5个SpringBoot技巧,代码质量明显提升

总有人把SpringBoot当成一个“配置简化器”,以为只要引入了依赖、写几个注解,就是一个合格的SpringBoot应用了。真正拉开代码质量差距的,往往不是那些花哨的框架特性,而是你在日常开发中如何对待那些看似不起眼的细节。下面这5个技…

作者头像 李华