操作系统实验二银行家算法实验报告.docx

上传人:b****8 文档编号:12160638 上传时间:2023-06-04 格式:DOCX 页数:14 大小:222.28KB
下载 相关 举报
操作系统实验二银行家算法实验报告.docx_第1页
第1页 / 共14页
操作系统实验二银行家算法实验报告.docx_第2页
第2页 / 共14页
操作系统实验二银行家算法实验报告.docx_第3页
第3页 / 共14页
操作系统实验二银行家算法实验报告.docx_第4页
第4页 / 共14页
操作系统实验二银行家算法实验报告.docx_第5页
第5页 / 共14页
操作系统实验二银行家算法实验报告.docx_第6页
第6页 / 共14页
操作系统实验二银行家算法实验报告.docx_第7页
第7页 / 共14页
操作系统实验二银行家算法实验报告.docx_第8页
第8页 / 共14页
操作系统实验二银行家算法实验报告.docx_第9页
第9页 / 共14页
操作系统实验二银行家算法实验报告.docx_第10页
第10页 / 共14页
操作系统实验二银行家算法实验报告.docx_第11页
第11页 / 共14页
操作系统实验二银行家算法实验报告.docx_第12页
第12页 / 共14页
操作系统实验二银行家算法实验报告.docx_第13页
第13页 / 共14页
操作系统实验二银行家算法实验报告.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

操作系统实验二银行家算法实验报告.docx

《操作系统实验二银行家算法实验报告.docx》由会员分享,可在线阅读,更多相关《操作系统实验二银行家算法实验报告.docx(14页珍藏版)》请在冰点文库上搜索。

操作系统实验二银行家算法实验报告.docx

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

实验二实验报告

实验源码:

#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):

 

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 农林牧渔

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2