Java语言的银行家算法Word文档格式.docx

上传人:b****5 文档编号:21367031 上传时间:2023-01-30 格式:DOCX 页数:12 大小:71.35KB
下载 相关 举报
Java语言的银行家算法Word文档格式.docx_第1页
第1页 / 共12页
Java语言的银行家算法Word文档格式.docx_第2页
第2页 / 共12页
Java语言的银行家算法Word文档格式.docx_第3页
第3页 / 共12页
Java语言的银行家算法Word文档格式.docx_第4页
第4页 / 共12页
Java语言的银行家算法Word文档格式.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

Java语言的银行家算法Word文档格式.docx

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

Java语言的银行家算法Word文档格式.docx

(标题2,即三号黑体加粗)

银行家算法模拟。

二、设计目的:

通过此课程设计,进行的一次全面的综合训练,使之更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。

三、总体设计思想概述:

安全状态下系统不会进入死锁,不安全状态可能进入死锁。

在进行资源分配之前,先计算分配的安全性,判断是否为安全状态。

四、设计要求:

银行家算法是避免死锁的一种重要方法,本实验要求用高级语言编写和调试一个简单的银行家算法程序。

加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。

设计完成后,要求写出一份详细的设计报告。

五、设计方案:

编制银行家算法通用程序,并检测所给状态的系统安全性。

1)银行家算法中的数据结构

假设有n个进程m类资源,则有如下数据结构:

可利用资源向量Available。

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

Available[j]=K,则表示系统中现有Rj类资源K个。

最大需求矩阵Max。

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

如果Max[i,j]=K,则表示进程i需要Rj类资源的最大数目为K。

分配矩阵Allocation。

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

如果Allocation[i,j]=K,则表示进程i当前已分得Rj类资源的数目为K。

需求矩阵Need。

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

如果Need[i,j]=K,则表示进程i还需要Rj类资源K个,方能完成其任务。

上述三个矩阵存在如下关系:

Need[i,j]=Max[i,j]-Allocation[i,j]

2)银行家算法

设进程I提出请求Request[N],则银行家算法按如下规则进行判断。

(1)如果Request[N]<

=NEED[I,N],则转

(2);

否则,出错。

(2)如果Request[N]<

=AVAILABLE,则转(3);

(3)系统试探分配资源,修改相关数据:

AVAILABLE=AVAILABLE-REQUEST

ALLOCATION=ALLOCATION+REQUEST

NEED=NEED-REQUEST

(4)系统执行安全性检查,如安全,则分配成立;

否则试探险性分配作废,系统恢复原状,进程等待。

3)安全性检查

(1)设置两个工作向量WORK=AVAILABLE;

FINISH[M]=FALSE

(2)从进程集合中找到一个满足下述条件的进程,

FINISH[i]=FALSE

NEED<

=WORK

如找到,执行(3);

否则,执行(4)

(3)设进程获得资源,可顺利执行,直至完成,从而释放资源。

WORK=WORK+ALLOCATION

FINISH=TRUE

GOTO2

(4)如所有的进程Finish[M]=true,则表示安全;

否则系统不安全。

六、说明

通过程序实现定义的进程,为各进程分配资源,具体过程是:

首先在程序中定义了3类资源,数量分别为10,5,7。

然后定义进程p0,p1,p2,p3,p4,接着为各进程申请各资源,然后在程序执行并比较申请的资源数量与各资源所剩数量,若前者大于后者则申请失败,反之则成功。

同时该程序可以撤消新建进程,也可以查看资源分配情况。

七、流程图:

八、运行结果

9、源程序

publicclassBanker{

publicfinalstaticintN=5;

//?

?

publicfinalstaticintM=3;

privateintResource[]=newint[M];

privateintAvailable[]=newint[M];

privateintMax[][]=newint[N][M];

privateintAllocation[][]=newint[N][M];

privateintNeed[][]=newint[N][M];

privateintWork[]=newint[M];

?

privatebooleanFinish[]=newboolean[N];

privateintRequest[]=newint[M];

privateintp[]=newint[N];

publicBanker(int_Resource[],int_Available[],int_Max[][],

int_Allocation[][]){//?

System.arraycopy(_Resource,0,Resource,0,Resource.length);

System.arraycopy(_Available,0,Available,0,Available.length);

System.arraycopy(_Max,0,Max,0,Max.length);

System.arraycopy(_Allocation,0,Allocation,0,Allocation.length);

for(inti=0;

i<

Need.length;

i++){//?

Need?

for(intj=0;

j<

Need[i].length;

j++)

Need[i][j]=Max[i][j]-Allocation[i][j];

}

Finish.length;

i++)

//?

Finish?

Request?

Finish[i]=false;

Request.length;

Request[i]=0;

System.arraycopy(Request,0,Work,0,Work.length);

Work

p.length;

p[i]=0;

show();

if(safe()){//?

System.out.println("

\n?

!

"

);

:

N;

j++){

if(j==N-1)

System.out.print("

+p[j]);

else

+p[j]+"

——>

}

\n"

}

publicvoidbank(intk,int_Request[])

throwsArrayIndexOutOfBoundsException{//?

System.arraycopy(_Request,0,Request,0,Request.length);

inti;

for(i=0;

i++){

if(Request[i]>

Need[k][i]){//?

k?

System.out.println("

+k+"

+i+"

+Request[i]

+"

+"

+Need[k][i]);

break;

Available[i]){//?

+Available[i]);

if(i==Request.length){

M;

//?

System.out.print("

+j+"

+Request[j]

j++){//?

Available[j]=Available[j]-Request[j];

Allocation[k][j]=Allocation[k][j]+Request[j];

Need[k][j]=Need[k][j]-Request[j];

if(!

safe()){//?

recover(k);

show();

}else{//?

for(intj=0;

if(j==N-1)

System.out.print("

else

}

publicbooleansafe(){//?

System.arraycopy(Available,0,Work,0,Work.length);

Available?

false

intn=0;

if(Finish[i]==false){//?

Finish[i]==0?

intcounter=0;

if(Need[i][j]<

=Work[j])

counter++;

if(counter==M){//i?

Work[j]>

=Need[i][j]?

Finish[i]=true;

//i?

p[n++]=i;

for(intj=0;

Work[j]=Work[j]+Allocation[i][j];

i=-1;

intm;

for(m=0;

m<

m++)

Finish[m])

if(m==N)//?

Finish[m]=true,?

true,?

returntrue;

else

returnfalse;

publicvoidrecover(intk){//?

Available[i]=Available[i]+Request[i];

Allocation[k][i]=Allocation[k][i]-Request[i];

Need[k][i]=Need[k][i]+Request[i];

publicvoidshow(){//?

System.out.println("

Resource.length;

System.out.print("

"

+Resource[i]+"

\n\n?

(Available)"

Available.length;

+Available[i]+"

(Max)"

\t?

0"

1"

2"

\t"

+Max[i][j]);

System.out.println();

System.out.println();

(Allocation)"

+Allocation[i][j]);

(Need)"

+Need[i][j]);

publicstaticvoidmain(String[]args)

throwsArrayIndexOutOfBoundsException{

intResource[]={10,5,7};

intAvailable[]={3,3,2};

intMax[][]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},

{4,3,3}};

intAllocation[][]={{0,1,0},{2,0,0},{3,0,2},

{2,1,1},{0,0,2}};

intRequest[]={1,0,2};

Bankerbanker=newBanker(Resource,Available,Max,Allocation);

banker.bank(0,Request);

0?

(1,0,2)

banker.bank(1,Request);

1?

}

10、总结

十一、参考文献

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

当前位置:首页 > 自然科学 > 数学

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

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