📜  死锁预防和避免

📅  最后修改于: 2021-10-23 07:47:49             🧑  作者: Mango

死锁特征
正如在上一篇文章中所讨论的,死锁具有以下特征。

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

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

消除相互排斥
不可能不满足互斥,因为某些资源,例如磁带机和打印机,本质上是不可共享的。

消除保持和等待

  1. 在进程开始执行之前将所有需要的资源分配给进程,这种方式消除了保持和等待条件,但会导致设备利用率低。例如,如果一个进程稍后需要打印机,并且我们在其执行开始之前分配了打印机,则打印机将保持阻塞状态,直到它完成执行。
  2. 进程将在释放当前资源集后重新请求资源。此解决方案可能会导致饥饿。

等待

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

消除循环等待
每个资源都将被分配一个数字编号。进程可以请求增加/减少资源。编号顺序。
例如,如果 P1 进程被分配了 R5 资源,现在如果 P1 请求 R4,小于 R5 的 R3 这样的请求将不会被批准,只有超过 R5 的资源请求才会被批准。

死锁避免
银行家算法可以避免死锁。

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

银行家算法的输入:

  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

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

以下是 Gate 上一年的问题
https://www.geeksforgeeks.org/gate-gate-cs-2014-set-1-question-41/
https://www.geeksforgeeks.org/gate-gate-cs-2014-set-3-question-41/
https://www.geeksforgeeks.org/gate-gate-cs-2010-question-46/

参考
https://en.wikipedia.org/wiki/Banker’s_algorithm