银行家算法Word文档格式.docx

上传人:b****1 文档编号:15324345 上传时间:2022-10-29 格式:DOCX 页数:13 大小:100.73KB
下载 相关 举报
银行家算法Word文档格式.docx_第1页
第1页 / 共13页
银行家算法Word文档格式.docx_第2页
第2页 / 共13页
银行家算法Word文档格式.docx_第3页
第3页 / 共13页
银行家算法Word文档格式.docx_第4页
第4页 / 共13页
银行家算法Word文档格式.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

银行家算法Word文档格式.docx

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

银行家算法Word文档格式.docx

intM=3,N=5;

//M为资源数量N为进程数量

intavailable[3];

//预分配前各类资源可用数量

intmax[5][3];

//各进程需要各资源最大数量

intallocation[5][3];

//各进程已分配各类资源的数量

intneed[5][3];

//各进程需要各类资源的数量

intrequest[3];

//进程对某一类资源的请求

intwork[3];

//预分配后各类资源可用数量

intfinish[5];

//进程结束标志数组。

0表示分配失败,资源不足以满足需求量;

1表示分配成功,资源满足需求量

intsafe()//预分配后安全性检测

{

inti=0;

intj=0;

intk=0;

intflag1=0;

//所有进程安全结束;

0表示安全可以安全结束,1表示不可以安全结束

intflag2=0;

//某进程对资源的需求量与可利用量的大小标志;

0表示需求小于可利用,1表示需求大于可利用

for(i=0;

i<

N;

i++)

{

finish[i]=0;

//各进程结束标志初始化为0。

}

M;

work[i]=available[i];

//预分配后各资源可利用量赋值给work[]数组

while(j<

N)

for(i=0;

{

if(!

finish[i])//i进程尚未分配

{

flag2=0;

for(k=0;

k<

k++)

{

if(need[i][k]>

work[k])//需求大于可利用

{

flag2=1;

break;

}

}

if(flag2==0)

work[0]=work[0]+allocation[i][0];

//收回已分配的资源

work[1]=work[1]+allocation[i][1];

work[2]=work[2]+allocation[i][2];

finish[i]=1;

}

}

j++;

5;

if(finish[i]==0)

flag1=1;

//判断各进程是否能够安全结束标志,1表示不能安全结束

break;

if(flag1==0)

return0;

//预分配安全

else

return1;

//预分配不安全

}

intdiaodu()

intname;

intr=0;

//

printf("

请输入是几号进程申请资源\n"

);

scanf("

%d"

&

name);

getchar();

printf("

请输入进程%d申请%i资源的个数\n"

name,i);

scanf("

request[i]);

getchar();

while(need[name][i]<

request[i])

printf("

不允许索取大于需求量,请重新输入\n"

scanf("

if(available[i]<

检查用户的请求大于系统中的可利用资源数量,进程%d先等待。

\n"

name);

r=1;

break;

if(r==0)

//进行资源的预分配

for(i=0;

available[i]=available[i]-request[i];

allocation[name][i]=allocation[name][i]+request[i];

need[name][i]=need[name][i]-request[i];

return1;

//预分配成功

else

return0;

//预分配失败

voidmain()

inti=0,j=0;

intq=1;

//继续分配标志。

0表示不继续分配1表示继续分配

intname=0;

//申请资源进程的名字

printf("

请输入最大需求矩阵\n"

//printf("

请输入进程%d的各资源最大需要的数量\n"

i);

for(j=0;

j<

j++)

max[i][j]);

请输入各进程已分配的矩阵\n"

//printf("

请输入进程%d的各资源已分配的数量\n"

allocation[i][j]);

请输入各进程还需要各资源所需数量的矩阵\n"

请输入进程%d还需要各资源的数量\n"

need[i][j]);

请输入各资源可利用的数量\n"

available[i]);

//

//调度并检测安全性

do

intr=diaodu();

switch(r)

case1:

k=safe();

if(k==0)//预分配安全

{

分配成功!

结果如下"

各进程已分配的矩阵\n"

for(i=0;

{

for(j=0;

j++)

{

printf("

%d,"

allocation[i][j]);

//打印输出各进程已分配的矩阵

}

printf("

}

各进程还需要各资源的矩阵\n"

i++)

{

need[i][j]);

//打印输出各进程还需要各资源的矩阵

}

各资源可利用的数量\n"

{

available[i]);

//打印输出各资源可利用的数量

}

else//预分配不安全

调度失败!

"

//撤销预分配的资源

available[i]=available[i]+request[i];

allocation[name][i]=allocation[name][i]-request[i];

need[name][i]=need[name][i]+request[i];

}

case0:

是否继续,输入0否,输入1继续\n"

q);

}while(q==1);

四、原始数据纪录:

输入数据:

最大需求矩阵:

已分配的矩阵还需求的矩阵可利用的数量

进程0:

7,5,30,1,07,4,33,3,2

进程1:

3,2,22,0,01,2,2

进程2:

9,0,23,0,26,0,0

进程3:

2,2,22,1,10,1,1

进程4:

4,3,30,0,24,3,1

T0时刻:

0号进程申请:

1,0,2

T1时刻:

1号进程申请:

3,3,0

T2时刻:

3号进程申请:

0,1,0

输出数据:

五:

结论

如图所示,实际输出数据与预期的输出相同。

通过本次上机实验熟悉了银行家算法,深入了解了计算机利用银行家算法避免死锁的机制。

有利于以后更好的理解操作系统内部各个机制功能的实现。

附录:

用C语言实现提示

1.算法用到的主要数据结构

(1)可利用资源向量intAvailable[M]//M为资源的类型

(2)最大需求矩阵intMax[N][M]//N为进程的数量

(3)已分配矩阵intAllocation[N][M]

(4)还需求矩阵intNeed[N][M]

(5)申请各类资源数量intRequest[x];

//进程对某一类资源的请求

(6)工作向量intWork[x];

(7)进程结束标识数组intFinish[y];

//表示系统是否有足够的资源分配给进程y,0为否,1为是

2.银行家算法(主程序)

(1)系统初始化。

输入进程数量,资源种类,各进程已分配、还需求各资源数量,各资源可用数量等。

(2)输入用户的请求三元组(i,j,k),为进程i申请k个j类资源。

(3)检查用户的请求是否小于还需求的数量,条件是k<

=Need[i,j]。

如果条件不符则提示重新输入,即不允许索取

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

当前位置:首页 > 成人教育 > 专升本

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

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