当前位置: 首页 > news >正文

【操作系统】死锁的基本概念与必要条件

考点频率:★★★★★(死锁的必要条件是选择题必考,也是理解银行家算法的基础)
难度:⭐⭐
建议:必须背下四个必要条件的名称,理解其含义,并能判断实际场景中破坏了哪个条件

1️⃣ 什么是死锁?

死锁是指多个进程在运行过程中,因争夺资源而造成的一种互相等待的僵局。具体来说,一组进程中的每个进程都在等待一个事件,而该事件只能由这组进程中的另一个进程触发,导致所有进程都无法继续执行。

用更通俗的话说:每个人都拿着别人需要的东西,但谁也不肯先松手,结果所有人都卡住了。

生活类比:十字路口被四辆车堵死——每辆车都占据了另一辆车的前进方向,且没有一辆车能够后退或转向,交通彻底瘫痪。这就是一个典型的死锁场景:每个进程(车)都占用了一部分资源(路面),同时在等待另一个进程释放资源(让路)。

2️⃣ 死锁的四个必要条件

死锁的发生必须同时满足以下四个条件。只要破坏其中任意一个,死锁就不会发生。这也是死锁预防的理论依据。

2.1 互斥(Mutual Exclusion)

  • 含义:涉及的资源是临界资源,一次只能被一个进程使用。
  • 说明:如果资源允许多个进程同时使用,就不会有人因等待该资源而阻塞。但现实中有很多资源(如打印机)本身就是独占的,因此这个条件通常无法破坏。
  • 示例:打印机同一时刻只能被一个作业占用。

2.2 持有并等待(Hold and Wait)

  • 含义:一个进程已经占有了至少一个资源,同时在等待获取其他进程占有的资源。
  • 说明:进程在等待新资源时,不释放已有的资源。
  • 示例:进程A持有打印机,又在等待扫描仪;进程B持有扫描仪,又在等待打印机。

2.3 不可抢占(No Preemption)

  • 含义:进程已获得的资源在使用完之前不能被强行剥夺,只能由进程自己主动释放。
  • 说明:如果系统允许强制回收资源,就不会出现死等。
  • 示例:操作系统不能强行把打印机从进程A手中夺走转交给进程B。

2.4 循环等待(Circular Wait)

  • 含义:存在一个进程等待链:P1等待P2占有的资源,P2等待P3占有的资源,……,Pn等待P1占有的资源,形成一个首尾相连的环。
  • 说明:这是死锁发生的直接表现——有环不一定死锁(如果资源有多个实例),但死锁一定有环。
  • 示例:进程A等B,B等C,C等A。

这四个条件必须同时满足才会死锁。缺一不可。

3️⃣ 死锁与饥饿的区别

这两个概念容易混淆,但本质不同:

对比项死锁饥饿
定义多个进程互相等待对方占有的资源某个进程长期得不到所需资源
涉及进程数≥2个1个或多个(但总是同一个进程被冷落)
进程状态所有涉事进程都阻塞,无法推进被饿死的进程阻塞,但其他进程可能正常运行
能否自行解除不能,需要外部干预如果系统调度策略改变(如优先级老化),可能自行解除
原因资源竞争和循环等待调度策略不公平(如低优先级任务一直得不到CPU)

4️⃣ 处理死锁的四种策略(预览)

这是后续文章会展开的内容,先建立一个整体框架:

策略思路典型方法
预防(Prevention)破坏四个必要条件之一资源一次性分配、资源有序分配
避免(Avoidance)系统在分配资源前判断是否安全银行家算法
检测(Detection)定期检查是否有死锁发生资源分配图、死锁检测算法
恢复(Recovery)检测到死锁后解除终止进程、资源抢占

其中银行家算法(避免)是软考计算题的重点,下一篇文章会详细讲解。

5️⃣ 经典例题

例题1:下列四个条件中,不属于死锁必要条件的是( )。

A. 互斥条件
B. 持有并等待条件
C. 资源剥夺条件
D. 循环等待条件

