编程模拟银行家算法文档格式.docx

上传人:b****1 文档编号:3594573 上传时间:2023-05-02 格式:DOCX 页数:16 大小:102.65KB
下载 相关 举报
编程模拟银行家算法文档格式.docx_第1页
第1页 / 共16页
编程模拟银行家算法文档格式.docx_第2页
第2页 / 共16页
编程模拟银行家算法文档格式.docx_第3页
第3页 / 共16页
编程模拟银行家算法文档格式.docx_第4页
第4页 / 共16页
编程模拟银行家算法文档格式.docx_第5页
第5页 / 共16页
编程模拟银行家算法文档格式.docx_第6页
第6页 / 共16页
编程模拟银行家算法文档格式.docx_第7页
第7页 / 共16页
编程模拟银行家算法文档格式.docx_第8页
第8页 / 共16页
编程模拟银行家算法文档格式.docx_第9页
第9页 / 共16页
编程模拟银行家算法文档格式.docx_第10页
第10页 / 共16页
编程模拟银行家算法文档格式.docx_第11页
第11页 / 共16页
编程模拟银行家算法文档格式.docx_第12页
第12页 / 共16页
编程模拟银行家算法文档格式.docx_第13页
第13页 / 共16页
编程模拟银行家算法文档格式.docx_第14页
第14页 / 共16页
编程模拟银行家算法文档格式.docx_第15页
第15页 / 共16页
编程模拟银行家算法文档格式.docx_第16页
第16页 / 共16页
亲,该文档总共16页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

编程模拟银行家算法文档格式.docx

《编程模拟银行家算法文档格式.docx》由会员分享,可在线阅读,更多相关《编程模拟银行家算法文档格式.docx(16页珍藏版)》请在冰点文库上搜索。

编程模拟银行家算法文档格式.docx

否则,该申请暂不能满足。

实现银行家算法要有若干数据结构,它们用来表示资源分配系统的状态。

令n表示系统中进程的数目,m表示资源的分类数。

还需要以下数据结构:

1.Available是一个长度为m的向量,它表示每类资源可用的数量。

Available[j]=k,表示rj类资源可用的数量为k。

2.Max是一个n×

m矩阵,它表示每个进程对资源的最大需求。

Max[i,j]=k,表示进程pi至多可以申请k个rj类资源单位。

3.Allocation是一个n×

m矩阵,它表示当前分给每个进程的资源数目。

Allocation[i,j]=k,表示进程pi当前分到k个rj类资源。

4.Need是一个n×

m矩阵,它表示每个进程还缺少多少资源。

Need[i,j]=k,表示进程pi尚需k个rj类资源才能完成其任务。

显然Need[i,j]=Max[i,j]-Allocation[i,j]。

这些数据结构的大小和数值随时间推移而改变。

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

1.设置2个向量:

工作向量Work:

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

Finish[i]:

它表示系统是否有足够的资源分配给进程,使之完成运行。

开始时先做Finish[i]=true。

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

Finish[i]=flase;

Need[i,j]≤Work[j];

若找到,则执行步骤3,否则,执行步骤4。

3.当进程pi获得资源后,可顺利执行,直至完成,并释放分配给它的资源。

4.如果所有进程的Finish[i]=true都满足。

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

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

2.详细设计

2.1程序源代码

#include<

iostream>

string>

stdio>

usingnamespacestd;

#defineFalse0

#defineTrue1

intMax[100][100]={0};

//各进程所需各类资源的最大需求

intAvaliable[100]={0};

//系统可用资源

charname[100]={0};

//资源的名称

intAllocation[100][100]={0};

//系统已分配资源

intNeed[100][100]={0};

//还需要资源

intRequest[100]={0};

//请求资源向量

inttemp[100]={0};

//存放安全序列

intWork[100]={0};

//存放系统可提供资源

intM=100;

//作业的最大数为100

intN=100;

//资源的最大数为100

voidshowdata()//显示资源矩阵

{

inti,j;

cout<

<

"

系统目前可用的资源[Avaliable]:

endl;

for(i=0;

i<

N;

i++)

name[i]<

"

;

for(j=0;

j<

j++)

Avaliable[j]<

//输出分配资源

MaxAllocationNeed"

进程名"

for(j=0;

3;

j++){

}

M;

i++){

Max[i][j]<

Allocation[i][j]<

Need[i][j]<

}

intchangdata(inti)//进行资源分配

