【操作系统】一文带你学懂死锁

一 什么是死锁?

        死锁,简单来说就是多个进程循环等待它方占有的资源而无限僵持下去的局面。例如,在过十字路口时,如果四个方向的车都互相谦让,等待其他车道的车先过,自己最后过,那么就会导致所有的车都只能停在原地等待,停滞不前。

二 造成死锁的根本原因是什么?

        谈到死锁,我们就不可避免的谈到“为什么会产生死锁”,依旧以上面的十字路口为例,其中首当其冲的一个原因就是“十字路口只有一个,可是车道有4个”,也就是“资源少,进程多”。此外,大家的无序性也是一个很重要的原因,就比如在现实社会中,我们很少见到有堵死的现象,就是因为路口的交通信号灯提供了秩序。此外,还有很多很多的原因.....但是根本原因只有一个,那就是计算机资源的有限性

三 (补充)计算机资源的分类

        谈到资源,那就具体谈谈“资源”有哪些。计算机中,我们可以将资源区分为“可重用”与“不可重用”的资源,也可以分为“可抢占”和“不可抢占”的资源。可重用的资源是固定的、不能创建或删除的资源,比如计算机中 大多数硬件和数据资源。不可重用的资源即可消耗的资源,是一种临时性的、动态创建和消耗的资源。如用于通信的信息或数据。可抢占的资源如cpu、主存等,不会引起死锁,引起死锁的资源一定是不可抢占的资源,如刻录机、打印机等。

四 死锁产生的具体原因

1.竞争不可抢占性资源

2.等待可消耗资源

3.进程推进顺序不当


 

五 死锁产生的必要条件有哪些?

        由前面的描述我们可以推出产生死锁的必要条件:

1.互斥条件:引起死锁的资源一定是互斥资源

2.请求和保持条件:一定是保持已有资源,申请新资源不可抢占条件:进程的资源一定是不可强行剥夺的,只能等进程自己释放

3.不可抢占条件

4.循环等待条件:一定存在一个环形链条互相牵制

        计算机系统只有在同时满足这四个必要条件时,才可能发生死锁。四个条件中只要有一个不具备,系统就一定不会发生死锁。

六 如何解决死锁?

        谈到这里,那么自然就会聊到解决死锁。根据经验,不难想到解决死锁的方式无非是:事前预防、事中避免、事后解除。

        具体来讲,事前预防就是破坏死锁产生的必要条件,只要使其四个条件不同时满足,就可以防止死锁发生。事中避免就是避免进程在执行时进入到可能产生死锁的危险区。而如果死锁已经发生,那我们就只能及时检测出死锁并设法解除该状态。

七  预防死锁

        我们已经提到,预防死锁的方法就是破坏死锁产生的必要条件,只要使其四个条件不同时满足,就可以防止死锁发生。那么我们就从死锁产生的四个必要条件一一来看。

        首先是破坏互斥条件。但是互斥是非共享设备所必需的,不但不能改变,还应加以保证。因此,不能破坏。

        第二个是请求和保持条件,为了将其破坏,可以强制规定只有当进程不拥有不可抢占资源时才可以请求新资源。也就是说,只要申请资源,就把执行过程中可能需要的资源一次性全拿到;当请求新资源时先释放全部旧资源,再重新获得包括新资源在内的全部资源。

        再看第三个,不可抢占条件。破幻该条件的方式就是“变相”抢占进行已经拥有的某些资源。即如果进程已经拥有某些资源,但提出新的资源请求却得不到满足时,就应主动释放其已经保持的全部资源

        最后一个条件是循环等待条件。我们可以通过对所有资源进行编号,进程按序号递增的顺序请求资源的方式来破坏它。申请高编号资源必须先申请低编号资源,申请低编号资源必须释放高编号资源,此时不可能再出现环路。

八 避免死锁

        常用的避免死锁的方法就是银行家算法,这也是面试和考试中非常重要的一个考点,大家必须掌握。大家可以参考【操作系统】操作系统常考考点:你如何理解“银行家算法”?-CSDN博客

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值