操作系统-银行家算法C语言实现
银行家算法C语言实现
以下便是代码实现
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
int n,m;
struct info
{
int claim[50];
int allocation[50];
int need[50];
}pro[50];
int available[50];
int request[50];
void init()
{ int i,j;
printf("请输入资源种类数:");
scanf("%d",&n);
for(i=0;i
{ printf("请输入第%d个资源的最大资源数:\n",i);
scanf("%d",&available[i]);
}
printf("请输入进程数:");
scanf("%d",&m);
printf("请输入各进程对各资源的最大需求数:\n");
for(i=0;i
{ printf("请输入第%d进程对各资源的最大需求数:\n",i);
for(j=0;j
{
scanf("%d",&pro[i].claim[j]);
pro[i].allocation[j]=0;
pro[i].need[j]=pro[i].claim[j];
}
}
printf("\n");
}
int safe()
{ int work[101];
int finish[101];
int xulie[101];
int i,j,k,w=0;
int flag=1,t=0;
for(i=0;i
finish[i]=0;
for(i=0;i
work[i]=available[i];
for(i=0;i
{
for(j=0;j
{
if(finish[j]==0)
{
for(k=0;k
{
if(flag==1&&work[k]>=pro[j].need[k])
flag=1;
else
flag=0;
}
if(flag==1)
{
for(k=0;k
work[k]=work[k]+pro[j].allocation[k];
finish[j]=1;
xulie[w++]=j;
}
flag=1;
}
}
}
for(i=0;i
if(finish[i]==0) break;
if(i
{
printf("系统是不安全的,进程等待,请重新输入进程\n");
return 0;
}
else
{
printf("系统是安全的。\n安全序列为 :");
for(i=0;i
printf("%d --> ",xulie[i]);
printf("%d\n",xulie[m-1]);
return 1;
}
}
void allo()
{
int i,j;
printf("请输入申请资源的进程号:\n");
scanf("%d",&i);
printf("请输入请求资源数量:\n");
for(j=0;j
{
printf("资源 %d : ",j);
scanf("%d",&request[j]);
if(request[j]>pro[i].need[j])
{
printf("进程%d申请的资源数大于它所需要的%d类资源数,请重新输入.\n",i,j);
j=j-1;
continue;
}
else if(request[j]>available[j])
{
printf("进程%d申请的资源数大于剩余的%d类资源数,请重新输入.\n",i,j);
j=j-1