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

下载本文档

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

文档简介

1、 淮海工学院计算机工程学院实验报告书课程名:计算机操作系统 题 目: 实验二 银行家算法 班 级: 姓 名: 评语:成绩: 指导教师: 批阅时间: 年 月 日11 / 13实验二 银行家算法实验目的和要求应用银行家算法验证进程安全性检查与分配资源编制模拟银行家算法的程序,并以以下例子验证程序的正确性。实验环境1PC微机。2Windows 操作系统。3C/C+/VB开发集成环境。实验学时 2学时,必做实验实验容和步骤1)根据算法流程图编制可执行程序2)用以下两个例子验证程序的正确性。3)按照上述两个例子,输出执行的结果。算法流程图银行家算法:安全性算法:例1某系统有A、B、C、D这4类资源供5个

2、进程共享,进程对资源的需求和分配情况如下表所示。现在系统中A、B、C、D类资源分别还剩1、5、2、0个,请按银行家算法回答下列问题: 进程已占资源最大需求数ABCDABCDP100120012P210001750P313542356P406320652P500140656 (1)  现在系统是否处于安全状态?(2) 如果现在进程P2提出需要(0,4,2,0)个资源的请求,系统能否满足它的请求?例2用银行家算法考虑下列系统状态 :进程   分配矩阵    最大需求矩阵    &

3、#160;  资源总数矩阵 A    3  0  1  1         4  1  1  1         6  3  4  2 B    0  1  0  0     &#

4、160;   0  2  1  2 C    1  1  1  0         4  2  1  0 D    1  1  0  1         1  1  1  1 E&

5、#160;   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>#define N 20#define M 2

6、0using namespace std;int f(int aNM,int bNM,int m,int k) int j; for(j=0;j<m;j+) if(ak-1j>bk-1j)return 0; return 1;int g(int aNM,int b,int m,int k) int j; for(j=0;j<m;j+) if(akj>bj)return 0; return 1;int h(int a,int n) for(int i=0;i<n;i+) if(!ai)return 0; return 1;int p(int a,int bNM,in

7、t m,int k) int j; for(j=0;j<m;j+) if(aj>bk-1j)return 0; return 1;int q(int a,int b,int m) int j; for(j=0;j<m;j+) if(aj>bj)return 0; return 1;int safe(int FinishN,int WorkM,int NeedNM,int AllocationNM,int n,int m) int i,j,k; int tN; for(i=0;i<n;i+) ti=1; cout<<"安全性检查!"&

8、lt;<endl; for(i=0;i<n;)/ 首先找到一个满足条件的进程 if(Finishi=0)&&g(Need,Work,m,i) k=i; ti=0; cout<<"p("<<k+1<<"):"<<endl; cout<<"Work"<<m<<":" for(j=0;j<m;j+) cout<<Workj<<" " Workj=Workj+Al

9、locationij; Finishi=1; cout<<endl; cout<<"Need"<<m<<":" for(j=0;j<m;j+) cout<<Needij<<" " cout<<endl; cout<<"Allocation"<<m<<":" for(j=0;j<m;j+) cout<<Allocationij<<"

10、" cout<<endl; cout<<"(Work+Allocation)"<<m<<":" for(j=0;j<m;j+) cout<<Workj<<" " cout<<endl; cout<<"Finish"<<k+1<<":" cout<<Finishi<<" " cout<<endl; break

