定义(Deadlock):多个进程因竞争资源而造成的一种僵局,若无外力作用,这些进程将永远无法推进
产生的原因
- 竞争资源
- 进程推进顺序不合理
产生的必要条件
- 互斥条件Mutual exclusion
- 占有并等待Hold and wait
- 不可抢占No preemption
- 环路等待Circular wait
资源分配图
死锁的处理办法
- 设计无死锁的系统——系统运行前或运行中
① 死锁预防——破坏死锁存在的四个必要条件
② 死锁避免——保证系统随时处于安全状态 - 允许系统出现死锁,提供处理方法排除_系统或进程运行后
③ 死锁检测——通过化简资源分配图
④ 死锁恢复——通过破坏死锁的必要条件 - 忽视死锁
基本思想:破坏死锁发生的四个必要条件之一
四个必要条件:
- 互斥条件Mutual exclusion
- 占有并等待Hold and wait
- 不可抢占No preemption
- 环路等待Circular wait
方法1:
方法2:
基本思想:在执行过程中,采用一些算法规避不安全状态,确保系统始终处于安全状态。
题目:
解题思路:确保分配后仍然能不构成死锁
- 死锁检测的2个前提
① 保存有关资源的请求和分配信息;
② 提供一种检测系统是否已进入死锁的算法; - 资源分配图简化
① 如果化简后所有的顶点都成了孤立点,则称该图可完全化简;否则称该图是不可完全化简的。
② 若经过化简后还存在非孤立点,则非孤立点的进程处于死锁状态。
题目:
- 方法1——剥夺资源
从一部分进程剥夺资源给其他进程,直到死锁解除;
具体方法:一次终止—个进程直到死锁循环被解除
① 选择哪个进程?终止“代价最小”的进程
② 进程优先级?进程类型?
③ 已经完成的工作负载
④ 占用了多少资源?还需要多少资源? - 方法2——撤销进程
按照不同策略撤销一个或多个进程,回收资源给其他进程,直到死锁解除;
具体考虑问题:
① 选择—个牺牲品:确定抢占顺序以使代价最小。
② 回滚:抢占资源,将进程回滚到某个安全状态。
③ 饥饿:防止进程饥饿,让进程有限地被选定。
- 死锁的产生必须满足四个必要条件;
- 可以采用不同的方法处理死锁:
① 死锁预防:破坏必要条件
② 死锁避免:银行家算法
③ 死锁检测:资源分配图简化
④ 死锁恢复:两种方法。。。 - 死锁的各种处理方法都有一定的局限性,采用综合方法处理死锁在一定程度上能解决由于这些局限而造成的问题。
- UNIX内核中的死锁处理是如何做的?
- 采用线程后,在单线程的进程中会不会发生死锁?



