推荐(如何预防和避免死锁())

死锁特征
正如在
以前的帖子
, 死锁具有以下特征。

  1. 互斥
  2. 保持并等待
  3. 无抢占
  4. 循环等待
防止死锁
通过消除以上四个条件中的任何一个, 我们可以防止死锁。
消除互斥
由于某些资源(例如磁带驱动器和打印机)本来就不可共享, 因此无法满足相互排斥的要求。
消除保留并等待
  1. 在开始执行之前, 将所有必需的资源分配给该进程, 这样就消除了保持和等待条件, 但这将导致设备利用率低下。例如, 如果某个进程在以后需要打印机, 并且在执行开始之前我们已经分配了打印机, 则打印机将一直处于阻塞状态, 直到完成执行为止。
  2. 释放当前资源集后, 该过程将对资源提出新的请求。该解决方案可能导致饥饿。
推荐(如何预防和避免死锁())

文章图片
消除任何抢占
当其他高优先级进程需要资源时, 从进程中抢占资源。
消除循环等待
每个资源将被分配一个数字。一个进程可以请求增加/减少资源。编号顺序。
例如, 如果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 P11 2 2 1 P21 0 3 3 P31 2 1 0

Processes (maximum resources): A B C D P13 3 2 2 P21 2 3 4 P31 3 5 0

Need = maximum resources - currently allocated resources. Processes (need resources): A B C D P12 1 0 1 P20 2 0 1 P30 1 4 0

注意:避免死锁比避免死锁更为严格。
以下是盖茨上一年的问题
参考文献
https://en.wikipedia.org/wiki/Banker’s_algorithm
【推荐(如何预防和避免死锁())】如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请发表评论。

    推荐阅读