一、什么是死锁
多个进程占有并等待
死锁是指多个并发进程,各自持有资源又都等待别的进程释放所拥有的资源,在未改变这种状态之前不能向前推进,这种状态称为死锁,死锁产生的根本原因是系统资源不足。
二、死锁的必要条件
互斥、非抢占、占有并等待、循环等待
- 互斥:并发进程要求和占用的资源只能被一个进程使用
- 不可抢占:进程已经获得的资源,在未使用完成前,不可被剥夺
- 占有并等待:进程申请并等待新资源的过程中,继续占有已分配的资源
- 循环等待:若干进程形成首尾相接的循环链,循环等待上一个进程的资源
三、死锁预防
- 打破互斥
- 打破占有并等待:当系统能够满足当前进程的全部资源需求时,才一次性地将所申请的资源全部分配给该进程
- 打破非抢占:一个进程请求当前被另一个进程占用的一个资源时,操作系统可以抢占另一个进程,要求它释放资源
- 打破循环等待:采用资源有序分配,其基本思想是将系统中的所有资源顺序编号,将紧缺的,稀少的采用较大的编号,在申请资源时必须按照编号的顺序进行,一个进程只有获得较小编号的进程才能申请较大编号的进程
四、死锁避免
- 资源拒绝分配策略又称为银行家算法
资源拒绝分配策略又称为银行家算法,该策略能够保证系统中进程和资源总是处于安全状态。当进程请求一组资源时,假设同意该请求,从而改变了系统的状态,然后确定其结果是否还处于安全状态,如果是,则同意这个请求;否则阻塞该进程直到同意该请求后系统状态仍然是安全的。
五、死锁检测
六、死锁解除
- 取消所有死锁进程
- 回滚死锁进程到前面定义的某些检查点,然后重新启动所有进程
- 基于某种最小代价原则,连续取消死锁进程直到不再存在死锁
- 基于某种最小代价原则,连续抢占资源知道不存在死锁