操作系统实验二银行家算法实验报告Word格式.docx
《操作系统实验二银行家算法实验报告Word格式.docx》由会员分享,可在线阅读,更多相关《操作系统实验二银行家算法实验报告Word格式.docx(14页珍藏版)》请在冰点文库上搜索。
intWork[100]={0};
//存放系统可提供资源
intM=100;
//作业的最大数为100
intN=100;
//资源的最大数为100
//显示资源矩阵
voidshowdata()
{
inti,j;
printf("
\n此时刻的资源分配情况为:
\n"
);
//显示表头
MaxAllocationNeedAvaliable\n"
PCB"
//显示作业名称
for(j=0;
j<
4;
j++){
for(i=0;
i<
N;
i++)
printf("
%c"
name[i]);
printf("
"
}
//显示当前作业资源分配情况
for(i=0;
M;
i++){
%d"
i);
for(j=0;
j++)
%d"
Max[i][j]);
Allocation[i][j]);
Need[i][j]);
if(i==0){
for(j=0;
printf("
Avaliable[j]);
}
}
//进行资源分配
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};
intflag=0;
Work[i]=Avaliable[i];
安全性检查\n"
WorkNeedAllocationWork+AllocationFinish\n"
i++){
apply=0;
if(Finish[i]==False&
&
Need[i][j]<
=Work[j])
{
apply++;
if(apply==N)
{
printf("
for(d=0;
d<
d++)
printf("
Work[d]);
Need[i][d]);
Allocation[i][d]);
for(m=0;
m<
m++)
{
Work[m]=Work[m]+Allocation[i][m];
Work[m]);
}//变分配数
Finish[i]=True;
temp[k]=i;
true"
i=-1;
k++;
flag++;
}
}
if(Finish[i]==False){
for(j=0;
Avaliable[j]=Avaliable[j]+Request[j];
;
Allocation[i][j]=Allocation[i][j]-Request[j];
Need[i][j]=Need[i][j]+Request[j];
\n系统进入不安全状态!
此时系统不分配资源!
//不成功系统不安全
return0;
\n此时系统是安全的!
//如果安全,输出成功
安全序列为:
"
i<
M;
i++)//输出运行进程数组
{
%d"
temp[i]);
if(i<
M-1)
->
return0;
//利用银行家算法对申请资源对进行判定
voidshare()
charch;
inti=0,j=0;
ch='
y'
\n请输入要求分配的资源进程号(0-%d):
M-1);
scanf("
&
i);
//输入须申请的资源号
\n请输入进程%d申请的资源:
%c:
name[j]);
scanf("
Request[j]);
//输入需要申请的资源
if(Request[j]>
Need[i][j])//判断申请是否大于需求,若大于则出错
{
\n进程%d申请的资源大于它需要的资源"
分配不合理,不予分配!
ch='
n'
break;
}else{
if(Request[j]>
Avaliable[j])//判断申请是否大于当前资源,若大于则
{//出错
\n进程%d申请的资源大于系统现在可利用的资源"
分配出错,不予分配!
ch='
break;
if(ch=='
){
changdata(i);
//根据进程需求量变换资源
showdata();
//根据进程需求量显示变换后的资源
safe();
//根据进程需求量进行银行家算法判断
//主函数
intmain()
intt=1,i,j,number,choice,m,n,flag;
charming;
\n请首先输入系统可供资源种类的数量:
n);
N=n;
n;
资源%d的名称:
i+1);
%s"
ming);
name[i]=ming;
资源的数量:
number);
Avaliable[i]=number;
请输入作业的数量:
m);
M=m;
\n请输入各进程的最大需求量(%d*%d矩阵)[Max]:
m,n);
m;
scanf("
Max[i][j]);
do{
flag=0;
\n请输入各进程已经申请的资源量(%d*%d矩阵)[Allocation]:
scanf("
Allocation[i][j]);
if(Allocation[i][j]>
Max[i][j])
flag=1;
Need[i][j]=Max[i][j]-Allocation[i][j];
if(flag)
\n申请的资源大于最大需求量,请重新输入!
\n\n"
}while(flag);
showdata();
//显示各种资源
safe();
//用银行家算法判定系统是否安全
while
(1){
if(t==1){
\n利用银行家算法预分配资源\n"
share();
t=0;
elsebreak;
\n是否继续银行家算法?
(按1键继续,按其它任意键退出):
t);
实验结果截图:
运行程序:
输入相应数据并完成首次自检:
进程1请求资源Request(1,0,2):
进程4请求资源Request(3,3,0):
进程0请求资源Request(0,2,0):