一、死锁的概念
1.死锁的概念
系统中两个或两个以上的进程无限期地相互等待永远不会发生的条件,系统处于一种停滞状态,这种情况称为死锁。
2.死锁产生的原因
(1)进程推进顺序不当
(2)对互斥资源的分配不当[并不是资源不足,但是剩余资源不足是有可能产生死锁的]。
必须要指出的是,系统资源不足并不是产生死锁的原因,进程资源如果不足则进程就不会被创建,只有在资源部分分配以后,剩余的资源不能满足某些个进程的请求,造成进程集无法推进的现象才是死锁。
3.产生死锁的四个必要条件[必须满足四个条件,才有可能产生死锁]
互斥条件: 任一时刻只允许一个进程使用资源。
非剥夺条件: 进程已经占用的资源,不会被强制剥夺。
占用并请求条件: 进程占有部分资源,申请更多的资源,且不会释放已经占有的资源。
循环等待: 请求资源的进程形成了循环。
二、死锁处理策略
对死锁的处理,常用的方法有:忽略死锁、死锁的检测与恢复、死锁的避免和死锁的预防。
1.死锁忽略
死锁忽略最典型的算法是鸵鸟算法。
2.死锁检测和恢复
死锁的检测方法:
1).资源分配图算法
2).资源矩阵法
恢复死锁常用的方法:
方法 | 功能 |
---|---|
资源剥夺法 | 挂起某些死锁进程,并抢占它的资源。 |
进程撤销法 | 通过撤销占有资源多的进程或代价量小的进程,以恢复死锁。 |
进程回退法 | 设置还原点,让一个或多个进程回退到足以解除死锁的地步。 |
重新启动系统 | 代价最大,一切从头开始。我们要尽量避免采用此方法。 |
3.死锁避免
1).安全与不安全状态
某一时刻,系统能按某种顺序为每个进程分配其所需资源,使每个进程都能顺利地完成,则称此时系统处于安全状态。反之,称之为不安全状态。
2).银行家算法
银行家算法问题描述是:一个银行家把他的固定资金借给若干顾客,使这些顾客能满足对资金的要求又能完成其交易,也使银行家可以收回全部的现金。只要不出现一个顾客借走所有资金后还不够、还需要借贷,则银行家的资金应是安全的
银行家算法示例
4.死锁预防
所谓死锁预防,就是采用某种策略,限制并发进程对资源的请求,使系统在任何时刻都不满足死锁的四个必要条件。死锁预防主要是针对破坏四个必要条件进行的。
条件 | 方法 |
---|---|
破坏互斥条件 | 某些设备可以通过SPOOLING系统将独享设备改造成为共享设备,以此可以解决互斥问题,例如打印机。 |
破坏非剥夺条件 | 资源暂时释放策略,申请新的资源得不到满足则暂时释放已有的资源。 |
破坏占用并请求条件 | 一次性申请全部资源。 |
破坏循环等待条件 | 资源有序申请,给资源编号,使用时按升序进行 |
原文地址:http://blog.csdn.net/zjf280441589/article/details/37954665