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

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

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

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

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

5.1.实验原理分析

5.1.1.算法的来源及基本思想

银行家算法,顾名思义是来源于银行的借贷业务,通过这个算法可以用来解决生活中的实际问题,如银行贷款等。

一定数量的本金要应多个客户的借贷周转,为了防止银行加资金无法周转而倒闭,对每一笔贷款,必须考察其是否能限期归还。

在操作系统中研究资源分配策略时也有类似问题,系统中有限的资源要供多个进程使用,必须保证得到的资源的进程能在有限的时间内归还资源,以供其他进程使用资源。

如果资源分配不得到就会发生进程循环等待资源,则进程都无法继续执行下去的死锁现象。

5.1.2.死锁产生的条件

银行家算法是用来避免死锁的一种重要方法,通过编写一个简单的银行家算法程序,加深了解有关资源申请、避免死锁等概念,并体会和了解死锁和避免死锁的具体实施方法。

死锁的产生,必须同时满足四个条件:

A、即一个资源每次只能由一个进程使用;

B、第二个为等待条件,即一个进程请求资源不能满足时,它必须等待,单它仍继续宝石已得到的所有其他资源;

C、第三个为非剥夺条件,即在出现死锁的系统中一定有不可剥夺使用的资源;

D、第四个为循环等待条件,系统中存在若干个循环等待的进程,即其中每一个进程分别等待它前一个进程所持有的资源。

防止死锁的机构只能确保上述四个条件之一不出现,则系统就不会发生死锁。

银行家算法是避免死锁的方法中,施加的限制条件较弱的,有利于获得令人满意的系统性能的方法。

在该方法中把系统的状态分为安全状态和不安全状态,只要能使系统始终都处于安全状态,便可以避免发生死锁。

5.1.3模拟进程申请资源

把一个进程需要和已占有资源的情况记录在进程控制中,假定进程控制块PCB其中“状态”有就绪态、等待态和完成态。

当进程在处于等待态时,表示系统不能满足该进程当前的资源申请。

“资源需求总量”表示进程在整个执行过程中总共要申请的资源量。

显然,,每个进程的资源需求总量不能超过系统拥有的资源总数,银行算法进行资源分配可以避免死锁.

5.2.程序结构分析:

5.2.1.程序流程图

程序流程图是人们对解决问题的方法、思路或算法的一种描述。

流程图的优点:

(a)采用简单规范的符号,画法简单;

(b)结构清晰,逻辑性强;

(c)便于描述,容易理解。

流程图采用规范的符号

(1)起始框

(2)终止框

(3)执行框(4)判别框

图1银行家算法流程图

6程序及说明

算法用到的主要数据结构和C语言说明。

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

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

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

(4)还需求矩阵INTNEED[N]

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

#defineW10

#defineR20

intM;

intN;

intALL_RESOURCE[W];

intMAX[W][R];

intAVAILABLE[R];

intALLOCATION[W][R];

intNEED[W][R];

intRequest[R];

(5)各子模块相关函数代码已经在附录中一一列出。

6.1示例数据

进程数:

2

资源数:

资源0:

10

资源1:

20

资源0(最大需求)

资源1(最大需求)

进程0

1

进程1

资源0(已占有)

资源1(已占用)

6

8

7设计结果与分析

图2输入数据完成初始化

注:

初始化时,如果输入数据不符合要求,程序能给出错误提示并要求使用者重新输入数据。

为简便期间,省去此功能的截屏图像。

演示者可以自行上机体会。

计算机自动检测水所有进程能否构成一个安全序列。

图3手动为进程申请资源

如果能够构成安全序列,就显示出是否进行手动申请资源。

输入k开始手动申请资源。

图4申请资源的进程号

申请资源并进行安全性检查。

图5选择是否继续演示

用户根据根据该界面选择是否继续演示操作。

图6配置资源数

用户根据此界面进行配置相应的资源数目。

图7选择退出演示运行界面

用户输入输入N结束演示。

7.3出现问题及解决方案

源程序中未考虑进程状态会随着程序运行发生变化,为了完善程序专门编写了状态函数voidset()来显示进程状态。

如图6-2-2与图6-2-4倒数2、3行中均显示了进程状态。

源程序中指定资源数必须是三种,经过改进后资源数可以为1到10中的任意数。

源程序资源矩阵的输出界面不能自动适应数据长度的变化,修改后资源的矩阵输出界面中的数据显示获得了改善。

8.设计心得体会

这次课程设计没有将程序初始化代码段分离出来,以至于程序的结构不清晰,由于初始化代码不是一个独立的函数致使程序的可读性较差。

作课程设计时应尽量把功能模块设计好考虑好,使程序易于理解。

设计中得到了老师和广大同学的帮助,并参考了网络上的优秀论文和纸质文件,使我的课程设计能够较为顺利的进行下去。

9.附录(关键源代码)

#include"

string.h"

iostream"

iomanip"

usingnamespacestd;

#defineFALSE0

#defineTRUE1

intFINISH[W];

intWORK[100];

intQ[100];

intL=0;

voidshowdata()

