检测和解除死锁
目录
参考资料:
如果在系统中,既不采取死锁预防措施,也未配有死锁避免算法,系统很可能会发生死锁。在这种情况下,系统应当提供两个算法:
- 死锁检测算法。该方法用于检测系统状态,以确定系统中是否发生了死锁。
- 死锁解除算法。当认定系统中已发生了死锁,利用该算法可将系统从死锁状态中解脱出来。
死锁的检测
为了能对系统中是否已发生了死锁进行检测,在系统中必须
- 保存有关资源的请求和分配信息。
- 提供一种算法,它利用这些信息来检测系统是否已进入死锁状态。
死锁的解除
如果利用死锁检测算法检测出在系统中已发生了死锁,则应立即采取相应的措施,以解除死锁。
最简单的处理措施就是立即通知操作员,请操作员来以人工方法处理死锁。
另一种措施则是利用死锁解除算法,把系统从死锁状态中解脱出来。常采用解除死锁的两种方法是:// 自动解决死锁问题
抢占资源法
从一个或多个进程中抢占足够数量的资源,分配给死锁进程,以解除死锁状态。
终止/撤消进程法
终止(或撤消)系统中的一个或多个死锁进程,直至打破循环环路,使系统从死锁状态解脱出来。
终止进程的方法有两种:
- 终止所有死锁进程和逐个终止进程。终止所有死锁进程比较简单粗暴,全部终止即可。
- 逐个终止进程方式,会考虑到进程终止的代价,终止进程时也会考虑进程的优先级,资源利用情况等,没有一个精确的度量标准,总之会比较复杂。
终止代价最小化
资源剥夺法
挂起某些死锁进程,并抢占它们的资源,分配给其它死锁进程,以解除死锁状态。
应当注意的是,这种方法可能会导致进程饥饿,因为被挂起的进程可能永远得不到资源。
进程回退法
将一个或多个进程回退到足以打破死锁环路的某一点,以解除死锁状态。进程退回时自愿释放资源而不是被抢占。
需要系统能够记录进程的历史信息,设置还原点,进程可以回退到还原点,然后重新运行。
在计算机中,所有求最优解的一个最大的问题是,计算机里边的东西是动态的,而我们往往使用静态的方式去思考问题,最终的结果就是,解决问题的方法很片面,或者说只能理论上可行。
比如,限定在一组数中去求解,对有限的数据进行分析,而实际情况却比这要复杂得多。事实是,我们不可能去全量论证一个问题的解,只能通过把动态的东西静态化,把复杂的东西简单化,一步一步去求解和探索规律。