银行家算法及安全算法.docx

上传人:b****3 文档编号:2943673 上传时间:2022-11-16 格式:DOCX 页数:10 大小:32.16KB
下载 相关 举报
银行家算法及安全算法.docx_第1页
第1页 / 共10页
银行家算法及安全算法.docx_第2页
第2页 / 共10页
银行家算法及安全算法.docx_第3页
第3页 / 共10页
银行家算法及安全算法.docx_第4页
第4页 / 共10页
银行家算法及安全算法.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

银行家算法及安全算法.docx

《银行家算法及安全算法.docx》由会员分享,可在线阅读,更多相关《银行家算法及安全算法.docx(10页珍藏版)》请在冰豆网上搜索。

银行家算法及安全算法.docx

银行家算法及安全算法

银行家算法及安全算法

实验名称:

银行家算法

实验时间:

2015.04.20

实验目的:

1:

利用银行家算法避免死锁

2:

掌握银行家算法的基本原理

3:

掌握安全算法的基本原理

实验仪器:

PCvc6.0

实验原理:

1:

银行家算法的基本原理

■宦行家算法;进程Pj发出资源请求Requests

■安全性算法

Work:

-Available;

Finish[i…“ii);

刁—

我一满足下刘条件的进穩t

Fnish[i]=tru£?

rinhh[i]^fabc且Ncc(lL<\Votk找叭—

Work:

=Work+AllocatioHj;

Finish[i]|:

=true;

实验内容:

请使用银行家算法来避免死锁的产生程序代码:

(供参考)

#include#includevstring.h>

#include

#defineFalse0#defineTrue1

intMax[100][100]={0};〃各进程所需各类资源的最大需求intAvaliable[1OO]={O};〃系统可用资源

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

cout<

cout«endl;

for(j=0;j

cout<

cout«endl;

Need"«endl;

cout«"MaxAllocation

coutvv"进程名";

for(j=0;j<3;j++){

for(i=0;i

coutv

cout«"";

}

cout«endl;

for(i=0;i

coutvv""vvivv"";

for(j=0;j

cout«Max[曲]<<"";

coutvv"";

for(j=0;j

coutvvAllocation[i][j]<<"";

coutvv"";

for(j=0;j

cout<

coutvvendl;

}

}

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=O,m,apply,Finish[100]={0};

intj;

intflag=0;

Work[0]=Avaliable[0];

Work[1]=Avaliable[1];

Work[2]=Avaliable[2];

for(i=0;i

apply=0;

for(j=0;j

if(Finish[i]==False&&Need[i][j]<=Work[j]){apply++;

if(apply==N){

for(m=0;m

Finish[i]=True;

temp[k]=i;

i=-1;

k++;

flag++;

}

}

}

}

for(i=0;i

if(Finish[i]==False){

coutvv"系统不安全"<

return-1;

}

}

coutvv"系统是安全的!

"<

coutvv"分配的序列:

";

for(i=0;i

cout<

if(i";

return0;

}

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

{

charch;

inti=0,j=0;

ch='y';

coutvv"请输入要求分配的资源进程号(0-"vvM-1vv"):

";

cin>>i;〃输入须申请的资源号

coutvv"请输入进程"vvivv"申请的资源:

"<

for(j=0;j

{

cout<

";

cin»Request[j];〃输入需要申请的资源

}

若大于则出

for(j=0;j

if(Request[j]>Need[i][j])〃判断申请是否大于需求,

{

coutvv"进程"vvivv"申请的资源大于它需要的资源ch='n';

break;

else{

if(Request[j]>Avaliable[j])〃判断申请是否大于当前资

源,若大于则

{//出错

coutvv"进程"vvivv"申请的资源大于系统现在可利用的资源

coutvv"分配出错,不予分配!

"<

ch='n:

break;

}

}

}

if(ch=='y'){

changdata(i);//根据进程需求量变换资源

showdata();〃根据进程需求量显示变换后的资源

safe();//根据进程需求量进行银行家算法判断

}

}

voidaddresources(){//添加资源

intn,flag;

cin>>n;

flag二N;

N=N+n;

for(inti=0;i

coutvv"名称:

";

cin>>name[flag];

coutvv"数量:

";

cin>>Avaliable[flag++];

}

showdata();

safe();

}

voiddelresources(){〃删除资源

charming;

inti,flag=1;

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

do{

cin>>ming;

for(i=0;i

if(ming==name[i]){

flag=0;

break;

if(i==N)

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

}

while(flag);

for(intj=i;j

{

name[j]二name[j+1];

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

}

N=N-1;

showdata();

safe();

}

voidchangeresources(){〃修改资源函数

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

"«endl;

for(inti=0;i

cout<

"v

"<>Avaliable[0]>>Avaliable[1]>>Avaliable[2];coutvv"经修改后的系统可用资源为"<

for(intk=0;k

coutv

"v

showdata();

safe();

}

voidaddprocess(){〃添加作业

intflag二M;

M=M+1;

coutvv"请输入该作业的最打需求量[Max]"«endl;

for(inti=0;i

cout<

";

cin>>Max[flag][i];

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

}

showdata();

safe();

}

intmain()〃主函数

{

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

charming;

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

<

coutvv"请首先输入系统可供资源种类的数量cin>>n;

N=n;

for(i=0;i

{

coutvv"资源"<

";

cin>>ming;

name[i]=ming;

coutvv"资源的数量:

";

cin>>number;

Avaliable[i]=number;

}

cout<

coutvv"请输入作业的数量:

"cin>>m;

vvnvv"矩

M=m;

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

阵)[Max]:

"vvendl;

for(i=0;ivm;i++)

for(j=0;jvn;j++)

do{

flag=O;

coutvv"请输入各进程已经申请的资源量("vvmvv"*"vvn<<"矩阵)[Allocation]:

"<

for(i=0;i

for(j=0;j

cin>>Allocation[i][j];

if(Allocation[i][j]>Max[i][j])

flag=1;

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

}

if(flag)

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

\n";

}

while(flag);

showdata();〃显示各种资源

safe();〃用银行家算法判定系统是否安全

while(choice)

{

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

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

coutvv"

1:

增加资源

"vvendl;

coutvv"

2:

删除资源

"vvendl;

coutvv"

3:

修改资源

"vvendl;

coutvv"

4:

分配资源

"vvendl;

coutvv"

5:

增加作业

"vvendl;

coutvv"

0:

离开

"vvendl;

cout

coutvv"请选择功能号:

";

cin>>choice;

switch(choice)

case1:

addresources();break;

case2:

delresources();break;

case3:

changeresources();break;

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

当前位置:首页 > 法律文书 > 调解书

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

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