银行家算法+某实验报告材料_第1页
银行家算法+某实验报告材料_第2页
银行家算法+某实验报告材料_第3页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

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

文档简介

1、淮海工学院计算机工程学院实验报告书课程名:操作系统原理题目银行家算法班 级:D软件101学 号:511021012姓 名:陈衍评语:成绩:指导教师:批阅时间:年月日一、实验目的银行家算法是操作系统中避免死锁的典型算法,本实验可以加深对银行家算法的步骤和相关数据结构用法的更好理解。实验环境Turbo C 2.0/3.0 或 VC+6.0实验学时4学时,必做实验。二、实验内容用C语言编写一个简单的银行家算法模拟程序,用银行家算法实现资源分配。程 序能模拟多个进程共享多种资源的情形。 进程可动态地申请资源,系统按各进程的申请 动态地分配资源。要求程序具有显示和打印各进程的某一时刻的资源分配表和安全序

2、 列;显示和打印各进程依次要求申请的资源数量以及为某进程分配资源后的有关资源数 据的情况。三、实验说明实验中进程的数量、资源的种类以及每种资源的总量Totalj最好允许动态指定。初始时每个进程运行过程中的最大资源需求量Maxi,j和系统已分配给该进程的资源量Allocatio ni,j均为已知(这些数值可以在程序运行时动态输入),而算法中其他数据结 构的值(包括Needi,j、Availablej)则需要由程序根据已知量的值计算产生。四、实验步骤1、理解本实验中关于两种调度算法的说明。2、根据调度算法的说明,画出相应的程序流程图。3、按照程序流程图,用C语言编程并实现。五、分析与思考1.要找出

3、某一状态下所有可能的安全序列,程序该如何实现?答:要找出这个状态下的所有可能的安全序列,前提是要是使这个系统先处于安全状态,而系统的状态可通过以下来描述: 进程剩余申请数=最大申请数-占有数;可分配资源数 =总数-占有数之和;通过这个描述来算出系统是否安全,从而找出所有的安全序列。2 .银行家算法的局限性有哪些?答:银行家算法是一种最有代表性的避免死锁的算法。银行家算法即把操作系统看作是银行 家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向 银行家贷款。当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源 数之和是否超过了该进程对资源的最

4、大需求量。若超过则拒绝分配资源,若没有超过则再测试系 统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也 要推迟分配。但任何一种算法都存在其缺点,对各进程的资源分配要求严格,经常使其处于不安 全状态,银行家算法的主要局限是过于谨慎和检查各申请者对各类资源的最大需求量开销较大。六、测试数据与实验结果银行家算法流程图(1)所示:开始1 1r输入参參数运行结果如图所示:ca *C : Pr ogr a* F il es '.Hi cmsoEt ITi snal S tudii oBlyFr o j ects. 1 VDebug'k 1 - exeIs

5、苛资供W*層耿豔豔软需求量5矩阵皿7各进程玉奔请的资源<<5*3)LfilloCationJ:0 102 0 03 0 22 110 0 2系统目前可用的资源Available 1:a b c3 3 2图(1)图(2)七、实验心得与体会通过本次实验,我知道了可以把操作系统看作是银行家,操作系统管理的资源相当于银行 家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。为保证资金的安全,银行家规定:(1) 当一个顾客对资金的最大需求量不超过银行家现有的资金时就可接纳该顾客;(2) 顾客可以分期贷款,但贷款的总数不能超过最大需求量;(3) 当银行家现有的资金不能满足顾客尚需的

6、贷款数额时,对顾客的贷款可推迟支付,但总 能使顾客在有限的时间里得到贷款; 当顾客得到所需的全部资金后,一定能在有限的时间里归还所有的资金.操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对 资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资 源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是 否超过了该资源所剩余的总量。若超过则拒绝分配资源,若能满足则按当前的申请量分配资 源,否则也要推迟分配。这次的实验中还遇到一些问题,在同学的帮助下一一解决了。附录#in clude<iostream.h>

7、;#in clude<stri ng.h>#in clude<stdio.h>#defi ne False 0#defi ne True 1int Max100100=0;各进程所需各类资源的最大需求int Avaliable100=0;系统可用资源char name100=0;资源的名称int Allocatio n100100=0;系统已分配资源int Need100100=0;还需要资源int Request100=0;请求资源向量int temp100=0;存放安全序列int Work100=0;存放系统可提供资源int M=100;作业的最大数为 100int

8、 N=100;资源的最大数为 100void showdata()显示资源矩阵int i,j;cout<<"系统目前可用的资源for(i=0;i<N;i+)cout< <n amei<<"" cout<<e ndl;for (j=0;j<N;j+) cout<<Avaliable cout<<e ndl;cout<<"cout<<"进程名 for(j=0;j<3;j+) for(i=0;i<N;i+) cout< <

9、;n amei<<"" cout<<""Avaliable:"<<e ndl;j<<" ”;输出分配资源MaxAllocationII.Need"<<e ndl;cout<<e ndl;for(i=0;i<M;i+)cout<<" "<<i<<"";for( j=O;j<N;j+)cout<<Maxij<<""cout<

