银行家算法
银行家算法是一个避免死锁的著名算法,是由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计的一种避免死锁产生的算法。它以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。怎么想?其实就是借钱(其中钱的种类有很多而且不一样)和还钱!
数据结构
首先先看看以下几个定义量
可利用资源Avaliable
姑且就称之为银行要放的贷!
其中我们把Available[j]=K
,称为系统中现有j类资源K个。(这里可以理解为某类钱有多少)
最大需求矩阵Max
系统中n个进程中的每一个进程对m类资源的最大需求。
如果Max[i,j]=K
,则表示进程i需要j类资源的最大数目为K。(这里可以理解为借贷的人之中的叫i的人所需要的j类钱的最大数目为K)
分配矩阵Allocation
系统中每一类资源当前已分配给每一进程的资源数。
如果Allocation[i,j]=K
,则表示进程i当前已分得j类资源的数目为K。(借贷的某个人所借到的j类钱的数量为K)
需求矩阵Need
用以表示每一个进程尚需的各类资源数。
如果Need[i,j]=K
,则表示进程i还需要j类资源K个,方能完成其任务。(借贷的某个人所需要的j类钱减轻当前所借到的j类钱的数量)
即Need[i,j]=Max[i,j]-Allocation[i,j]
。
为保证资金的安全,银行家规定:
1. 当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客;
2. 顾客可以分期贷款,但贷款的总数不能超过最大需求量;
3. 当银行家现有的资金不能满足顾客尚需的贷款数额时,对顾客的贷款可推迟支付,但总能使顾客在有限的时间里得到贷款;
4. 当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金.