银行家算法

银行家算法(Banker's Algorithm)是一个避免死锁(Deadlock)的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。
 
背景
    在银行中,客户申请贷款的数量是有限的,每个客户在第一次申请贷款时要声明完成该项目所需的最大资金量,在满足所有贷款要求时,客户应及时归还。银行家在客户申请的贷款数量不超过自己拥有的最大值时,都应尽量满足客户的需要。在这样的描述中,银行家就好比操作系统,资金就是资源,客户就相当于要申请资源的进程。
 
数据结构:

Process   进程编号      

Available  系统目前可分配出去的资源数

Work    现在分配给该进程的各类资源数

Allocation   最初已分配给该进程的各类资源数

Need  该进程还需要的各类进程数

Work+Allocation 该进程现在回收到的资源数,初值=Available ,也可以理解为系统目前可分配出去的的各类资源数

 

安全序列:

用系统的Avilable可各进程的Need作比较,编号从小到大开始比较

每当进程结束之后,其Allocation都需要回收

 

判断是否能满足某个进程的Request请求:

先做合法性判断假设满足,修改Avilable 和 该进程的 Allocation以及Need ,再寻找安全序列,若无安全序列则表示不能满足还进程的请求

 

posted @ 2019-01-07 16:54  Jwsmai  阅读(408)  评论(0编辑  收藏  举报