浅谈操作系统——死锁的检测与解除

245 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情

今天就要结束处理机调度这一板块了,最重要的知识点在前面,这一篇了解掌握即可

死锁检测

  • 允许死锁发生,操作系统不断监视系统进展情况,判断死锁是否发生
  • 一旦死锁发生则采取专门的措施,解除死锁并以最小的代价恢复操作系统运行

检测时机

  • 定时检测
  • 当进程阻塞时检测死锁(缺点是系统的开销大)
  • 系统资源利用率下降时检测死锁

检测方法:资源分配图法

  • 一个二元组G=<V,E>
    • V:结点集,分为P,R两部分 P={p1,p2,...,pn} R={r1,r2,...,rn}
    • E:边的集合,他的元素是有序二元组<pi,rj>或者<rj,pi>
  • 系统由若干类资源构成
  • 一类资源称为一个资源类
  • 每个资源类包含若干个同种资源,称为资源实例

结点的表示方法

  • 资源类(资源的不同类型):用方框表示
  • 资源实例(存在于每个资源类中);用方框中的黑圆点(圈)表示
  • 进程:用圆圈中加进程名

边集中各边的含义

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

image.png

死锁定理

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

资源分配图简化

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

死锁状态的充分条件是:资源分配图是不可完全简化的

有环有死锁

image.png

有环无死锁

image.png

死锁的解除

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

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

关于处理机调度和死锁的相关内容就是这些了,还是要打好基础,操作系统前后还是比较有关联,死锁是经常提到的一环,所以是很重要的。