银行家算法设计Word文档下载推荐.docx
- 文档编号:20482406
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:14
- 大小:90.51KB
银行家算法设计Word文档下载推荐.docx
《银行家算法设计Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《银行家算法设计Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
voidchangeresources()//修改资源函数
voiddelresources()//删除资源
voidaddprocess()//添加作业
3、设计思路
银行家算法是一种最有代表性的避免死锁的算法。
要解释银行家算法,必须先解释操
作系统安全状态和不安全状态安全状态:
如果存在一个由系统中所有进程构成的安全序列P1,…,Pn,则系统处于安全状态。
安全状态一定是没有死锁发生。
不安全状态:
不存在一个安全序列。
不安全状态不一定导致死锁。
那么什么是安全序列呢?
安全序列:
一个进程序列{P1,…,Pn}是安全的,如果对于每一个进程Pi(1≤i≤n),它以后尚需要的资源量不超过系统当前剩余资源量与所有进程Pj(j<
i)当前占有资源量之和。
我们可以把操作系统看作是银行家,操作系统管理的资源相当于银行家管理的资金,进程向操作系统请求分配资源相当于用户向银行家贷款。
操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。
当进程在执行中继续申请资源时,先测试该进程已占用的资源数与本次申请的资源数之和是否超过了该进程对资源的最大需求量。
若超过则拒绝分配资源,若没有超过则再测试系统现存的资源能否满足该进程尚需的最大资源量,若能满足则按当前的申请量分配资源,否则也要推迟分配。
4、算法和流程图
算法:
编制银行家算法通用程序,并检测所给状态的系统安全性。
设进程I提出请求Request[N],则银行家算法按如下规则进行判断。
(1)如果Request[N]<
=NEED[I,N],则转
(2);
否则,出错。
(2)如果Request[N]<
=AVAILABLE,则转(3);
(3)系统试探分配资源,修改相关数据:
AVAILABLE=AVAILABLE-REQUEST
ALLOCATION=ALLOCATION+REQUEST
NEED=NEED-REQUEST
(4)系统执行安全性检查,如安全,则分配成立;
否则试探险性分配作废,系统恢复原状,进程等待。
流程图:
四.各程序主要函数及注释
#include<
iostream>
stdio.h>
usingnamespacestd;
#defineFalse0
#defineTrue1
intMax[100][100]={0};
//各进程所需各类资源的最大需求
intAvaliable[100]={0};
//系统可用资源
charname[100];
//资源的名称
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;
{
cout<
}
M;
p"
Max[i][j]<
Allocation[i][j]<
Need[i][j]<
}
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=0,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&
&
=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'
请输入要求分配的资源进程号(0-"
M-1<
):
cin>
>
i;
//输入须申请的资源号
请输入进程"
申请的资源:
name[j]<
:
Request[j];
//输入需要申请的资源
if(Request[j]>
Need[i][j])//判断申请是否大于需求,若大于则出错
进程"
申请的资源大于它需要的资源"
分配不合理,不予分配!
ch='
n'
break;
else
if(Request[j]>
Avaliable[j])//判断申请是否大于当前资源,若大于则出错
cout<
进程"
申请的资源大于系统现在可利用的资源"
分配出错,不予分配!
ch='
break;
if(ch=='
)
changdata(i);
//根据进程需求量变换资源
showdata();
//根据进程需求量显示变换后的资源
safe();
//根据进程需求量进行银行家算法判断
inti,k;
Avaliable[i]<
重新输入系统可用资源[Avaliable]:
cin>
Avaliable[i];
经修改后的系统可用资源为"
for(k=0;
k<
k++)
name[k]<
Avaliable[k]<
voiddelresources()//删除资源
charming;
inti,flag=1,j;
请输入需要删除的资源名称:
do
ming;
if(ming==name[i])
{
flag=0;
if(i==N)
该资源名称不存在,请重新输入:
while(flag);
for(j=i;
N-1;
name[j]=name[j+1];
Avaliable[j]=Avaliable[j+1];
intk=i;
for(j=k;
Max[i][j]=Max[i][j+1];
Allocation[i][j]=Allocation[i][j+1];
Need[i][j]=Need[i][j+1];
N=N-1;
intflag=M;
M=M+1;
请输入该进程的最大需求量[Max]"
for(inti=0;
Max[flag][i];
Need[flag][i]=Max[flag][i]-Allocation[flag][i];
intmain()//主函数
//freopen("
in.txt"
"
r"
stdin);
inti,j,number,choice,m,n,flag;
*****************资源管理系统的设计与实现*****************"
请首先输入系统可供资源种类的数量:
n;
N=n;
资源"
i+1<
的名称:
name[i]=ming;
资源的数量:
getchar();
number;
Avaliable[i]=number;
请输入进程的数量:
m;
M=m;
请输入各进程的最大需求量("
*"
n<
矩阵)[Max]:
Max[i][j];
flag=0;
请输入各进程已经申请的资源量("
矩阵)[Allocation]:
for(i=0;
for(j=0;
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)
*******************银行家算法演示*******************"
*0:
退出程序1:
删除资源*"
*2:
修改资源3:
分配资源*"
*4:
增加进程*"
****************************************************"
请选择功能号:
choice;
switch(choice)
case1:
delresources();
break;
case2:
changeresources();
case3:
share();
case4:
addprocess();
case0:
choice=0;
default:
请正确选择功能号(0-5)!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 银行家 算法 设计