银行家算法及安全算法Word文档下载推荐.docx
- 文档编号:15854687
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:10
- 大小:32.16KB
银行家算法及安全算法Word文档下载推荐.docx
《银行家算法及安全算法Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《银行家算法及安全算法Word文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。
=Work+AllocatioHj;
Finish[i]|:
=true;
实验内容:
请使用银行家算法来避免死锁的产生程序代码:
(供参考)
#include<
iostream.h>
#includevstring.h>
#include<
stdio.h>
#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<
N;
i++)
cout<
<
name[i]<
<
;
endl;
for(j=0;
j<
j++)
Avaliable[j]<
"
//输出分配资源
Need"
MaxAllocation
coutvv"
进程名"
for(j=0;
3;
j++){
coutv<
”;
}
M;
i++){
vvivv"
Max[曲]<
coutvvAllocation[i][j]<
Need[i][j]vv"
coutvvendl;
intchangdata(inti)//进行资源分配
intj;
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};
intflag=0;
Work[0]=Avaliable[0];
Work[1]=Avaliable[1];
Work[2]=Avaliable[2];
apply=0;
if(Finish[i]==False&
&
Need[i][j]<
=Work[j]){apply++;
if(apply==N){
for(m=0;
m<
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'
请输入要求分配的资源进程号(0-"
vvM-1vv"
):
cin>
>
i;
〃输入须申请的资源号
请输入进程"
申请的资源:
name[j]<
:
cin»
Request[j];
〃输入需要申请的资源
若大于则出
if(Request[j]>
Need[i][j])〃判断申请是否大于需求,
错
进程"
申请的资源大于它需要的资源ch='
n'
break;
else{
Avaliable[j])〃判断申请是否大于当前资
源,若大于则
{//出错
申请的资源大于系统现在可利用的资源
分配出错,不予分配!
n:
if(ch=='
){
changdata(i);
//根据进程需求量变换资源
showdata();
〃根据进程需求量显示变换后的资源
safe();
//根据进程需求量进行银行家算法判断
voidaddresources(){//添加资源
intn,flag;
n;
flag二N;
N=N+n;
for(inti=0;
名称:
name[flag];
数量:
>
Avaliable[flag++];
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;
voidchangeresources(){〃修改资源函数
v"
v<
Avaliable[i]vvendl;
coutvv"
输入系统可用资源[Avaliable]:
cin>
Avaliable[0]>
Avaliable[1]>
Avaliable[2];
经修改后的系统可用资源为"
for(intk=0;
k<
k++)
name[k]vv"
Avaliable[k]vvendl;
voidaddprocess(){〃添加作业
intflag二M;
M=M+1;
请输入该作业的最打需求量[Max]"
cin>
Max[flag][i];
Need[flag][i]=Max[flag][i]-Allocation[flag][i];
intmain()〃主函数
inti,j,number,choice,m,n,flag;
*****************"
请首先输入系统可供资源种类的数量cin>
N=n;
n;
资源"
i+1<
的名称:
name[i]=ming;
资源的数量:
number;
Avaliable[i]=number;
请输入作业的数量:
cin>
m;
vvnvv"
矩
M=m;
请输入各进程的最大需求量("
vvmvv"
阵)[Max]:
vvendl;
ivm;
jvn;
flag=O;
请输入各进程已经申请的资源量("
*"
vvn<
矩阵)[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)
**************银行家算法演示
***************"
增加资源
删除资源
修改资源
4:
分配资源
5:
增加作业
0:
离开
*******************************************"
end|;
请选择功能号:
choice;
switch(choice)
case1:
addresources();
case2:
delresources();
case3:
changeresources();
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 银行家 算法 安全