码迷,mamicode.com
首页 > 其他好文 > 详细

【操作系统-死锁】死锁发生的条件是什么?死锁的避免和预防方法

时间:2019-11-05 21:20:32      阅读:251      评论:0      收藏:0      [点我收藏+]

标签:无法   mda   参与   限时   强制   通过   sof   设置   ros   

digest:本文章简要概述操作系统死锁的原因以及预防和解决方法。

1.死锁的定义

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种进程间相互阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。
                                                                ——汤小丹等.《计算机操作系统》:西安电子科技大学出版社,2012.9.

2.死锁产生的原因

2.1 系统资源的竞争,系统资源的竞争导致系统资源不足,以及资源分配不当,导致死锁。
2.2 进程运行推进顺序不恰当,进程在运行过程中,请求和释放资源的顺序不当,会导致死锁。

3.产生死锁的必要条件

互斥条件:一个资源每次只能被一个进程使用,即在一段时间内某 资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。
请求与保持条件:进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源 已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。
不可剥夺条件:进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能 由获得该资源的进程自己来释放(只能是主动释放)。
循环等待条件: 若干进程间形成首尾相接循环等待资源的关系
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。

4.死锁避免

系统对进程发出的每一个系统能够满足的资源申请进行动态检查,并根据检查结果决定是否分配资源,如果分配后系统可能发生死锁,则不予分配,否则予以分配,这是一种保证系统不进入死锁状态的动态策略。 如果操作系统能保证所有进程在有限时间内得到需要的全部资源,则系统处于安全状态否则系统是不安全的。

5.死锁的检测和解除

检测死锁:这种方法并不须事先采取任何限制性措施,也不必检查系统是否已经进入不安全区,此方法允许系统在运行过程中发生死锁。但可通过系统所设置的检测机构,及时地检测出死锁的发生,并精确地确定与死锁有关的进程和资源。检测方法包括定时检测、效率低时检测、进程等待时检测等。

解除死锁:采取适当措施,从系统中将已发生的死锁解除。这是与检测死锁相配套的一种措施。当检测到系统中已发生死锁时,须将进程从死锁状态中解除。常用的实施方法是撤销或挂起一些进程,以便回收一些资源,再将这些资源分配给已处于阻塞状态的进程,使之转为就绪状态,以继续运行。死锁的检测和解除措施,有可能使系统获得较好的资源利用率和吞吐量,但在实现上难度也最大。
解除死锁的具体方法有:
5.1、资源剥夺法
挂起某些死锁进程,并抢占它的资源,将这些资源分配给其他的死锁进程。但应防止被挂起的进程长时间得不到资源,而处于资源匮乏的状态。
5.2、撤销进程法
强制撤销部分、甚至全部死锁进程并剥夺这些进程的资源。撤销的原则可以按进程优先级和撤销进程代价的高低进行。
5.3、进程回退法
让一个或多个进程回退到足以回避死锁的地步,进程回退时自愿释放资源而不是被剥夺。要求系统保持进程的历史信息,设置还原点。

相关面试题目:
1.若系统中有五台打印机,有多个进程均需要使用两台,规定每个进程一次仅允许申请一台,则在不发生死锁的情况下至多允许______个进程同时参与竞争?
答案:4个,若5个进程同时参与竞争,则每个进程占用一台打印机,导致进程间请求与保持打印机资源,进而造成死锁,若4个进程进行竞争,则至少一个进程会得到足够打机资源,不会造成死锁。

【操作系统-死锁】死锁发生的条件是什么?死锁的避免和预防方法

标签:无法   mda   参与   限时   强制   通过   sof   设置   ros   

原文地址:https://www.cnblogs.com/Lints/p/11801559.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!