10、;<""for( j=0;j<N;j+)cout<<Allocationij<<""cout<<""for( j=0;j<N;j+)cout<<Needij<<""cout<<e ndl;int cha ngdata(i nt i)/ 进行资源分配int j;for (j=0;j<M;j+) Avaliable j=Avaliable j-Request j;Allocatio nij=Allocatio nij+Req

11、uestj;Needi j=Needij-Request j;return 1;int safe() 安全性算法int i,k=O,m,apply,Fi ni sh100=0;int j;int flag=0;Work0=Avaliable0;Work1=Avaliable1;Work2=Avaliable2;for(i=0;i<M;i+)apply=0;for(j=0;j<N;j+)j)变分配数if (Fi nishi=False&&Needij<=Work apply+;if(apply=N)for(m=0;m<N;m+)Workm=Workm+Al

12、locatio n im;Fini shi=True;tempk=i;i=-1;k+;flag+;for(i=0;i<M;i+)if(Fi nishi=False)cout<<"系统不安全"<<endl;不成功系统不安全return -1;cout<<"系统是安全的!"<<endl;如果安全,输出成功cout<<"分配的序列:";for(i=0;i<M;i+)输出运行进程数组cout<<tempi;if(i<M-1) cout<<&q

13、uot;->"cout<<e ndl;return 0;void share()利用银行家算法对申请资源对进行判定char ch;int i=O,j=O;ch='y:cout<<"请输入要求分配的资源进程号(0-"<<M-1<<"):"cin >>i; 输入须申请的资源号cout<<" 请输入进程 "<<i<<" 申请的资源:"<<endl;for( j=O;j<N;j+)cou

14、t< <n amej<<":"cin >>Requestj;输入需要申请的资源for (j=0;j<N;j+)if(Request j>Needi j)判断申请是否大于需求,若大于则出错cout<<"进程"<<i<<"申请的资源大于它需要的资源"cout<<" 分配不合理,不予分配!"<<e ndl;ch=' n'break;else if(Request j>Avaliablej)判断

15、申请是否大于当前资源,若大于则/出错cout<<"进程"<<i<<"申请的资源大于系统现在可利用的资源"cout<<"分配出错,不予分配!"<<e ndl;ch=' n:break;if(ch='y') cha ngdata(i);/根据进程需求量变换资源showdata();根据进程需求量显示变换后的资源safe();根据进程需求量进行银行家算法判断void addresources()添加资源int n, flag;cout<<&quo

16、t;请输入需要添加资源种类的数量:";cin»n;flag=N;N=N+n;for(int i=0;i<n;i+)cout<<"名称:"cin»n ameflag;cout<<"数量:"showdata();safe();void delresources() 删除资源char ming;int i,flag=1;cout<<"请输入需要删除的资源名称:"docin»ming;for(i=0;i<N;i+)if(mi ng=n amei)flag=

17、0;break;if(i=N)cout<<"该资源名称不存在,请重新输入:while(flag);for(i nt j=i;j<N-1;j+)name j=namej+1;N=N-1;showdata();safe();void cha ngeresources()修改资源函数cout<<" 系统目前可用的资源 Avaliable:"<<e ndl;for(i nt i=0;i<N;i+)cout< <n amei<<":"<<Avaliablei<<

18、;e ndl;cout<<"输入系统可用资源Avaliable:"<<e ndl;cin >>Avaliable0»Avaliable1»Avaliable2;cout<<"经修改后的系统可用资源为"<<e ndl;for (int k=0;k<N;k+)cout< <n amek<<":"<<Avaliablek<<e ndl;showdata();safe();void addprocess()添加

19、作业int flag=M;M=M+1;cout<<" 请输入该作业的最打需求量Max"<<e ndl;for(int i=0;i<N;i+)cout< <n amei<<":"cin>> Maxflagi;Needflagi=Maxflagi-Allocatio nflagi; showdata();safe();int mai n()主函数int i,j,number,choice,m,n,flag;char ming;cout<<"*单处理机系统进程调度实现*”&

20、lt;<e ndl;cout<<"请首先输入系统可供资源种类的数量 cin»n;N=n;for(i=0;i< n;i+)cout<<" 资源"<<i+1<<" 的名称:”;cin»ming;n amei=ming;cout<<" 资源的数量:"cin»nu mber;cout<<e ndl;cout<<"请输入作业的数量:";cin»m;M=m;cout<<"

21、 请输入各进程的最大需求量("<<m<<"*"<<n<<"矩阵)Max:"<<endl;for(i=0;i<m;i+)for(j=0;j< n;j+)ci n»Maxij;doflag=0;cout<<" 请输入各进程已经申请的资源量("<<m<<"*"<<*<" 矩阵)Allocation:"<<endl;for(i=0;i<m;i+)for( j=0;j<n;j+)cin> >Allocatio nij;if(Allocatio nij>Maxij)flag=1;Needi j=Maxi j-Allocationij;if(flag)cout<<&quo

温馨提示

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

评论

0/150

提交评论