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

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

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

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

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

Available[j]:

=Available[j]-Requesti[j];

Allocation[i,j]:

=Allocation[i,j]+Requesti[j];

Need[i,j]:

=Need[i,j]-Requesti[j];

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

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

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

3.数据结构

1.可利用资源向量AVAILABLE。

这是一个含有M个元素的数组,其中的每一个元素代表一类可利用的资源数目,其3初始值是系统中所配置的该类全部可哦那个资源的数目,其数值随该类资源的分配和回收而动态的改变。

2.最大需求矩阵MAX。

这是一个M*N的矩阵,它定义了系统中N个进程中的每一个进程对M类资源的最大需求。

3.分配矩阵ALLOCATION。

这也是一个M*N的矩阵,它定义了系统中每一类资源当前已分配给每一进程的资源数。

4.需求矩阵NEED。

这也是一个M*N的矩阵,用以表示每一个进程尚需的各类资源数。

5.NEED[R,W]=MAX[R,W]-ALLOCATION[R,W]

4.主要函数说明

主要的常量变量

finalintP=10最大进程数

finalintR=5最大资源种类数

intAvailable[]可利用资源向量

intMax[][]最大需求矩阵

intAllocation[][]分配矩阵

intNeed[][]需求矩阵

intRequest1[]进程请求向量

intAllcount[]各资源总数

intC[]安全序列

主要模块

voidmain()主函数

intSafe()安全算法

voidSafe2()安全序列输出

voidShow()显示函数

voidWait()等待进程

voidRequest()进程分配

5.算法流程图

实验结果

结果分析

银行家算法就是当接收到一个系统资源的分配后找到一个安全序列,使得进程间不会发生死锁,若发生死锁则让进程等待。

实验总结:

通过本次实验,使我更好的理解了课本的知识。

能熟练使用编程程序完成实验,加深了对银行家算法的理解及应用。

实验中遇到一些问题,但是通过上网查阅资料,与同学之间的交流讨论顺利的解决。

通过这次的实践,使我的理论知识与实践更好的结合。

附录

程序源码:

importjava.io.*;

publicclassanquan

{

publicstaticvoidmain(Stringargs[])

{

Testts=newTest();

ts.Putout();

System.out.println();

for(;

;

{

if(ts.Safe()==1)

{

ts.Safe2();

ts.Show();

ts.Request();

}

}

}

}

classTest

finalintP=10;

//最大进程数

finalintR=5;

//最大资源种类数

inti,j,dd,tt;

intAvailable[];

//可利用资源向量

intMax[][];

//最大需求矩阵

intAllocation[][];

//分配矩阵

intNeed[][];

//需求矩阵

intRequest1[];

//进程请求向量

intAllcount[];

//各资源总数

intC[];

//安全序列

publicvoidPutout()//提示

try{

do{

System.out.print("

请输入进程数="

);

BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));

Strings=br.readLine();

i=Integer.parseInt(s);

if(i<

=0||i>

P)

{

System.out.println("

输入错误!

请输入10以内的正整数!

"

}

}while(i<

P);

}catch(IOExceptione){}

System.out.println();

try{

请输入资源种类数="

j=Integer.parseInt(s);

if(j<

=0||j>

R)

请输入5以内的正整数!

}while(j<

System.out.println("

请依次输入各种资源总数量:

System.out.println();

Allcount=newint[j];

for(intt=0;

t<

j;

t++)

try{

资源"

+t+"

:

Allcount[t]=Integer.parseInt(s);

System.out.println();

请依次输入各进程所需要最大资源数量,即设置最大需求矩阵Max:

Max=newint[i][j];

i;

System.out.println("

P"

for(intt1=0;

t1<

t1++)

+t1+"

Max[t][t1]=Integer.parseInt(s);

if(Max[t][t1]>

Allcount[t1])

输入的最大资源数超过了声明的该资源总数!

请重新输入!

}while(Max[t][t1]>

Allcount[t1]);

请依次输入各进程已经占据各类资源数量,即设置分配矩阵Allocation:

Allocation=newint[i][j];

Allocation[t][t1]=Integer.parseInt(s);

if(Allocation[t][t1]>

Max[t][t1])

输入的已占有资源数超过了声明的最大资源数!

}while(Allocation[t][t1]>

Max[t][t1]);

Need=newint[i][j];

for(intt=0;

for(intt1=0;

Need[t][t1]=Max[t][t1]-Allocation[t][t1];

Available=newint[j];

for(intt1=0;

intp1=Allcount[t1];

p1=p1-Allocation[t][t1];

Available[t1]=p1;

if(Available[t1]<

0)

Available[t1]=0;

publicintSafe()//安全算法

{

intWork[]=newint[j];

{Work[t]=Available[t];

}

intFinish[]=newint[i];

{Finish[t]=0;

}

intC[]=newint[i];

intaa=0;

for(intk=0;

k<

k++)

intcount1=0;

if(Finish[t1]==0)

for(intt2=0;

t2<

t2++)

{

if(Need[t1][t2]>

Work[t2])

{

break;

}

else

count1=count1+1;

}

if(count1==j)

Finish[t1]=1;

for(intt3=0;

t3<

t3++)

Work[t3]=Work[t3]+Allocation[t1][t3];

aa++;

if(aa==i)

return1;

else

return0;

publicvoidSafe2()//安全序列输出

inta=0;

C[a++]=t1;

if(a==i)

系统安全,存在安全序列:

for(intt1=0;

+C[t1]+"

"

System.out.println("

系统不安全"

publicvoidShow()

当前各种资源的总数量为:

System.out.print("

+"

+Allcount[t]+"

当前系统中各种资源可用数量,即Available为:

+Available[t]+"

资源"

Max"

Allocation"

Need"

进程"

===================================================="

for(intt=0;

t++)

{

P"

for(intt1=0;

System.out.print(Max[t][t1]+"

System.out.print("

System.out.print(Allocation[t][t1]+"

System.out.print(Need[t][t1]+"

}

System.out.println("

publicvoidWait(intss)

intsss=ss;

进程P"

+sss+"

等待,返回"

publicvoidRequest()

是否需要请求资源:

(1)or否(0)"

do

tt=Integer.parseInt(br.readLine());

if(tt<

0||tt>

1)

输入错误,重新输入:

}while(tt<

1);

if(tt==1)

intRequest1[]=newint[j];

请输入需要修改的进程P="

do

dd=Integer.parseInt(br.readLine());

if(dd<

0||dd>

i)

}while(dd<

i);

请输入依次输入请求资源数量:

intcount2=0;

资源"

="

Request1[t1]=Integer.parseInt(br.readLine());

if(Request1[t1]>

Need[dd][t1])

System.out.print("

else

if(Request1[t1]>

Available[t1])

count2=count2+1;

}while(Request1[t1]>

Need[dd][t1]);

if(count2==0)

Available[t1]=Available[t1]-Request1[t1];

Allocation[dd][t1]=Allocation[dd][t1]+Request1[t1];

Need[dd][t1]=Need[dd][t1]-Request1[t1];

if(count2>

Wait(dd);

if(count2==0)

if(Safe()==0)

不予分配资源,返回"

Available[t1]=Available[t1]+Request1[t1];

Allocation[dd][t1]=Allocation[dd][t1]-Request1[t1];

Need[dd][t1]=Need[dd][t1]+Request1[t1];

if(tt==0)

Bye"

System.exit(0);

}}

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

当前位置:首页 > 求职职场 > 笔试

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

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