七、死锁
1、死锁的概念
计算机中的资源分为两类:可抢占性资源和不可抢占性资源。
可抢占性资源:某些进程获得这些资源后该资源可以被系统剥夺或被其他进程抢占而不会产生破坏性的影响。
不可抢占性资源:某些进程获得这些资源后不能强行收回否则会导致进程计算失败。可进一步细化为不可抢占的软件资源和不可抢占的硬件资源,不可抢占的硬件资源在使用后由进程自行释放如打印机。不可抢占的软件资源经常在使用后就被消耗如信号,消息。
从死锁的角度来看,需要小心对不可抢占资源的竞争而使系统进入死锁状态。
死锁就是两个或两个以上的进程每个进程都在等待其中另一个进程释放资源而无法前进的现象,而且等待的资源系统已无法在提供(或已被占用),也无法由这些进程以外的其他进程提供或释放。
死锁将会严重浪费系统资源甚至导致整个系统瘫痪或崩溃。
——————
2、死锁发生的四个必要条件:
①互斥条件:系统存在临界资源,只能被某个进程使用若别的进程也需要,则要等待释放。
②保持与等待条件:允许进程在不释放已获取资源的情况下进入等待。
③不可抢占条件:某些资源在被进程获取后不能被系统剥夺也不能被其他进程抢占只能等待进程结束释放。
④循环等待条件:若干个进程形成环形链,链中每一个进程都在等待链中下一个进程占用的资源。
——————
3、死锁的检测和清除
死锁检测的时机:①周期性检测;②CPU利用率低时检测;③资源请求时检测。
死锁的清除方法:①资源抢占法;②进程回退法;③撤销进程法
——————
4、死锁的预防
①破坏互斥条件:允许进程共享资源或将资源增加到能满足所有进程。一般不可行。
②破坏保持与等待条件:破坏保持(释放使用到一半的资源可能造成错误)或破坏不等待的条件(降低资源利用率,系统无法提前预知需要多少资源)
③破坏不可抢占:实现复杂且具有致命缺点
④破坏循环等待:有序资源分配,可实现,不足:难以找到最优排序,设备需求增加需要重新编号,必须得到程序员的支持。
——————
5、死锁的避免
每次在资源分配前做检查,而后根据结果决定是否分配,即:先申请资源,若不满足则需等待,若满足,开始动态检查,若检查结果安全,才分配资源,使用、释放资源,若不安全则等待。
对安全与不安全的定义:
(1)从资源的角度看:①安全状态:从当前状态出发,如果操作系统能够给出一个方案,所有进程都能在有限时间内获得所声称需要的全部资源;②不安全状态与上一条相反,无法在有限时间内获得全部资源。
(2)从死锁的角度看:①安全状态:从当前状态出发至少存在一种方案可以避免最终进入死锁。②不安全状态:死锁状态或从当前状态出发,没有方案能够避免死锁。
实现死锁的动态避免还可以使用银行家算法。