银行家算法课程设计报告Word文件下载.docx

上传人:b****4 文档编号:16580808 上传时间:2022-11-24 格式:DOCX 页数:18 大小:197.91KB
下载 相关 举报
银行家算法课程设计报告Word文件下载.docx_第1页
第1页 / 共18页
银行家算法课程设计报告Word文件下载.docx_第2页
第2页 / 共18页
银行家算法课程设计报告Word文件下载.docx_第3页
第3页 / 共18页
银行家算法课程设计报告Word文件下载.docx_第4页
第4页 / 共18页
银行家算法课程设计报告Word文件下载.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

银行家算法课程设计报告Word文件下载.docx

《银行家算法课程设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《银行家算法课程设计报告Word文件下载.docx(18页珍藏版)》请在冰豆网上搜索。

银行家算法课程设计报告Word文件下载.docx

设Requesti是进程Pi的请求向量。

如果Requesti[j]=k,表示进程只需要k个Rj类型的资源。

当Pi发出资源请求后,系统按下述步骤进行检查:

(1)如果Requesti[j]<

=Need[i,j],则转向步骤2;

否则,认为出错,因为它所3需要的资源数已超过它所宣布的最大值。

(2)如果Requesti[j]<

=Available[j],则转向步骤3;

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

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

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等待。

4.3安全性算法

系统所执行的安全性算法可描述如下:

(1)设置两个向量

①、工作向量Work。

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

②、Finish。

它表示系统是否有足够的资源分配给进程,使之运行完成,开始时先做Finish[i]:

=false;

当有足够资源分配给进程时,令Finish[i]:

=true。

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

①、Finish[i]=false;

②、Need[i,j]<

=Work[j];

如找到,执行步骤(3);

否则,执行步骤(4)。

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

Work[j]:

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

Finish[i]:

=true;

gotostep2;

(4)如果所有进程的Finish[i]:

=true,则表示系统处于安全状态;

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

5设计思路

(1)进程一开始向系统提出最大需求量;

(2)进程每次提出新的需求都统计是否超出它事先提出的最大需求量;

(3)若正常,则判断该进程所需剩余量(包括本次申请)是否超出系统所掌握的剩余资源量,若不超出,则分配,否则等待。

6算法流程图

6.1银行家算法流程图

开始

 

提出进程i的请求

向量Resquest[*]

alloc[i][*]+Request[*}<

=claimNoERROR

[i][*]

Yes

Request[*]<

=available[*]noERROR

yes

available[*]-=Request[*]

alloc[i][*]+=Request[*]

is_safe()No

yesavailable[*]+=Request[*]

alloc[*]-=Request[*]

同意本次分配

拒绝本次分配

图1银行家算法流程图

6.2银行家算法安全检测流程图

tmp_avail[*]=available[*]

寻找进程k满足

Claim[k][*]-alloc[k][*]<

tmp_avail[*]

是否存在这样返回false

的进程

tmp_avail[*]+=alloc[*]

标记进程k

是否所有的进程

都被标记

返回true

图2银行家算法安全检测流程图

7银行家算法之列

假定系统中有五个进程:

{P0,P1,P2,P3,P4}和三种类型的资源{A,B,C},每一种资源的数量分别为10、5、7,在T0时刻的资源分配情况如图3所示。

资源情况

进程

Max

Allocation

Need

Available

ABC

P0

753

010

743

332

(230)

P1

322

200

(302)

122

(020)

P2

902

302

600

P3

222

211

011

P4

433

002

431

图3T0时刻的资源分配表

(1)T0时刻的安全性:

