ImageVerifierCode 换一换
格式:DOCX , 页数:13 ,大小:63.70KB ,
资源ID:1763450      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/1763450.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(银行家算法实验报告.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

银行家算法实验报告.docx

1、银行家算法实验报告计算机操作系统实验报告一、 实验名称:银行家算法二、 实验目的:银行家算法是避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死 锁等概念,并体会和了解死锁和避免死锁的具体实施方法。三、 问题分析与设计:1、 算法思路:先对用户提出的请求进行合法性检查,即检查 请求是否大于需要的,是否大于可利用的。若请求合法,则进 行预分配,对分配后的状态调用安全性算法进行检查。若安 全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒 绝申请。2、 银行家算法步骤:(1)如果ReqUeStk or =Need则转向步骤(2);否则,认为出错,因为它所需要

2、的资源数已超过它所宣布的最大值。(2)如果RequeSkor=AVailable,则转向步骤(3);否则,表示系统中尚无足够的资源,进程必须等待。(3)系统试探把要求的资源分配给进程 Pi,并修改下面数据结构中的数值:AVaiIabIe=AVailable-Requesti;Allocatio n=Allocatio n+Request;Need=Need-Request;(4)系统执行安全性算法,检查此次资源分配后,系统是否处于 安全状态。3、安全性算法步骤:(1)设置两个向量工作向量Work。它表示系统可提供进程继续运行所需要的各类资源数目,执行安全算法开始时, WOrk=AIlocati

3、o n;布尔向量FiniSh。它表示系统是否有足够的资源分配给进程,使 之运行完成,开始时先做Finishi=false,当有足够资源分配给进程 时,令 Finishi=true。(2)从进程集合中找到一个能满足下述条件的进程:1Fini shi=false2Needvor=Work如找到,执行步骤(3);否则,执行步骤(4)。(3)当进程P获得资源后,可顺利执行,直至完成,并释放出分配 给它的资源,故应执行:WOrk=Work+Allocatio n;Fini shi=true;转向步骤(2)。(4)如果所有进程的Finishi=true,则表示系统处于安全状态;否 则,系统处于不安全状态。

4、4、流程图:系统主要过程流程图I进W银行家算法流程图安全性算法流程图(mSaftyi J)四、实验代码:#defi ne M 5#defi ne N 3本实验中使用到的库函数开始定义银行家算法中需要用到的数据#i nclude VStdio.h Il#i nclude #in clude int max 51; /int allocation51;int need 51;int available1;int request51;Char *fini sh5;int safe5;int n,i,m;int k=0;int j=0;int work1;int WorkS51;void Iin e(

5、) Il 美化程序,使程序运行时更加明朗美观void Start() /Iin e();Printf(Printf(Iin e();void en d() /Iin e();Printf(Iin e();void in put() /表示银行家算法开始表示银行家算法结束银行家算法开始n);死锁避免方法银行家算法结束,谢谢使用n);输入银行家算法起始各项数据n);Printf( n);for (n=0;n5;n+)Printf( 请输入进程P%d的相关信息:n,n);Prin tf(Max:);for (m=0;m1;m+)SCan f(%d, &max nm);Prin tf(Allocati

6、o n:);for (m=0;m1;m+)SCan f(%d, &allocatio nn m);for (m=0;m1;m+)n eed nm=max nm-allocatio nn m;Prin tf( 请输入系统可利用资源数 Available:);for (m=0;m1;m+)SCa nf(%d,&availablem);void OUtPUt() ZZ 输出系统现有资源情况Iin e();Printf(资源情况 MaX Allocation Need AVailablen);Prin tf(进程 A A A A n);Iin e();for(n=0;n5;n+)Prin tf(P%d

7、%3d%3d%3d, n,max n0,allocatio nn 0, need n0); if (n=0)Prin tf(%3d%3dn,available0);elsePrin tf(n);Iin e();时,系统把资源分配给void Cha nge() ZZ 进程 Pi , AVaiIablej 当 ReqUeSti,j=Availablej和Needi,j 发生改变for (m=0;m1;m+) availablem-=requestim; allocati On im+=requestim; n eedim-=requestim;void OUtPUtSafe() / 输出安全序列的

8、资源分配表Printf(该安全序列的资源分配图如下: n);Iin e();Printf(资源情况 WorkNeedAllocatio n Work+Allocatio nFi nish n);Printf(进程 A AAA n);Iin e();for(n=0;n5;n+)Prin tf(P%d%9d%3d%3d%5d%12sn,safe n,workssafe n0, needsaf en 0,allocatio n safe n 0,workssafe n0+allocatio nsafe n 0,fini sh n);Iin e();int CheCk() / 安全性算法Printf(

9、 开始执行安全性算法n);for (m=0;m1;m+) / 数组 work 和 finish 初始化workm=availablem;for (n=0;n5;n+)fin ish n=false;safe n=0;k=0;for (m=0;m5;m+)for (n=0;n5;n+)if(strcmp(finishn,false)=。&need n0=work0 ) / 查找可以分配资源但尚未分配到资源的进程safek=n; / 以数组safek记下各个进程得到分配的资源的顺序workssafek0=work0;进程执行后释变为1以示该进work0+=allocatio nn 0; /放出分配

10、给它的资源finishn=ture; /finishn程完成本次分k+;for (m=0;mP%d-P%d-P%d- P%d 系统是安全的 n,safe0,safe1,safe2,safe3,safe4);j=1;OUtPUtSafe(); / 输出安全序列的资源分配表return 1;void mai n() / 主程序开始Start();for (;j=0;) Il 确认输入数据的正确性,若输入错误,重新输入in put();Printf( 以下为进程资源情况,请确认其是否正确: n);OUtPUt();Printf( 数据是否无误:n正确:输入1n错误:输入0n请输入:);SCa nf(

11、%d,&j);Printf( 数据确认无误,算法继续。n);if (CheCk()=0) Il 若CheCk函数返回值为0,表示输入的初始数据找不到安全序列,无法进行下一步,程序结束en d();exit(0);Printf( 请输入请求资源的进程i(0、1、2、3、4) : ); Zz 输入发出请求向量的进程及请求向量SCa nf(%d,&i);Printf( 请输入进程P%d的请求向量ReqUeSt%d: ,i,i);for(n=0;n needi0;) / 若请求向量大于需求资源,则认为是输入错误,要求重新输入Printf( 数据输入有误,请重试! n请输入进程P%d的请求向量 ReqU

12、eSt%d: ,i,i);for(n=0;n 1; n+)SCan f(%d, &requesti n);if(reques ti 0=available0) / 判断系统是否有足够资源提供分配Printf( 系统正在为进程P%d分配资源n,i);Chan ge(); / 分配资源j=0;elsePrintf( 系统没有足够的资源,进程 P%d需要等待。n,i);if (j=0) /j=0 表示系统有足够资源分配的情况Printf( 当前系统资源情况如下:n); / 输出分配资源后的系统资源分配情况OUtPUt();if(check()=0) /若找不到安全系列,则之前的资源分配无效状态。n);资源状态Prin tf( 本次资源分配作废,恢复原来的资源分配for (m=0;m1;m+) ZZ 恢复分配资源前的系统availablem+=requestim;allocati On im-=requestim;n eedim+=requestim;OUtPUt(); ZZ 输出系统资源状态

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1