银行家算法及安全算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验名称:银行家算法

实验时

间:

2015.04.20 实验目

的:

1:

利用银行家算法避免死锁

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

3:掌握安全算法的基本原理

实验仪器:

PC vc6.0

实验原理:

1:银行家算法的基本原理

■锲行家算法:进程Pj发出资源请求Requests

2:安全算法的基本原理

■安全性算法

Work: -Available;

Finish [ i …“ii);

刁—

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

rinhh[ i ]^fal*c 且Ncc(l L

找型1

Finish( > J^true?

Work:=Work+AllocatioHj;

Finish [ i ]|:=true;

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

码:(供参考)

#i nclude #i ncludevstri ng.h>

#in clude

#defi ne False 0

#defi ne True 1

2:安全算法的基本原理

int Max[100][100]={0};〃各进程所需各类资源的最大需求int Avaliable[100]={0};〃系统可用资源

char name[100]={0};// 资源的名称

int Allocation[100][100]={0};// 系统已分配资源

int Need[100][100]={0};// 还需要资源

int Request[100]={0};// 请求资源向量

int temp[100]={0};// 存放安全序列

int Work[100]={0};// 存放系统可提供资源

int M=100;// 作业的最大数为100

int N=100;// 资源的最大数为100

void showdata()〃显示资源矩阵

{

int i,j;

cout«"系统目前可用的资源[Avaliable]:"«endl;

for(i=0;i

cout<

cout<

for (j=0;j

cout<

cout<<" Max Allocation

Need"<

coutvv"进程名";

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

for(i=0;i

cout<

cout<<" ";

}

cout<

for(i=0;i

cout<<" "<

cout<<" ";

for(j=0;j

cout<<" ";

for(j=0;j

cout<

}

}

int cha ngdata(i nt i)〃进行资源分配

{

int j;

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];

}

return 1;

}

int safe()〃安全性算法

{

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

int j;

int flag=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

Work[m]=Work[m]+Allocation[i][m];// 变分配数

Finish[i]=True;

temp[k]=i;

i=-1;

k++;

flag++;

}

}

}

}

for(i=0;i

if(Finish[i]==False){

coutvv"系统不安全"<

return -1;

}

}

coutvv"系统是安全的!"<

for(i=0;ivM;i++){// 输出运行进程数组

coutvvtemp[i];

if(ivM-1) coutvv"->";

coutvvendl;

return 0;

相关文档
最新文档