📜  预防和避免死锁

📅  最后修改于: 2021-05-24 18:10:04             🧑  作者: Mango

死锁特征
如前一篇文章所述,死锁具有以下特征。

  1. 互斥
  2. 保持并等待
  3. 无抢占
  4. 循环等待

防止死锁
我们可以通过消除以上四个条件中的任何一个来防止死锁。

消除互斥
由于某些资源(例如磁带驱动器和打印机)本来就不可共享,因此无法满足相互排斥的要求。

消除保留并等待

  1. 在开始执行之前,将所有必需的资源分配给该进程,这样就消除了保持和等待条件,但这将导致设备利用率低下。例如,如果某个进程在以后需要打印机,并且在执行开始之前我们已经分配了打印机,则打印机将一直处于阻塞状态,直到完成执行为止。
  2. 在释放当前资源集之后,该过程将对资源提出新的请求。该解决方案可能导致饥饿。

Holdnwait

消除任何抢占
当其他高优先级进程需要资源时,从进程中抢占资源。

消除循环等待
每个资源将被分配一个数字。一个过程可以请求增加/减少资源。编号顺序。
例如,如果P1进程被分配了R5资源,则下一次如果P1要求R4,小于R5的R3将不被允许,仅授予大于R5的资源。

避免死锁
可以使用Banker算法来避免死锁。

银行家算法
银行家算法是资源分配和避免死锁算法,用于测试流程对资源的所有请求,检查安全状态,如果在授予请求系统后仍保持安全状态,则允许该请求,如果没有安全状态,则拒绝不允许流程提出的要求。

银行家算法的输入:

  1. 每个流程的最大资源需求。
  2. 当前,由每个进程分配资源。
  3. 系统中可用的最大可用资源。

该请求将仅在以下条件下被批准:

  1. 如果该流程提出的请求小于等于该流程的最大需求。
  2. 如果进程提出的请求小于等于系统中的可用资源。

例子:

Total resources in system:
A B C D
6 5 7 6
Available system resources are:
A B C D
3 1 1 2
Processes (currently allocated resources):
    A B C D
P1  1 2 2 1
P2  1 0 3 3
P3  1 2 1 0
Processes (maximum resources):
    A B C D
P1  3 3 2 2
P2  1 2 3 4
P3  1 3 5 0
Need = maximum resources - currently allocated resources.
Processes (need resources):
    A B C D
P1  2 1 0 1
P2  0 2 0 1
P3  0 1 4 0

注意:防止死锁比避免死锁更为严格。

以下是盖茨上一年的问题
http://quiz.geeksforgeeks.org/gate-gate-cs-2014-set-1-question-41/
http://quiz.geeksforgeeks.org/gate-gate-cs-2014-set-3-question-41/
http://quiz.geeksforgeeks.org/gate-gate-cs-2010-question-46/

参考
https://zh.wikipedia.org/wiki/银行家的算法