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

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

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

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

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

    精选优质文档-倾情为你奉上南华大学计算机学院实验报告 ( 2018学年春季学期 )课程名称 操作系统实验名称 银行家算法姓名学号专业网络工程班级1班地点教师曹军一、实验题目: 系统中有 m 个同类资源被 n 个进程共享,每个进程对资源的最大需求数分别为 S1, S2,Sn,且 Max(Si)<=m, (i=1,2,n)。进程可以动态地申请资源和释放资源。编写一个程序, 实现银行家算法,当系统将资源分配给某一进程而不会死锁时,就分配之。否则,推迟分配,并显示适当的信息。二、实验目的: 当系统的总资源数 m 小于或等于所有进程对资源的最大需求 S n n i i =1 时,就可能产生 死锁。死锁会引起计算机系统的瘫痪。银行家算法是在实现资源分配时避免死锁的一个著名 算法,该算法是在能确保系统处于安全状态时才把资源分配给申请者。通过本实验进一步理解死锁的概念,并选择一个算法来避免死锁。 进一步理解利用银行家算法避免死锁的问题; 在了解和掌握银行家算法。理解和掌握安全序列、安全性算法。三、实验内容及要求:1、设计进程对各类资源最大申请表示及初值的确定。2、设定系统提供资源的初始状况。3、设定每次某个进程对各类资源的申请表示。4、编制程序,依据银行家算法,决定其资源申请是否得到满足。5、显示资源申请和分配时的变化情况。四、实验过程:程序要求:1. 判断当前状态是否安全,如果安全,给出安全序列;如果不安全给出理由。2. 对于下一个时刻T1,某个进程Pk会提出请求Request(R1, ,Rm),判断分配给P k进程请求的资源之后是否安全。如果安全,给出安全序列;如果不安全给出理由。3. 输入:进程个数n,资源种类m,T0时刻各个进程的资源分配情况(可以运行输入,也可以在程序中设置)。4. 输出:如果安全输出安全的进程序列,不安全提示信息。进程调度的实现过程:1. 变量初始化;2. 接收用户输入n,m,(输入或者默认的)Allocationij,Need ij;3. 按照银行家算法判断当前状态安全与否,安全给出安全序列,不安全给出提示;4. 如果安全,提示用户输入下一时刻进程Pk的资源请求Request(R1, ,Rm);5. 如果不安全或者无新请求则退出。源代码:#include <stdio.h>#include <iostream>#include <iomanip>#include <fstream>#include <windows.h>using namespace std;#define MaxNumber 20static int n;static int m;static int AvailableMaxNumber;static int MaxMaxNumberMaxNumber;static int AllocationMaxNumberMaxNumber;static int NeedMaxNumberMaxNumber;static int RequestMaxNumber;static int SafeOrderMaxNumber;static bool FinishMaxNumber;static bool isDisplayAvaliable = true;static char sourceName = 'A','B','C','D','E','F','G','H','I','J','K' /资源名称void input();bool isSystemSafe();void bankerAlgorithm();void display();int main() input(); bankerAlgorithm(); system("pause"); return 0;void input() /int n=6; /int m=3; ifstream inData; inData.open("C:/476.txt"); /读取数据 inData>>n; inData>>m; for (int i=0;i<m;i+) inData>>Availablei; for (int i=0;i<n;i+) for (int j=0;j<m;j+) inData>>Allocationij; for (int i=0;i<n;i+) for (int j=0;j<m;j+) inData>>Needij; for (int i=0;i<n;i+) for (int j=0;j<m;j+) Maxij = Needij + Allocationij; cout<<"*程序开始*"<<endl; display();bool isSystemSafe() int workMaxNumber; for (int i=0;i<m;i+) /m是资源个数A,B,C worki = Availablei; for (int i=0;i<n;i+) /n是进程个数 Finishi = false; SafeOrderi = -1; /初始化安全序列 int FinishNumebr = 0; int isSafe; int i =0,j; while(i<n) isSafe = 0; for(j = 0;j<m;j+) if (Finishi=false && Needij<=workj) isSafe+; else break; if (isSafe = m) /当且仅当进程对应的所有资源的数量都满足的时候才成立 Finishi = true; SafeOrderFinishNumebr = i; FinishNumebr+; for (j = 0;j<m;j+) workj += Allocationij; i=0; /找到满足条件的进程后,从头开始再进行寻找 else i+; if (FinishNumebr=n) cout<<"*Safe!*"<<endl; cout<<"对应的安全序列为:"<<endl; cout<<"P"<<SafeOrder0; for (int i=1;i<n;i+) cout<<"->"<<"P"<<SafeOrderi ; cout<<endl; return true; cout<<"*unSafe!*"<<endl; return false;void bankerAlgorithm() int chooseProcess; char isContinue; while(true) /设置两个布尔变量:判别请求向量是等待还是系统已经不再分配新的资源 bool isRequestNeedOK = true; bool isRequestAvailableOK = true; cout<<"请输入要申请资源的进程号(注意:第一个进程为0号,第二个进程为1号,以此类推!)"<<endl<<"chooseProcess=" cin>>chooseProcess; cout<<"请输入进程所请求的各类资源的数量:(A B C)"<<endl; for (int i=0;i<m;i+) cin>>Requesti; /输入错误判断 for (int i=0;i<m;i+) if (Requesti>NeedchooseProcessi) cout<<"*当前运行结果*"<<endl; cout<<"您输入的请求进程所对应的资源数量超过最大需求量,请重新输入!"<<endl; / cout<<"*"<<endl; isRequestNeedOK = false; continue; if (Requesti>Availablei) cout<<"*当前运行结果*"<<endl; cout<<"您输入的请求进程的资源数量超过系统所供给的最大资源数量pi必须等待,请重新输入!"<<endl; / cout<<"*"<<endl; isRequestAvailableOK = false; continue; for (int j = 0;j<m;j+) Availablej -=Requestj; AllocationchooseProcessj += Requestj; NeedchooseProcessj -= Requestj; cout<<"*"<<endl; if (!isSystemSafe() /如何不满足系统安全性算法,将本次试探作废,恢复到原来的值 for (int j = 0;j<m;j+) Availablej +=Requestj; AllocationchooseProcessj -= Requestj; NeedchooseProcessj += Requestj; /当请求向量Request满足和Need、Available的关系时,证明系统已不能再分配资源 if (isRequestAvailableOK&&isRequestNeedOK) cout<<"*当前运行结果*"<<endl; cout<<"当前可利用资源已经不能满足任何进程的需求,故系统进入不安全状态,系统不分配资源!"<<endl; cout<<"*"<<endl; cout<<"尝试根据p(i)发出的请求向量后的资源情况:"<<endl; display(); cout<<"*"<<endl; cout<<"是否继续输入请求变量request进行测试,是(Y),否(N)"<<endl; cout<<"isContinue = " cin>>isContinue; if (isContinue='Y'|isContinue='y') /input();/实现多次请求(保留上一次请求的状态) continue; else if (isContinue='N'|isContinue='n') cout<<"*程序结束*"<<endl; break; void display() char processName = '1','2','3','4','5','6' cout<<"-"<<endl; cout<<"当前进程个数为 n = "<<n<<endl; cout<<"当前资源个数为 m = "<<m<<endl; cout<<"系统可利用资源数情况如下:"<<endl; for (int i=0;i<m;i+) cout<<setw(5)<<sourceNamei<<" " cout<<endl; cout<<setw(5)<<Available0<<" " cout<<setw(5)<<Available1<<" " cout<<setw(5)<<Available2<<" "<<endl; cout<<"-"<<endl; cout<<"processName" cout<<setw(10)<<"Max"<<" " cout<<setw(15)<<"Allocation"<<" " cout<<setw(10)<<"Need"<<" " if (isDisplayAvaliable) cout<<setw(15)<<"available" cout<<endl; cout<<setw(15); for (int i=0;i<m;i+) cout<<sourceNamei<<setw(3); cout<<setw(5); for (int i=0;i<m;i+) cout<<sourceNamei<<setw(3); cout<<setw(10); for (int i=0;i<m;i+) cout<<sourceNamei<<setw(3); if (isDisplayAvaliable) cout<<setw(5); for (int i=0;i<m;i+) cout<<sourceNamei<<setw(3); cout<<endl; /设置矩阵输出形式 bool OnlyOneLineAvaliable = true; /Avaliable数组只输出第一行 for (int i=0;i<n;i+) cout<<setw(5)<<"P"<<processNamei; cout<<setw(10); for (int j = 0;j<m;j+) cout<<Maxij<<setw(3); cout<<setw(5); for (int j = 0;j<m;j+) cout<<Allocationij<<setw(3); cout<<setw(10); for (int j = 0;j<m;j+) cout<<Needij<<setw(3); if (isDisplayAvaliable&&OnlyOneLineAvaliable) cout<<setw(5); for (int i=0;i<m;i+) cout<<Availablei<<setw(3); OnlyOneLineAvaliable = false; cout<<endl; 五、实验结果:六、实验总结: 通过本次实验,我慢慢了了解到银行家算法这个问题,对这个问题有了自己的认识和了解。通过实验的操作实践,去真正搞懂课本上的知识有一种豁然开朗的感觉。所以说实践出真知。专心-专注-专业

    注意事项

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

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




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

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

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

    收起
    展开