推荐:如何预防和避免死锁?

2021年3月12日13:49:37 发表评论 762 次浏览

死锁特征

正如在

以前的帖子

, 死锁具有以下特征。

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

防止死锁

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

消除互斥

由于某些资源(例如磁带驱动器和打印机)本来就不可共享, 因此无法满足相互排斥的要求。

消除保留并等待

  1. 在开始执行之前, 将所有必需的资源分配给该进程, 这样就消除了保持和等待条件, 但这将导致设备利用率低下。例如, 如果某个进程在以后需要打印机, 并且在执行开始之前我们已经分配了打印机, 则打印机将一直处于阻塞状态, 直到完成执行为止。
  2. 释放当前资源集后, 该过程将对资源提出新的请求。该解决方案可能导致饥饿。
Holdnwait

消除任何抢占

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

消除循环等待

每个资源将被分配一个数字。一个进程可以请求增加/减少资源。编号顺序。

例如, 如果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
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

如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请发表评论。

木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: