操作系统关键知识点之死锁相关问题(两阶段加锁、通信死锁与饥饿)

操作系统关键知识点之死锁相关问题(两阶段加锁、通信死锁与饥饿)

本次重新学习操作系统,希望通过对所学内容进行总结,与大家一同学习进步。以下将围绕死锁相关的扩展问题展开,包括两阶段加锁、通信死锁、活锁和饥饿,解析其原理、场景及应对策略,最后通过表格总结。

一、知识点总结

(一)两阶段加锁(数据库场景)

  1. 核心逻辑

    • 阶段1(加锁阶段):进程尝试获取所有所需资源的锁,若某资源已被占用,则释放已获取的所有锁并重新开始。
    • 阶段2(释放阶段):成功获取所有锁后,执行更新操作并释放锁。
    • 目标:通过“全或无”的加锁策略避免死锁,确保进程在执行操作前拥有全部资源。
  2. 局限性

    • 仅适用于支持回滚和重复执行的场景(如数据库事务),若进程执行不可重复的操作(如网络通信),重新开始可能导致错误。

(二)通信死锁(网络场景)

  1. 定义

    • 进程间通过消息通信时,因等待对方事件(如请求/回复)而阻塞,且无资源竞争的死锁。例如,A等待B的回复,B等待A的请求,双方均阻塞。
  2. 与资源死锁的区别

    • 资源依赖:无明显资源占用,仅依赖对方的通信行为。
    • 解决方法:引入超时机制,发送方未收到回复时重新发送消息(需避免重复执行导致的副作用,如重复付款)。
  3. 网络中的资源死锁

    • 例如,路由器间缓冲器耗尽导致数据包无法转发,形成资源竞争死锁(如A→B→C→D→A的循环等待缓冲器)。

(三)活锁(忙等待场景)

  1. 定义

    • 进程未阻塞,但因抢占资源策略不合理,导致持续尝试但无法推进(如轮询互斥锁时的“伪死锁”状态)。
    • 示例:进程A和B分别持有资源1和2,均尝试获取对方资源,不断轮询但无法获取,消耗CPU资源却无进展。
  2. 成因

    • 非阻塞式资源请求(如忙等待)+ 不合理的重试策略(如随机等待后立即重试)。

(四)饥饿(资源分配不公)

  1. 定义

    • 进程因资源分配策略偏向其他进程,长期无法获取所需资源而无法推进(如大文件打印进程被优先分配给小文件进程)。
  2. 解决策略

    • 先来先服务(FCFS):按请求顺序分配资源,确保等待时间最长的进程优先获得资源,避免“插队”导致的饿死。

二、通俗讲解

(一)两阶段加锁:数据库的“原子操作”保障

  • 类比场景:去餐厅点餐,需先点完所有菜(阶段1加锁),确认有食材后再开始做菜(阶段2操作)。若某道菜售罄,则取消已点的菜并重新点单。
  • 重点:适合“要么全做,要么不做”的场景(如转账事务),但不适合中途无法回退的操作(如发送火箭指令)。

(二)通信死锁:网络中的“互等消息”僵局

  • 类比场景:A给B发消息“下午开会吗?”,B收到后想回复“先确认会议室”,但需要A先提供会议室信息,于是B等待A的新消息,A等待B的回复,两人都卡住。
  • 解决办法:A等10分钟没收到回复,重新发消息“是否需要我订会议室?”(超时重传),打破僵局。

(三)活锁:看似活跃实则停滞的“忙碌陷阱”

  • 类比场景:两人过独木桥,A和B同时走到中间,A退一步,B也退一步,反复谦让却都过不去(忙等待+无阻塞)。
  • 重点:活锁与死锁的区别在于进程是否阻塞,但结果都是无法前进,且活锁更难排查(进程状态为“运行中”)。

(四)饥饿:资源分配中的“慢性死亡”

  • 类比场景:图书馆自习室按“学习时间短的人优先使用”规则分配座位,导致需要长期学习的人永远抢不到座位,只能“饥饿”等待。
  • 解决办法:采用“排队制”(FCFS),先来的人先坐,避免“歧视长时用户”的策略。

三、知识点表格总结

问题类型核心定义典型场景解决策略重点对比
两阶段加锁进程分阶段获取/释放锁,确保原子性操作数据库事务更新阶段1失败则回滚,阶段2完成后释放所有锁依赖操作可回滚,适用于事务型场景
通信死锁进程因等待对方通信事件(如消息回复)而阻塞,无资源竞争网络请求-响应模型超时重传、消息去重机制无资源占用,依赖时间触发的重试
活锁进程未阻塞但因忙等待或不合理重试策略导致无法推进轮询互斥锁、随机重试fork操作引入随机等待间隔、优先级调度进程状态为“运行”,但无实质进展
饥饿资源分配策略导致部分进程长期无法获取资源打印机优先分配给小文件进程先来先服务(FCFS)、资源配额机制与死锁的区别:进程未阻塞,但被无限期推迟

写作不易,希望这篇总结能帮助大家理解死锁相关的扩展问题!如果觉得有用,欢迎关注我的博客,点赞评论分享,一起探讨更多操作系统知识~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一杯年华@编程空间

原创文章不易,盼您慷慨鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值