11、; else i+; if(g(Need,Work,m,k)/依次找到满足条件的后面几个进程 for(i=0;i<n;i+) if(ti) if(g(Need,Work,m,i) cout<<"p("<<i+1<<"):"<<endl; cout<<"Work"<<m<<":" for(j=0;j<m;j+) cout<<Workj<<" " Workj=Workj+Alloc

12、ationij; Finishi=1; cout<<endl; cout<<"Need"<<m<<":" for(j=0;j<m;j+) cout<<Needij<<" " cout<<endl; cout<<"Allocation"<<m<<":" for(j=0;j<m;j+) cout<<Allocationij<<" &qu

13、ot; cout<<endl; cout<<"(Work+Allocation)"<<m<<":" for(j=0;j<m;j+) cout<<Workj<<" " cout<<endl; cout<<"Finish"<<i+1<<":" cout<<Finishi<<" " cout<<endl; ti=0; el

14、se return 0; if(h(Finish,n)return 1;/系统处于安全状态 else return 0;/系统处于不安全状态 void r(int FinishN,int WorkM,int AvailableM,int NeedNM,int AllocationNM,int MaxNM,int n,int m) int RequestM; char b; int i,j,k; cout<<"n要申请资源,请按'y'或'Y',否则按'n'或'N'"<<endl;/是立即进

15、行安全性检查,还是进行资源申请 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(

16、k>n) cout<<"您输入了错误的进程号,请核查后重新输入:"<<endl; cin>>k; cout<<"n请输入进程p("<<k<<")申请各类资源的数量:"<<endl; for (j=0; j<m; j+) cin>>Requestj; if(p(Request,Need,m,k) if(q(Request,Available,m) for(j=0;j<m;j+) Availablej=Availablej-R

17、equestj; Allocationk-1j=Allocationk-1j+Requestj; Needk-1j=Needk-1j-Requestj; Workj=Availablej; cout<<"试分配!"<<endl; cout<<"各种资源可利用的数量Available"<<m<<": "<<endl; for (j=0; j<m; j+) cout<<Availablej<<" " cout<&

18、lt;endl; cout<<"n已分配资源Allocation"<<m<<": "<<endl; for (i=0; i<n; i+) for (j=0; j<m; j+) cout<<Allocationij<<" " cout<<endl; cout<<"n最大需求矩阵Max"<<n<<""<<m<<": "<

19、<endl; for (i=0; i<n; i+) for (j=0; j<m; j+) cout<<Maxij<<" " cout<<endl; cout<<"n需求矩阵Need"<<n<<""<<m<<": "<<endl; for (i=0; i<n; i+) for (j=0; j<m; j+) cout<<Needij<<" "

20、; cout<<endl; if (safe(Finish,Work,Need,Allocation,n,m) /判断当前状态的安全性 cout<<"系统处于安全状态!" cout<<"n申请资源成功!"<<endl; else cout<<"n当前状态不安全!" /恢复数据 for (j=0; j<m; j+) Availablej=Availablej+Requestj; Allocationk-1j=Allocationk-1j-Requestj; Needk-1

21、j=Needk-1j+Requestj; Workj=Availablej; for(i=0; i<n; i+) Finishi=0; cout<<"n恢复数据:"<<endl;/显示输入各数组的值 cout<<"各种资源可利用的数量Available"<<m<<": "<<endl; for (j=0; j<m; j+) cout<<Availablej<<" " cout<<endl; cou

22、t<<"n已分配资源Allocation"<<m<<": "<<endl; for (i=0; i<n; i+) for (j=0; j<m; j+) cout<<Allocationij<<" " cout<<endl; cout<<"n最大需求矩阵Max"<<n<<""<<m<<": "<<endl; fo

23、r (i=0; i<n; i+) for (j=0; j<m; j+) cout<<Maxij<<" " cout<<endl; cout<<"n需求矩阵Need"<<n<<""<<m<<": "<<endl; for (i=0; i<n; i+) for (j=0; j<m; j+) cout<<Needij<<" " cout<&l

24、t;endl; cout<<"系统无足够的资源满足进程p"<<k<<"的申请,p"<<k<<"必须等待!"<<endl; else cout<<"系统无足够的资源满足进程p"<<k<<"的申请,p"<<k<<"必须等待!"<<endl;else cout<<"出错,进程所需要的资源数目已超过它所宣布的最大值!&q

25、uot;<<endl; void main() cout<<"-"<<endl; cout<<"-模拟银行家算法-"<<endl; cout<<"-"<<endl; cout<<"-江之风海之韵-"<<endl; cout<<"-QuQu-"<<endl; cout<<"-"<<endl; int AvailableM;

26、int MaxNM; int AllocationNM; int NeedNM; int WorkM; int FinishN; int i,j,n,m; /定义全局变量 cout<<"输入进程的数量: "/从此开始输入有关数据 cin>>n; cout<<"输入资源种类数: " cin>>m; cout<<"输入各种资源可利用的数量Available"<<m<<": "<<endl; for (j=0; j<m; j+) cin>>Availablej; Workj=Availablej;/初始化Workj cout<<"n输入各进程对各类资源的最大需求数Max"<<n<<""<<m<<": "<<endl; cout<<"n请严格按照("<<n

温馨提示

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

评论

0/150

提交评论