死锁

  1. 死锁的定义

    在一组进程发生死锁的情况下,这组死锁进程中的每一个进程,都在等待另一个死锁进程所占有的资源。或者说每一个进程所等待的事件是该组进程释放所有占有的资源。但由于所有的这些进程都已无法运行,因此谁也不能释放资源,致使没有任何一个进程可被唤醒。这样,这组进程只能无限期地等待下去。因此,死锁可定义为:如果一组进程中的每一个进程都在等待由该组进程中的其他进程才能引发的事件,那么该组进程是死锁的。


    注:一个进程也可以引起死锁。当某个进程已或得锁,但因操作有误,需要申请锁,而进程又不释放锁,此时造成死锁。


2.  产生死锁的必要条件

    虽然进程在运行过程中可能发生死锁,但产生进程死锁的必须同时具备以下4个条件,只要有一个条件不成立,死锁就不会发生。

    <1> 互斥条件。即在一段时间内,某资源只能被一个进程占有。若还有其他进程请求资源,则请求         进程只能等待,直至占有该资源的进程释放。

    <2> 请求与保持等待。进程已保持了至少一种资源,但又提出新的资源请求,而该资源又被其他进         程占有,此时进程请求被阻塞,但对自己所占有的资源并不释放。

    <3> 不可抢占资源。进程已获得的资源在未使用完前不能被抢占,只能在进程使用完后自己释放。

    <4> 循环等待。在发生死锁时,必然存在进程-资源的循环链。若进程集合{P0,P1,P2}中,P0正在等         待P1所占的资源,P1等待P2所占的资源,P2等待P0所占的资源。


3.  处理死锁的办法

    <1> 预防死锁

    产生死锁必须同时满足以上4个必要条件,只要有一个不满足,死锁便不会发生。所以,处理死锁只需破坏4个必要条件即可。

    <2> 避免死锁

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

    <3> 检测死锁

    这种方法无须事先采取任何的措施,允许进程在运行时发生死锁。但可以通过检测机构及时地检测出死锁的发生,然后采取适当的措施,将进程从死锁中解脱出来。

    <4> 解除死锁

    当检测到系统中已发生死锁,就需要采取相应的措施,将进程从死锁中解脱出来。常用的方法是撤销一些进程,回收它们的资源,将它们分配给已处于阻塞状态的进程,使其继续运行。还有一种方法就是终止进程。    

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章