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