{

intj;

for(j=0;

j++){

Avaliable[j]=Avaliable[j]-Request[j];

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

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

return1;

intsafe()//安全性算法

inti,k=0,m,apply,Finish[100]={0};

intflag=0;

Work[0]=Avaliable[0];

Work[1]=Avaliable[1];

Work[2]=Avaliable[2];

for(i=0;

i++){

apply=0;

if(Finish[i]==False&

&

=Work[j]){

apply++;

if(apply==N){

for(m=0;

m<

m++)

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

//变分配数

Finish[i]=True;

temp[k]=i;

i=-1;

k++;

flag++;

if(Finish[i]==False){

系统不安全"

//不成功系统不安全

return-1;

系统是安全的!

//如果安全,输出成功

分配的序列:

i++){//输出运行进程数组

temp[i];

if(i<

M-1)cout<

->

return0;

voidshare()//利用银行家算法对申请资源对进行判定

charch;

inti=0,j=0;

ch='

y'

cout<

请输入要求分配的资源进程号(0-"

M-1<

):

cin>

>

i;

//输入须申请的资源号

请输入进程"

申请的资源:

for(j=0;

name[j]<

:

Request[j];

//输入需要申请的资源

if(Request[j]>

Need[i][j])//判断申请是否大于需求,若大于则出错

{

进程"

申请的资源大于它需要的资源"

分配不合理,不予分配!

ch='

n'

break;

else{

Avaliable[j])//判断申请是否大于当前资源,若大于则

{//出错

进程"

申请的资源大于系统现在可利用的资源"

分配出错,不予分配!

if(ch=='

){

changdata(i);

//根据进程需求量变换资源

showdata();

//根据进程需求量显示变换后的资源

safe();

//根据进程需求量进行银行家算法判断

voidaddresources(){//添加资源

intn,flag;

请输入需要添加资源种类的数量:

cin>

n;

flag=N;

N=N+n;

for(inti=0;

名称:

name[flag];

数量:

Avaliable[flag++];

showdata();

safe();

voidchangeresources(){//修改资源函数

for(inti=0;

Avaliable[i]<

输入系统可用资源[Avaliable]:

Avaliable[0]>

Avaliable[1]>

Avaliable[2];

经修改后的系统可用资源为"

for(intk=0;

k<

k++)

name[k]<

Avaliable[k]<

voiddelresources(){//删除资源

charming;

inti,flag=1;

请输入需要删除的资源名称:

do{

ming;

if(ming==name[i]){

flag=0;

if(i==N)

该资源名称不存在,请重新输入:

while(flag);

for(intj=i;

N-1;

name[j]=name[j+1];

Avaliable[j]=Avaliable[j+1];

N=N-1;

voidaddprocess(){//添加作业

intflag=M;

M=M+1;

请输入该作业的最大需求量[Max]"

Max[flag][i];

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

intmain()//主函数

inti,j,number,choice,m,n,flag;

*****************资源管理系统的设计与实现*****************"

请首先输入系统可供资源种类的数量:

N=n;

资源"

i+1<

的名称:

name[i]=ming;

资源的数量:

number;

Avaliable[i]=number;

请输入作业的数量:

m;

M=m;

请输入各进程的最大需求量("

*"

n<

矩阵)[Max]:

Max[i][j];

请输入各进程已经申请的资源量("

矩阵)[Allocation]:

Allocation[i][j];

if(Allocation[i][j]>

Max[i][j])

flag=1;

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

if(flag)

申请的资源大于最大需求量,请重新输入!

\n"

//显示各种资源

//用银行家算法判定系统是否安全

while(choice)

**************银行家算法演示***************"

1:

增加资源"

2:

删除资源"

3:

修改资源"

4:

分配资源"

5:

增加作业"

0:

离开"

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

请选择功能号:

choice;

switch(choice)

{

case1:

addresources();

break;

case2:

delresources();

case3:

changeresources();

case4:

share();

case5:

addprocess();

case0:

choice=0;

default:

请正确选择功能号(0-5)!

return1;

3.调试及运行结果

3.1程序调试及运行结果

经过调试,改正了越界错误,定义错误,死循环和一些语法错误。

程序最终运行成功。

检测结果如下:

总结和体会

一周的课程设计结束了。

在这一周里,我做一个模拟银行家算法。

我觉得在着手设计前设计的思路是很重要的。

只有思路清晰才能进行下一阶段的设计。

这样才能完成整个程序的设计,完成整个文报告的书写。

课程设计这几天学到的东西还真不少。

以前不清楚的现在都暴露出来了。

以前认为学了没用的东西现在也用到了。

这次的课程设计使我进一步了解了调度与死锁的问题。

以及有关资源申请的问题、避免死锁的具体实施方法。

深入了解了银行家算法的资源申请和资源分配的过程及原则。

保证系统处于安全状态。

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

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2