操作系统7-死锁的检测和解除

时间:2024-05-21 17:02:43

7 死锁的检测和解除

7.1 死锁检测

  • 允许死锁发生,操作系统不断监视系统进展情况,判断死锁是否发生
  • 一旦死锁发生则采取专门的措施,解除死锁并以最小的代价恢复操作系统运行
7.1.1 检测时机
  • 定时检测
  • 当进程阻塞时检测死锁(其缺点是系统的开销大)
  • 系统资源利用率下降时检测死锁
7.1.2 检测方法(资源分配图法)
  • 二元组G=<V,E>

    • V:结点集,分为P,R两部分
      P={p1,p2,…,pn}
      R={r1,r2,…,rm}

    • E:边的集合,其元素为有序二元组<pi,rj> 或 <rj,pi>

操作系统7-死锁的检测和解除
图片叙述

  • 系统由若干类资源构成
  • 一类资源称为一个资源类
  • 每个资源类包含若干个同种资源,称为资源实例
  • 结点的表示法:

    • 资源类(资源的不同类型) 用方框表示
    • 资源实例(存在于每个资源类中) ,用方框中的黑圆点(圈)表示
      操作系统7-死锁的检测和解除
    • 进程 用圆圈中加进程名表示
      操作系统7-死锁的检测和解除
  • 边集中各边的含义:

    • 分配边 资源实例–>进程 的一条有向边 <rj,pi>
    • 申请边 进程–>资源类 的一条有向边 <pi,rj>

死锁定理:

  • 如果资源分配图中没有环路,则系统中没有死锁,如果图中存在环路则系统中可能存在死锁。
  • 如果每个资源类中只包含一个资源实例,则环路是死锁存在的充分必要条件。

资源分配图化简

  • 找一个非孤立、只有分配边的进程结点,去掉分配边,将其变为孤立结点;
  • 再把相应的资源分配给一个等待该资源的进程,即将某进程的申请边变为分配边;
  • 重复以上步骤,若所有进程都可成为孤立结点,称该图是可完全简化的,否则称该图是不可完全简化的。
    死锁状态的充分条件是:资源分配图是不可完全简化的

图例:
有环有死锁
操作系统7-死锁的检测和解除

有环无死锁
操作系统7-死锁的检测和解除

7.2 死锁的解除

重要的是以最小的代价解除死锁,恢复系统运行。方法如下:

  • 撤消所有的死锁进程
  • 连续撤消死锁进程直至不再存在死锁
  • 连续剥夺资源直到不再存在死锁
  • 把每个死锁进程备份到前面定义的某个检查点,并重新启动所有进程