银行家算法(Banker's Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。
背景
在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。
数据结构:
Process 进程编号
Available 系统目前可分配出去的资源数
Work 现在分配给该进程的各类资源数
Allocation 最初已分配给该进程的各类资源数
Need 该进程还需要的各类进程数
Work+Allocation 该进程现在回收到的资源数,初值=Available ,也可以理解为系统目前可分配出去的的各类资源数
安全序列:
用系统的Avilable可各进程的Need作比较,编号从小到大开始比较
每当进程结束之后,其Allocation都需要回收
判断是否能满足某个进程的Request请求:
先做合法性判断假设满足,修改Avilable 和 该进程的 Allocation以及Need ,再寻找安全序列,若无安全序列则表示不能满足还进程的请求