银行家算法说明

来源:互联网 发布:java 什么是包 编辑:程序博客网 时间:2024/06/09 23:41

原有的银行家算法的说明不太清楚,根据自己的理解进行修订:

银行家算法可归纳如下:

(1)当一个用户对资金的最大需求量不超过银行家全部资金(可用+已借贷)时,就可以接纳该用户,但需要根据当前需求量继续判断是否可立即接纳,还是推迟接纳。

(2)用户可以分期贷款,但贷款总数不能超过最大需求量。

(3)当银行家现有的资金不能满足用户当下申请的资金(满足条件2)时,推迟支付,但应总能使用户在有限的时间内得到贷款。

(4)当银行家现有的资金能满足用户当下申请的资金时,但不满足该用户的全部剩余需求时,需要判断银行家是否能够找到一个支付序列,保障所有用户最终在有限时间内得到贷款。

(5)当银行家现有的资金能满足用户当下申请的资金,且能满足该用户全部剩余需求时,需要判断银行家是否能够找到一个支付序列,保障所有用户最终在有限时间内得到贷款(这一点需要继续研究需要执行安全检查的必要性,找到一个反例)。

(6)当用户得到所需的全部资金后,一定能在有限的时间内归还所有的资金。


算法设计:

操作系统:银行家

进程:用户

操作系统管理的资源:资金

进程请求资源:用户向银行借贷资金

数据结构:

可用资源向量 Avaliable[];

最大需求矩阵:Max[][];

已分配资源矩阵:Allocation[][];

剩余资源需求矩阵:Need[][];

当前请求向量: Request[];

算法描述:

当进程Pi发出资源请求后,系统按照如下步骤进行检查:

(1)若Request[i]<need[i][],则执行步骤(2),否则系统告知申请资源数已超过进程要求的最大值报错;

(2)若Request[i]<Avaliable[],则执行步骤(3),否则系统会因为尚无足够可用的资源满足Pi的申请而使进程Pi等待;

(3)系统试探把资源分配给进程Pi,并修改相关数据结构数据:

Avaliable[]=Avaliable[]-Request[];

Allocation[i][]=Allocation[i][]+Request[i];

Need[i][]=Need[i][]-Request[i];

(4) 系统执行安全算法,检查此次资源分配后,系统是否处于安全状态。若是,则系统才真正将资源分配给Pi,否则系统将试探分配作废,恢复原来的资源分配状态,让Pi等待。

安全算法:

 work:可用资源向量:

 finish:状态向量:

 (1)  work[]=Avaliable[];

finish[]={false,false,...,false};

(2)找到一满足下列条件的进程,finish[i]=false & need[i]<=work[];,若能够找到,跳转到步骤(3),找不到符合条件的进程,跳转到步骤(4);

  (3) work[]=work[]+allocation[i][]; finish[i]= true;跳转到步骤(2)

  (4) 判断是否所有的finish[i]=true,若是,则系统处于安全状态,否则,系统处于不安全状态。



0 0
原创粉丝点击