计算机操作系统 银行家算法.doc_第1页
计算机操作系统 银行家算法.doc_第2页
计算机操作系统 银行家算法.doc_第3页
计算机操作系统 银行家算法.doc_第4页
计算机操作系统 银行家算法.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

银行家算法/Breaker.h文件代码#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;/资源的最大数为100int S=1;/定义变量用于数据恢复void showdata()/显示资源矩阵 int i,j; cout系统目前可用的资源Avaliable:endl; for(i=0;iN;i+) cout namei ;/输出第i类资源的名称 coutendl; for (j=0;jN;j+) coutAvaliablej ;/输出分配资源 coutendl; cout M a x Allocation Needendl; cout进程名 ; for(j=0;j3;j+)/for循环 输出显示的资源类别名称 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 safe()/安全性算法int i,j,k=0,m,apply,Finish100=0;for(j=0;jN;j+)Workj=Avaliablej;for(i=0;iM;i+)/作业 apply=0;for(j=0;jN;j+)/种类 if (Finishi=False&Needij=Workj)/Finishi=False是个很关键的条件,也使下面的i=-1变得高效很多 apply+; if(apply=N)/N个种类对应的Work都必须成立,即apply会自加到N for(m=0;mN;m+) Workm=Workm+Allocationim;/变分配数,更新Work Finishi=True; tempk=i;/存储安全序列 k+; i=-1;/此i用得相当的好!每次安全序列增加时for(i=0;iM;i+)都会从头开始循环/避免在Work更新后有些可以进入安全序列的进程出现丢失for(i=0;iM;i+) if(Finishi=False) cout系统不安全endl;/不成功系统不安全 S=-1; return S; cout系统是安全的!endl;/如果安全,输出成功cout分配的序列:;for(i=0;iM;i+)/输出运行进程数组couttempi;if(iM-1) cout; coutendl; return 0;int changdata(int i)/进行资源分配 int j;for (j=0;jN;j+) Avaliablej=Avaliablej-Requestj; Allocationij=Allocationij+Requestj; Needij=Needij-Requestj;return 1;int discover(int i)/进行资源恢复 int j;for (j=0;jN;j+) Avaliablej=Avaliablej+Requestj; Allocationij=Allocationij-Requestj; Needij=Needij+Requestj;return 1;void share()/对申请资源对进行判定char ch;int i=0,j=0;ch=y;cout请输入要求分配的资源进程号(0-M-1i;/输入须申请的资源号cout请输入进程 i 申请的资源:endl;for(j=0;jN;j+) coutnamejRequestj;/输入需要申请第j类的资源数量for (j=0;jNeedij)/判断申请是否大于需求,若大于则出错 cout进程 i申请的资源大于它需要的资源; cout 分配不合理,不予分配!Avaliablej)/判断申请是否大于当前可分配资源,若大于则 /出错 cout进程i申请的资源大于系统现在可利用的资源; cout 分配出错,不予分配!endl; ch=n; break; if(ch=y) changdata(i);/根据进程需求量变换资源,即第i个作业Pisafe();/根据进程需求量进行银行家算法判断if(S=-1) cout资源分配后系统不安全,资源已恢复!endl;discover(i);showdata();/根据进程需求量显示变换后的资源void addresources()/添加资源int n,i,flag;coutn;flag=N;N=N+n;for(;flagN;flag+) coutnameflag; coutAvaliableflag; for(i=0;iM;i+) cout请输入第 i 进程的对该资源的最大需求量Max:Maxiflag;Neediflag=Maxiflag-Allocationiflag; showdata();safe();void delresources()/删除资源char ming;int i,m,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;for(m=0;mM;m+)for(j=i;jN-1;j+) Allocationmj=Allocationmj+1; Maxmj=Maxmj+1; Needmj=Needmj+1;N=N-1;/删除一个资源,所以资源总数减一showdata();safe();void changeresources()/修改资源函数int i,k;cout系统目前可用的资源Avaliable:endl;for(i=0;iN;i+)coutnamei:Avaliableiendl;for(i=0;iN;i+)cout输入namei可用资源Avaliable:Avaliablei;coutendl;cout经修改后的系统可用资源为endl;for (k=0;kN;k+)coutnamek:Avaliablekendl;safe();void addprocess()/添加作业 int flag=M;M=M+1;cout请输入该进程对每类资源的最大需求量Maxendl;for(int i=0;iN;i+) coutnameiMaxflagi; Needflagi=Maxflagi-Allocationflagi;showdata();safe();/Breaker.cpp文件代码#include Banker.hint 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;/记录第i类资源的可用数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);/flag用于标记已经申请的资源是否大于最大需求量showdata();/显示各种资源safe();/用银行家算法判定系统是否安全while(choice)cout*银行家算法演示*endl;cout 1:增加资源 endl;cout 2:删除资源 endl;cout 3:修改资源 endl;cout 4:分配资源 endl;cout 5:增加作业 endl;cout 6:显示资源 endl;cout 0:离开 endl;cout*endl;coutchoice;switch(choice) case 1: addresources();break;/增加资源 case 2: delresources();break;/删除资源 c

温馨提示

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

评论

0/150

提交评论