死锁的产生原因&&产生的必要条件&&处理方法

        在多道程序中,虽可借助多个进程的并发执行来改善系统的资源利用率,提高系统的吞吐量,但可能发生一种危险——死锁。所谓死锁(Dadlock),  是指多个进程在运行过程中因竞争资源而造成的一种僵局(DeadlyEmbrace),当前这种进程处于这种僵持状态时,若无外力作用,他们都无法再向前推进,如把信号量作为同步机制时,多和wait和signal操作书序不当,就会产生进程死锁。


产生死锁的原因可以归结为以下两点:

 1.竞争资源:当系统中提供多个进程共享资源,其数目不足以满足诸进程的需要时,会引起诸进程对资源的竞争而产生死锁。

       1)可剥夺和非剥夺性资源:

           一类是可剥夺性资源:是某进程在获得这类资源后,该资源可以再被其他进程或系统剥夺。

           另一类是不可剥夺性资源,当系统把这类资源分配给某个进程后,再不能强行回收,只能再该进程用完后释放。

       2)竞争非剥夺性资源

          在系统中配置的非剥夺性资源,由于它们的数量不能满足诸进程运行时的需要,会使得进程在运行过程中,因竞争这些资源而陷入僵局。

       3)竞争临时性资源

          是指有一个进程产生,被另一个进程使用该、一个短暂时间后便无用的资源,故也称为消耗资源,它可能引起死锁。

 2.进程间推进顺序非法,进程在运行过程中,请求和释放资源的顺序不当,也同样会导致进程死。

       1)进程推进顺序合法

          由于进程在运行过程中具有异步的特性,

       2)进程推进顺序非法


产生进程死锁的必要条件:

 虽然进程在运行过程中可能产生死锁,但死锁的发生也必须具备一定的条件。

       1)互斥条件:指进程对所分配到的资源进行排他性使用,即在某段时间内某资源只有一个进程占有。如果此时还有其他进程请求该资源,则请求者只能等待,直至占有该资源的进程用毕释放。

       2)请求和保持资源:指进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源又被其他进程占有,此时请求进程阻塞,但又对其拥有的资源保持不放。

       3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完之后自己释放。

       4)环路等待条件:指在发生死锁时,必然存在一个进程——资源的环形链,即进程集合{P0,P1,P2,....Pn}中的P0正在等待一个P1占用的资源,P1正在等待P2占用的资源,............,Pn正在等待P0占用的资源。


 处理死锁的基本方法:

       1)预防死锁:这是一种较简单和直观的事先预防的方法。该方法是通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或几个条件。来预防发生死锁。

       2)避免死锁:该方法同样是事先预防的策略,但它不须事先采取什么限制来破坏产生死锁的四个必要条件,而是在资源的动态分配过程中,用某些方法防止系统进入不安全状态从而避免发生死锁。这种方法只需事先施加较弱的限制条件,便可获得较高的资源利用率和系统吞吐量。

       3)检测死锁:不必事先采取任何措施,也不必检测系统是否已经进入不安全状态,而是允许系统在运行过程中产生死锁,但可以通过系统设置的检验机构,及时检测出死锁的发生,并精确地确定与死锁有关的进程资源,然后采取适当的措施,清楚系统中的死锁。

       4)解除死锁:这是与检测死锁相配套的一种措施,当检测到系统中发生死锁时,需将进程从死锁中解脱出来,常用的方法是撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给处于阻塞状态的进程,以继续运行。




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值