死锁特征
正如在上一篇文章中所讨论的,死锁具有以下特征。
- 互斥
- 保持并等待
- 无抢占
- 循环等待
死锁预防
我们可以通过消除上述四个条件中的任何一个来防止死锁。
消除相互排斥
不可能不满足互斥,因为某些资源,例如磁带机和打印机,本质上是不可共享的。
消除保持和等待
- 在进程开始执行之前将所有需要的资源分配给进程,这种方式消除了保持和等待条件,但会导致设备利用率低。例如,如果一个进程稍后需要打印机,并且我们在其执行开始之前分配了打印机,则打印机将保持阻塞状态,直到它完成执行。
- 进程将在释放当前资源集后重新请求资源。此解决方案可能会导致饥饿。
消除无抢占
当其他高优先级进程需要资源时,从进程中抢占资源。
消除循环等待
每个资源都将被分配一个数字编号。进程可以请求增加/减少资源。编号顺序。
例如,如果 P1 进程被分配了 R5 资源,现在如果 P1 请求 R4,小于 R5 的 R3 这样的请求将不会被批准,只有超过 R5 的资源请求才会被批准。
死锁避免
银行家算法可以避免死锁。
银行家算法
银行家算法是资源分配和死锁避免算法,它测试进程对资源的所有请求,它检查安全状态,如果在授予请求后系统保持在安全状态它允许请求,如果没有安全状态它不’不允许进程提出的请求。
银行家算法的输入:
- 每个进程对资源的最大需求。
- 目前,由每个进程分配资源。
- 系统中最大可用资源。
只有在以下条件下才会批准该请求:
- 如果进程发出的请求小于等于该进程的最大需要。
- 如果进程发出的请求小于等于系统中免费可用的资源。
例子:
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