银行家算法 C语言编程

2025-05-11 17:32:53
推荐回答(3个)
回答1:

银行家算法程序代码
#include
#include
#include
#define FALSE 0
#define TRUE 1
#define W 10
#define R 10
int M ; // 总进程数
int N ; // 资源种类
int ALL_RESOURCE[W];// 各种资源的数目总和
int MAX[W][R]; // M个进程对N类资源最大资源需求量
int AVAILABLE[R]; // 系统可用资源数
int ALLOCATION[W][R]; // M个进程已经得到N类资源的资源量
int NEED[W][R]; // M个进程还需要N类资源的资源量
int Request[R]; // 请求资源个数
void output()
{
int i,j;
cout< cout<<"各种资源的总数量:"< for (j=0;j cout<<" 资源"< cout< cout<<"━━━━━━━━━━━━━━━━━━"< cout<<"目前各种资源可利用的数量为:"< for (j=0;j cout<<" 资源"< cout< cout<<"━━━━━━━━━━━━━━━━━━"< cout<<"各进程还需要的资源数量:"< for(i=0;i cout<<" 资源"< cout< for (i=0;i {
cout<<"进程"< for (j=0;j cout< cout< }
cout< cout<<"━━━━━━━━━━━━━━━━━━"< cout<<"各进程已经得到的资源量: "< for(i=0;i cout<<" 资源"< cout< for (i=0;i {
cout<<"进程"< for (j=0;j cout< cout< }
cout<}

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

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

int check()
{
int WORK[R],FINISH[W];
int i,j;
for(j=0;j for(i=0;i for(i=0;i {
for(j=0;j {
if(FINISH[i]==FALSE&&NEED[i][j]<=WORK[j])
{
WORK[j]=WORK[i]+ALLOCATION[i][j];
}
}

FINISH[i]=TRUE;
}
for(i=0;i {
if(FINISH[i]==FALSE)
{
cout< cout<<" 系统不安全!!! 本次资源申请不成功!!!"< cout< return 1;
}
else
{
cout< cout<<" 经安全性检查,系统安全,本次分配成功。"< cout< return 0;
}

}
}

void bank() // 银行家算法
{
int i=0,j=0;
char flag='Y';
while(flag=='Y'||flag=='y')
{
i=-1;
while(i<0||i>=M)
{
cout<<"━━━━━━━━━━━━━━━━━━"< cout< cin>>i;
if(i<0||i>=M) cout<<" 输入的进程号不存在,重新输入!"< }
cout<<" 请输入进程"< for (j=0;j {
cout<<" 资源"< cin>>Request[j];
if(Request[j]>NEED[i][j]) // 若请求的资源数大于进程还需要i类资源的资源量j
{
cout< cout<<" 若继续执行系统将处于不安全状态!"< flag='N';
break;
}
else
{
if(Request[j]>AVAILABLE[j]) // 若请求的资源数大于可用资源数
{
cout< cout<<" 若继续执行系统将处于不安全状态!"< flag='N';
break;
}

}

}
if(flag=='Y'||flag=='y')
{
distribute(i); // 调用change(i)函数,改变资源数
if(check()) // 若系统安全
{
restore(i); // 调用restore(i)函数,恢复资源数
output(); // 输出资源分配情况
}
else // 若系统不安全
output(); // 输出资源分配情况
}
else // 若flag=N||flag=n
cout< cout<<" 是否继续银行家算法演示,按'Y'或'y'键继续,按'N'或'n'键退出演示: ";
cin>>flag;
}
}

void version()
{
cout< cout<<"\t         银 行 家 算 法         "<}

void main() // 主函数
{
int i=0,j=0,p;
version();
getchar();
cout< cin>>M;
cout< cout<<"请输入总资源种类:";
cin>>N;
cout< cout<<"请输入各类资源总数:(需要输入数为"< for(i=0;i cin>>ALL_RESOURCE[i];
cout< cout<<"输入各进程所需要的各类资源的最大数量:(需要输入数为"< for (i=0;i {
for (j=0;j {
do
{
cin>>MAX[i][j];
if (MAX[i][j]>ALL_RESOURCE[j])
cout< }
while (MAX[i][j]>ALL_RESOURCE[j]);
}
}
cout< cout<<"输入各进程已经占据的各类资源的数量:(需要输入数为"< *N<<"个)";
for (i=0;i {
for (j=0;j {
do
{
cin>>ALLOCATION[i][j];
if (ALLOCATION[i][j]>MAX[i][j])
cout< }
while (ALLOCATION[i][j]>MAX[i][j]);
}
}
for (j=0;j {
p=ALL_RESOURCE[j];
for (i=0;i {
p=p-ALLOCATION[i][j];// 减去已经被占据的资源
AVAILABLE[j]=p;
if(AVAILABLE[j]<0)
AVAILABLE[j]=0;
}
}
for (i=0;i for(j=0;j NEED[i][j]=MAX[i][j]-ALLOCATION[i][j];
output();
bank();
}

实验结果分析
1.根据下面给出的系统中资源分配情况,以及各个进程的资源申请情况,通过银行家算法来判断各进程的资源请求能否满足(要求记录程序的运行过程)。
已分配的资源 最大需求量
A B C A B C
P1 0 1 0 7 5 3
P2 2 0 0 3 2 2
P3 3 0 2 9 0 2
P4 2 1 1 2 2 2
P5 0 0 2 4 3 3
剩余资源 A B C
3 3 2

回答2:

1.根据下面给出的系统中资源分配情况,以及各个进程的资源申请情况,通过银行家算法来判断各进程的资源请求能否满足(要求记录程序的运行过程)。 已分配的

回答3:

操作系统里的那个避免死锁的那个东西吧。网上有很多呀