您的位置:

银行家算法c语言解题过程,用c语言编写银行家算法实验

本文目录一览:

银行家算法的C语言程序

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

改程序——银行家算法C语言版

你是学软件的学生吗 ?

我是学软件的,我在操作系统里学了银行家算法,等我看了,在告诉你我的看法,好吗?

愿意的话希望交流一下 我的邮箱qingdaheqiang@163.com

高分求银行家算法c语言版

#include "malloc.h"

#include "stdio.h"

#include "stdlib.h"

#define alloclen sizeof(struct allocation)

#define maxlen sizeof(struct max)

#define avalen sizeof(struct available)

#define needlen sizeof(struct need)

#define finilen sizeof(struct finish)

#define pathlen sizeof(struct path)

struct allocation

{

int value;

struct allocation *next;

};

struct max

{

int value;

struct max *next;

};

struct available /*可用资源数*/

{

int value;

struct available *next;

};

struct need /*需求资源数*/

{

int value;

struct need *next;

};

struct path

{

int value;

struct path *next;

};

struct finish

{

int stat;

struct finish *next;

};

int main()

{

int row,colum,status=0,i,j,t,temp,processtest;

struct allocation *allochead,*alloc1,*alloc2,*alloctemp;

struct max *maxhead,*maxium1,*maxium2,*maxtemp;

struct available *avahead,*available1,*available2,*workhead,*work1,*work2,*worktemp,*worktemp1;

struct need *needhead,*need1,*need2,*needtemp;

struct finish *finihead,*finish1,*finish2,*finishtemp;

struct path *pathhead,*path1,*path2;

printf("\n请输入系统资源的种类数:");

scanf("%d",colum);

printf("请输入现时内存中的进程数:");

scanf("%d",row);

printf("请输入已分配资源矩阵:\n");

for(i=0;irow;i++)

{

for (j=0;jcolum;j++)

{

printf("请输入已分配给进程 p%d 的 %c 种系统资源:",i,'A'+j);

if(status==0)

{

allochead=alloc1=alloc2=(struct allocation*)malloc(alloclen);

alloc1-next=alloc2-next=NULL;

scanf("%d",allochead-value);

status++;

}

else

{

alloc2=(struct allocation *)malloc(alloclen);

scanf("%d,%d",alloc2-value);

if(status==1)

{

allochead-next=alloc2;

status++;

}

alloc1-next=alloc2;

alloc1=alloc2;

}

}

}

alloc2-next=NULL;

status=0;

printf("请输入最大需求矩阵:\n");

for(i=0;irow;i++)

{

for (j=0;jcolum;j++)

{

printf("请输入进程 p%d 种类 %c 系统资源最大需求:",i,'A'+j);

if(status==0)

{

maxhead=maxium1=maxium2=(struct max*)malloc(maxlen);

maxium1-next=maxium2-next=NULL;

scanf("%d",maxium1-value);

status++;

}

else

{

maxium2=(struct max *)malloc(maxlen);

scanf("%d,%d",maxium2-value);

if(status==1)

{

maxhead-next=maxium2;

status++;

}

maxium1-next=maxium2;

maxium1=maxium2;

}

}

}

maxium2-next=NULL;

status=0;

printf("请输入现时系统剩余的资源矩阵:\n");

for (j=0;jcolum;j++)

{

printf("种类 %c 的系统资源剩余:",'A'+j);

if(status==0)

{

avahead=available1=available2=(struct available*)malloc(avalen);

workhead=work1=work2=(struct available*)malloc(avalen);

available1-next=available2-next=NULL;

work1-next=work2-next=NULL;

scanf("%d",available1-value);

work1-value=available1-value;

status++;

}

else

{

available2=(struct available*)malloc(avalen);

work2=(struct available*)malloc(avalen);

scanf("%d,%d",available2-value);

work2-value=available2-value;

if(status==1)

{

avahead-next=available2;

workhead-next=work2;

status++;

}

available1-next=available2;

available1=available2;

work1-next=work2;

work1=work2;

}

}

available2-next=NULL;

work2-next=NULL;

status=0;

alloctemp=allochead;

maxtemp=maxhead;

for(i=0;irow;i++)

for (j=0;jcolum;j++)

{

if(status==0)

{

needhead=need1=need2=(struct need*)malloc(needlen);

need1-next=need2-next=NULL;

need1-value=maxtemp-value-alloctemp-value;

status++;

}

else

{

need2=(struct need *)malloc(needlen);

need2-value=(maxtemp-value)-(alloctemp-value);

if(status==1)

{

needhead-next=need2;

status++;

}

need1-next=need2;

need1=need2;

}

maxtemp=maxtemp-next;

alloctemp=alloctemp-next;

}

need2-next=NULL;

status=0;

for(i=0;irow;i++)

{

if(status==0)

{

finihead=finish1=finish2=(struct finish*)malloc(finilen);

finish1-next=finish2-next=NULL;

finish1-stat=0;

status++;

}

else

{

finish2=(struct finish*)malloc(finilen);

finish2-stat=0;

if(status==1)

{

finihead-next=finish2;

status++;

}

finish1-next=finish2;

finish1=finish2;

}

}

finish2-next=NULL; /*Initialization compleated*/

status=0;

processtest=0;

for(temp=0;temprow;temp++)

{

alloctemp=allochead;

needtemp=needhead;

finishtemp=finihead;

worktemp=workhead;

for(i=0;irow;i++)

{

worktemp1=worktemp;

if(finishtemp-stat==0)

{

for(j=0;jcolum;j++,needtemp=needtemp-next,worktemp=worktemp-next)

if(needtemp-value=worktemp-value)

processtest++;

if(processtest==colum)

{

for(j=0;jcolum;j++)

{

worktemp1-value+=alloctemp-value;

worktemp1=worktemp1-next;

alloctemp=alloctemp-next;

}

if(status==0)

{

pathhead=path1=path2=(struct path*)malloc(pathlen);

path1-next=path2-next=NULL;

path1-value=i;

status++;

}

else

{

path2=(struct path*)malloc(pathlen);

path2-value=i;

if(status==1)

{

pathhead-next=path2;

status++;

}

path1-next=path2;

path1=path2;

}

finishtemp-stat=1;

}

else

{

for(t=0;tcolum;t++)

alloctemp=alloctemp-next;

finishtemp-stat=0;

}

}

else

for(t=0;tcolum;t++)

{

needtemp=needtemp-next;

alloctemp=alloctemp-next;

}

processtest=0;

worktemp=workhead;

finishtemp=finishtemp-next;

}

}

path2-next=NULL;

finishtemp=finihead;

for(temp=0;temprow;temp++)

{

if(finishtemp-stat==0)

{

printf("\n系统处于非安全状态!\n");

exit(0);

}

finishtemp=finishtemp-next;

}

printf("\n系统处于安全状态.\n");

printf("\n安全序列为: \n");

do

{

printf("p%d ",pathhead-value);

}

while(pathhead=pathhead-next);

printf("\n");

return 0;

}

