死锁产生的的四个必要条件
作者:互联网
死锁产生的的四个必要条件
1.互斥条件
某一种资源一次只允许一个进程占有,也就是当资源被分配后,其他进程就无法访问该资源,直到当前占有资源的进程访问结束。
2.请求与保持条件
一个进程因请求某一资源而进入阻塞队列而等待,没有释放本身进程就占有的资源。
3.不剥夺条件
进程占有资源之后,在对该资源没有使用完之前,不能强行剥夺。
4.循环等待条件
多个进程之间形成一种头尾相接的循环等待资源关系。
破坏产生死锁的条件
1.破坏“请求与保持条件”
方法一:所有进程运行开始之前,必须一次性申请其在整个运行期间所需要的资源。
优点:简单、易操作、安全。
缺点:进程的资源申请变困难,会使进程无法启动,资源利用率低,使进程出现饥饿现象。
方法二:允许程序只申请最开始需要的一些资源并开始启动,在执行之后,及时释放掉已经使用过的资源,再去请求新资源,这样可以提高资源利用率。
2.破坏“不剥夺条件”
当一个进程已经占有一些资源,再去申请新的资源而没有得到满足,则必须要释放掉所有自己已经占有的所有资源,这样就相当于这些资源是被剥夺掉的,从而破坏了“不剥夺条件”。
缺点:实现起来复杂,代价较大,释放掉所有资源可能使该进程无法正常进行下去,影响进程的周转周期,降低吞吐量。
3.破坏“循环等待条件”
只申请资源编号比进程编号大的资源(是为按单调递增或单调递减的序号去申请资源),可以防止资源请求形成一个首尾相接的环。
需要注意的是,“互斥条件”的破坏只有在资源可以共享的情况下,而资源的访问一般都是互斥的,所以在此省略。
破坏死锁产生的四个必要条件就是预防死锁。
避免死锁
方法一:如果一个进程的请求会导致死锁,那么就不启动该进程。
方法二:如果一个进程请求增加的资源会导致死锁,那么就拒接该资源请求。
银行家算法:
避免死锁的优点:不需要死锁预防中的抢占和重新运行进程,并且比死锁预防的限制要少。
死锁避免的限制:
1)必须事先声明每个进程请求的最大资源量
2)考虑的进程之间是必须无关的,也就是说,它们执行的顺序必须没有任何同步要求的限制
3)分配的资源数目必须是固定的
4)在占有资源时,进程不能退出
死锁的检测
资源分配图形成一个环,那么会形成死锁。需要注意的是资源分配的弧(边)要进行简化,即是否可以满足。
遍历每个节点,以每个结点为根节点去遍历子节点,若访问到相同的结点那么就是存在死锁。
死锁的解除
1)抢占:将某一资源从一个进程给另一个进程使用之后再给送回。
2)回滚:周期性对进程进行检查点检查,即将进程的状态写入一个文件以备以后重启,包括存储映象、资源状态,即哪些资源分配给了哪些进程。新的检查点不覆盖原有的文件,而是写到新文件中。检测到死锁时,从一个较早的检查点开始,将该进程复位到更早的状态。
3)杀死进程:杀死环中的一个或多个进程;杀死一个环外的进程以释放该进程的资源。(最好杀死可以从头开始重新运行且不会带来副作用的进程)
标签:请求,占有,死锁,必要条件,条件,进程,四个,资源 来源: https://www.cnblogs.com/secuy/p/15988561.html