进程死锁详解(定义,死锁原因,死锁条件,死锁处理方法)

一:什么是进程死锁

1:定义:如果多个进程同时占有对方需要的资源而同时请求对方的资源,而在它们得到请求之前是不会释放自己所占有的资源,那么就会导致死锁的产生,也就是进程不能实现同步。

2:进程是具有一个独立功能的程序关于某个数据集合的一次运行活动。其基本状态有三种,即ready(就绪),runing(运行),wait(等待)。

3:死锁是指,在两个或多个并发进程中,如果每个进程持有某种资源而又等待别的进程释放他们现在保持着的资源。此时,每个进程都占有了一定的资源,但是又不能继续向前推进,执行后面的程序代码,称这一组进程产生了死锁。

二:产生死锁的原因

1:根本原因是系统能够提供的资源个数比要求该资源个数的进程少。

2:具体原因:(1):竞争资源(系统资源不足):当系统中供多个进程共享的资源,eg:打印机,公用队列,其数目不足以满足进程的需要,会引起诸进程的竞争而产生死锁。

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

三:死锁条件   

    死锁的每一次发生,必然都具备这四个以下条件:

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

2:请求与保持条件:指进程已经至少保持一个资源,但又提出来对新的资源的请求,而该资源已经被其它进程占用,此时请求进程阻塞,但又对自己已获得的资源保持不放。

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

4:循环等待条件:指发生进程死锁时,必然存在一个由进程组成的资源环形链。系统中的若干进程组成环路,该环路中的每个进程都在等待相邻的进程正占用的资源。

四:处理死锁的方法归结为以下四种:

1:预防死锁:事先预防的方法。通过设置某些限制条件,去破坏产生死锁的四个必要条件中的一个或几个,来预防发生死锁。该方法较易实现且已经广泛使用,但所施加的限制条件往往都会太严格,可能会导致资源利用率和系统吞吐量降低。

2:避免死锁:事先预防的方法。但它并不采用各种限制条件和措施去破坏产生死锁的四个必要条件,而是在资源动态分配的过程中,采用某种方法防止系统进入不安去区,从而避免发送死锁。

3:检测死锁:事先不采取任何限制措施,也不检查系统是否进入不安全区,该方法允许死锁发生。但可以通过系统设置的检测机构,及时检测出死锁的发生,并精确的确定与死锁有关的进程和资源,然后采取措施,将已经发生的死锁清除掉。

4:解除死锁:死锁的检测和解除措施,有可能使系统获得较好的资源利用率和吞吐量,但实现难度最大。

五:详解预防死锁

1:预防死锁:因为独占资源必须以互斥方式进行访问,所以预防死锁只能从破坏死锁条件后面的三个条件下手。

2:破坏互斥条件:破坏互斥条件即允许多个进程同时访问资源。由于多数资源的必须互斥访问这一固有特性不能改变,因此,死锁的预防通过破坏这个必要条件实现在很多场合是行不通 的。例如,打印机资源必须互斥使用,否则几个进程同时使用,每个进程各打印一行,这种输出信息的方式显然是不能被用户接受的。

3:破坏占有和等待条件: 采用资源静态分配法可破坏这一条件,该方法是指在进程运行前,一次性地请分配它运行所需的全部资源。若系统有足够的资源分配给某一进程,则一次性地将其所需资源分配给该进程,这样,在进程运行期间便不会再提出任何资源请求,从而使等待条件不成立。如果分配时有一种资源要求不能满足,则进程需要的其他资源也先不分配给进程,从而避免进程在等待期间占用任何资源,破坏了占用条件,从而避免死锁的发生。 该方法控制简单且容易实现,但由于进程运行期间对所需资源的全部占用,使得某些使用时间很短的资源被长时间占用,这样会严重影响系统资源的充分利用,导致资源利用率降低,同吋也影响到未获得全部资源的进程推迟运行。

4: 破坏不可剥夺条件: 采用剥夺式控制方法可以破坏该条件,该方法是使一个已保持了某些资源的进程,由于新的资源要求目前得不到满足,它必须先暂时释放已保持的所有资源(一种剥夺式),然后去等待,以后再一起向系统提出巾请,这样也能防止死锁。这种方法实现起来相对很难,为了保护进程自动放弃资源的现场以及后来的再次恢复,需要付 出高昂的代价,并且这种方法只适用于处理机和存储器资源,对其他资源,此法不宜使用。

5: 破坏循环等待条件: 采用资源顺序分配法可破坏该条件。这种分配方法的基本思想是:把系统的全部资源分成多个层次,一个进程得到某一层的一个资源后,它只能再请较高一层的资 源;当一个进程要释放某层的一个资源时,必须先释放所占有的较高层的资源;当一个进程获得了某一层的一个资源后,它想再申请该层中的另一个资源,就必须先 释放在该层中巳占有的资源。或者说,进程释放资源的顺序是按照中请资源的相反顺序进行的。这样可以预防循环等待现象的发生,因此不会发生死锁。使用该方法 要特別注意的问题是对资源所处层次的安排。在通常情况下,把各进程经常用到的、比较普遍的资源安排在较低的层次上,把重要且相对匮乏的资源安排在较高的层 次上,以便实现对各资源的最大限度的利用。该方法相对于前面介绍的方法,在资源利用率和系统吞吐量上都有明显的改善。但也存在一些缺陷。 (1)低层次的资源必须在进程请求分配髙层次的资源之前提前申请,这对于暂时不需使用的低层次资源来说,会因空闲等待而产生浪费。 (2)各类设备的资源层次一经设定,便不能经常随意改动,这就限制了新类型设备的增加。 (3)各资源的层次是按照大多数进程使用资源的顺序设置的。对于资源使用与此层次相闪配的进程,资源能得到有效的利用,否则,资源的浪费现象将仍然存在。 如果出现死锁,进程便永远不能完成,并且阻碍使用系统资源,阻止了其他作业开始执行。因此让系统进程不再出现死锁是那么的重要,需要引起我们的关注哦。

六:避免死锁和预防死锁的比较

死锁的预防是通过破坏产生条件来阻止死锁的产生,但这种方法破坏了系统的并行性和并发性。死锁产生的四个条件是死锁产生的必要条件,也就是死锁产生必须具备的条件,而不是存在这四个条件就一定产生死锁。那么逻辑上只要规避其中一个条件,死锁就不会产生,显然,规避第四个条件是可行的。死锁的预防支持多个进程并行执行,为了避免死锁,系统动态的确定是否分配一个资源给请求的进程。具体方法如下:

1:如果一个进程当前请求的资源会导致死锁,系统就拒绝启动该进程。

2:如果一个资源的分配会导致下一步的死锁,系统就拒绝本次的分配。显然要避免死锁,必须要事先知道系统拥有的资源数量及其属性。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值