编程模拟银行家算法实验报告.doc_第1页
编程模拟银行家算法实验报告.doc_第2页
编程模拟银行家算法实验报告.doc_第3页
编程模拟银行家算法实验报告.doc_第4页
编程模拟银行家算法实验报告.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

武汉理工大学华夏学院课程设计报告书课程名称: 操作系统原理 题 目: 编程序模拟银行家算法 系 名: 信息工程系 专业班级: 计应2091 姓 名: 王汝平 学 号: 10225509118 指导教师: 苏永红 2011 年 7 月 6 日课程设计任务书学生姓名: 王汝平 专业班级: 计应2091 指导教师: 苏永红 工作单位: 信息工程系 设计题目:编程序模拟银行家算法初始条件:Linux操作系统,GCC编译环境要求完成的主要任务:主要任务:银行家算法是避免死锁的一种重要方法,本实验要求用高级语言编写和调试一个简单的银行家算法程序。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。思想:将一定数量的资金供多个用户周转使用,当用户对资金的最大申请量不超过现存资金时可接纳一个新客户,客户可以分期借款,但借款总数不能超过最大的申请量。银行家对客户的借款可以推迟支付,但是能够使客户在有限的时间内得到借款,客户得到所有的借款后能在有限的时间内归还。用银行家算法分配资源时,测试进程对资源的最大需求量,若现存资源能满足最大需求就满足当前进程的申请,否则推迟分配,这样能够保证至少有一个进程可以得到所需的全部资源而执行到结束,然后归还资源,若OS能保证所有进程在有限的时间内得到所需资源则称系统处于安全状态。设计报告撰写格式要求:1设计题目与要求 2 设计思想 3系统结构 4 数据结构的说明和模块的算法流程图 5 使用说明书(即用户手册):内容包含如何登录、退出、读、写等操作说明6 运行结果和结果分析(其中包括实验的检查结果、程序的运行情况)7 自我评价与总结 8 附录:程序清单,注意加注释(包括关键字、方法、变量等),在每个模块前加注释; 时间安排 7月 4日 布置课程设计任务;分配题目后,查阅资料、 准备程序; 7月 5 7月7 日上机调试程序、书写课程设计报告;7月8 日 提交课程设计报告及相关文档。指 导 教 师 签 名: 2011年 7月 2日系 主 任 签 名: 2011年 7月 3日目录1.需求分析41.1课程设计题目41.2课程设计目的4 1.3设计任务4 1.4设计思想42.设计思想和过程52.1 概要设计52.2程序源代码73.调试及运行结果134.实验心得体会155.参考文献151.需求分析1.1课程设计题目:编程序模拟银行家算法1.2设计目的1.2.1银行家算法是避免死锁的一种重要方法,本实验要求用级语言编写和调试一个简单的银行家算法程序。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。1.2.2提高学生的程序设计能力、 提高算法设计质量与程序设计素质 ;1.3设计任务 银行家算法是避免死锁的一种重要方法,本实验要求用高级语言编写和调试一个简单的银行家算法程序。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。1.4思想将一定数量的资金供多个用户周转使用,当用户对资金的最大申请量不超过现存资金时可接纳一个新客户,客户可以分期借款,但借款总数不能超过最大的申请量。银行家对客户的借款可以推迟支付,但是能够使客户在有限的时间内得到借款,客户得到所有的借款后能在有限的时间内归还。用银行家算法分配资源时,测试进程对资源的最大需求量,若现存资源能满足最大需求就满足当前进程的申请,否则推迟分配,这样能够保证至少有一个进程可以得到所需的全部资源而执行到结束,然后归还资源,若OS能保证所有进程在有限的时间内得到所需资源则称系统处于安全状态。2.设计思路和过程2.1 概要设计2.1.1 程序流程图2.1.2设计原理及方法银行家算法的设计思想是:当用户申请一组资源时,系统必须做出判断;如果把这些资源分出去,系统是否还处于安全装他。若是,就可以分出这些资源;否则,该申请暂不能满足。实现银行家算法要有若干数据结构,它们用来表示资源分配系统的状态。令n表示系统中进程的数目,m表示资源的分类数。还需要以下数据结构:1. Available是一个长度为m的向量,它表示每类资源可用的数量。Available j=k,表示rj类资源可用的数量为k。2.Max是一个nm矩阵,它表示每个进程对资源的最大需求。Max i,j=k,表示进程pi至多可以申请k个rj类资源单位。3. Allocation是一个nm矩阵,它表示当前分给每个进程的资源数目。Allocation i,j=k,表示进程pi当前分到k个rj类资源。4. Need是一个nm矩阵,它表示每个进程还缺少多少资源。Needi,j=k,表示进程pi尚需k个rj类资源才能完成其任务。显然Needi,j= Max i,j- Allocation i,j。这些数据结构的大小和数值随时间推移而改变。系统所执行的安全性算法描述如下:1.设置2个向量:工作向量Work:它表示系统可提供给进程继续运行所需的各类资源数目,它含有m个元素,在执行安全算法开始时,Work = Available。 Finishi :它表示系统是否有足够的资源分配给进程,使之完成运行。开始时先做Finishi=true。2.从进程集合中找到一个满足下述条件的进程:Finishi=flase;Needi,jWorkj;若找到,则执行步骤3,否则,执行步骤4。3.当进程pi获得资源后,可顺利执行,直至完成,并释放分配给它的资源。4.如果所有进程的Finishi=true都满足。则表示系统处于安全状态;否则,系统处于不安全状态。2.2 程序源代码#include#include#includeusing namespace std;#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 M=100;/作业的最大数为100int N=100;/资源的最大数为100void showdata()/显示资源矩阵 int i,j; cout系统目前可用的资源Avaliable:endl; for(i=0;iN;i+) coutnamei ; coutendl; for (j=0;jN;j+) coutAvaliablej ;/输出分配资源 coutendl; cout Max Allocation Needendl; cout进程名 ; for(j=0;j3;j+) for(i=0;iN;i+) coutnamei ; cout ; coutendl; for(i=0;iM;i+) cout i ; for(j=0;jN;j+) coutMaxij ; cout ; for(j=0;jN;j+) coutAllocationij ; cout ; for(j=0;jN;j+) coutNeedij ; coutendl; int changdata(int i)/进行资源分配 int j;for (j=0;jM;j+) Avaliablej=Avaliablej-Requestj; Allocationij=Allocationij+Requestj; Needij=Needij-Requestj;return 1;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+; 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;void share()/利用银行家算法对申请资源对进行判定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(i);/根据进程需求量变换资源 showdata();/根据进程需求量显示变换后的资源 safe();/根据进程需求量进行银行家算法判断 void addresources()/添加资源 int n,flag;coutn;flag=N;N=N+n;for(int i=0;in;i+) coutnameflag; coutAvaliableflag+;showdata();safe();void changeresources()/修改资源函数cout系统目前可用的资源Avaliable:endl; for(int i=0;iN;i+) coutnamei:Avaliableiendl;cout输入系统可用资源Avaliable:Avaliable0Avaliable1Avaliable2;cout经修改后的系统可用资源为endl;for (int k=0;kN;k+) coutnamek:Avaliablekendl;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;showdata();safe();void addprocess()/添加作业 int flag=M;M=M+1;cout请输入该作业的最大需求量Maxendl;for(int i=0;iN;i+) coutnameiMaxflagi; Needflagi=Maxflagi-Allocationflagi;showdata();safe();int main()/主函数 int i,j,number,choice,m,n,flag;char ming;cout*资源管理系统的设计与实现*endl;coutn;N=n;for(i=0;in;i+) cout资源i+1ming; namei=ming; coutnumber; Avaliablei=number;coutendl;coutm;M=m;cout请输入各进程的最大需求量(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 4:分配资源 endl; cout 5:增加作业 endl; cout 0:离开 endl; cout*endl; coutchoice; switch(choice) case 1: addresources();break; case 2: delresources()

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论