操作系统实验二(银行家算法)实验报告

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

实验二实验报告实验源码:#includestdio.h#includeiostream.h#includestring.h#defineFalse0//定义False#defineTrue1//定义TrueintMax[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};//存放系统可提供资源intM=100;//作业的最大数为100intN=100;//资源的最大数为100//显示资源矩阵voidshowdata(){inti,j;printf(\n此时刻的资源分配情况为:\n);//显示表头printf(MaxAllocationNeedAvaliable\n);printf(PCB);//显示作业名称for(j=0;j4;j++){for(i=0;iN;i++)printf(%c,name[i]);printf();}printf(\n);//显示当前作业资源分配情况for(i=0;iM;i++){printf(%d,i);for(j=0;jN;j++)printf(%d,Max[i][j]);printf();for(j=0;jN;j++)printf(%d,Allocation[i][j]);printf();for(j=0;jN;j++)printf(%d,Need[i][j]);if(i==0){printf();for(j=0;jN;j++)printf(%d,Avaliable[j]);}printf(\n);}}//进行资源分配intchangdata(inti){intj;for(j=0;jM;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;iN;i++)Work[i]=Avaliable[i];printf(安全性检查\n);printf(WorkNeedAllocationWork+AllocationFinish\n);printf(PCB);//显示作业名称for(j=0;j4;j++){for(i=0;iN;i++)printf(%c,name[i]);printf();}printf(\n);//显示当前作业资源分配情况for(i=0;iM;i++){apply=0;for(j=0;jN;j++){if(Finish[i]==False&&Need[i][j]=Work[j]){apply++;if(apply==N){printf(%d,i);for(d=0;dN;d++)printf(%d,Work[d]);printf();for(d=0;dN;d++)printf(%d,Need[i][d]);printf();for(d=0;dN;d++)printf(%d,Allocation[i][d]);printf();for(m=0;mN;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;iM;i++){if(Finish[i]==False){for(j=0;jN;j++){Avaliable[j]=Avaliable[j]+Request[j];;Allocation[i][j]=Allocation[i][j]-Request[j];;Need[i][j]=Need[i][j]+Request[j];}printf(\n系统进入不安全状态!此时系统不分配资源!\n);//不成功系统不安全return0;}}printf(\n此时系统是安全的!\n);//如果安全,输出成功printf(安全序列为:);for(i=0;iM;i++)//输出运行进程数组{printf(%d,temp[i]);if(iM-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申请的资源:\n,i);for(j=0;jN;j++){printf(%c:,name[j]);scanf(%d,&Request[j]);//输入需要申请的资源}for(j=0;jN;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;in;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;im;i++)for(j=0;jn;j++)scanf(%d,&Max[i][j]);do{flag=0;printf(\n请输入各进程已经申请的资源量(%d*%d矩阵)[Allocation]:\n,m,n);for(i=0;im;i++)for(j=0;jn;j++){scanf(%d,&Allocation[i][j]);if(Allocation[i][j]Max[i][j])flag=1;Need[i][j]=Max[i][j]-Allocation[i][j];}if(flag)printf(\n申请的资源大于最大需求量,请重新输入!\n\n);}while(flag);showdata();//显示各种资源safe();//用银行家算法判定系统是否安全while(1){if(t==1){printf(\n利用银行家算法预分配资源\n);share();t=0;}elsebreak;printf(\n是否继续银行家算法?(按1键继续,按其它任意键退出):);scanf(%d,&t);printf(\n);}return1;}实验结果截图:运行程序:输入相应数据并完成首次自检:进程1请求资源Request(1,0,2):进程4请求资源Request(3,3,0):进程0请求资源Request(0,2,0):

1 / 11
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功