第2章 进程与线程(4)

2.4 死锁

多个进程因竞争资源而造成的一种僵局。若无外力,这些进程都无法推进。

2.4.1 死锁的概念

死锁,饥饿,死循环的对比
在这里插入图片描述

死锁产生的原因:
(1)系统资源的竞争
(2)进程不合理的推进顺序
(3)信号量使用不恰当也会造成死锁
总结:对不可剥夺的资源的不合理分配导致死锁

死锁产生的必要条件:
(1)互斥条件
(2)不可剥夺条件
(3)请求并保持条件
(4)循环等待条件

死锁处理策略:
(1)死锁预防【破坏产生的必要条件】
(2)死锁避免【资源分配时采取某些方法防止系统进入不安全状态】
(3)死锁的检测和解决【允许发送死锁,需要在检查出死锁后及时解除】


2.4.2 死锁预防

破坏死锁的四个必要条件之一即可
(1)破坏互斥条件

  • 使用SPOOLING技术将互斥设备改造成逻辑上可以共享的设备

缺陷:并非所有设备都可以共享

(2)破坏不可剥夺条件

  • 已经拥有部分资源的进程无法获取剩余资源,只能将已拥有资源全部归还操作系统
  • 操作系统协助优先级高的进程剥夺其他进程的资源

缺陷:①实现复杂 ②释放资源的进程需要重新允许,造成资源浪费 ③反复申请资源,导致进程饥饿

(3)破坏请求并保持条件

  • 静态分配资源,在允许前分配完需要的全部资源。若没得到全部资源,禁止运行

缺陷:资源利用率低,可能进程运行时间很长而使用资源的时间很短

(4)破坏循环等待条件条件

  • 将资源编号,进程只能申请比自己拿到的资源编号更大的资源。这样就不会反过来等待编号小的资源。

缺陷:①新增资源需要重新编号 ②使用资源的顺序和编号递增的顺序可能不一致 ③用户编程麻烦


2.4.3死锁避免

银行家算法【不能检测死锁】
安全状态无死锁。
不安全状态不一定死锁。可能有进程提前归还资源

使用矩阵记录进程对各种资源的最大需求,已分配数量,还需要分配的数量
检查否能找到一个安全序列使之能够合理分配资源和回收
c++模拟银行家算法:https://blog.csdn.net/qq_61249949/article/details/137028640


2.4.4 死锁检测和解除

圆圈:进程
框包含n个圆:有n和同类资源
矩形到圆圈的有向边:进程正在使用一个资源
圆圈到矩形的有向边:进程申请一个资源
在这里插入图片描述

S为死锁的条件时S状态的资源分配图不可以简化死锁定理

死锁解除:
(1)资源剥夺法:挂起死锁进程并抢占其资源
(2)撤销进程法:撤销部分甚至全部死锁进程并剥夺其资源
(3)进程回退法:让一个或多个进程回退到足以回避死锁的地步【资源释放资源】

决定对谁动手:
①进程优先级
②已经执行时间
③还需要多久完成
④已经使用了多少资源

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Mystic Musings

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值