⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yhj.txt

📁 模拟银行家算法
💻 TXT
字号:
#include <stdio.h>
#include <stdlib.h> 
#include <conio.h> 
#include <string.h>
#include <iostream.h>
#define M 10//最大进程数 
#define N 10//最大资源数 
#define FALSE 0 
#define TRUE 1 
int process[M];
int p;
int q;
int MAX[M][N];
int AVAILABLE[N]; 
int ALLOCATION[M][N];
int NEED[M][N];
int Request[N];
void in()
{int j1,j2;
printf ("请输入要运行的进程数:");
scanf("%d",&p);   
for(j1=0;j1<p;j1++)
process[j1]=j1;
printf ("请输入可用的资源数:");
scanf("%d",&q) ;
printf("初始化开始!\n") ;
for(j1=0;j1<p;j1++)
{printf("请输入进程%d的最大资源需求总量MAX:",j1);

for(j2=0;j2<q;j2++)
scanf("%d",&MAX[j1][j2]);
printf("请输入进程%d的已分配的资源数量ALLOCATION:",j1);
for(j2=0;j2<q;j2++)
scanf("%d",&ALLOCATION[j1][j2]);
for(j2=0;j2<q;j2++)
NEED[j1][j2]=MAX[j1][j2]-ALLOCATION[j1][j2];
}
printf("请输入现在系统的剩余的资源数AVAILABLE:");
for(j2=0;j2<q;j2++)
scanf("%d",&AVAILABLE[j2]);
}
void out1  ()
{int j1,j2;
printf("进程 \t Max \t  Allocation\t   need \t Available\n");
j1=0;
printf("%d \t",process[j1]);
for (j2=0;j2<q;j2++)
printf("%d ",MAX[j1][j2]);
printf("\t   ");
for (j2=0;j2<q;j2++)
printf("%d ",ALLOCATION[j1][j2]);
printf("\t  ");
for (j2=0;j2<q;j2++)
printf("%d ",NEED[j1][j2]);printf("\t");
for (j2=0;j2<q;j2++)
printf("%d ",AVAILABLE[j2]);
printf("\n");

for(j1=1;j1<p;j1++)
{
printf("%d ",process[j1]);printf("\t");
for (j2=0;j2<q;j2++)
printf("%d ",MAX[j1][j2]);printf("\t   ");
for (j2=0;j2<q;j2++)
printf("%d ",ALLOCATION[j1][j2]);printf("\t  ");
for (j2=0;j2<q;j2++)
printf("%d ",NEED[j1][j2]);
printf("\n");
}
}
void main() 
{ 
int i=0,j=0; 
in();
out1();
char flag='Y'; 
void showdata(); 
void changdata(int);  
int chkerr(int); 

showdata(); 
while(flag=='Y'||flag=='y') 
{ 
i=-1; 
while(i<0||i>=p) 
{ 
printf(" 请输入需申请资源的进程号(从0到%d,否则重输入!):",p-1); 
cin>>i; 
if(i<0||i>=p)
printf(" 输入的进程号不存在,重新输入!");

} 
printf(" 请输入进程%d申请的资源数",i); 
for(j=0;j<q;j++) 
{ 
printf("\n资源%d: ",j); 
cin>>Request[j]; 
if(Request[j]>NEED[i][j]) 
{ 
printf(" 进程%d申请的资源数大于进程%d还需要%d类资源的资源量!",i,i,j); 
printf("申请不合理,出错!请重新选择!"); 
flag='N'; 
break; 
} 
else 
{ 
if(Request[j]>AVAILABLE[j]) 
{ 
printf(" 进程%d申请的资源数大于系统可用%d类资源的资源量!",i,j); 
printf("申请不合理,出错!请重新选择!"); 
flag='N'; 
break; 
} 
} 
} 
if(flag=='Y'||flag=='y') 
{ 
changdata(i); 
if(chkerr(i)) 
{ 
showdata(); 
} 
else 
showdata(); 
} 
else 
showdata(); 
cout<<endl; 
printf(" 是否继续银行家算法演示,按'Y'或'y'键继续,按'N'或'n'键退出演示: "); 
cin>>flag; 
} 
} 


void showdata() 
{ 
int i,j; 
printf(" 系统可用的资源数为AVAILABLE:");
for (j=0;j<q;j++) 
printf(" 资源%d: %d",j,AVAILABLE[j]);
cout<<endl;  
printf(" 各进程最大需求量MAX:\n");

for (i=0;i<p;i++) 
{ 
printf("进程%d:",i); 
for (j=0;j<q;j++)
printf(" 资源%d: %d",j,MAX[i][j]);
printf("\n");
} 
printf("\n");
printf(" 各进程还需要的资源量NEED:\n");
for (i=0;i<p;i++) 
{ 
printf("进程%d:",i); 
for (j=0;j<q;j++)printf(" 资源%d:%d ",j,NEED[i][j]); 
printf("\n");
} 
printf("\n");
printf(" 各进程已经得到的资源量ALLOCATION:\n ");
for (i=0;i<p;i++) 
{ 
printf("进程%d:",i); 
for(j=0;j<q;j++)
printf(" 资源%d:%d",j, ALLOCATION[i][j]);
printf("\n");
} 
printf("\n");
}; 

void changdata(int k) 
{ 
int j; 
for (j=0;j<q;j++) 
{ 
AVAILABLE[j]=AVAILABLE[j]-Request[j]; 
ALLOCATION[k][j]=ALLOCATION[k][j]+Request[j]; 
NEED[k][j]=NEED[k][j]-Request[j]; 
} 

}; 

int chkerr(int s) 
{ 
int WORK,FINISH[M],temp[M]; 
int i,j,k=0; 
for(i=0;i<p;i++)FINISH[i]=FALSE; 
for(j=0;j<q;j++) 
{ 
WORK=AVAILABLE[j]; 
i=s; 
while(i<p) 
{ 
if (FINISH[i]==FALSE&& NEED[i][j]<=WORK) 
{ 
WORK=WORK+ALLOCATION[i][j]; 
FINISH[i]=TRUE; 
temp[k]=i; 
k++; 
i=0; 
} 
else 
{ 
i++; 
} 
} 
for(i=0;i<p;i++) 
if(FINISH[i]==FALSE) 
{ 
cout<<endl; 
printf(" 系统不安全!!! 本次资源申请不成功!!!"); 
cout<<endl; 
return 1; 
} 
} 
cout<<endl; 
printf(" 经安全性检查,系统安全,本次分配成功。"); 
cout<<endl; 
cout<<" 本次安全序列:"; 
for(i=0;i<p;i++)cout<<"进程"<<temp[i]<<"->"; 
cout<<endl<<endl;; 
return 0; 
}; 


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -