




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
计算机操作系统试验汇报何美西试验名称:银行家算法试验目的:银行家算法是防止死锁的一种重要措施,通過编写一种简朴的银行家算法程序,加深理解有关资源申請、防止死锁等概念,并体會和理解死锁和防止死锁的详细实行措施。問題分析与设计:1、算法思绪:先對顾客提出的祈求進行合法性检查,即检查祈求与否不小于需要的,与否不小于可运用的。若祈求合法,则進行预分派,對分派後的状态调用安全性算法進行检查。若安全,则分派;若不安全,则拒绝申請,恢复到本来的状态,拒绝申請。2、银行家算法环节:(1)假如Requesti<or=Need,则转向环节(2);否则,认為出錯,由于它所需要的资源数已超過它所宣布的最大值。(2)假如Request<or=Available,则转向环节(3);否则,表达系统中尚無足够的资源,進程必须等待。(3)系统试探把规定的资源分派給進程Pi,并修改下面数据构造中的数值:Available=Available-Request[i];Allocation=Allocation+Request;Need=Need-Request;(4)系统执行安全性算法,检查本次资源分派後,系统与否处在安全状态。3、安全性算法环节:(1)设置两個向量①工作向量Work。它表达系统可提供進程继续运行所需要的各类资源数目,执行安全算法開始時,Work=Allocation;②布尔向量Finish。它表达系统与否有足够的资源分派給進程,使之运行完毕,開始時先做Finish[i]=false,當有足够资源分派給進程時,令Finish[i]=true。(2)從進程集合中找到一种能满足下述条件的進程:①Finish[i]=false②Need<or=Work如找到,执行环节(3);否则,执行环节(4)。(3)當進程P获得资源後,可顺利执行,直至完毕,并释放出分派給它的资源,故应执行:Work=Work+Allocation;Finish[i]=true;转向环节(2)。(4)假如所有進程的Finish[i]=true,则表达系统处在安全状态;否则,系统处在不安全状态。4、流程图:系统重要過程流程图银行家算法流程图安全性算法流程图试验代码:#include<iostream.h>#include<string.h>#include<stdio.h>#defineFalse0#defineTrue1intMax[100][100]={0};//各進程所需各类资源的最大需求intAvaliable[100]={0};//系统可用资源charname[100]={0};//资源的名称intAllocation[100][100]={0};//系统已分派资源intNeed[100][100]={0};//還需要资源intRequest[100]={0};//祈求资源向量inttemp[100]={0};//寄存安全序列intWork[100]={0};//寄存系统可提供资源intp[100]={0};intq[100][100]={0};intz[100][100]={0};intM=100;//作业的最大数為100intN=100;//资源的最大数為100intgg=1;voidshowdata()//显示资源矩阵{inti,j;cout<<endl<<"此時刻的资源分派状况為:"<<endl;cout<<"MaxAllocationNeedAvaliable"<<endl;cout<<"進程名";for(j=0;j<4;j++){for(i=0;i<N;i++)cout<<name[i]<<"";cout<<"";}cout<<endl;for(i=0;i<M;i++){cout<<""<<i<<"";for(j=0;j<N;j++)cout<<Max[i][j]<<"";cout<<"";for(j=0;j<N;j++)cout<<Allocation[i][j]<<"";cout<<"";for(j=0;j<N;j++)cout<<Need[i][j]<<"";if(i==0){cout<<"";for(j=0;j<N;j++)cout<<Avaliable[j]<<"";//输出分派资源}cout<<endl;}}intchangdata(inti)//進行资源分派{intj;for(j=0;j<M;j++){//p[j]=Avaliable[j];Avaliable[j]=Avaliable[j]-Request[j];//q[i][j]=Allocation[i][j];Allocation[i][j]=Allocation[i][j]+Request[j];//z[i][j]=Need[i][j];Need[i][j]=Need[i][j]-Request[j];}return1;}intsafe()//安全性算法{inti,d,k=0,m,h,s,apply,Finish[100]={0};intj;intflag=0;for(i=0;i<N;i++)Work[i]=Avaliable[i];cout<<endl<<"安全性检查"<<endl;cout<<"WorkNeedAllocationWork+AllocationFinish"<<endl;cout<<"進程名";for(h=0;h<4;h++){for(s=0;s<N;s++)cout<<name[s]<<"";cout<<"";}cout<<endl;for(i=0;i<M;i++){apply=0;for(j=0;j<N;j++){if(Finish[i]==False&&Need[i][j]<=Work[j]){apply++;if(apply==N){cout<<""<<i<<"";for(d=0;d<N;d++)cout<<Work[d]<<"";cout<<"";for(d=0;d<N;d++)cout<<Need[i][d]<<"";cout<<"";for(d=0;d<N;d++)cout<<Allocation[i][d]<<"";cout<<"";for(m=0;m<N;m++){Work[m]=Work[m]+Allocation[i][m];cout<<Work[m]<<"";}//变分派数Finish[i]=True;temp[k]=i;cout<<"";cout<<"true"<<"";cout<<endl;i=-1;k++;flag++;}}}}for(i=0;i<M;i++){if(Finish[i]==False){for(j=0;j<N;j++){Avaliable[j]=Avaliable[j]+Request[j];;Allocation[i][j]=Allocation[i][j]-Request[j];;Need[i][j]=Need[i][j]+Request[j];}cout<<endl<<"系统進入不安全状态!此時系统不分派资源!"<<endl;//不成功系统不安全return0;}}cout<<endl<<"此時系统是安全的!"<<endl;//假如安全,输出成功cout<<"安全序列為:";for(i=0;i<M;i++){//输出运行進程数组cout<<temp[i];if(i<M-1)cout<<"->";}cout<<endl;return0;}voidshare()//运用银行家算法對申請资源對進行鉴定{charch;inti=0,j=0;ch='y';cout<<endl<<"請输入规定分派的资源進程号(0-"<<M-1<<"):";cin>>i;//输入须申請的资源号cout<<endl<<"請输入進程"<<i<<"申請的资源:"<<endl;for(j=0;j<N;j++){cout<<name[j]<<":";cin>>Request[j];//输入需要申請的资源}for(j=0;j<N;j++){if(Request[j]>Need[i][j])//判断申請与否不小于需求,若不小于则出錯{cout<<endl<<"進程"<<i<<"申請的资源不小于它需要的资源";cout<<"分派不合理,不予分派!"<<endl;ch='n';break;}else{if(Request[j]>Avaliable[j])//判断申請与否不小于目前资源,若不小于则{//出錯cout<<endl<<"進程"<<i<<"申請的资源不小于系统目前可运用的资源";cout<<"分派出錯,不予分派!"<<endl;ch='n';break;}}}if(ch=='y'){changdata(i);//根据進程需求量变换资源showdata();//根据進程需求量显示变换後的资源safe();//根据進程需求量進行银行家算法判断}}intmain()//主函数{intt=1,i,j,number,choice,m,n,flag;charming;cout<<"*****************银行家算法的设计与实現*****************"<<endl;cout<<endl<<"請首先输入系统可供资源种类的数量:";cin>>n;N=n;for(i=0;i<n;i++){cout<<"资源"<<i+1<<"的名称:";cin>>ming;name[i]=ming;cout<<"资源的数量:";cin>>number;Avaliable[i]=number;}cout<<endl;cout<<"請输入作业的数量:";cin>>m;M=m;cout<<endl<<"請输入各進程的最大需求量("<<m<<"*"<<n<<"矩阵)[Max]:"<<endl;for(i=0;i<m;i++)for(j=0;j<n;j++)cin>>Max[i][j];do{flag=0;cout<<endl<<"請输入各進程已經申請的资源量("<<m<<"*"<<n<<"矩阵)[Allocation]:"<<endl;for(i=0;i<m;i++)for(j=0;j<n;j++){cin>>Allocation[i][j];if(Allocation[i][j]>Max[i][j])flag=1;Need[i][j]=Max[i][j]-Allocation[i][j];}if(flag)cout<<endl<<"申請的资源不小于最大需求量,請重新输入!\n"<<endl;}while(flag);showdata();//显示多种资源safe();//用银行家算法鉴定系统与否安全while(1){if(t==1){cout<<endl<<"运用银行家算法预分派资源"<<endl;share();t=0;}elsebreak;cout<<endl<<"
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 心电监护基础知识课件
- 第一国际课件
- 2025年公共自行车系统合作协议书
- 出口委托付款协议书范本
- 2025年高精度数字电压表项目发展计划
- 拆墙施工协议书模板范本
- 购买电脑协议书范本
- 房屋刷墙劳务协议书范本
- 上门女婿协议书范本
- 金融调解协议书范本
- 2025年高考数学必刷题分类:第2讲、常用逻辑用语(教师版)
- 2025农商行借款合同模板
- 《PPP模式下的老旧小区博弈研究国内外文献综述5100字》
- 公转私提额合同范例
- 2025重庆市建筑安全员C证考试题库
- 二零二五年度特色美食街项目投资合作协议3篇
- Invitation letter - USA 外国人来华邀请函-美国
- 2024年安徽电气工程职业技术学院高职单招职业技能测验历年参考题库(频考版)含答案解析
- 人教版(2025新版)七年级下册数学第七章 相交线与平行线 单元测试卷(含答案)
- 《铁路技术管理规程》(普速铁路部分)
- 储能电站基础知识
评论
0/150
提交评论