欢迎来到沃文网! | 帮助中心 分享知识,传播智慧!
沃文网
全部分类
  • 教学课件>
  • 医学资料>
  • 技术资料>
  • 学术论文>
  • 资格考试>
  • 建筑施工>
  • 实用文档>
  • 其他资料>
  • ImageVerifierCode 换一换
    首页 沃文网 > 资源分类 > DOC文档下载
    分享到微信 分享到微博 分享到QQ空间

    操作系统银行家算法设计实现报告.doc

    • 资源ID:1023215       资源大小:122.32KB        全文页数:18页
    • 资源格式: DOC        下载积分:10积分
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: QQ登录 微博登录
    二维码
    微信扫一扫登录
    下载资源需要10积分
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,下载更划算!
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    操作系统银行家算法设计实现报告.doc

    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) 根据安全性

    11、算法判定输入的数据,系统是安全的,如图6所示: 图6(4)进行分配资源,1进程请求资源,请求向量Request1(1,0,2),按银行家算法进行检查,系统安全,可以进行分配,如图7所示: 图7(5)4进程请求资源,Requst(3,3,0),按银行家算法进行检查,申请的资源大于系统现在可利用的资源,分配错误,如图8所示: 图8(6)0进程请求资源,Requst(0,2,0),按银行家算法进行检查,安全性检查:可用资源已不能满足任何进程的需要,故系统不安全,如图9所示: 图9五、附录(源代码)#include#include#include#define False 0#define True

    12、1int Max100100=0;/各进程所需各类资源的最大需求int Avaliable100=0;/系统可用资源char name100=0;/资源的名称int Allocation100100=0;/系统已分配资源int Need100100=0;/还需要资源int Request100=0;/请求资源向量int temp100=0;/存放安全序列int Work100=0;/存放系统可提供资源int M=100;/作业的最大数为100int N=100;/资源的最大数为100void showdata()/显示资源矩阵 int i,j; cout系统目前可用的资源Avaliable:e

    13、ndl; for(i=0;iN;i+) coutnamei ; coutendl; for (j=0;jN;j+) coutAvaliablej ;/输出分配资源 coutendl; cout Max Allocation Needendl; cout进程名 ; for(j=0;jN;j+) for(i=0;iM;i+) coutnamei ; cout ; coutendl; /依次输入进程名称 for(i=0;iM;i+) cout i ; for(j=0;jN;j+) coutMaxij ; /依次输入max值 cout ; for(j=0;jN;j+) coutAllocationij

    14、 ;/依次输入allocation值 cout ; for(j=0;jN;j+) coutNeedij ;/依次输入need值 coutendl; int changdata(int i)/进行资源分配,系统先执行安全性算法,若安全则进行此次试分配,如果请求向量request满足前两个条件后,执行其下 int j; for (j=0;jM;j+) Avaliablej=Avaliablej-Requestj;/当前的可用资源就为原可用资源减去申请资源量 Allocationij=Allocationij+Requestj;/当前已分配就得为已分配资源要加上申请的资源量 Needij=Needi

    15、j-Requestj;/当前需求就为原需求减去分配的资源量 return 1;/返回int safe()/安全性算法 int i,k=0,m,apply,Finish100=0;/Finish都赋值为0,false,表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish=false,当有足够资源分配时,令Finish=true int j; int flag=0; Work0=Avaliable0;/在执行安全算法开始时,定义work=avaliable,表示系统可提供给进程继续运行所需的给类资源数目 Work1=Avaliable1; Work2=Avaliable2; f

    16、or(i=0;iM;i+) apply=0;/对每一个进程都进行检测 for(j=0;jN;j+)/对每一个进程的每一种资源都进行检测 if (Finishi=False&Needij=Workj) /如果第I个进程还没有检测过开始检测,并且所需资源量小于等于其工作量 apply+;/用来判断用不用对当前进程资源进行分配 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)

    17、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;/判断 cout请输入要求分配的资源进程号(0-M-1i;/输入须申请的资源号cout请输入进程 i 申请的资源:endl;for(j=0;jN;j+) coutnamejRequestj;/输入需要申

    18、请的资源 for (j=0;jNeedij)/判断申请是否大于需求,若大于则出错 cout进程 i申请的资源大于它需要的资源; cout 分配不合理,不予分配!Avaliablej)/判断申请是否大于当前资源,若大于则 /出错 cout进程i申请的资源大于系统现在可利用的资源; cout 分配出错,不予分配!endl; ch=n; break; if(ch=y) changdata(i);/根据进程需求量变换资源 showdata();/根据进程需求量显示变换后的资源 safe();/根据进程需求量进行银行家算法判断 void addresources()/添加资源 int n,flag;co

    19、utn;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;showd

    20、ata();safe();int main()/主函数 int i,j,number,choice,m,n,flag;char ming; cout 欢迎进入银行家算法系统endl; cout * *endl; cout * *endl; cout * 设计者 *endl; cout * *endl; cout * *endl; coutendl;coutn;N=n; for(i=0;in;i+) cout资源i+1ming; namei=ming; cout剩余资源的数量:number; Avaliablei=number;coutendl;coutm;M=m;cout请输入各进程的最大需求

    21、量(m*n矩阵)Max:endl;for(i=0;im;i+) for(j=0;jMaxij;do flag=0; cout请输入各进程已经申请的资源量(m*n矩阵)Allocation:endl; for(i=0;im;i+) for(j=0;jAllocationij; if(AllocationijMaxij) flag=1; Needij=Maxij-Allocationij; if(flag) cout申请的资源大于最大需求量,请重新输入!n;while(flag); showdata();/显示各种资源 safe();/用银行家算法判定系统是否安全 while(choice) cout 模拟银行家算法演示 endl; cout * 1.分配资源 *endl; cout * 2.增加资源 *endl; cout * 3.删除资源 *endl; cout * 0.退出系统 *endl; coutendl; coutchoice; switch(choice) case 1: share();break; case 2: addresources();break; case 3: delresources();break; case 0: choice=0;break; default: cout请正确选择功能号(0-4)!endl;break; return 1;18


    注意事项

    本文(操作系统银行家算法设计实现报告.doc)为本站会员(星星)主动上传,沃文网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知沃文网(点击联系客服),我们立即给予删除!




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服点击这里,给沃文网发消息,QQ:2622162128 - 联系我们

    版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

    Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1

    陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922