银行家算法
思想:银行在给企业办贷款的时候,企业会依据项目规模得出项目总需求金额向银行报备,同时企业往往会根据项目进度分期提出贷款请求,银行则会记录对于这些企业已贷款金额和银行自身剩余金额,结合企业完成项目还需金额,在下一次贷款前,会形成一个贷款计划,该计划保证了银行能够收回所有贷款(假设企业已贷款金额达到项目总需求金额,我们认为银行能够收回贷款),只有在该贷款计划达到目的时企业才能进行下次贷款,即在企业在申请贷款时,银行通过校验计算出在此次贷款后能否有一个满足条件的贷款计划,若不能则拒绝此次贷款申请。
提取出以上关键字:
项目总需求金额、这些企业已贷款金额、企业完成项目还需金额、银行自身剩余金额
提出贷款请求
贷款计划
我们可以抽象为:
int Claim[n,m]、int Allocation[n,m]、int Need[n,m]、int Available[m]
int Request[n]
安全进程序列
- int Claim[n,m]:记录每个进程所需各类资源的资源实例最大值。如果Claim[i,j]=k,则进程pi最多需要资源类rj中的k个资源实例
- int Allocation[n,m]:记录每个进程占有格资源类中的资源私立的数量。如果Allocation[i,j]=k,则进程pi占有资源类rj中的k个资源实例。初始时Allocation[i,j]=0
- int Need[n,m]:记录每个进程尚需各个资源类中的资源实例的数量。如果Need[i,j]=k,则进程pi尚需资源类rj中的k个资源实例。初始时Need=Claim
- int Available[m]:记录当前各类资源中资源实例的数量。如果Available[j]=k,则资源类rj当前有k个资源实例。初始时Available的值为系统资源总量
- int Request[n,m]:记录每个进程当前申请各个资源类的资源实例的数量。如果Request[i,j]=k,则进程pi申请资源类rj中的k个资源实例
- 安全进程序列为每个进程都能执行完的执行序列,不唯一
可知,贷款时需要资源分配算法和计算安全序列需要安全检测算法,则
银行家算法——资源分配算法:
银行家算法——安全检测算法:
int Work[m]:工作变量,记录可用资源
int Finish[n]:工作变量,记录进程可否执行完