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

下载本文档

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

文档简介

淮海工学院计算机工程学院实验报告书课程名:《计算机操作系统》题目:实验二银行家算法班级:^^姓名:^^实验二银行家算法实验目的和要求应用银行家算法验证进程平安性检查及分配资源编制模拟银行家算法的程序,并以以下例子验证程序的正确性。实验环境1.PC微机。2.Windows操作系统。3.C/C++/VB开发集成环境。实验学时2学时,必做实验实验内容和步骤1)根据算法流程图编制可执行程序2)用以下两个例子验证程序的正确性。3)按照上述两个例子,输出执行的结果。算法流程图银行家算法:平安性算法:【例1】某系统有A、B、C、D这4类资源供5个进程共享,进程对资源的需求和分配情况如下表所示。现在系统中A、B、C、D类资源分别还剩1、5、2、0个,请按银行家算法答复以下问题:

进程已占资源最大需求数ABCDABCDP100120012P210001750P313542356P406320652P500140656

(1)

现在系统是否处于平安状态?(2)如果现在进程P2提出需要(0,4,2,0)个资源的请求,系统能否满足它的请求?【例2】用银行家算法考虑以下系统状态:进程

分配矩阵

最大需求矩阵

资源总数矩阵

A

3

0

1

1

4

1

1

1

6

3

4

2

B

0

1

0

0

0

2

1

2

C

1

1

1

0

4

2

1

0

D

1

1

0

1

1

1

1

1

E

0

0

0

0

2

1

1

