实验22银行家算法Word格式.docx

上传人:b****7 文档编号:21683081 上传时间:2023-01-31 格式:DOCX 页数:10 大小:37.68KB
下载 相关 举报
实验22银行家算法Word格式.docx_第1页
第1页 / 共10页
实验22银行家算法Word格式.docx_第2页
第2页 / 共10页
实验22银行家算法Word格式.docx_第3页
第3页 / 共10页
实验22银行家算法Word格式.docx_第4页
第4页 / 共10页
实验22银行家算法Word格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

实验22银行家算法Word格式.docx

《实验22银行家算法Word格式.docx》由会员分享,可在线阅读,更多相关《实验22银行家算法Word格式.docx(10页珍藏版)》请在冰豆网上搜索。

实验22银行家算法Word格式.docx

否则,认为出错,因为它所请求的资源数已超过它当前的最大需求量。

2.如果Requesti≤Available,则转向步骤3;

否则,表示系统中尚无足够的资源满足Pi的申请,Pi必须等待。

3.系统试探性地把资源分配给进程Pi,并修改下面数据结构中的数值:

Available=Available-Requesti

Allocationi=Allocationi+Requesti

Needi=Needi-Requesti

4.系统执行安全性算法,检查此次资源分配后,系统是否处于安全状态。

如果安全才正式将资源分配给进程Pi,以完成本次分配;

否则,将试探分配作废,恢复原来的资源分配状态,让进程Pi等待。

 

假定系统有5个进程(p0,p1,p2,p3,p4)和三类资源(A,B,C),各种资源的数量分别为10,5,7,在T0时刻的资源分配情况如下图:

MaxAllocationNeedAvailable

ABCABCABCABC

P0753010743332

(230)

P1322200122

(302)(020)

P2902302600

P3222211011

P4433002431

五、安全性算法

1.设置两个向量。

Work:

它表示系统可提供给进程继续运行的各类资源数目,它包含m个元素,开始执行安全性算法时,Work=Available。

Finish:

它表示系统是否有足够的资源分配给进程,使之运行完成,开始Finish(I)=false;

当有足够资源分配给进程Pi时,令Finish(i)=true;

2.从进程集合中找到一个能满足下述条件的进程。

Finish(i)==false;

Needi≤work;

如找到则执行步骤3;

否则,执行步骤4;

3.当进程Pi获得资源后,可顺利执行直到完成,并释放出分配给它的资源,故应执行

Work=work+Allocationi

Finish(i)=true;

转向步骤2;

4.若所有进程的Finish(i)都为true,则表示系统处于安全状态;

否则,系统处于不安全状态。

六、系统流程图

开始

输入资源数m,及各类资源总数,初始化Available向量

输入进程数n,i=1

输入进程i的最大需求向量max。

i≤n

max≤资源总数

提示错误重新输入

i加1

任选一个进程作为当前进程

输入该进程的资源请求量Request

调用银行家算法,及安全性算法,完成分配,或并给出提示

该进程的Need向量为0

该进程已运行结束

Need矩阵为0

所有进程运行都结束

结束

N

Y

初始化need矩阵

七.银行家算法程序代码

#include<

stdio.h>

conio.h>

iostream>

usingnamespacestd;

typedefstructMax1//资源的最大需求量

{

intm_a;

intm_b;

intm_c;

}Max;

typedefstructAllocation1//已分配的资源数

inta_a;

inta_b;

inta_c;

}Allocation;

typedefstructNeed1//还需要的资源数

intn_a;

intn_b;

intn_c;

}Need;

structAvailable1//可利用的资源量

intav_a;

intav_b;

intav_c;

}q;

structpr//定义一个结构

charname;

Maxmax;

Allocationallocation;

Needneed;

intfinishflag;

}p[5];

charna[5];

//********************************************

voidinit()//读入文件"

1.txt"

cout<

<

"

各进程还需要的资源数NEED:

endl;

FILE*fp;

fp=fopen("

"

r+"

);

//打开文件"

for(inti=0;

i<

5;

i++)

{

fscanf(fp,"

%c,%d,%d,%d,%d,%d,%d\n"

&

p[i].name,&

p[i].max.m_a,&

p[i].max.m_b,

&

p[i].max.m_c,&

p[i].allocation.a_a,&

p[i].allocation.a_b,&

p[i].allocation.a_c);

p[i].need.n_a=p[i].max.m_a-p[i].allocation.a_a;

p[i].need.n_b=p[i].max.m_b-p[i].allocation.a_b;

p[i].need.n_c=p[i].max.m_c-p[i].allocation.a_c;

cout<

p[i].name<

:

"

p[i].need.n_a<

p[i].need.n_b<

p[i].need.n_c<

}

fclose(fp);

//关闭文件

}

//***********************************************

intfenpei()//分配资源

Available:

;

q.av_a<

q.av_b<

q.av_c<

intfinishcnt=0,k=0,count=0;

for(intj=0;

j<

j++)

p[j].finishflag=0;

while(finishcnt<

5)

for(inti=0;

{

if(p[i].finishflag==0&

&

q.av_a>

=p[i].need.n_a&

q.av_b>

=p[i].need.n_b&

q.av_c>

=p[i].need.n_c)

{

q.av_a+=p[i].allocation.a_a;

q.av_b+=p[i].allocation.a_b;

q.av_c+=p[i].allocation.a_c;

p[i].finishflag=1;

finishcnt++;

na[k++]=p[i].name;

break;

}

}

count++;

//禁止循环过多

if(count>

5)return0;

return1;

//****************************************************

intshq()//申请资源

intm=0,i=0,j=0,k=0;

//m为进程号;

i,j,k为申请的三类资源数

请输入进程号和请求资源的数目!

如:

进程号资源ABC"

0202"

cin>

>

m>

i>

j>

k;

if(i<

=p[m].need.n_a&

=p[m].need.n_b&

k<

=p[m].need.n_c)

if(i<

=q.av_a&

=q.av_b&

=q.av_c)

p[m].allocation.a_a+=i;

p[m].allocation.a_b+=j;

p[m].allocation.a_c+=k;

p[m].need.n_a=p[m].max.m_a-p[m].allocation.a_a;

p[m].need.n_b=p[m].max.m_b-p[m].allocation.a_b;

p[m].need.n_c=p[m].max.m_c-p[m].allocation.a_c;

cout<

各进程还需要的资源数NEED:

'

\n'

for(intw=0;

w<

w++)

p[w].name<

p[w].need.n_a<

p[w].need.n_b

<

p[w].need.n_c<

return1;

else

Request>

Available让进程"

m<

等待......"

else

Need,让进程"

return0;

voidmain()

intflag;

charc;

/********银行家算法********/"

确认已经在\"

1.txt\"

文档中正确输入各进程的有关信息后按回车键"

getch();

init();

q.av_a=10;

//各种资源的数量

q.av_b=5;

q.av_c=7;

while(flag)

q.av_a-=p[i].allocation.a_a;

q.av_b-=p[i].allocation.a_b;

q.av_c-=p[i].allocation.a_c;

if(fenpei())

这样配置资源是安全的!

其安全序列是:

for(intk=0;

k++)

-->

na[k];

有进程发出Request请求向量吗?

(EnteryorY)"

c=getch();

if(c=='

y'

||c=='

Y'

if(shq())continue;

elsebreak;

}

elseflag=0;

else

{flag=0;

不安全!

!

八.测试文件1.txt内容

0,7,5,3,0,1,0

1,3,2,2,2,0,0

2,9,0,2,3,0,2

3,2,2,2,2,1,1

4,4,3,3,0,0,2

九.运行结果

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1