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

下载本文档

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

文档简介

操作系统实验二(银行家算法)实验报告实验二实验报告实验源码:#include"stdio.h"#include<iostream.h>#include<string.h>TOC\o"1-5"\h\z#defineFalse0 〃定义False#defineTrue1 〃定义TrueintMax[100][100]={0}; // 各进程所需各类资源的最大需求intAvaliable[100]={0}; // 系统可用资源charname[100]={0}; //资源的名称intAllocation[100][100]={0}; //系统已分配资源intNeed[100][100]={0}; //还需要资源TOC\o"1-5"\h\zintRequest[100]={0}; //请求资源向量inttemp[100]={0}; //存放安全序列intWork[100]={0}; //存放系统可提供资源intM=100; //作业的最大数为100intN=100; //资源的最大数为100//显示资源矩阵voidshowdata(){inti,j;printf("\n此时刻的资源分配情况为:\n〃);//显示表头printf(" MaxAllocationNeedAvaliable'n");printf("PCB ");//显示作业名称for(j=0;j<4;j++){for(i=0;i<N;i++)printf("%c",name[i]);printf("");)printf(〃\n〃);//显示当前作业资源分配情况for(i=0;i<M;i++){printf('%d ",i);for(j=0;j<N;j++)printf('%d",Max[i][j]);printf("");for(j=0;j<N;j++)printf('%d”,Allocation[i][j]);printf("");for(j=0;j<N;j++)printf("%d”,Need[i][j]);if(i==0){printf("");for(j=0;j<N;j++)printf("%d”,Avaliable[j]);)printf(〃\n〃);//进行资源分配intchangdata(inti)(intj;for(j=0;j<M;j++){Avaliable[j]=Avaliable[j]一Request[j];Allocation[i][j]=Allocation[i][j]+Request[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];printf("安全性检查\n");printf(" WorkNeedAllocation Work+AllocationFinish\n");printf("PCB");//显示作业名称for(j=0;j<4;j++){for(i=0;i<N;i++)printf("%c",name[i]);printf("");)printf(〃\n〃);//显示当前作业资源分配情况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)(printf("%d ",i);for(d=0;d<N;d++)printf("%d”,Work[d]);printf("");for(d=0;d<N;d++)printf("%d”,Need[i][d]);printf("");for(d=0;d<N;d++)printf("%d”,Allocation[i][d]);printf("");for(m=0;m<N;m++)(Work[m]=Work[m]+Allocation[i][m];printf("%d”,Work[m]);}//变分配数Finish[i]=True;temp[k]=i;printf(" ");printf("true");printf(〃\n〃);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]Need[i][j]Need[i][j]Request[j];)printf("\n系统进入不安全状态!此时系统不分配资源!\n"); //不成功系统不安全return0;printf("\n此时系统是安全的!\n〃);//如果安全,输出成功printf(〃安全序列为:");for(i = 0;i<M;i++)//输出运行进程数组(printf("%d",temp[i]);if(i<M-1)printf(〃->〃);printf(〃\n〃);return0;

//利用银行家算法对申请资源对进行判定voidshare()charch;inti=0,j=0;ch='y';printf("\n请输入要求分配的资源进程号(0-%d):",M-1);scanf("%d",&i);//输入须申请的资源号printf("\n请输入进程%d申请的资W:\n",i);for(j=0;j<N;j++)(printf("%c:",name[j]);scanf("%d”,&Request[j]);//输入需要申请的资源)for(j=0;j<N;j++){if(Request[j]Need[i][j])if(Request[j]Need[i][j])//判断申请是否大于需求,若大于则出错printf("\n进程%d申请的资源大于它需要的资源",i);printf("分配不合理,不予分配!\n");ch='n';break;}else{if(Request[j]>Avaliable[j])//判断申请是否大于当前资源,若大于则{//出错printf("\n进程%d申请的资源大于系统现在可利用的资源〃,i);printf("分配出错,不予分配!\n");ch='n';break;}}}if(ch=='y'){changdata(i); //根据进程需求量变换资源showdata(); //根据进程需求

//根据进程需求量显示变换后的资源safe();//根据进程需求量进行银行家算法判断//主函数intmain()intt=1,i,j,number,choice,m,n,flag;charming;printf("\n请首先输入系统可供资源种类的scanf("%d",&n);N=n;for(i=0;i<n;i++)(printf("资源%d的名称:",i+1);scanf("%s",&ming);name[i]=ming;printf("资源的数量:"”scanf("%d",&number);Avaliable[i]=number;printf("\n");printf("请输入作业的数量:");scanf("%d",&m);M=m;printf("\n请输入各进程的最大需求量(%d*%d矩阵)[Max]:\n",m,n);for(i=0;i<m;i++)for(j=0;j<n;j++)scanf("%d”,&Max[i][j]);do{flag=0;printf("\n请输入各进程已经申请的资源量(%d*%d矩阵)[Alloca知on]:\n",m,n);for(i=0;i<m;i++)for(j=0;j<n;j++){scanf("%d”,&Allocation[i][j]);if(Allocation[i][j]>Max[i][j])flag=1;Max[i][j]Need[i][j]Allocation[i][j];

Max[i][j]}if(flag)printf("\n申请的资源大于最大需求量,请重新输入!\n\n〃);}while(flag);//显示各种资源//用银行家算法判定利用银行家算法预分配资//显示各种资源//用银行家算法判定利用银行家算法预分配资safe();系统是否安全while(1){if(t==1){printf("\n源\n〃);share();t=0;}elsebreak;printf("\n是否继续银行家算法?(按1键继续,按其它任意键退出):〃);scanf("%d",&t);printf(〃\n〃);return1;实验结果截图:运行程序:输入相应数据并完成首次自检:睛输入作业的数量污请输入各进程的最大需求量《5*3矩阵〉[归心:753322932^22433请布人各进程已经申请的资源苴(5*3矩阵)UUIocafEnrb1的i?w0口毋aftuA11ahl.R433安全性检查Work0^2 431NeedAllocationCB AECABCABC0 743 ?43 91S4 1055 431 @02Work+AllncationABC5327437531655105?FinishtpueftuA11ahl.R433安全性检查Work0^2 431NeedAllocationCB AECABCABC0 743 ?43 91S4 1055 431 @02Work+AllncationABC5327437531655105?Finishtpueti'uetruetruetrue此时呈统是安全的,安全序列S=i->3->0->2-X利用银行家算法预分配资源请输入要求分B的资源进程号6-4>:进程1请求资源Request(1,0,2):"tM乍业慕名5^?验\fin曲ed\shiyaner2\Debug^shiyanerZ.exe"一MaxAllocationNeedflBC ABC (1DCAualiablefiDC23060S3024 433002431安全性检查WcrkNeedAllocEtticun1 230 020 MaxAllocationNeedflBC ABC (1DCAualiablefiDC23060S3024 433002431安全性检查WcrkNeedAllocEtticun1 230 020 302ABC ABC ADCWork<-AllocationABCFinishtrueail 2iiQ 743 743 0102 753 EBB 3024 10S5 431 002743753la551657truetruet:pu.etrue此

温馨提示

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

评论

0/150

提交评论