操作系统实验二银行家算法实验报告.docx
- 文档编号:12143515
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:14
- 大小:222.30KB
操作系统实验二银行家算法实验报告.docx
《操作系统实验二银行家算法实验报告.docx》由会员分享,可在线阅读,更多相关《操作系统实验二银行家算法实验报告.docx(14页珍藏版)》请在冰豆网上搜索。
操作系统实验二银行家算法实验报告
操作系统实验二(银行家算法)实验报告
实验二实验报告
实验源码:
#include"stdio.h"
#include
#include
#defineFalse0//定义False
#defineTrue1//定义True
intMax[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;//作业的最大数为100
intN=100;//资源的最大数为100
//显示资源矩阵
voidshowdata()
{
inti,j;
printf("\n此时刻的资源分配情况为:
\n");
//显示表头
printf("MaxAllocationNeedAvaliable\n");
printf("PCB");
//显示作业名称
for(j=0;j<4;j++){
for(i=0;i printf("%c",name[i]); printf(""); } printf("\n"); //显示当前作业资源分配情况 for(i=0;i printf("%d",i); for(j=0;j printf("%d",Max[i][j]); printf(""); for(j=0;j printf("%d",Allocation[i][j]); printf(""); for(j=0;j printf("%d",Need[i][j]); if(i==0){ printf(""); for(j=0;j printf("%d",Avaliable[j]); } printf("\n"); } } //进行资源分配 intchangdata(inti) { intj; for(j=0;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 Work[i]=Avaliable[i]; printf("安全性检查\n"); printf("WorkNeedAllocationWork+AllocationFinish\n"); printf("PCB"); //显示作业名称 for(j=0;j<4;j++){ for(i=0;i printf("%c",name[i]); printf(""); } printf("\n"); //显示当前作业资源分配情况 for(i=0;i apply=0; for(j=0;j if(Finish[i]==False&&Need[i][j]<=Work[j]) { apply++; if(apply==N) { printf("%d",i); for(d=0;d printf("%d",Work[d]); printf(""); for(d=0;d printf("%d",Need[i][d]); printf(""); for(d=0;d printf("%d",Allocation[i][d]); printf(""); for(m=0;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 if(Finish[i]==False){ for(j=0;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;i { printf("%d",temp[i]); if(i 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;j { printf("%c: ",name[j]); scanf("%d",&Request[j]);//输入需要申请的资源 } for(j=0;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 { 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 for(j=0;j scanf("%d",&Max[i][j]); do{ flag=0; printf("\n请输入各进程已经申请的资源量(%d*%d矩阵)[Allocation]: \n",m,n); for(i=0;i for(j=0;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):
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 银行家 算法 报告