银行家算法c++语言(流程图代码全)

上传人:s9****2 文档编号:487836186 上传时间:2022-09-05 格式:DOCX 页数:18 大小:207.54KB
返回 下载 相关 举报
银行家算法c++语言(流程图代码全)_第1页
第1页 / 共18页
银行家算法c++语言(流程图代码全)_第2页
第2页 / 共18页
银行家算法c++语言(流程图代码全)_第3页
第3页 / 共18页
银行家算法c++语言(流程图代码全)_第4页
第4页 / 共18页
银行家算法c++语言(流程图代码全)_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《银行家算法c++语言(流程图代码全)》由会员分享,可在线阅读,更多相关《银行家算法c++语言(流程图代码全)(18页珍藏版)》请在金锄头文库上搜索。

1、精选优质文档-倾情为你奉上操作系统教程 银行家算法院 系计算机与软件学院班 级08软件工程2班学 号姓 名何丽茗一、实验目的银行家算法是避免死锁的一种重要方法。通过编写一个模拟动态资源分配的银行家算法程序,进一步深入理解死锁、产生死锁的必要条件、安全状态等重要概念,并掌握避免死锁的具体实施方法。二、实验内容根据银行家算法的基本思想,编写和调试一个实现动态资源分配的模拟程序,并能够有效地防止和避免死锁的发生。三、实验方法开 始输入资源数m, 及各类资源总数,初始化Available向量输入进程数n,i=1输入进程i的最大需求向量max。inmax资源总数提示错误重新输入i加1任选一个进程作为当前

2、进程输入该进程的资源请求量Request 调用银行家算法,及安全性算法,完成分配,或并给出提示Need向量为0该进程已运行结束Need矩阵为0所有进程运行都结束结 束NYYNNY初始化need 矩阵NY1. 算法流程图 2. 算法数据结构1) 可利用资源向量Available ,它是一个最多含有100个元素的数组,其中的每一个元素代表一类可利用的资源的数目,其初始值是系统中所配置的该类全部可用资源数目。其数值随该类资源的分配和回收而动态地改变。如果Available(j)=k,标是系统中现有j类资源k个。2) 最大需求矩阵Max,这是一个nm的矩阵,它定义了系统中n个进程中的每一个进程对m类资

3、源的最大需求。如果Max(i,j)=k,表示进程i需要j类资源的最大数目为k。3) 分配矩阵Allocation,这也是一个nm的矩阵,它定义了系统中的每类资源当前一分配到每一个进程的资源数。如果Allocation(i,j)=k,表示进程i当前已经分到j类资源的数目为k。Allocation i表示进程i的分配向量,有矩阵Allocation的第i行构成。4) 需求矩阵Need,这还是一个nm的矩阵,用以表示每个进程还需要的各类资源的数目。如果Need(i,j)=k,表示进程i还需要j类资源k个,才能完成其任务。Need i表示进程i的需求向量,由矩阵Need的第i行构成。5) 上述三个矩阵

4、间存在关系:Need(i,j)=Max(i,j)-Allocation(i,j);3. 银行家算法设Requesti 是进程i的请求向量,如果Requesti,j=K,表示进程i需要K个j类型的资源。当i发出资源请求后,系统按下述步骤进行检查:1) 如果Request i Need,则转向步骤2;否则,认为出错,因为它所请求的资源数已超过它当前的最大需求量。2) 如果Request i Available,则转向步骤3;否则,表示系统中尚无足够的资源满足i的申请,i必须等待。3) 系统试探性地把资源分配给进程i,并修改下面数据结构中的数值:Available = Available - Req

5、uest iAllocation i= Allocation i+ Request iNeed i= Need i - Request i4) 系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。如果安全才正式将资源分配给进程i,以完成本次分配;否则,将试探分配作废,恢复原来的资源分配状态,让进程i等待。四、实验代码以及运行示例1. 源代码:#include#include#include#define False 0#define True 1using namespace std;int Max100100=0;/各进程所需各类资源的最大需求int Avaliable100=0;

6、/系统可用资源char name100=0;/资源的名称int Allocation100100=0;/系统已分配资源int Need100100=0;/还需要资源int Request100=0;/请求资源向量int temp100=0;/存放安全序列int Work100=0;/存放系统可提供资源int M=100;/进程的最大数为int N=100;/资源的最大数为void showdata()/显示资源矩阵int i,j;cout系统目前可用的资源Avaliable:endl;for(i=0;iN;i+) coutnamei ;coutendl;for (j=0;jN;j+) cout

7、Avaliablej ;/输出分配资源coutendl;cout Max Allocation Needendl;cout进程名 ;for(j=0;j3;j+)for(i=0;iN;i+)coutnamei ;cout ;coutendl;for(i=0;iM;i+)cout i ;for(j=0;jN;j+)coutMaxij ;cout ;for(j=0;jN;j+)coutAllocationij ;cout ;for(j=0;jN;j+)coutNeedij ;coutendl;int changdata(int i)/进行资源分配 int j;for (j=0;jM;j+) Aval

8、iablej=Avaliablej-Requestj;Allocationij=Allocationij+Requestj;Needij=Needij-Requestj;return 1;int safe()/安全性算法int i,k=0,m,apply,Finish100=0;int j;int flag=0;Work0=Avaliable0;Work1=Avaliable1;Work2=Avaliable2;for(i=0;iM;i+) apply=0;for(j=0;jN;j+)if (Finishi=False&Needij=Workj) apply+;if(apply=N)for(m

9、=0;mN;m+)Workm=Workm+Allocationim;/变分配数Finishi=True;tempk=i;i=-1; k+;flag+;for(i=0;iM;i+)if(Finishi=False)cout系统不安全endl;/不成功系统不安全return -1; cout系统是安全的!endl;/如果安全,输出成功 cout分配的序列:;for(i=0;iM;i+)/输出运行进程数组couttempi;if(iM-1) cout;coutendl;return 0;void share()/利用银行家算法对申请资源对进行判定char ch;int i=0,j=0;ch=y;co

10、ut请输入要求分配的资源进程号(0-M-1i;/输入须申请的资源号cout请输入进程i 申请的资源:endl;for(j=0;jN;j+)coutnamejRequestj;/输入需要申请的资源 for (j=0;jNeedij)/判断申请是否大于需求,若大于则出错 cout进程i申请的资源大于它需要的资源;cout 分配不合理,不予分配!Avaliablej)/判断申请是否大于当前资源,若大于则 /出错cout进程i申请的资源大于系统现在可利用的资源;cout 分配出错,不予分配!endl;ch=n;break; if(ch=y) changdata(i);/根据进程需求量变换资源showd

11、ata();/根据进程需求量显示变换后的资源safe();/根据进程需求量进行银行家算法判断 void addresources()/添加资源 int n,flag;coutn;flag=N;N=N+n;for(int i=0;in;i+)coutnameflag;coutAvaliableflag+;showdata();safe();void delresources()/删除资源char ming;int i,flag=1;coutming;for(i=0;iN;i+)if(ming=namei)flag=0;break;if(i=N)cout该资源名称不存在,请重新输入:;while(flag);for(int j=i;jN-1;j+)namej=namej+1;Avaliablej=Avaliablej+1;N=N-1;showdata();s

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号