操作系统银行家算法,采用简单的C语言实现,功能齐全,简单易懂
//本程序由西安工业大学计算机学院SUn编写,感谢使用!
#include "stdafx.h"
#include
#define M 100
#define N 100
struct bank{
int max[M][N];
int total[N];
int allocation[M][N];
int need[M][N];
int available[N];
int work[N];
int finish[N];
int request[N];
int temp[N];//记录安全序列
int m;
int n;
int k;
}b;
void initialization(){
loop1:
printf("**************************************\n");
printf("*****欢迎使用本程序,请按提示输入*****\n");
printf("************XX XXXXXXXXXXX************\n");
printf("**************************************\n");
int i,j;
int e;
printf("请输入进程数目:\n");
scanf("%d",&e);
b.m=e;
printf("请输入资源种类数:\n");
scanf("%d",&e);
b.n=e;
printf("请输入各种资源的总数\n");
for(j=0;j
scanf("%d",&e);
b.total[j]=e;
}
printf("total\n");
for(j=0;j
printf("%d\t",b.total[j]);
}
printf("\n");
printf("请输入各进程所需的最大资源数\n");
for(i=0;i
for(j=0;j
scanf("%d",&e);
b.max[i][j]=e;
}
for(i=0;i
for(j=0;j
while(b.max[i][j]>b.total[j])
{
printf("第%d个进程所需资源无法满足\n",i+1);
goto loop1;
}
}
printf("max\n");
for(i=0;i
for(j=0;j
printf("%d\t",b.max[i][j]);
}
printf("\n");
}
printf("\n");
printf("请输入各进程已获得的各种资源数\n");
for(i=0;i
for(j=0;j
scanf("%d",&e);
b.allocation[i][j]=e;
}
for(i=0;i
for(j=0;j
while(b.allocation[i][j]>b.max[i][j])
{
printf("第%d个进程已分配资源不合法\n",i+1);
goto loop1;
}
}
printf("allocation\n");
for(i=0;i
for(j=0;j
printf("%d\t",b.allocation[i][j]);
}
printf("\n");
}
}
void calculate(){
int i,j;
for(i=0;i
for(j=0;j
b.need[i][j]=b.max[i][j]-b.allocation[i][j];
}
printf("need\n");
for(i=0;i
for(j=0;j
printf("%d\t",b.need[i][j]);
}
printf("\n");
}
for(j=0;j
int sum=0;
for(i=0;i
sum=sum+b.allocation[i][j];
}
b.available[j]=b.total[j]-sum;
}
printf("available\n");
for(j=0;j
printf("%d\t",b.available[j]);
}
printf("\n");
}
void test() {
void huishou();
int i, o = 0, p, apply;
int j;
int flag = 0;
for(i=0;i
b.finish[i]=0;
}
for (i = 0; i < b.n; i++) {
b.work[i] = b.available[i];
}
for (i = 0; i < b.m; i++) {
apply = 0;
for (j = 0; j < b.n; j++) {
if (b.finish[i] == 0 &
& b.need[i][j] <= b.work[j]) {
apply++;
if (apply == b.n) {
for (p = 0; p< b.n; p++)
b.work[p] = b.work[p] + b.allocation[i][p];//