2银行家算法.doc_第1页
2银行家算法.doc_第2页
2银行家算法.doc_第3页
2银行家算法.doc_第4页
2银行家算法.doc_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

辽宁石油化工大学计算机与通信工程学院实验报告实 验 报 告课程名称 操作系统实验 实验名称 银行家算法 实验类型 验证型 实验地点 304机房 实验日期 2011.4.27 指导教师 赵新慧 专 业 计算机科学与技术 班 级 算机 0901 学 号 32 姓 名 代静雯 成 绩 _辽宁石油化工大学计算机与通信工程学院实验报告说明 1、 封面内容(1)课程名称:实验所属的课程的名称。(2)实验名称:要用最简练的语言反映实验的内容。要求与实验指导书中相一致。(3)实验类型:说明是验证型实验、设计型实验、创新型实验还是综合型实验。2、正文内容实验报告的正文内容须包括以下内容:(1)实验目的:目的要明确,要抓住重点,符合实验指导书中的要求。(2)实验内容:说明本实验的主要内容。(3)实验原理:简要说明本实验项目所涉及的理论知识。(4)实验环境:实验用的软硬件环境(配置)。(5)实验方案:对于验证性型实验,写明依据何种原理、操作方法进行实验;对于设计型和综合型实验,写明依据何种原理、操作方法进行实验,并画出硬件组成图、软件流程图、设计思路和设计方法,再配以相应的文字说明;对于创新型实验,除符合设计型和综合型实验要求外,还应注明其创新点、特色。(6)实验步骤:写明实验的实施步骤,包括实验过程中的记录、数据。(7)实验结果与分析:写明实验的最终结果,并对结果进行分析,做出结论。(8)实验中遇到的问题及解决方法:写明实验过程中遇到的问题及所采取的解决方法。(9)实验总结(在封底上):写出对本次实验的心得体会、思考和建议。一、 实验目的银行家算法是避免死锁的一种重要方法,本实验要求用高级语言编写和调试一个简单的银行家算法程序。加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。二、 实验原理当用户申请一组资源时,系统必须做出判断,如果把这些资源分出去,系统是否还处于安全状态。若是,就可以分出这些资源;否则,该申请暂不予满足。1数据结构 假设有M个进程N类资源,则有如下数据结构: MAXM*N M个进程对N类资源的最大需求量 AVAILABLEN 系统可用资源数 ALLOCATIONM*N M个进程已经得到N类资源的资源量 NEEDM*N M个进程还需要N类资源的资源量 2银行家算法 设进程I提出请求RequestN,则银行家算法按如下规则进行判断。 (1)如果RequestN=NEEDI,N,则转(2);否则,出错。 (2)如果RequestN=AVAILABLE,则转(3);否则,出错。 (3)系统试探分配资源,修改相关数据: AVAILABLE=AVAILABLE-REQUEST ALLOCATION=ALLOCATION+REQUEST NEED=NEED-REQUEST (4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。 3安全性检查 (1)设置两个工作向量WORK=AVAILABLE;FINISHM=FALSE (2)从进程集合中找到一个满足下述条件的进程, FINISHi=FALSE NEED=WORK 如找到,执行(3);否则,执行(4) (3)设进程获得资源,可顺利执行,直至完成,从而释放资源。 WORK=WORK+ALLOCATION FINISH=TRUE GO TO 2 (4)如所有的进程FinishM=true,则表示安全;否则系统不安全。三、 实验内容 1设计进程对各类资源最大申请表示及初值确定。 2设定系统提供资源初始状况。 3设定每次某个进程对各类资源的申请表示。 4编制程序,依据银行家算法,决定其申请是否得到满足。 四、 实验环境软件环境:Tc 或Visual C+五、 实验步骤1) 银行家算法流程图 2) 银行家算法源程序#include#include#include#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;coutMax 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 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 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 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;doflag=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;cout1: 增加资源endl;cout2: 删除资源endl;cout3: 修改资源endl;cout4: 分配资源endl;cout5: 增加进程endl;cout6: 离开endl;cout endl;coutchoice;switch(choice)case 1: addresources();break;case 2: delresources();break;case 3

温馨提示

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

评论

0/150

提交评论