Skip to content

检测和解除死锁

目录


参考资料:


如果在系统中,既不采取死锁预防措施,也未配有死锁避免算法,系统很可能会发生死锁。在这种情况下,系统应当提供两个算法:

  • 死锁检测算法。该方法用于检测系统状态,以确定系统中是否发生了死锁。
  • 死锁解除算法。当认定系统中已发生了死锁,利用该算法可将系统从死锁状态中解脱出来。

死锁的检测

为了能对系统中是否已发生了死锁进行检测,在系统中必须

  • 保存有关资源的请求和分配信息。
  • 提供一种算法,它利用这些信息来检测系统是否已进入死锁状态。

死锁的解除

如果利用死锁检测算法检测出在系统中已发生了死锁,则应立即采取相应的措施,以解除死锁。

最简单的处理措施就是立即通知操作员,请操作员来以人工方法处理死锁。

另一种措施则是利用死锁解除算法,把系统从死锁状态中解脱出来。常采用解除死锁的两种方法是:// 自动解决死锁问题

抢占资源法

从一个或多个进程中抢占足够数量的资源,分配给死锁进程,以解除死锁状态。

终止/撤消进程法

终止(或撤消)系统中的一个或多个死锁进程,直至打破循环环路,使系统从死锁状态解脱出来。

终止进程的方法有两种:

  • 终止所有死锁进程和逐个终止进程。终止所有死锁进程比较简单粗暴,全部终止即可。
  • 逐个终止进程方式,会考虑到进程终止的代价,终止进程时也会考虑进程的优先级,资源利用情况等,没有一个精确的度量标准,总之会比较复杂。

终止代价最小化

资源剥夺法

挂起某些死锁进程,并抢占它们的资源,分配给其它死锁进程,以解除死锁状态。

应当注意的是,这种方法可能会导致进程饥饿,因为被挂起的进程可能永远得不到资源。

进程回退法

将一个或多个进程回退到足以打破死锁环路的某一点,以解除死锁状态。进程退回时自愿释放资源而不是被抢占。

需要系统能够记录进程的历史信息,设置还原点,进程可以回退到还原点,然后重新运行。


在计算机中,所有求最优解的一个最大的问题是,计算机里边的东西是动态的,而我们往往使用静态的方式去思考问题,最终的结果就是,解决问题的方法很片面,或者说只能理论上可行。

比如,限定在一组数中去求解,对有限的数据进行分析,而实际情况却比这要复杂得多。事实是,我们不可能去全量论证一个问题的解,只能通过把动态的东西静态化,把复杂的东西简单化,一步一步去求解和探索规律。

————————————————
版权声明:本文为 田园幻想乡 的原创文章,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接: http://truraly.fun/课程笔记/操作系统原理/处理机调度与死锁/检测和解除死锁.html


发布时间:

最后更新时间:

Copyright © 2022 田园幻想乡 浙ICP备2021038778号-1