欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    银行家算法实验报告(共17页).doc

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

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

    银行家算法实验报告(共17页).doc

    精选优质文档-倾情为你奉上计算机操作系统实验报告 何美西2一、 实验名称:银行家算法二、 实验目的:银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。三、 问题分析与设计:1、算法思路:先对用户提出的请求进行合法性检查,即检查请求是否大于需要的,是否大于可利用的。若请求合法,则进行预分配,对分配后的状态调用安全性算法进行检查。若安全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒绝申请。2、银行家算法步骤:(1)如果Requestior =Need,则转向步骤(2);否则,认为出错,因为它所需要的资源数已超过它所宣布的最大值。(2)如果Requestor=Available,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。(3)系统试探把要求的资源分配给进程Pi,并修改下面数据结构中的数值:     Available=Available-Requesti;     Allocation=Allocation+Request;Need=Need-Request;(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。 3、安全性算法步骤: (1)设置两个向量工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时,Work=Allocation;布尔向量Finish。它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finishi=false,当有足够资源分配给进程时,令Finishi=true。(2)从进程集合中找到一个能满足下述条件的进程:Finishi=falseNeed<or=Work如找到,执行步骤(3);否则,执行步骤(4)。(3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行:Work=Work+Allocation;Finishi=true; 转向步骤(2)。(4)如果所有进程的Finishi=true,则表示系统处于安全状态;否则,系统处于不安全状态。4、流程图:系统主要过程流程图银行家算法流程图安全性算法流程图四、 实验代码:#include<iostream.h>#include<string.h>#include<stdio.h>#define False 0#define True 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 p100=0;int q100100=0;int z100100=0;int M=100;/作业的最大数为100int N=100;/资源的最大数为100int gg=1;void showdata()/显示资源矩阵 int i,j; cout<<endl<<"此时刻的资源分配情况为:"<<endl; cout<<" Max Allocation Need Avaliable"<<endl; cout<<"进程名 " for(j=0;j<4;j+) for(i=0;i<N;i+) cout<<namei<<" " cout<<" " cout<<endl; for(i=0;i<M;i+) cout<<" "<<i<<" " for(j=0;j<N;j+) cout<<Maxij<<" " cout<<" " for(j=0;j<N;j+) cout<<Allocationij<<" " cout<<" " for(j=0;j<N;j+) cout<<Needij<<" "if(i=0) cout<<" " for (j=0;j<N;j+) cout<<Avaliablej<<" "/输出分配资源 cout<<endl; int changdata(int i)/进行资源分配 int j;for (j=0;j<M;j+) /pj=Avaliablej; Avaliablej=Avaliablej-Requestj; /qij=Allocationij; Allocationij=Allocationij+Requestj; /zij=Needij; Needij=Needij-Requestj;return 1;int safe()/安全性算法int i,d,k=0,m,h,s,apply,Finish100=0;int j;int flag=0;for(i=0;i<N;i+)Worki=Avaliablei;cout<<endl<<" 安全性检查 "<<endl;cout<<" Work Need Allocation Work+Allocation Finish"<<endl;cout<<"进程名 "for(h=0;h<4;h+) for(s=0;s<N;s+) cout<<names<<" " cout<<" " cout<<endl;for(i=0;i<M;i+) apply=0; for(j=0;j<N;j+) if (Finishi=False&&Needij<=Workj) apply+; if(apply=N) cout<<" "<<i<<" " for(d=0;d<N;d+) cout<<Workd<<" " cout<<" "for(d=0;d<N;d+)cout<<Needid<<" " cout<<" "for(d=0;d<N;d+)cout<<Allocationid<<" " cout<<" " for(m=0;m<N;m+) Workm=Workm+Allocationim; cout<<Workm<<" " /变分配数 Finishi=True; tempk=i;cout<<" " cout<<"true"<<" " cout<<endl;i=-1; k+; flag+; for(i=0;i<M;i+) if(Finishi=False) for(j=0;j<N;j+)Avaliablej=Avaliablej+Requestj; Allocationij=Allocationij-Requestj; Needij=Needij+Requestj; cout<<endl<<"系统进入不安全状态!此时系统不分配资源!"<<endl;/不成功系统不安全 return 0; cout<<endl<<"此时系统是安全的!"<<endl;/如果安全,输出成功 cout<<"安全序列为:"for(i=0;i<M;i+)/输出运行进程数组 cout<<tempi; if(i<M-1) cout<<"->" cout<<endl; return 0;void share()/利用银行家算法对申请资源对进行判定char ch;int i=0,j=0;ch='y'cout<<endl<<"请输入要求分配的资源进程号(0-"<<M-1<<"):" cin>>i;/输入须申请的资源号cout<<endl<<"请输入进程 "<<i<<" 申请的资源:"<<endl;for(j=0;j<N;j+) cout<<namej<<":" cin>>Requestj;/输入需要申请的资源 for (j=0;j<N;j+) if(Requestj>Needij)/判断申请是否大于需求,若大于则出错 cout<<endl<<"进程 "<<i<<"申请的资源大于它需要的资源" cout<<" 分配不合理,不予分配!"<<endl; ch='n' break; else if(Requestj>Avaliablej)/判断申请是否大于当前资源,若大于则 /出错 cout<<endl<<"进程"<<i<<"申请的资源大于系统现在可利用的资源" cout<<" 分配出错,不予分配!"<<endl; ch='n' break; if(ch='y') changdata(i);/根据进程需求量变换资源 showdata();/根据进程需求量显示变换后的资源 safe();/根据进程需求量进行银行家算法判断 int main()/主函数 int t=1,i,j,number,choice,m,n,flag;char ming;cout<<"*银行家算法的设计与实现*"<<endl;cout<<endl<<"请首先输入系统可供资源种类的数量:"cin>>n;N=n;for(i=0;i<n;i+) cout<<"资源"<<i+1<<"的名称:" cin>>ming; namei=ming; cout<<"资源的数量:" cin>>number; Avaliablei=number;cout<<endl;cout<<"请输入作业的数量:"cin>>m;M=m;cout<<endl<<"请输入各进程的最大需求量("<<m<<"*"<<n<<"矩阵)Max:"<<endl;for(i=0;i<m;i+) for(j=0;j<n;j+) cin>>Maxij;do flag=0; cout<<endl<<"请输入各进程已经申请的资源量("<<m<<"*"<<n<<"矩阵)Allocation:"<<endl; for(i=0;i<m;i+) for(j=0;j<n;j+) cin>>Allocationij; if(Allocationij>Maxij) flag=1; Needij=Maxij-Allocationij; if(flag) cout<<endl<<"申请的资源大于最大需求量,请重新输入!n"<<endl;while(flag); showdata();/显示各种资源 safe();/用银行家算法判定系统是否安全while(1)if(t=1)cout<<endl<<" 利用银行家算法预分配资源 "<<endl;share();t=0;else break;cout<<endl<<" 是否继续银行家算法?(按 1 键继续,按其它任意键退出):"cin>>t;cout<<endl; return 1;五、 程序执行结果:六、实验总结多个进程同时运行时,系统根据各类系统资源的最大需求和各类系统的剩余资源为进程安排安全序列,使得系统能快速且安全地运行进程,不至发生死锁。银行家算法是避免死锁的主要方法,其思路在很多方面都非常值得我们来学习借鉴。 09信管(2)班 何美西 2专心-专注-专业

    注意事项

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

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开