解析:死锁的四个必要条件是:互斥、持有并等待、不可抢占(非剥夺)、循环等待。资源剥夺(或称为“可抢占”)是破坏死锁的手段,而不是产生死锁的条件。选C


例题2:某系统中有3个进程和若干资源,若进程P1占用了资源R1并等待R2,进程P2占用了R2并等待R3,进程P3占用了R3并等待R1。此时系统发生了( )。

A. 饥饿
B. 死锁
C. 互斥
D. 同步

解析:P1→R2→P2→R3→P3→R1→P1,形成了循环等待环,且每个进程都持有资源等待另一个资源,满足四个必要条件,发生了死锁。选B


例题3(判断):只要系统中存在循环等待,就一定会发生死锁。( )

解析:错误。循环等待是死锁的必要条件,但不是充分条件。如果资源有多个实例,存在循环等待并不一定导致死锁(例如环上的某个进程可能通过其他路径获得资源)。只有同时满足四个条件时才会死锁。但如果资源是单实例的,则存在环一定等价于死锁。本题表述过于绝对,错误。

6️⃣ 记忆口诀

死锁条件记四个:互斥、持有且等待。
不可抢占、循环等,缺一不可同时存。
预防破坏任一环,避免检测来处置。

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

某系统中,进程A持有资源X,请求资源Y;进程B持有资源Y,请求资源X。以下说法正确的是( )。
A. 系统一定发生了饥饿
B. 系统一定发生了死锁
C. 系统满足死锁的四个必要条件,可能发生死锁
D. 系统不满足死锁的必要条件

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

#软考中级 #软件设计师 #死锁 #必要条件 #操作系统

http://www.jsqmd.com/news/1098093/

相关文章:

  • AI代理运行时:从事件日志到凭证隔离的工程范式
  • 如何快速提升《怪物猎人:世界》游戏体验:智能辅助工具的完整指南
  • Mythos模型:AI安全能力跃迁与运行时对齐挑战
  • PKHeX-Plugins:宝可梦数据自动化校验与生成引擎的技术架构深度解析
  • 市面上有哪些是真正靠谱的降AIGC工具(顺利通过高校AIGC审核)
  • 基于改进YOLOv8的船舶检测分类系统:从原理到工程实践
  • AI神话拆解指南:从能力边界到落地现实
  • MoE架构揭秘:大模型如何实现2%参数高效激活
  • Tree-GRPO:用决策树重构强化学习训练范式
  • AI加速的本质是认知压缩,不是算力堆叠
  • Python自动化测试实战:从零到一构建测试框架的完整学习路径
  • MGIE:苹果端侧AI推理的多粒度调度范式
  • CNN组件物理直觉:从shape变化到显存占用的工程化理解
  • Playwright自动化测试与爬虫实战:从入门到精通
  • NEAT与Hindsight Experience Replay融合方法
  • 机器学习数据量真相:不是数量,而是信息精度与任务匹配度
  • 从SocialFish钓鱼攻击原理到企业级安全防护体系构建
  • C# Web自动化测试进阶:从Selenium到Atata框架的实践指南
  • Python测试框架pytest:从入门到精通,掌握高效自动化测试
  • 大小鼠雾化给药仪
  • Postman接口自动化测试实战:从单点调试到CI/CD集成
  • 告别Selenium痛点:Playwright UI自动化测试实战指南
  • 国产AI编程工具横评:通义灵码、CodeGeeX、Bito实战指南与选型
  • PC端UI自动化实战:PyWinAuto框架搭建与疑难问题全解析
  • 基于Newman的微信小程序接口自动化测试报告生成实战
  • AI技术时间切片:如何用周粒度信号捕捉真实演进
  • 终极内存检测指南:3步快速定位内存故障,告别电脑蓝屏死机
  • 别再只会拖滑块了!C# WinForms中TrackBar控件的5个隐藏用法与实战场景
  • 联想新一代数据科学工作站:软硬协同的AI科研加速平台
  • 构建高效漏洞管理:90天披露策略与Coraza平台实践指南