




免费预览已结束,剩余6页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2011-2012学年第一学期计算机操作系统实验报告专 业:计算机科学与技术班 级:学 号:姓 名:提交日期:实验三 银行家算法模拟【开发语言及实现平台或实验环境】C+/C#Microsoft Visual Studio 6.0/ Microsoft Visual Studio .NET 2003【实验目的】(1)进一步理解利用银行家算法避免死锁的问题;(2)在了解和掌握银行家算法的基础上,编制银行家算法通用程序,将调试结果显示在计算机屏幕上,再检测和笔算的一致性。(3)理解和掌握安全序列、安全性算法【实验要求】(1)了解和理解死锁;(2)理解利用银行家算法避免死锁的原理;(3)会使用某种编程语言。【实验原理】一、安全状态指系统能按照某种顺序如(称为序列为安全序列),为每个进程分配所需的资源,直至最大需求,使得每个进程都能顺利完成。 二、银行家算法假设在进程并发执行时进程i提出请求j类资源k个后,表示为Requestij=k。系统按下述步骤进行安全检查:(1)如果RequestiNeedi则继续以下检查,否则显示需求申请超出最大需求值的错误。(2)如果RequestiAvailable则继续以下检查,否则显示系统无足够资源,Pi阻塞等待。(3)系统试探着把资源分配给进程Pi,并修改下面数据结构中的数值: Availablej=Availablej-Requestij; Allocationi,j=Allocationi,j+Requestij; Needi,j=Needi,j-Requestij;(4)系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。若安全,才正式将资源分配给进程Pi,以完成本次分配;否则, 将本次的试探分配作废,恢复原来的资源分配状态,让进程Pi等待。三、安全性算法(1)设置两个向量: 工作向量Work: 它表示系统可提供给进程继续运行所需的各类资源数目,它含有m个元素,在执行安全算法开始时,Work=Available; Finish: 它表示系统是否有足够的资源分配给进程,使之运行完成。开始时先做Finishi=false; 当有足够资源分配给进程时, 再令Finishi=true。(2)从进程集合中找到一个能满足下述条件的进程: Finishi=false; Needi,jWorkj; 若找到, 执行步骤(3), 否则,执行步骤(4)。(3)当进程Pi获得资源后,可顺利执行,直至完成,并释放出分配给它的资源,故应执行: Workj=Worki+Allocationi,j; Finishi=true; go to step 2; (4)如果所有进程的Finishi=true都满足, 则表示系统处于安全状态;否则,系统处于不安全状态。【实验步骤】参考实验步骤如下:(1)参考图1-1所示流程图编写安全性算法。NY所有finish都为true?输出安全序列NYN存在Finishi =false&Needij Needij出错返回:return(error)Requestij Availablej出错返回:(进程阻塞)return(error)Availablej = Availablej RequestijAllocationij= Allocationij + RequestijNeedij = Needij Requestij假定分配:输入初始参数(资源分配及请求情况)开始 假定分配之后,系统安全吗?申请成功。输出各种数据的变化图1-2银行家算法流程图【参考代码】部分参考代码如下:#include #include #define M 3 /资源的种类数#define N 5 /进程的个数void output(int iMaxNM,int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN); /统一的输出格式bool safety(int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN);bool banker(int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN);void main()int i,j;/当前可用每类资源的资源数int iAvailableM=3,3,2;/系统中N个进程中的每一个进程对M类资源的最大需求int iMaxNM=7,5,3,3,2,2,9,0,2,2,2,2,4,3,3;/iNeedNM每一个进程尚需的各类资源数/iAllocationNM为系统中每一类资源当前已分配给每一进程的资源数int iNeedNM,iAllocationNM=0,1,1,2,0,0,3,0,2,2,1,1,0,0,2;/进程名char cNameN=a,b,c,d,e;bool bExitFlag=true; /退出标记char ch; /接收选择是否继续提出申请时传进来的值bool bSafe; /存放安全与否的标志/计算iNeedNM的值for(i=0;iN;i+)for(j=0;jM;j+)iNeedij=iMaxij-iAllocationij;/输出初始值output(iMax,iAllocation,iNeed,iAvailable,cName);/判断当前状态是否安全bSafe=safety(iAllocation,iNeed,iAvailable,cName);/是否继续提出申请while(bExitFlag)coutnch;switch(ch) case y: /cout调用银行家算法;bSafe=banker(iAllocation,iNeed,iAvailable,cName);if (bSafe) /安全,则输出变化后的数据output(iMax,iAllocation,iNeed,iAvailable,cName);break; case n: cout退出。n; bExitFlag=false; break; default: cout输入有误,请重新输入:n;/输出void output(int iMaxNM,int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN)int i,j;coutnt Max tAllocationt Need t Availableendl;couttA B CtA B CtA B Ct A B Cendl;for(i=0;iN;i+)coutcNameit;for(j=0;jM;j+)coutiMaxij ;coutt;for(j=0;jM;j+)coutiAllocationij ;coutt;for(j=0;jM;j+)coutiNeedij ;coutt;cout ;/Available只需要输出一次if (i=0)for(j=0;jM;j+)coutiAvailablej ;coutendl;/安全性算法,进行安全性检查;安全返回true,并且输出安全序列,不安全返回false,并输出不安全的提示;bool safety(int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN)/请同学们自己完成int WorkM;for(int i=0;iM;i+)Worki=iAvailablei;bool FinishN=false,false,false,false,false;bool flag;coutendl安全序列为:endl;for(int k=0;kN;k+)for(int i=0,j;iN;i+)flag=true;if(!Finishi)for(j=0;jWorkj)flag=false;if(flag)cout cNamei ;for(j=0;jM;j+)Workj=Workj+iAllocationij;Finishi=true;for(int n=0;nN;n+)if(!Finishn)return false;return true;/安全返回true,不安全返回falsebool banker(int iAllocationNM,int iNeedNM,int iAvailableM,char cNameN)/请同学们自己完成char process;int RequestM;couta进程 b进程 c进程 d进程 e进程endl;coutprocess;int j;switch(process)case a: j=0;break;case b: j=1;break;case c: j=2;break;case d: j=3;break;case e: j=4;break;cout请输入该进程所申请的资源序列为:endl;for(int i=0,a;ia;Requesti=a;cout进程process申请的资源序列为 Request ;for(int i=0;iM;i+)coutRequesti, ;coutendl;for(int k=0;kiNeedjk)cout资源申请超过了其最大需求量endl;return false;for(int k=0;kiAvailablek)cout资源申请超过了系统提供的资源endl;return false;int AvaM,AlloM,NedM;for(int i=0;iM;i+)Avai=iAvailablei;Alloi=iAllocationji;Nedi=iNeedji;for(int n=0;nM;n+)iAvailablen=iAvailablen-Requestn;iAllocationjn=iAllocationj
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 供暖设备报废协议
- 2025年版医疗设备耗材品质认证及全国性区域合作供应协议
- 2025年度电力系统智能化改造项目工程合同
- 2025年航空零部件制造基地厂房租赁合同模板
- 2025年度能源项目升级改造财产抵押贷款合同
- 2025年高新技术企业知识产权战略布局合作协议
- 2025年公共停车场智能管理系统安装合同
- 2025年主题乐园特色展览项目合作开发及运营服务合同
- 2025年创新园区办公场地长期租赁合同
- 2025年绿色产品推广策略实施与执行服务合作协议
- GB/T 9871-2008硫化橡胶或热塑性橡胶老化性能的测定拉伸应力松弛试验
- GB/T 26480-2011阀门的检验和试验
- GB/T 19861-2005丙烯酸系阴离子交换树脂强碱基团、弱碱基团和弱酸基团交换容量测定方法
- GB/T 11085-1989散装液态石油产品损耗
- GB 30000.3-2013化学品分类和标签规范第3部分:易燃气体
- 《材料力学》说课-课件
- (完整版)沪教牛津版小学一至六年级英语单词汇总(最新)
- JJF 1587-2016 数字多用表校准规范-(高清现行)
- 完整课件-西方经济学下册(第二版)
- 机械制图教学通用课件(全套)
- 天星择日的基本原理
评论
0/150
提交评论