概念
一组进程的永久阻塞,或者是竞争系统资源,或者是通信顺序不当;到目前都没有有效的方法解决,只能尽量减少和规避。
单进程死锁
产生条件
必要条件
- 资源的互斥使用;
- 保持并等待;
- 不可剥夺;
充要条件
- 环路等待(前三个条件产生的结果,必然会引起死锁);
解决死锁
分析之后都不适用==
- 预防死锁:
- 间接方法:禁止前三个条件发生,
1. 互斥是资源的固有属性不能禁止;
2. 禁止保持并等待:要求进程一次性地申请其所需的全部资源,若系统中没有足够资源可分配则阻塞;不能实现的原因:创建进程的时候无法知道它运行所需的全部资源;就算知道,可能某类资源也正在被使用,使得该进程无法推进;就算资源可以被全部使用,但是运行期间也不一定会被全部使用(例如if else语句);所以效率很低。
3. 禁止不剥夺条件;若一个进程占用了某种资源,又要申请其他资源,则不能立即分配给它,必须让它首先释放出已占用的资源,然后重新申请;若一个进程申请的资源被另一个进程占用,OS可以剥夺低优先级权进程的资源分配给高优先权的进程。 - 直接方法:禁止环路等待条件,可以将系统的所有资源按类型不同进行线性排队,并赋予不同的序号,进程对某类资源的申请只能按照序列号递增的方式进行。
- 间接方法:禁止前三个条件发生,
避免死锁
关键在于为进程分配资源之前,首先通过计算,判断此次分配时都会导致死锁,只有不会导致死锁的分配才可实行;
银行家算法
条件
- 预先必须申请每个进程西药的资源总量;
- 进程之间相互独立,其执行顺序取决于系统安全,而非进程的同步要求;
- 系统必须提供固定数量的资源分配;
- 若进程占有资源,则不能让其退出系统;
检测死锁
检测死锁不同于预防死锁,不限制资源访问方式和资源申请;OS周期性的执行死锁检测例程,检测系统是否出现环路等待;
解除策略
- 中断所有死锁进程;
- 对一些进程来说,设置一些监测点checkpoint,从这些点上重新运行;
- 逐步解除一些死锁进程;
- 逐步剥夺进程一些资源;
选择解除进程要求
- 目前处理机花费时间执行最少的;
- 产出较少的进程;
- 剩余时间最长的;
- 资源已分配最少的;