操作系统(死锁避免)----银行家算法解题

死锁:是指两个以上的进程都因要求对方已经占有的资源,导致无法运行下去的现象,死锁是系统的一种出错状态,不仅浪费大量的系统资源,甚至会导致整个系统的崩溃,所以死锁是尽量预防和避免的。

产生死锁的四个条件:

死锁的处理

银行家算法是死锁避免的重要算法。

银行家算法:资源==钱;收回资源==收回贷款;收不回资源==不会放贷;

例题:假设系统中有三类互斥资源R1,R2,R3。可用资源分别是9,8,5.在T0时刻系统有P1,P2,P3,P4,P5五个进程,这些进程最大的需求和已分配的资源如下所示,如果按_执行,那么系统的状态是安全的。

解:第一步:根据可用资源,可以求得剩余资源。

R1=9-(1+2+2+1+1)=2

R2=8-(2+1+1+2+1)=1

R3=5-(1+1+0+0+3)=0

第二步:根据剩余资源求得还需要的资源数。

公式:还需资源(Need)=最大需求(Max)-已分配资源(Allocation)。

第三部,根据剩余资源数,求出安全序列。

根据剩余资源可得,p2可以执行(条件:每个值都必须≦剩余资源)

由此可见安全序列为P2--p4--p5--p1--p3。

其实安全序列不是唯一的,这是为什么呢?

大家可以看出来,现有资源要大于需要资源的情况下是有多种选择的,因此安全序列不唯一。

c语言银行家算法安全性判别

把1作为参数传给yanzheng() yanzheng(int m)

然后验证函数里修改:

work=Avaliable;

i=m;

while(im)

 { 

  if (Finish[i]==falseNeed[i]=work)

  {

         work=work+Allocation[i];

         Finish[i]=true;

         anquan[k]=i;

         k++;

         i = 0;

   }

   else

       i++;

 }

银行家算法c语言解题过程,用c语言编写银行家算法实验

2022-11-23
c语言实现银行家算法下载,银行家算法c#

2023-01-08
银行家算法C语言代码的详细阐述

2023-05-17
c语言计算银行,C语言计算银行利息

本文目录一览: 1、C语言编程,关于银行利息 2、c语言,计算银行存款的本息,谢谢,新手不会 3、c语言计算银行利息 4、C语言计算银行存款的问题,我要怎么改? 5、C语言求银行本息和利润和 C语言编

2023-12-08
银行c语言代码,银行管理系统C语言

2022-12-01
全国计算机二级c语言,计算机二级c语言真题

2022-11-24
c语言笔记讲解,c语言程序笔记

2022-11-23
二级计算机c语言肯定有考笔试吗,计算机二级c语言是机考吗

2022-11-29
鹤壁c语言专业老师家教,鹤壁c语言专业老师家教怎么样

2022-12-01
c语言算法初步,c语言基础算法

2023-01-04
国家二级c语言程序题,二级C语言程序题

2022-12-01
国家c语言,国家c语言二级报名网址

2022-12-01
最新计算机c语言,c语言计算机代码

2022-12-02
c语言大学老师,大学c语言笔记

2023-01-03
c语言学习c++,学会C语言

2022-11-27
c语言二级考试,c语言二级考试题库app

2022-12-01
计算机c语言入门表,c语言最全入门笔记

2022-11-30
c语言随笔讲解,c语言编程讲解

2022-11-27
计算机二级c语言,计算机二级c语言和office哪个难

2023-01-03
c语言编程解题思路,c语言编程解题思路详细

2022-11-28