武汉轻工大学——实验四模拟实现银行家算法实验_第1页
武汉轻工大学——实验四模拟实现银行家算法实验_第2页
武汉轻工大学——实验四模拟实现银行家算法实验_第3页
武汉轻工大学——实验四模拟实现银行家算法实验_第4页
武汉轻工大学——实验四模拟实现银行家算法实验_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

1、武汉轻工大学数学与计算机学院操作系统实验报告题 目: 模拟实现银行家算法 专 业: 数学与计算机学院 班 级: 计算机类1303班 学 号: 1305110050 姓 名: 刘文斌 指导老师: 黄川 2015年05月26日1、 目的和要求在熟练掌握死锁发生原理和解决死锁问题的基础上,利用一种程序设计语言模拟实现利用银行家算法实现死锁避免,一方面加深对原理的理解,另一方面提高学生通过编程根据已有原理解决实际问题的能力,为学生将来进行系统软件开发和针对实际问题提出高效的软件解决方案打下基础。2、 实验内容模拟实现银行家算法对系统资源进行分配,以防止死锁的出现。本课题肯定不可能实现对实际操作系统的资

2、源管理,而是通过对模拟资源数据的处理,检测银行家算法在防止死锁出现的作用。 银行家算法描述:第一部分:银行家算法(扫描)1如果Request<=Need,则转向2;否则,出错2如果Request<=Available,则转向3,否则等待3系统试探分配请求的资源给进程4系统执行安全性算法第二部分:安全性算法1.设置两个向量(1).工作向量:Work=Available(表示系统可提供给进程继续运行所需要的各类资源数目)(2).Finish:表示系统是否有足够资源分配给进程(True:有;False:没有).初始化为False2.若Finishi=False&&Need

3、<=Work,则执行3;否则执行4(i为资源类别)3.进程P获得第i类资源,则顺利执行直至完成,并释放资源:Work=Work+Allocation;Finishi=true;3、 实验环境Windows操作系统、VC+6.0C语言4、 设计思想当进程pi提出资源申请时,系统执行下列步骤:(1)若RequestiNeedi,转(2);否则错误返回(2)若RequestiAvailable,转(3);否则进程等待(3)假设系统分配了资源,则有:Available:=Available-Requesti;Allocationi:=Allocationi+Requesti;Needi:=Nee

4、di-Requesti若系统新状态是安全的,则分配完成若系统新状态是不安全的,则恢复原状态,进程等待模拟实现Dijkstra的银行家算法以避免死锁的出现.分两部分组成:5、 源程序#include <iostream>using namespace std;#define MAXPROCESS 50 /*最大进程数*/#define MAXRESOURCE 100 /*最大资源数*/int AVAILABLEMAXRESOURCE; /*可用资源数组*/int MAXMAXPROCESSMAXRESOURCE; /*最大需求矩阵*/int ALLOCATIONMAXPROCESSM

5、AXRESOURCE; /*分配矩阵*/int NEEDMAXPROCESSMAXRESOURCE; /*需求矩阵*/int REQUESTMAXPROCESSMAXRESOURCE; /*进程需要资源数*/bool FINISHMAXPROCESS; /*系统是否有足够的资源分配*/int pMAXPROCESS; /*记录序列*/int m,n; /*m个进程,n个资源*/void Init();bool Safe();void Bank();int main() Init(); Safe(); Bank();void Init() /*初始化算法*/ int i,j; cout<&

6、lt;"t-"<<endl; cout<<"t| |"<<endl; cout<<"t| 银行家算法 |"<<endl; cout<<"t| |"<<endl; cout<<"t| XXXXXXXXXXXXXXXXXXXX |"<<endl; cout<<"t| |"<<endl; cout<<"t| 2004024031

7、2004024054 |"<<endl; cout<<"t-"<<endl; cout<<"请输入进程的数目:" cin>>m; cout<<"请输入资源的种类:" cin>>n; cout<<"请输入每个进程最多所需的各资源数,按照"<<m<<"x"<<n<<"矩阵输入"<<endl; for(i=0;i<

8、;m;i+) for(j=0;j<n;j+) cin>>MAXij; cout<<"请输入每个进程已分配的各资源数,也按照"<<m<<"x"<<n<<"矩阵输入"<<endl; for(i=0;i<m;i+) for(j=0;j<n;j+) cin>>ALLOCATIONij; NEEDij=MAXij-ALLOCATIONij; if(NEEDij<0) cout<<"您输入的第"&

9、lt;<i+1<<"个进程所拥有的第"<<j+1<<"个资源数错误,请重新输入:"<<endl; j-; continue; cout<<"请输入各个资源现有的数目:"<<endl; for(i=0;i<n;i+) cin>>AVAILABLEi; void Bank() /*银行家算法*/ int i,cusneed; char again; while(1) cout<<"请输入要申请资源的进程号(注:第1个进程号

10、为0,依次类推)"<<endl; cin>>cusneed; cout<<"请输入进程所请求的各资源的数量"<<endl; for(i=0;i<n;i+) cin>>REQUESTcusneedi; for(i=0;i<n;i+) if(REQUESTcusneedi>NEEDcusneedi) cout<<"您输入的请求数超过进程的需求量!请重新输入!"<<endl; continue; if(REQUESTcusneedi>AVAIL

11、ABLEi) cout<<"您输入的请求数超过系统有的资源数!请重新输入!"<<endl; continue; for(i=0;i<n;i+) AVAILABLEi-=REQUESTcusneedi; ALLOCATIONcusneedi+=REQUESTcusneedi; NEEDcusneedi-=REQUESTcusneedi; if(Safe() cout<<"同意分配请求!"<<endl; else cout<<"您的请求被拒绝!"<<endl;

12、for(i=0;i<n;i+) AVAILABLEi+=REQUESTcusneedi; ALLOCATIONcusneedi-=REQUESTcusneedi; NEEDcusneedi+=REQUESTcusneedi; for(i=0;i<m;i+) FINISHi=false; cout<<"您还想再次请求分配吗?是请按y/Y,否请按其它键"<<endl; cin>>again; if(again='y'|again='Y') continue; break; bool Safe() /

13、*安全性算法*/ int i,j,k,l=0; int WorkMAXRESOURCE; /*工作数组*/ for(i=0;i<n;i+) Worki=AVAILABLEi; for(i=0;i<m;i+) FINISHi=false; for(i=0;i<m;i+) if(FINISHi=true) continue; else for(j=0;j<n;j+) if(NEEDij>Workj) break; if(j=n) FINISHi=true; for(k=0;k<n;k+) Workk+=ALLOCATIONik; pl+=i; i=-1; els

14、e continue; if(l=m) cout<<"系统是安全的"<<endl; cout<<"安全序列:"<<endl; for(i=0;i<l;i+) cout<<pi; if(i!=l-1) cout<<"->" cout<<""<<endl; return true; cout<<"系统是不安全的"<<endl; return false;6、 实例运行结果7、 总结操作系统的基本特征是并发与共享。系统允许多个进程并发执行,

温馨提示

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

评论

0/150

提交评论