死锁(Deadlock)是指多个进程因竞争资源而造成的一种互相等待的僵局。
死锁产生的原因
- 系统资源的竞争
- 进程推进顺序非法
死锁产生的必要条件(缺一不可)
- 互斥条件
- 不剥夺条件
- 请求并保持条件
- 循环等待条件
死锁与「饥饿」的区别
- 进入饥饿状态的进程可以只有一个,而死锁状态的进程必须大于等于两个
- 饥饿状态的进程可以是就绪进程(如静态优先权调度时的低优先权进程),而死锁状态的进程必定是阻塞进程
死锁的处理策略
- 死锁预防
- 避免死锁
- 死锁的检测及解除
死锁预防(静态策略)
- 破坏互斥条件
- 破坏不剥夺条件
- 破坏请求并保持条件:预先静态分配方法,一次申请所有资源
- 破坏循环等待条件:顺序资源分配法
死锁避免(动态策略)
系统安全状态:并非所有的不安全状态都是死锁状态,但处于不安全状态就有死锁的可能。
银行家算法
数据结构:
- 最大需求矩阵 Max
- 分配矩阵 Allocation
- 需求矩阵 Need:
Need = Max - Allocation
安全性算法使用工作向量 Work,逐个寻找能完成的进程并回收其资源,若能找出一个安全序列则系统处于安全状态。
死锁检测和解除
- 资源分配图
- 死锁定理:系统状态为死锁的充要条件是资源分配图不可完全简化
- 死锁解除方法:
- 资源剥夺法
- 撤销进程法
- 进程回退法