{

inti,j;

cout<

<

"

————————————————————————"

endl;

各种资源的总数量(all):

"

;

for(j=0;

j<

N;

j++)cout<

资源"

:

ALL_RESOURCE[j];

endl<

系统目前各种资源可用的数为(available):

AVAILABLE[j];

—————————————————————"

各进程还需要的资源量(need):

setw(8)<

资源"

j;

for(i=0;

i<

M;

i++)

{

进程p"

NEED[i][j];

//<

//;

}

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

i++)

ALLOCATION[i][j];

voidchangdata(intk)

intj;

j++)

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

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

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

}

}

voidrstordata(intk)

{intj;

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

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

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

intchkerr(ints)

{intWORKrest;

//FINISH[W]

inti,j,k=0;

for(i=0;

i++)FINISH[i]=FALSE;

for(j=0;

{

WORKrest=AVAILABLE[j];

i=s;

do

if(FINISH[i]==FALSE&

&

NEED[i][j]<

=WORKrest)

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

FINISH[i]=TRUE;

i=0;

else

i++;

}while(i<

M);

if(FINISH[i]==FALSE)

系统不安全!

!

本次资源申请不成功!

return1;

cout<

状态:

阻塞"

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

return0;

voidset()

intt[10];

for(inti=0;

i++){

t[i]=0;

for(intj=0;

j++){if(NEED[i][j]==0)t[i]+=1;

if(t[i]==N)

{cout<

运行结束"

for(intk=0;

k<

k++)

AVAILABLE[k]=AVAILABLE[k]+ALLOCATION[i][k];

ALLOCATION[i][k]=0;

}

else

等待调用"

voidsafe()

{cout<

·

现在计算机自动检测是否存在安全序列·

j++)

WORK[j]=AVAILABLE[j];

intflag=0;

i<

FINISH[i]=FALSE;

if(FINISH[i]==FALSE)

{

flag=0;

for(j=0;

j<

j++)

{

if(WORK[j]>

=NEED[i][j])

flag=flag+1;

else

break;

}

if(flag==N)

{

Q[L]=i;

FINISH[i]=TRUE;

for(j=0;

{

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

//cout<

b"

WORK[j];

}

L=L+1;

//cout<

L<

cout<

资源释放后系统目前各种资源可用的数为(available):

//cout<

*********************"

cout<

l"

cout<

for(j=0;

cout<

i=0;

}

else;

inttest()

{

if(L<

M)

\n当前状态不安全!

不存在安全序列"

^^^您不能向系统申请资源^^^"

………计算机检测结束………"

else

inti;

//l=0;

\n此时处于安全的状态!

安全序列是:

i++)

进程"

p"

Q[i]<

-->

voidbank()

inti=0,j=0;

//i=0;

intj=0;

charflag='

Y'

while(flag=='

||flag=='

y'

i=-1;

while(i<

0||i>

=M)

{cout<

请输入需申请资源的进程号(从P0到P"

M-1<

,否则重输入!

):

cin>

>

i;

if(i<

=M)cout<

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

请输入进程P"

申请的资源数:

{

cin>

Request[j];

if(Request[j]>

NEED[i][j])

进程P"

申请的资源数大于进程P"

还需要"

类资源的资源量!

申请不合理,出错!

请重新选择!

flag='

N'

break;

AVAILABLE[j])//若请求的资源数大于可用资源数

{

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

}

}

}

if(flag=='

changdata(i);

if(chkerr(i))

rstordata(i);

showdata();

else{

set();

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

或'

键继续,按'

n'

键退出演示:

flag;

voidmain()

********************************"

欢迎使用银行家安全性算法模拟程序"

本程序由C++编制完成"

inti=0,j=0,p;

do{cout<

请输入总进程数:

}while(M<

0);

请输入总资源种类:

}while(N<

请输入总资源数(all_resource):

{cout<

ALL_RESOURCE[i];

依次输入各进程所需要的最大资源数量(max):

i++

所需"

类资源的数目:

cin>

MAX[i][j];

if(MAX[i][j]>

ALL_RESOURCE[j])

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

}while(MAX[i][j]>

ALL_RESOURCE[j]);

cout<

依次输入各进程已经占据的资源数量(allocation):

for(i=0;

已占有"

if(ALLOCATION[i][j]>

MAX[i][j])

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

}while(ALLOCATION[i][j]>

MAX[i][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];

safe();

if(test()==0);

{}

else{

charletter;

如果需要手动为进程申请资源,\n请输入字母k:

letter;

if(letter=='

k'

{showdata();

bank();

};

};

10.参考文献

[1]汤子赢《计算机操作系统(修订版)》[M].西安:

电子科技大学出版社2006:

20-100

[2]屠立德《操作系统基础(第三版)》[M].北京:

清华大学出版社2000:

34-50

[3]庞丽萍《操作系统原理》[M].武汉:

华中科技大学出版社2000:

55-120

[4]曹聪,范廉明.《操作系统原理与分析》[M].北京:

科学出版社2003:

1-100

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

当前位置:首页 > 自然科学 > 天文地理

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

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