死锁的必要条件
- 资源互斥。
- 占有且等待:进程占有的资源在任务完成前不会主动释放。
- 不可抢占:进程不会强制抢占其他进程的资源。
- 循环等待。
死锁避免
在分配资源前看是否满足全部条件,不满足则不分配。(银行家算法。)
检测死锁
画出资源分配图,检测是否存在环路。检测环路前要将资源分配图化简,化简的原理是“满足所有资源的进程,迟早能够执行完成释放资源”。因此,可以其资源回收,使之成为孤立结点,然后将所回收的资源分配给其它进程。循环此过程,直到无法化简。若仍存在环路,则该系统目前处于死锁状态。
检测到死锁后,需要解除死锁。
解除死锁
破坏除了“互斥条件”之外的其他三个条件:
- 回退执行:系统定期对各个进程进行检查,将检查点的有关信息写入文件。死锁时,让某占有必要资源的进程回退到取得资源之前的一个检查点,释放的资源分配给一个死锁进程(破坏“占有且等待”)
- 抢占资源:剥夺占有进程的资源,分配给另外某些进程,直至死锁环路被打破(破坏“不可抢占”)
- 杀掉进程:一次终止一个进程,直至消除死锁环路(破坏“循环等待”)