【Linux操作系统】死锁 | 预防、避免死锁

创作不易,本篇文章如果帮助到了你,还请点赞 关注支持一下♡>𖥦<)!!
主页专栏有更多知识,如有疑问欢迎大家指正讨论,共同进步!
🔥Linux系列专栏:Linux基础 🔥

给大家跳段街舞感谢支持!ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ ዽ ጿ ኈ ቼ

在这里插入图片描述


一、死锁的概念

多个进程竞争资源而处于阻塞状态,相互等待
如果没有外力推进,进程无法继续执行任务,这种情况称为死锁(Deadlock)

例如,进程A锁定了资源1并试图锁定资源2,而进程B已经锁定了资源2并试图锁定资源1。
如果这两个进程都不放弃它们已经锁定的资源,那么它们都将永远无法获取到它们需要的资源,从而导致死锁。

或者说每个进程所等待的事件是该组中其它进程释放所占有的资源。
image.png

二、死锁的必要条件

    1. 互斥:资源一次只有一个进程能够使用
    1. 不可抢占:资源不能被强制从一个进程中夺走,进程必须主动释放资源
    1. 请求与保持:一个进程至少持有一个资源,又需要阻塞等待另一个资源
    1. 循环等待:存在进程之间资源相互占用

三、预防死锁

只要四个死锁的必要条件任一个条件不成立,死锁就不会发生。
由于互斥条件是非共享设备所必须的,不仅不能改变,还应加以保证,因此主要是破坏产生死锁的后三个条件。

  • 破坏请求与保持
  1. 所有进程在开始运行之前,必须一次性地申请其在整个运行过程中所需的全部资源。
    2.允许一个进程只获得运行初期所需的资源后,便开始运行。 运行过程中再逐步释放已分配给自己的、且已用毕的全部资源,然后再请求新的所需资源。
  • 破坏不可抢占:当一个已经保持了某些不可被抢占资源的进程,提出新的资源请求而不能得到满足时,它必须释放已经保持的所有资源,待以后需要时再重新申请。这意味着进程已占有的资源会被暂时地释放,或者说是被抢占了,从而破坏了“不可抢占”条件。
  • 破坏循环等待:规定每个进程必须按序号递增的顺序请求资源。如果需要多个同类资源单元,则必须一起请求。

四、避免死锁

避免死锁同样是属于事先预防的策略,但并不是事先采取某种限制措施,破坏产生死锁的必要条件,而是在资源动态分配过程中,防止系统进入不安全状态,以避免发生死锁,常用银行家算法来避免死锁的产生:

Dijkstra 的银行家算法:

主要思想:当进程请求资源时,银行家算法会预先检查系统是否有足够的资源满足该进程的需求,如果有,就分配资源,让进程执行,否则就让进程等待,直到有足够的资源为止。
银行家算法的四种数据:

  • 系统中可利用的资源Available
  • 所有进程对资源的最大需求Max
  • 系统中的资源分配Allocation
  • 所有进程还需要多少资源的情况Need

利用安全性算法检查系统是否安全(是否存在安全序列):判断已分配资源+系统可用资源 与 最大需求量的大小


在这里插入图片描述

大家的点赞、收藏、关注将是我更新的最大动力! 欢迎留言或私信建议或问题。
大家的支持和反馈对我来说意义重大,我会继续不断努力提供有价值的内容!如果本文哪里有错误的地方还请大家多多指出(●'◡'●)
  • 16
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

天喜Studio

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

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

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

打赏作者

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

抵扣说明:

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

余额充值