银行家算法
银行家算法
银行家算法(Banker’s Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格・迪杰斯特拉在 1965 年为 T.H.E 系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。
背景
在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。
进程
Allocation Max Available |
我们会看到一个资源分配表,要判断是否为安全状态,首先先找出它的 Need,Need 即 Max (最多需要多少资源) 减去 Allocation (原本已经分配出去的资源),计算结果如下:
NEED |
然后加一个全都为 false 的字段
FINISH |
接下来找出 need 比 available 小的 (千万不能把它当成 4 位数 他是 4 个不同的数)
NEED Available |
P2 的需求小于能用的,所以配置给他再回收
NEED Available |
此时 P2 FINISH 的 false 要改成 true (己完成)
FINISH |
接下来继续往下找,发现 P3 的需求为 0002,小于能用的 2952,所以资源配置给他再回收
NEED Available |
依此类推,做完 P4→P1,当全部的 FINISH 都变成 true 时,就是安全状态。