0问系统是否平安?若进程B请求(0,0,1,0),可否立即分配?此后进程E也请求(0,0,1,0),可否分配给它?通过运行程序发现,例1当中的系统处于不平安状态,进程P2提出的请求无法实现;例2当中的系统处于平安状态,进程B提出的请求能实现,此后进程E的请求也能实现。源代码#include<iostream>#defineN20#defineM20usingnamespacestd;intf(inta[N][M],intb[N][M],intm,intk){intj;for(j=0;j<m;j++)if(a[k-1][j]>b[k-1][j])return0;return1;}intg(inta[N][M],intb[],intm,intk){intj;for(j=0;j<m;j++)if(a[k][j]>b[j])return0;return1;}inth(inta[],intn){for(inti=0;i<n;i++)if(!a[i])return0;return1;}intp(inta[],intb[N][M],intm,intk){intj;for(j=0;j<m;j++)if(a[j]>b[k-1][j])return0;return1;}intq(inta[],intb[],intm){intj;for(j=0;j<m;j++)if(a[j]>b[j])return0;return1;}intsafe(intFinish[N],intWork[M],intNeed[N][M],intAllocation[N][M],intn,intm){inti,j,k;intt[N];for(i=0;i<n;i++)t[i]=1;cout<<"平安性检查!"<<endl;for(i=0;i<n;)//首先找到一个满足条件的进程{if((Finish[i]==0)&&g(Need,Work,m,i)){k=i;t[i]=0;cout<<"p("<<k+1<<"):"<<endl;cout<<"Work["<<m<<"]:";for(j=0;j<m;j++){cout<<Work[j]<<"";Work[j]=Work[j]+Allocation[i][j];Finish[i]=1;}cout<<endl;cout<<"Need["<<m<<"]:";for(j=0;j<m;j++)cout<<Need[i][j]<<"";cout<<endl;cout<<"Allocation["<<m<<"]:";for(j=0;j<m;j++)cout<<Allocation[i][j]<<"";cout<<endl;cout<<"(Work+Allocation)["<<m<<"]:";for(j=0;j<m;j++)cout<<Work[j]<<"";cout<<endl;cout<<"Finish["<<k+1<<"]:";cout<<Finish[i]<<"";cout<<endl;break;}else{i++;}}if(g(Need,Work,m,k))//依次找到满足条件的后面几个进程{for(i=0;i<n;i++){if(t[i]){if(g(Need,Work,m,i)){cout<<"p("<<i+1<<"):"<<endl;cout<<"Work["<<m<<"]:";for(j=0;j<m;j++){cout<<Work[j]<<"";Work[j]=Work[j]+Allocation[i][j];Finish[i]=1;}cout<<endl;cout<<"Need["<<m<<"]:";for(j=0;j<m;j++)cout<<Need[i][j]<<"";cout<<endl;cout<<"Allocation["<<m<<"]:";for(j=0;j<m;j++)cout<<Allocation[i][j]<<"";cout<<endl;cout<<"(Work+Allocation)["<<m<<"]:";for(j=0;j<m;j++)cout<<Work[j]<<"";cout<<endl;cout<<"Finish["<<i+1<<"]:";cout<<Finish[i]<<"";cout<<endl;t[i]=0;}}}}else{return0;}if(h(Finish,n))return1;//系统处于平安状态elsereturn0;//系统处于不平安状态}voidr(intFinish[N],intWork[M],intAvailable[M],intNeed[N][M],intAllocation[N][M],intMax[N][M],intn,intm){intRequest[M];charb;inti,j,k;cout<<"\n要申请资源,请按'y'或'Y',否则按'n'或'N'"<<endl;//是立即进行平安性检查,还是进行资源申请cin>>b;if(b!='y'&&b!='Y'){if(safe(Finish,Work,Need,Allocation,n,m)){cout<<"此时刻系统平安!\n";}else{cout<<"此时刻系统不平安!\n";}}else{{cout<<"\n请输入申请资源的进程编号(1,2,…,"<<n<<"):"<<endl;cin>>k;while(k>n){cout<<"您输入了错误的进程号,请核查后重新输入:"<<endl;cin>>k;}cout<<"\n请输入进程p("<<k<<")申请各类资源的数量:"<<endl;for(j=0;j<m;j++)cin>>Request[j];if(p(Request,Need,m,k)){if(q(Request,Available,m)){for(j=0;j<m;j++){Available[j]=Available[j]-Request[j];Allocation[k-1][j]=Allocation[k-1][j]+Request[j];Need[k-1][j]=Need[k-1][j]-Request[j];Work[j]=Available[j];}cout<<"试分配!"<<endl;cout<<"各种资源可利用的数量Available["<<m<<"]:"<<endl;for(j=0;j<m;j++){cout<<Available[j]<<"";}cout<<endl;cout<<"\n已分配资源Allocation["<<m<<"]:"<<endl;for(i=0;i<n;i++){for(j=0;j<m;j++){cout<<Allocation[i][j]<<"";}cout<<endl;}cout<<"\n最大需求矩阵Max["<<n<<"]["<<m<<"]:"<<endl;for(i=0;i<n;i++){for(j=0;j<m;j++){cout<<Max[i][j]<<"";}cout<<endl;}cout<<"\n需求矩阵Need["<<n<<"]["<<m<<"]:"<<endl;for(i=0;i<n;i++){for(j=0;j<m;j++){cout<<Need[i][j]<<"";}cout<<endl;}if(safe(Finish,Work,Need,Allocation,n,m)){//判断当前状态的平安性cout<<"系统处于平安状态!";cout<<"\n申请资源成功!!!"<<endl;}else{cout<<"\n当前状态不平安!!!!!!";//恢复数据for(j=0;j<m;j++){Available[j]=Available[j]+Request[j];Allocation[k-1][j]=Allocation[k-1][j]-Request[j];Need[k-1][j]=Need[k-1][j]+Request[j];Work[j]=Available[j];}for(i=0;i<n;i++)Finish[i]=0;cout<<"\n恢复数据:"<<endl;//显示输入各数组的值cout<<"各种资源可利用的数量Available["<<m<<"]:"<<endl;for(j=0;j<m;j++){cout<<Available[j]<<"";}cout<<endl;cout<<"\n已分配资源Allocation["<<m<<"]:"<<endl;for(i=0;i<n;i++){for(j=0;j<m;j++){cout<<Allocation[i][j]<<"";}cout<<endl;}cout<<"\n最大需求矩阵Max["<<n<<"]["<<m<<"]:"<<endl;for(i=0;i<n;i++){for(j=0;j<m;j++){cout<<Max[i][j]<<"";}cout<<endl;}cout<<"\n需求矩阵Need["<<n<<"]["<<m<<"]:"<<endl;for(i=0;i<n;i++){for(j=0;j<m;j++){cout<<Need[i][j]<<"";}cout<<endl;}cout<<"系统中尚无足够的资源满足进程p["<<k<<"]的申请,p["<<k<<"]必须等待!"<<endl;}}elsecout<<"系统中尚无足够的资源满足进程p["<<k<<"]的申请,p["<<k<<"]必须等待!"<<endl;}elsecout<<"出错,进程所需要的资源数目已超过它所宣布的最大值!"<<endl;}}}voidmain(){cout<<"---------------------------------------------------------"<<endl;cout<<"------------------模拟银行家算法------------------"<<endl;cout<<"---------------------------------------------------------"<<endl;cout<<"--------------------江之风海之韵-------------------"<<endl;cout<<"------------------------QuQu-------------------------"<<endl;cout<<"---------------------------------------------------------"<<endl;intAvailable[M];intMax[N][M];intAllocation[N][M];intNeed[N][M];intWork[M];intFinish[N];inti,j,n,m;//定义全局变量cout<<"输入进程的数量:";//从此开始输入有关数据cin>>n;cout<<"输入资源种类数:";cin>>m;cout<<"输入各种资源可利用的数量Available["<<m<<"]:"<<endl;for(j=0;j<m;j++){cin>>Available[j];Work[j]=Available[j];//初始化Work[j]}cout<<"\n输入各进程对各类资源的最大需求数Max["<<n<<"]["<<m<<"]:"<<endl;

温馨提示

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

评论

0/150

提交评论