利用安全性算法对T0时刻的资源分配情况进行分析(如图

可知,在T0时刻存在着一个安全序列{P1,P3,P4,P2,P0},故系统是安全的。

资源情况

Work

Work+Allocation

Finish

532

true

745

1047

1057

图4T0时刻的安全序列

(2)P1请求资源:

P1发出请求向量Request1(1,0,2),系统按银行家算法进行检查:

①Request1(1,0,2)<

=Need1(1,2,2)

②Request1(1,0,2)<

=Available1(3,3,2)

③系统先假定可为P1分配资源,并修改Available,Allocation1和Need1向量,由此形成资源变化情况如图1中的圆括号所示。

④再利用安全性算法检查此时系统是否安全。

如图5所示

230

020

755

图5P1申请资源时的安全性检查

由所进行的安全性检查得知,可以找到一个安全序列{P1,P3,P4,P2,P0}。

因此系统是安全的,可以立即将P1所申请的资源分配给它。

(3)P4请求资源:

P4发出请求向量Request4(3,3,0),系统按银行家算法进行检查:

①Request4(3,3,0)≤Need4(4,3,1);

②Request4(3,3,0)不小于等于Available(2,3,0),让P4等待。

(4)P0请求资源:

P0发出请求向量Request0(0,2,0),系统按银行家算法进行检查。

①Request0(0,2,0)≤Need0(7,4,3);

②Request0(0,2,0)≤Available(2,3,0);

③系统暂时先假定可为P0分配资源,并修改有关数据,如图6所示。

030

732

210

000

432

图6为P0分配资源后的有关资源数据

(5)进行安全性检查:

可用资源Available(2,1,0)已不能满足任何进程的需要,故系统进入不安全状态,此时系统不分配资源。

8程序测试结果

图7

图8

图9

图10

源程序清单:

#include<

string.h>

stdio.h>

iostream.h>

#defineFALSE0

#defineTRUE1

#defineW10

#defineR10

intM;

intN;

intALL_RESOURCE[W];

intMAX[W][R];

intAVAILABLE[R];

intALLOCATION[W][R];

intNEED[W][R];

intRequest[R];

voidoutput()

{

inti,j;

cout<

<

endl<

"

━━━━━━━━━━━━━━━━━━"

endl;

各种资源的总数量:

for(j=0;

j<

N;

j++)

资源"

:

"

ALL_RESOURCE[j];

目前各种资源可利用的数量为:

AVAILABLE[j];

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

for(i=0;

i<

i++)

i;

for(i=0;

M;

进程"

;

NEED[i][j]<

}

各进程已经得到的资源量:

ALLOCATION[i][j]<

voiddistribute(intk)

intj;

AVAILABLE[j]=AVAILABLE[j]-Request[j];

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

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

voidrestore(intk)

AVAILABLE[j]=AVAILABLE[j]+Request[j];

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

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

intcheck()

intWORK[R],FINISH[W];

for(j=0;

j++)WORK[j]=AVAILABLE[j];

i++)FINISH[i]=FALSE;

if(FINISH[i]==FALSE&

&

=WORK[j])

WORK[j]=WORK[i]+ALLOCATION[i][j];

FINISH[i]=TRUE;

if(FINISH[i]==FALSE)

系统不安全!

!

本次资源申请不成功!

return1;

else

经安全性检查,系统安全,本次分配成功。

return0;

voidbank()//银行家算法

inti=0,j=0;

charflag='

Y'

while(flag=='

||flag=='

y'

i=-1;

while(i<

0||i>

=M)

请输入需申请资源的进程号:

cin>

>

if(i<

=M)cout<

输入的进程号不存在,重新输入!

请输入进程"

申请各类资源的数量:

Request[j];

if(Request[j]>

NEED[i][j])

进程"

申请的资源数大于进程"

还需要"

类资源的数量!

若继续执行系统将处于不安全状态!

flag='

N'

break;

AVAILABLE[j])

申请的资源数大于系统可用"

if(flag=='

distribute(i);

if(check())

restore(i);

output();

else

是否继续银行家算法演示,按'

或'

键继续,按'

n'

键退出演示:

flag;

voidversion()

\t       银行家算法        "

voidmain()

inti=0,j=0,p;

version();

getchar();

请输入总进程数:

请输入总资源种类:

请输入各类资源总数:

(需要输入数为"

N<

个)"

ALL_RESOURCE[i];

输入各进程所需要的各类资源的最大数量:

M*N<

do

MAX[i][j];

if(MAX[i][j]>

ALL_RESOURCE[j])

占有资源超过了声明的该资源总数,请重新输入"

while(MAX[i][j]>

ALL_RESOURCE[j]);

输入各进程已经占据的各类资源的数量:

M

*N<

ALLOCATION[i][j];

if(ALLOCATION[i][j]>

MAX[i][j])

占有资源超过了声明的最大资源,请重新输入"

while(ALLOCATION[i][j]>

MAX[i][j]);

j++)

p=ALL_RESOURCE[j];

p=p-ALLOCATION[i][j];

AVAILABLE[j]=p;

if(AVAILABLE[j]<

0)

AVAILABLE[j]=0;

NEED[i][j]=MAX[i][j]-ALLOCATION[i][j];

bank();

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

当前位置:首页 > 成人教育 > 远程网络教育

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

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