《银行家算法的某实验的汇报材料》由会员分享,可在线阅读,更多相关《银行家算法的某实验的汇报材料(13页珍藏版)》请在金锄头文库上搜索。
1、word计算机学院操作系统课程设计报告设计题目:银行家算法的实现某某:学号:班级:06网络工程班完成日期:2009年6月13日成 完 立 独设计目的O 概施 等实 锁体 死具 止的 防锁 济止 申防 源和 资锁 关死 有解 解了 了 和 深会 加体 1 2设计预备知识o O 识 杳 知。检 关法性 相算全 的家安 锁行统 死 银 系 2.3.设计内容宀心 心 实 请 W。申 值 示源 初Needi , n,如此报错返回。 如果RequestnAvailable ,如此进程i进入等待资源状态,返回。(3) 假设进程i的申请已获批准,于是修改系统状态:Available=Available-Req
2、uestAllocatio n= Allocatio n+RequestNeed=Need-Request(4) 系统执行安全性检查,如安全,如此分配成立;否如此试探险性分配作废, 系统恢复原状,进程等待。2. 安全性检查(1) 设置两个工作向量 Work=Available ; FinishM=False(2) 从进程集合中找到一个满足下述条件的进程,Fi nish i=FalseNeed=Work如找到,执行;否如此,执行(4)(3) 设进程获得资源,可顺利执行,直至完成,从而释放资源。Work=Work+Allocati onFini sh=TrueGO TO 2如所有的进程Finish
3、M=true ,如此表示安全;否如此系统不安全。#defi ne False 0#defi ne True 1int Max100100=0;各进程所需各类资源的最大需求int Avaliable100=0;系统可用资源char name100=0;资源的名称int Allocati on 100100=0;系统已分配资源int Need100100=0; 还需要资源int Request100=0;请求资源向量int temp100=0;存放安全序列int Work100=0;存放系统可提供资源int M=100; 作业的最大数为100 int N=100; 资源的最大数为100 void
4、showdata() 显示资源矩阵三、源代码#i nclude#i nclude#i nclude#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
5、 N=100; 资源的最大数为100void showdata()显示资源矩阵int i,j;cout 系统目前可用的资源Avaliable:endl; for(i=0;iN;i+)cout n amei;coute ndl;for (j=0;jN;j+)coutAvaliablej ;/输出分配资源coute ndl;coutMaxAllocatio nNeede ndl;coutvv 进程名 ;for(j=0;j3;j+)for(i=0;iN;i+)cout n amei;cout;coute ndl;for(i=0;iM;i+)cout i;for(j=0;jN;j+)coutMaxij
6、;cout;for(j=0;jN;j+)coutAllocationij; cout;for(j=0;jN;j+)coutNeedijvv;coute ndl;in t cha ngdata(i nt i)/进展资源分配int j;for (j=0;jM;j+) Avaliablej=Avaliablej-Requestj;Allocatio nij=Allocati on ij+Requestj; Needij=Needij-Requestj;return 1;int safe()安全性算法int i,k=0,m,apply,Fi ni sh100=0;int j;int flag=0;Wo
7、rk0=Avaliable0;Work1=Avaliable1;Work2=Avaliable2; for(i=0;iM;i+) apply=0;for(j=0;jN;j+)if (Fi ni shi=False&Needij=Workj) apply+;变分配数if(apply=N) for(m=0;mN;m+) Workm=Workm+Allocatio n im; Fini shi=True;tempk=i;i=-1;k+;flag+;for(i=0;iM;i+)if(Fi ni shi=False)coutvv 系统不安全endl;不成功系统不安全return -1;coutvv 系统
8、是安全的!endl;如果安全,输出成功cout分配的序列:;for(i=0;iM;i+)输出运行进程数组couttempi;if(iM-1) cout;coutvve ndl;return 0;void share()利用银行家算法对申请资源对进展判定char ch;int i=0,j=0;ch=y;coutvv请输入要求分配的资源进程号(0-vvM-1 i;输入须申请的资源号coutvv请输入进程vvivv申请的资源:endl;for(j=0;jRequestj;输入需要申请的资源for (j=0;jvN;j+)if(RequestjNeedij)/判断申请是否大于需求,假如大于如此出错co
9、utvv 进程vvivv申请的资源大于它需要的资源;coutvv分配不合理,不予分配!vve ndl;ch= n;break;else if(RequestjAvaliablej)判断申请是否大于当前资源,假如大于如此/出错coutvv 进程vvivv申请的资源大于系统现在可利用的资源;coutvv分配出错,不予分配!vvendl;ch= n;break;if(ch=y) cha ngdata(i);/根据进程需求量变换资源showdata();根据进程需求量显示变换后的资源safe();根据进程需求量进展银行家算法判断void addresources()/添加资源int n ,flag;c
10、outvv请输入需要添加资源种类的数量:;cinn;flag=N;N=N+n;for(int i=0;in ameflag;cout数量:;cin Avaliableflag+;showdata();safe();void delresources()/删除资源char ming;int i,flag=1;coutvv请输入需要删除的资源名称:;docinming;for(i=0;iN;i+)if(mi ng=n amei)flag=0;break;if(i=N)coutvv该资源名称不存在,请重新输入:;while(flag);for(i nt j=i;jN-1;j+)n amej=n amej+1;Avaliablej=Avaliablej+1;N=N-1;showdata();safe();void cha ngeresources()修改资源函数c