死锁特征
正如在
以前的帖子
, 死锁具有以下特征。
防止死锁
通过消除以上四个条件中的任何一个, 我们可以防止死锁。
消除互斥
由于某些资源(例如磁带驱动器和打印机)本来就不可共享, 因此无法满足相互排斥的要求。
消除保留并等待
- 在开始执行之前, 将所有必需的资源分配给该进程, 这样就消除了保持和等待条件, 但这将导致设备利用率低下。例如, 如果某个进程在以后需要打印机, 并且在执行开始之前我们已经分配了打印机, 则打印机将一直处于阻塞状态, 直到完成执行为止。
- 释放当前资源集后, 该过程将对资源提出新的请求。该解决方案可能导致饥饿。
消除任何抢占
当其他高优先级进程需要资源时, 从进程中抢占资源。
消除循环等待
每个资源将被分配一个数字。一个进程可以请求增加/减少资源。编号顺序。
例如, 如果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
注意:避免死锁比避免死锁更为严格。
以下是盖茨上一年的问题
参考文献
https://en.wikipedia.org/wiki/Banker’s_algorithm
如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请发表评论。