操作系统实验报告实验二_第1页
操作系统实验报告实验二_第2页
操作系统实验报告实验二_第3页
操作系统实验报告实验二_第4页
操作系统实验报告实验二_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

昆明理工大学信息工程与自动化学院学生实验报告(—年第二学期)课程名称:操作系统开课实验室:信自楼445年5月9日年级、专业、班学号姓名成绩实验项目名称银行家算法指导教师舒国锋教师评语教师签名:年月日规定:对给定的一种资源分派矩阵状态列表(可参考教材例题或习题),用安全性算法检查现在状态与否安全,并找出一种安全序列,然后某进程提出资源申请,用银行家算法判断与否能分派一、实验目的通过编写银行家算法,规定学生进一步掌握如何实现死锁的避免,进一步纯熟使用数组进行程序的设计及实现。二、实验原理及基本技术路线图(方框原理图)用C语言或C++语言开发。实现银行家算法、安全性检测算法。算法介绍:1.银行家算法当进程p申请一种资源时,系统完毕下列工作。 如果Request>Need,表达出错,由于进程申请的资源多于它自己申报的最大量; 如果Request>Allocation,则p必须等待; 否则,系统假设已经分给p所申请的资源(试探性分派),并修改系统状态;Available:=Available-Request; Allocation:=Allocation+Request; Need:=Need-Request;调用安全性算法,判断现在的系统状态与否仍处在安全状态,若是,则真正实施分派;否则,回绝自此分派,恢复原来的系统状态,进程p等待。Available:=Available+Request; Allocation:=Allocation-Request; Need:=Need+Request; 2.安全性算法 安全性算法是银行家算法的子算法,是由银行家算法调用的。判断一种状态与否安全的算法以下: ①令work和Finish分别是长度为m和n的向量,初始化。 Work:=Available; Finish[i]:=false(i=1,2,…,n) ②寻找符合下列条件的i。 Finish[i]=false并且Need<=Work 如果没有这样的i存在,转到环节④; ③Work:=Work+Allocation; Finish[i]=true; 转到环节②; ④如果对全部的i,Finish[i]=true都成立,则系统处在安全状态:否则,系统是不安全的。3.流程图 资源分派算法资源分派算法请求超量,带错返回Request[i]请求超量,带错返回Request[i]≤Need[i]FTRequest[i]Request[i]≤Available申请无法满足,进程p等待F申请无法满足,进程p等待TAvailable-=Request[i];Available-=Request[i];Allocation[i]+=Request[i];Need[i]-=Request[i];Available+=Request[i];Available+=Request[i];Allocation[i]-=Request[i];Need[i]+=Request[i];安全检查安全检查FT确认分派,p继续申请造成不安全确认分派,p继续申请造成不安全进程p等待算法结束算法结束安全检查算法安全检查算法Work=Available;Work=Available;Finish=0;有满足条件的有满足条件的j:Finish[j]==0Need[j]≤WorkF"j,finish[j]==1"j,finish[j]==1TFFinish[j]=1;Work+=Allocation[j]Finish[j]=1;Work+=Allocation[j]T返回不安全结束返回安全返回不安全结束返回安全结束 4.数据构造intAvailable[100];//可运用资源数组intMax[50][100];//最大需求矩阵intAllocation[50][100];//分派矩阵intNeed[50][100];//需求矩阵intRequest[50][100];//M个进程还需要N类资源的资源量intp[50];intm,n;//M个进程,N类资源intWork[100];//可运用资源数组intFinish[50];//安全序列数组5.函数阐明intSafe()//安全算法函数bank()//银行卡算法函数三、所用仪器、材料(设备名称、型号、规格等)。计算机一台四、实验办法、环节#include<iostream.h>////////////////////////////////////////////////////////////////////////////全局变量定义intAvailable[100];//可运用资源数组intMax[50][100];//最大需求矩阵intAllocation[50][100];//分派矩阵intNeed[50][100];//需求矩阵intRequest[50][100];//M个进程还需要N类资源的资源量intFinish[50];intp[50];intm,n;//M个进程,N类资源intSafe(){ inti,j,k,l=0; intWork[100];//可运用资源数组 for(j=0;j<n;j++) Work[j]=Available[j]; for(i=0;i<m;i++) Finish[i]=0; for(i=0;i<m;i++) { if(Finish[i]==0) { for(j=0;j<n;j++) { if(Need[i][j]>Work[j]) break; } if(j==n) { Finish[i]=1; for(k=0;k<n;k++) Work[k]+=Allocation[i][k]; p[l++]=i; i=-1; } } if(l==m) { cout<<"系统是安全的!"<<'\n'; cout<<"系统安全序列是:\n"; for(i=0;i<l;i++) { cout<<p[i]; if(i!=l-1) cout<<"-->"; } cout<<'\n'; return1; } }}bank(){ intj; for(j=0;j<n;j++) { Available[j]-=Request[m][j]; Allocation[m][j]+=Request[m][j]; Need[m][j]-=Request[m][j]; } if(Safe()) cout<<"同意分派请求\n"; else { cout<<"你的请求被回绝\n"; for(j=0;j<n;j++) { Available[j]+=Request[m][j]; Allocation[m][j]-=Request[m][j]; Need[m][j]+=Request[m][j]; } }}intmain(){ inti,j,x; cout<<"输入进程的数目:\n"; cin>>m; cout<<"输入资源的种类:\n"; cin>>n; cout<<"输入每个进程最多所需的各类资源数,按照"<<m<<"x"<<n<<"矩阵输入\n"; for(i=0;i<m;i++) for(j=0;j<n;j++) cin>>Max[i][j]; cout<<"输入每个进程已经分派的各类资源数,按照"<<m<<"x"<<n<<"矩阵输入\n"; for(i=0;i<m;i++) { for(j=0;j<n;j++) { cin>>Allocation[i][j]; Need[i][j]=Max[i][j]-Allocation[i][j]; if(Need[i][j]<0) { cout<<"你输入的第"<<i+1<<"个进程所拥有的第"<<j+1<<"个资源错误,请重新输入:\n"; j--; continue; } } } cout<<"请输入各个资源现有的数目:\n"; for(i=0;i<n;i++) cin>>Available[i]; cout<<"输入你要对第几个进程进行资源分派:\n"; cin>>n; cout<<"输入多个资源的分派状况:\n"; for(j=0;j<n;j++) { cin>>Request[x][j]; } b

温馨提示

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

最新文档

评论

0/150

提交评论