操作系统-银行家算法C语言实现

  • 格式:doc
  • 大小:35.00 KB
  • 文档页数:4

下载文档原格式

  / 11
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

银行家算法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;

continue;

}

}

for(j=0;j

{

available[j]=available[j]-request[j];

pro[i].allocation[j]=pro[i].allocation[j]+request[j];

pro[i].need[j]=pro[i].need[j]-request[j];

}

if(safe()==1)

printf("请求分配成功!\n");

else

{

printf("请求分配被拒绝!\n");

for(j=0;j

{

available[j]=available[j]+request[j];

pro[i].allocation[j]=pro[i].allocation[j]-request[j];

pro[i].need[j]=pro[i].need[j]+request[j];

}

}

}

main()

{

int i;

init();

do

{

printf("选择1--用银行家算法;选择0--退出");

scanf("%d",&i);

if(i==1)

allo();

}while(i==1);

}