操作系统银行家算法设计实现报告.doc
《操作系统银行家算法设计实现报告.doc》由会员分享,可在线阅读,更多相关《操作系统银行家算法设计实现报告.doc(18页珍藏版)》请在沃文网上搜索。
1、银行家算法的模拟实现一、设计目的(1)了解进程产生死锁的原因,了解为什么要进行死锁的避免。(2)掌握银行家算法的数据结构,了解算法的执行过程,加深对银行家算法的理解。二、设计内容编制银行家算法通用程序,并检测所给状态的系统安全性。1.银行家算法中的数据结构:可利用资源向量Available。这是一个含有m个 元素的数组,其中的每一个元素代表一类可利用的资源数目,其初始值是系统中所配置的该类全部可用资源的数目,其数值随该类资源的分配和回收而动态地改变。Availablej=K,则表示系统中现有Rj 类资源K个。最大需求矩阵Max。这是一个n*m的矩阵,它定义了系统中n个进程中的每一个进程对m类资
2、源的最大需求。如果Maxi,j=K,则表示进程i需要Rj类资源的最大数目为K。分配矩阵Allocation。这也是一个n*m的矩阵,它定义了系统中每一类资源 当前已分配给没一进程的资源数。如果Allocationi,j=K,则表示 进程i当前已分得Rj类资源的数目为K。需求矩阵Need。这也是一个n*m的矩阵,用以表示每一个进程尚需的各类资源数。如果Needi,j=K,则表示进程i还需要Rj类资源K个,方能完成其任务。上述三个矩阵存在如下关系: Needi,j= Maxi,j- Allocationi,j2.银行家算法设是进程的请求向量,如果j=K,表示进程需要K个类型的资源。当发出资源请求后
3、,系统按下述步骤进行检查:(1)如果j= Needi,j,便转向步骤(2);否则认为出错,因为它所需要的资源数已超过它所宣布的最大值。(2)如果j= Needi,j工作向量Work,它表示系统可提供进程继续运行所需的给类资源数目,它含有m个元素,在执行安全算法开始时,Work:=Available。 2Finish,它表示系统是否有足够的资源分配给进程,使之运行完成。开始先做Finishi:=false;当有足够资源分配给进程时,再令Finishi:=true。(2)从进程集合中找到一个能满足下述条件的进程: 1Finishi=false; 2Needi,j=Workj;若找到,执行步骤,否则
4、,执行步骤。(3)当进程获得资源后,可顺利执行,直至完成,并释放分配给它的资源,故应执行: Workj:= Workj+ Allocationi,j; Finishi:=true; go to step2;(4) 如果所有进程的Finishi:=true都满足,则表示系统处于安全状态;否则,系统处于不安全状态。三、 设计步骤1、 设计思路分析 依次输出进程数量与各类型资源数量,检查某一时刻系统是否处于安全状态,若系统处于安全状态则就行资源分配,也就是对用户提出的请求进行合法性检查,即检查请求的是不大于需要的资源量,是否不大于可利用的资源量。若请求合法,则进行试分配。最后对试分配后的状态调用安全
5、性检查算法进行安全性检查。若安全,则分配,否则,不分配,恢复原来状态,让其等待,返回。2、 总体框架设计银行家算法分配资源增加资源删除资源安全性检测退出图1 总体框架图3、 银行家算法函数流程图银行家算法Bank()开始初始化Imit();提出请求REQUEST();REQUEST()=NEEDiREQUESTi=AVILABLEiAVILABLEi-=REQUESTi;ALLOCATIONi+=REQUESTi;NEEDi-=REQUESTi;Safe();输出提示:系统是安全的!是否再次进行分配ErrorError输出提示:分配不合理,不予分配!AVILABLEi+=REQUESTi;AL
6、LOCATIONi-=REQUESTi;NEEDi+=REQUESTi;退出程序falsetruefalsetruefalsetruefalsetrue 图2 银行家算法流程图4、 安全性算法流程图安全性算法Safe()开始Work=AVAILABLE;FINISH=false;NEEDi=Work&FINISHi=falseWork+=ALLOCATIONi;FINISHi=true;所有进程的FINISH=true安全,输出序列,输出提示:系统安全是安全的!return true;安全性算法Safe()结束输出提示:系统不安全falsefalsetruetrue 图3 安全性算法流程图5、
7、 详细设计(1) 安全性检测当前安全性检查safe():用于判断当前状态安全性,根据不同地方的调用提示处理不同。具体代码如下: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+;/用来判断用不用对当前进程资
8、源进行分配 if(apply=N) for(m=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;(2) 利用银行家算法对申请资源进行判定函数void share()/利用银行家算法对
9、申请资源对进行判定 char ch; int i=0,j=0; ch=y; cout请输入要求分配的资源进程号(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(
10、i); showdata(); safe(); (3) 资源分配int changdata(int i) int j; for (j=0;jM;j+) Avaliablej=Avaliablej-Requestj; Allocationij=Allocationij+Requestj; Needij=Needij-Requestj; return 1;/返回6、 运行结果及其讨论(1) 输入资源的种类以及剩余资源数量 图4如图4所示,输入系统3中类型资源a,b,c,剩余资源数量分别为3,3,2(2) 输入进程的数量以及各进程最大需求量,已经申请分配的资源量,如图5所示: 图5(3) 根据安全性
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 银行家 算法 设计 实现 报告
