先决条件——死锁检测和恢复
当死锁检测算法确定系统中发生了死锁时,系统必须从该死锁中恢复。有两种打破死锁的方法:
1. 流程终止:
为了消除死锁,我们可以简单地杀死一个或多个进程。为此,我们使用两种方法:
- (一种)。中止所有死锁进程:
中止所有进程肯定会打破僵局,但代价很大。死锁的进程可能已经计算了很长时间,这些部分计算的结果必须被丢弃,并且有可能在以后重新计算它们。 - (b)。一次中止一个进程,直到消除死锁:
一次中止一个死锁进程,直到从系统中消除死锁循环。由于这种方法,可能会有相当大的开销,因为在中止每个进程后,我们必须运行死锁检测算法来检查是否有任何进程仍然处于死锁状态。
2.资源抢占:
为了使用资源抢占消除死锁,我们从进程中抢占一些资源并将这些资源提供给其他进程。这种方法会引发三个问题——
- (一种)。选择受害者:
我们必须确定要抢占哪些资源和哪些进程,以及最小化成本的顺序。 - (b)。回滚:
我们必须确定应该对资源被抢占的进程做什么。一个简单的想法是完全回滚。这意味着中止进程并重新启动它。 - (C)。饥饿:
在系统中,可能会发生始终选择相同进程作为受害者的情况。因此,该流程将永远无法完成其指定的任务。这种情况称为饥饿,必须避免。一种解决方案是,一个进程必须被选为受害者的次数有限。