银行家算法及流程图

来源:美国移民 发布时间:2020-10-17 点击:

 银行家算法及流程图 算法的实现 一、 初始化 由用户输入数据,分别对可利用资源向量矩阵 AVAILABLE 最大需求 矩阵 MAX 分配矩阵 ALLOCATION 需求矩阵 NEED 武值。

 二、 银行家算法 在避免死锁的方法中,所施加的限制条件较弱,有可能获得令人满意的系统 性能。在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始 终都处于安全状态,便可以避免发生死锁。

 银行家算法的基本思想是分配资源之前 , 判断系统是否是安全的 ; 若是,才分 配。它是最具有代表性的避免死锁的算法。

 设进程 cusneed 提出请求 REQUEST ,则银行家算法按如下规则进行判断。

 ⑴

 如果 REQUEST [cusneed] [i]<= NEED[cusneed][i],则转(2);否则, 出错。

 (2) 如果 REQUEST [cusneed] [i]v= AVAILABLE[cusneed][i],则转(3);否 贝 U,出错。

 (3) 系统试探分配资源,修改相关数据:

 AVAILABLE[i]-=REQUEST[cus need][i]; ALLOCATION[cus need][i]+=REQUEST[cus need][i]; NEED[cus need][i]-=REQUEST[cus need][i]; (4) 系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废, 系统恢复原状,进程等待。

 三、 安全性检查算法 (1) 设置两个工作向量 Work=AVAILABLE;FINISH (2) 从进程集合中找到一个满足下述条件的进程, FINISH==false; NEED<=Work; 如找到,执行⑶;否则,执行(4) (3) 设进程获得资源,可顺利执行,直至完成,从而释放资源。

 Work+=ALLOCATION; Fini sh=true; GOTO 2 ⑷如所有的进程 Finish= true ,则表示安全;否则系统不安全。

 各算法流程图 初始化算法流程图:

 诃鈴化 LIZ 汕 Lil i: JT5f:

 输入蛍源的种类“ 输入各个僧源现冇苗数H 初船化岡数 InitO 结束 银行家算法流程图: 输入进稈的数 Hui 輛人毎个址桎 L 旳 Mi 略 源数一十 A 输出提亦;嗡入有泯,请 * 朿新输人

 r/.Ml Wi 7; il FEqirsr[i]. 川」OC 即 lOOMiKST「门; 邓 EETil =KE 腿睜 1「订;

 *YM \

 Allir"il ib<JI -> J r> ]; ALDOcmoK H ]- 牺qus?r[ i i ; XR-II " O >:(]! "?■ I f ■ 1 :

 安全性算法流程图:楫卅谄求氏即*1"【订 •出摊示|阿倉井闵崭城!

 using n amespace std; #define MAXPROCESS /*最大进程数*/ #define MAXRESOURCE 100 int AVAILABLE[MAXRESOURCE]; 可用资源数组*/ int MAX[MAXPROCESS][MAXRESOURCE]; 阵*/ int ALLOCATION[MAXPROCESS][MAXRESOURCE]; int NEED[MAXPROCESS][MAXRESOURCE]; int REQUEST[MAXPROCESS][MAXRESOURCE]; /*最大资源数*/ /* /*最大需求矩 /*分配矩阵*/ /*需求矩阵*/ /*进程需要资源数 bool FINISH[MAXPROCESS]; 系统是否有足够的资源分配*/ /*

 int p[MAXPROCESS]; /*记录序列*/ int m, n; /*m 个进程,n 个资源*/ void Ini t(); bool Safe(); void Ban k(); int main() { In it(); Safe(); Ba nk(); } void Init() /*初始化算法*/ { int i,j; coutvv"请输入进程的数目 :

 " ; cin»m; coutvv"请输入资源的种类:"; cin»n; coutvv"请输入每个进程最多所需的各资源数 , 按照"vvm<v"x"vv*<"矩 阵输入"<<e ndl; for(i=0;i<m;i++) for(j=0;j <n ;j++) cin»M AX[i][j]; coutvv"请输入每个进程已分配的各资源数 , 也按照"vvm<v"x"vv*<"矩 阵输入"vve ndl; for(i=0;ivm;i++) { for(j=0;j vn ;j++) { cin> >ALLOCATION[i][j]; NEED[i][j]=MAX[i][j]-ALLOCATION[i][j]; if(NEED[i][j]v0) { coutvv"您输入的第"vvi+1vv"个进程所拥 有的第"vvj+1vv"个资源数错误 , 请重新输入:"vvendl; j__ ; con ti nue; } } }

 _________________________________________________________

 coutvv"请输入各个资源现有的数目:"<<endl; for(i=0;i< n;i++) { cin >>AVAILABLE[i]; } } void Bank() /*银行家算法*/ { int i,cus need; char aga in; while(1) { coutvv"请输入要申请资源的进程号 ( 注 :

 第 1 个进程号为 0,依 次类推)"<<e ndl; cin> >cus need; coutvv"请输入进程所请求的各资源的数量"<<endl; for(i=0;i< n;i++) { cin >>REQUEST[cus need][i]; } for(i=0;i< n;i++) { if(REQUEST[cus need][i]>NEED[cus need][i]) { coutvv"您输入的请求数超过进程的需求 量!请重新输入!"vvendl; con ti nue; } if(REQUEST[cus need][i]>AVAILABLE[i]) { coutvv"您输入的请求数超过系统有的资源 数!请重新输入!"vvendl; con ti nue; } } for(i=0;iv n;i++) { AVAILABLE[i]-=REQUEST[cus need][i]; ALLOCATION[cus need][i]+=REQUEST[cus need][i]; NEED[cus need][i]-=REQUEST[cus need][i]; } if(Safe()) { coutvv"同意分配请求!"vvendl;

 } else { cout«"您的请求被拒绝!"<<endl; for(i=0;i< n;i++) { AVAILABLE[i]+=REQUEST[cus need][i]; ALLOCATION[cus need][i]-=REQUEST[cus ne ed][i]; NEED[cus need][i]+=REQUEST[cus need][i] 5 } } for(i=0;i<m;i++) { FINISH[i]=false; } coutvv"您还想再次请求分配吗 ? 是请按 y/Y,否请按其它键 "<<e ndl; cin> >aga in; if(agai n= 二 "y"||agai n= 二 "Y") { con ti nue; } break; } } bool Safe() /*安全性算法*/ { int i,j,k,l=0; int Work[MAXRESOURCE]; /* 工作数组 */ for(i=0;i< n;i++) Work[i]=AVAILABLE[i]; for(i=0;i<m;i++) { FINISH[i]=false; } for(i=0;i<m;i++) { if(FINISH[i]==true) con ti nue; } else

 { for(j=0;j< n;j++) { if(NEED[i][j]>Work[j]) { break; } } if(j==n) { FINISH[i]=true; for(k=0;k< n;k++) { Work[k]+=ALLOCATION[i][k]; } p[l++]=i; i=-1; } else { con ti nue; } } if(l==m) { coutvv"系统是安全的"<<endl; coutvv"安全序列:"<<endl; for(i=0;i<l;i++) { cout<<p[i]; if(i!=l-1) { cout<<"-->"; } } cout<<""<<e ndl; return true; } } coutvv"系统是不安全的"<<endl; return false; }

推荐访问:银行家 流程图 算法
上一篇:揭阳市政府采购(协议供货)项目资金支付确认表
下一篇:护士延续注册健康体检表--范文精华版

Copyright @ 2013 - 2018 优秀啊教育网 All Rights Reserved

优秀啊教育网 版权所有