死锁

死锁的必要条件

  1. 资源互斥。
  2. 占有且等待:进程占有的资源在任务完成前不会主动释放。
  3. 不可抢占:进程不会强制抢占其他进程的资源。
  4. 循环等待。

死锁避免

在分配资源前看是否满足全部条件,不满足则不分配。(银行家算法。)

检测死锁

画出资源分配图,检测是否存在环路。检测环路前要将资源分配图化简,化简的原理是“满足所有资源的进程,迟早能够执行完成释放资源”。因此,可以其资源回收,使之成为孤立结点,然后将所回收的资源分配给其它进程。循环此过程,直到无法化简。若仍存在环路,则该系统目前处于死锁状态。

检测到死锁后,需要解除死锁。

解除死锁

破坏除了“互斥条件”之外的其他三个条件:

  • 回退执行:系统定期对各个进程进行检查,将检查点的有关信息写入文件。死锁时,让某占有必要资源的进程回退到取得资源之前的一个检查点,释放的资源分配给一个死锁进程(破坏“占有且等待”
  • 抢占资源:剥夺占有进程的资源,分配给另外某些进程,直至死锁环路被打破(破坏“不可抢占”
  • 杀掉进程:一次终止一个进程,直至消除死锁环路(破坏“循环等待”
posted @ 2024-02-29 13:13  hellozhangjz  阅读(9)  评论(0编辑  收藏  举报