死锁的基本介绍

什么是死锁

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。如下图,T1占有了资源R1,想要获得资源R2,同时,T2占有了资源R2,且想要获得资源R1,但是它们都不想释放自己的资源,只能一直僵持,使得进程无法推进,从而产生了死锁。
在这里插入图片描述

死锁产生的必要条件

死锁的产生必须具备以下的四种必要条件,缺一不可。
(1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如上图,资源R1在被T1使用时,T2无法使用R1,只能等待R1被释放。
(2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,但又对自己已获得的资源保持不放。如上图,T1占有资源R1,想要获得资源R2,但R2已经被别人占有,而T1在没有得到资源R2之前又不释放资源R1。
(3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放。如上图,T1占有资源R1,但是T2也想要资源R1,但是T2不能抢夺,只能等待T1主动释放资源R1;
(4)环路等待条件(循环条件):指在发生死锁时,必然存在一个进程——资源的环形链,即进程P0正在等待一个P1占用的资源;P1正在等待P2占用的资源,P2正在等待已被P0占用的资源。如图:
在这里插入图片描述

死锁产生的原因

死锁产生的原因主要有两个:
1、竞争资源:当系统中提供给进程所使用的共享资源数量无法满足进程的需求时,会引起各进程对资源的争夺而产生死锁。
2、 进程推进顺序非法:若P1占有了资源R1,P2占有了资源R2,系统处于不安全状态,因为这两个进程再向前推进,便可能发生死锁。例如,当P1运行到P1:Request(R2)时,将因R2已被P2占用而阻塞;当P2运行到P2:Request(R1)时,也将因R1已被P1占用而阻塞,于是发生进程死锁。

死锁的解决

1、死锁预防:前面提到过,死锁发生的四个条件缺一不可,所以死锁的预防就是预先设置一些限制条件,去破坏产生这四个必要条件中的一个或多个,就可以预防死锁的发生。
2、死锁避免:这个方法属于事先预防的策略,但它和死锁预防不同,它并不是采用各种限制措施去破坏产生死锁的的四个必要条件,而是系统会对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源;如果分配后系统可能发生死锁,则不予分配,否则予以分配。这是一种保证系统不进入死锁状态的动态策略。
3、死锁检测和解除:此方法是在死锁已经发生后,通过系统设置的监测机构,及时的监测死锁的发生,并确定有关的进程和资源,然后采取适当的措施,接触死锁。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值