银行家算法和安全性算法的区别 银行家算法

“银行家算法”是怎样的一个算法?银行家算法问题是研究一个银行家如何将其总数一定的现金安全地借给若干个顾客,使这些顾客既能满足对资金的要求,又能完成其交易,也使银行家可以收回自己的全部现金不致于破产 。银行家要求每个顾客必须在开始前说明它所需借款总额和顾客当前的借款总数不能超过开始时声明的所需最大借款总额数 。假如银行家能使他当前的全部顾客在有限的时间内完成他们的交易,那么当前的状态是安全的,反之状态是不安全的 。
银行家算法是什么?银行家算法=-- -
1. 安全状态: 在某时刻系统中所有进程可以排列一个安全序列:{P1,P2,`````Pn},刚称此时,系统是安全的.
所谓安全序列{P1,P2,`````Pn}是指对于P2,都有它所需要剩余资源数量不大于系统掌握的剩余的空间资源与所有Pi(ji)所占的资源之和.
2.不安全状态可能产生死锁.
目前状态 最大需求 尚需
P1 3 9 6
P2 5 10 5
P3 2 4 2
在每一次进程中申请的资源,判定一下,若实际分配的话,之后系统是否安全.
3.银行家算法的思路:
1),进程一开始向系统提出最大需求量.
2),进程每次提出新的需求(分期贷款)都统计是否超出它事先提出的最大需求量.
3),若正常,则判断该进程所需剩余剩余量(包括本次申请)是否超出系统所掌握的
剩余资源量,若不超出,则分配,否则等待.
4.银行家算法的数据结构.
1),系统剩余资源量A[n],其中A[n]表示第I类资源剩余量.
2),各进程最大需求量,B[m][n],其中B[j][i]表示进程j对i
类资源最大需求.
3),已分配资源量C[m][n],其中C[j][i]表示系统j程已得到的第i资源的数量.
4),剩余需求量.D[m][n],其中D[j][i]对第i资源尚需的数目.
5.银行家算法流程:当某时刻,某进程时,提出新的资源申请,系统作以下操作:
1),判定E[n]是否大于D[j][n],若大于,表示出错.
2),判定E[n]是否大于系统剩余量A[n],若大于,则该进程等待.
3),若以上两步没有问题,尝试分配,即各变量作调整.
4),按照安全性推测算法,判断,分配过后,系统是否安全,若安全,则实际分配,否则,撤消分配,让进程等待.
6."安全性检测"算法
1),先定义两个变量,用来表示推算过程的数据.
F[n]=A[n],表示推算过程中,系统中剩余资源量的变化.
J[n]=False表示推算过程中各进程是否假设"已完成"
2),流程:
在"剩余"的进程中(在推算)过程中,一些进程假设已完成,查找D[j][n]=F[n]的进程,找到后令J[j]=True
(假设该进程完成),F[n]+D[j][n](该进程所占资源释放),如此循环执行.
若最后,所有的F[n]=True(在推算过程中,所有进程均可以完成),则表示(分配过后)系统是安全的,否则系统是不安全的.
参考资料:
第三章 银行家算法(1)各类可利用资源的数量
u向量Available:(i1,i2,…,im),含m个元素,每个元素代表一类可利用的资源数目 。
u动态变化的,初始值是系统配置的该类资源的全部数目,值随资源的分配与回收而动态的改变 。
u实现:一维数组 。Available【j】=K,表示系统中Rj类资源现有可用数量为K个 。
(2)每个进程对每类资源的需求
最大需求、已获得的、还需要的
v最大需求矩阵Max
vn*m,系统中n个进程中每个进程分别对m类资源的最大需求 。
v取值:根据进程需求赋初始值 。
v实现:二维数组 。Max【i,j】=K,表示进程 i
需要Rj类资源的最大数目为K 。
算法过程:
就是对各进程的Request向量及资源数量进行一系列判断及值操作 。
进程Pi发出资源请求后,系统按下述步骤进行检查:
首先是两个基本判断:
(1)IF Requesti[j]= Need[i,j]
THEN转向步骤2;
ELSE认为出错,所需资源数超过宣布的最大值(自我矛盾)
(2)IF Requesti[j]= Available[j]
THEN转向步骤3;
ELSE表示尚无足够资源,Pi需等待(现实不满足)
如果上面两步判断都通过了,进入实质的资源分析
(3)系统试探着把资源分配给进程Pi
,并修改相应数据结构的值(假设性操作):
Available【j】=
Allocation【i,j】=
Need【i,j】=
(4)系统执行安全性算法,判断新的资源分配状态是否是安全的 。
即:找一个安全序列,使这些进程按顺序执行完)如果能够找到,则将假设操作真正实施完成资源分配 。
(1)需要一些记录信息的数据结构,设置两个向量:
v工作向量work
算法开始时work=Available;

秒懂生活扩展阅读