计算机操作系统之银行家算法doc 16页Word文档下载推荐.docx

上传人:b****3 文档编号:17928023 上传时间:2022-12-12 格式:DOCX 页数:17 大小:38.71KB
下载 相关 举报
计算机操作系统之银行家算法doc 16页Word文档下载推荐.docx_第1页
第1页 / 共17页
计算机操作系统之银行家算法doc 16页Word文档下载推荐.docx_第2页
第2页 / 共17页
计算机操作系统之银行家算法doc 16页Word文档下载推荐.docx_第3页
第3页 / 共17页
计算机操作系统之银行家算法doc 16页Word文档下载推荐.docx_第4页
第4页 / 共17页
计算机操作系统之银行家算法doc 16页Word文档下载推荐.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

计算机操作系统之银行家算法doc 16页Word文档下载推荐.docx

《计算机操作系统之银行家算法doc 16页Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《计算机操作系统之银行家算法doc 16页Word文档下载推荐.docx(17页珍藏版)》请在冰豆网上搜索。

计算机操作系统之银行家算法doc 16页Word文档下载推荐.docx

算法流程图

银行家算法:

安全性算法:

【例1】某系统有A、B、C、D这4类资源供5个进程共享,进程对资源的需求和分配情况如下表所示。

现在系统中A、B、C、D类资源分别还剩1、5、2、0个,请按银行家算法回答下列问题:

进程

已占资源

最大需求数

A

B

C

D

P1

1

2

P2

7

5

P3

3

4

6

P4

P5

(1) 

现在系统是否处于安全状态?

(2)如果现在进程P2提出需要(0,4,2,0)个资源的请求,系统能否满足它的请求?

【例2】用银行家算法考虑下列系统状态:

进程 

分配矩阵 

最大需求矩阵 

资源总数矩阵

2

0

1

问系统是否安全?

若进程B请求(0,0,1,0),可否立即分配?

此后进程E也请求(0,0,1,0),可否分配给它?

通过运行程序发现,例1当中的系统处于不安全状态,进程P2提出的请求无法实现;

例2当中的系统处于安全状态,进程B提出的请求能实现,此后进程E的请求也能实现。

源代码

#include<

iostream>

#defineN20

#defineM20

usingnamespacestd;

intf(inta[N][M],intb[N][M],intm,intk)

{

intj;

for(j=0;

j<

m;

j++)

if(a[k-1][j]>

b[k-1][j])return0;

return1;

}

intg(inta[N][M],intb[],intm,intk)

if(a[k][j]>

b[j])return0;

inth(inta[],intn)

for(inti=0;

i<

n;

i++)

if(!

a[i])return0;

intp(inta[],intb[N][M],intm,intk)

if(a[j]>

intq(inta[],intb[],intm)

intsafe(intFinish[N],intWork[M],intNeed[N][M],intAllocation[N][M],intn,intm)

{inti,j,k;

intt[N];

for(i=0;

t[i]=1;

cout<

<

"

安全性检查!

endl;

)//首先找到一个满足条件的进程

{

if((Finish[i]==0)&

&

g(Need,Work,m,i))

{

k=i;

t[i]=0;

p("

k+1<

):

Work["

m<

]:

;

Work[j]<

"

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

Finish[i]=1;

}

Need["

Need[i][j]<

Allocation["

Allocation[i][j]<

(Work+Allocation)["

Finish["

Finish[i]<

break;

else

i++;

if(g(Need,Work,m,k))//依次找到满足条件的后面几个进程

if(t[i])

if(g(Need,Work,m,i))

i+1<

else{

return0;

if(h(Finish,n))return1;

//系统处于安全状态

elsereturn0;

//系统处于不安全状态

voidr(intFinish[N],intWork[M],intAvailable[M],intNeed[N][M],intAllocation[N][M],intMax[N][M],intn,intm)

{

intRequest[M];

charb;

inti,j,k;

\n要申请资源,请按'

y'

或'

Y'

,否则按'

n'

N'

//是立即进行安全性检查,还是进行资源申请

cin>

>

b;

if(b!

='

b!

if(safe(Finish,Work,Need,Allocation,n,m))

此时刻系统安全!

\n"

此时刻系统不安全!

}

\n请输入申请资源的进程编号(1,2,…,"

n<

k;

while(k>

n)

您输入了错误的进程号,请核查后重新输入:

\n请输入进程p("

k<

)申请各类资源的数量:

for(j=0;

j<

j++)

Request[j];

if(p(Request,Need,m,k))

if(q(Request,Available,m))

Available[j]=Available[j]-Request[j];

Allocation[k-1][j]=Allocation[k-1][j]+Request[j];

Need[k-1][j]=Need[k-1][j]-Request[j];

Work[j]=Available[j];

试分配!

各种资源可利用的数量Available["

Available[j]<

\n已分配资源Allocation["

for(i=0;

i<

i++)

\n最大需求矩阵Max["

]["

Max[i][j]<

\n需求矩阵Need["

if(safe(Finish,Work,Need,Allocation,n,m))

{//判断当前状态的安全性

系统处于安全状态!

\n申请资源成功!

!

else{

\n当前状态不安全!

//恢复数据

Available[j]=Available[j]+Request[j];

Allocation[k-1][j]=Allocation[k-1][j]-Request[j];

Need[k-1][j]=Need[k-1][j]+Request[j];

Finish[i]=0;

\n恢复数据:

//显示输入各数组的值

系统中尚无足够的资源满足进程p["

]的申请,p["

]必须等待!

elsecout<

elsecout<

出错,进程所需要的资源数目已超过它所宣布的最大值!

}

voidmain()

---------------------------------------------------------"

------------------模拟银行家算法------------------"

--------------------江之风海之韵-------------------"

------------------------QuQu-------------------------"

intAvailable[M];

intMax[N][M];

intAllocation[N][M];

intNeed[N][M];

intWork[M];

intFinish[N];

inti,j,n,m;

//定义全局变量

输入进程的数量:

//从此开始输入有关数据

输入资源种类数:

输入各种资源可利用的数量Available["

Available[j];

//初始化Work[j]

\n输入各进程对各类资源的最大需求数Max["

\n请严格按照("

×

)的距阵输入:

Max[i][j];

\n请输入各进程当前已分配的资源数量Allocation["

Allocation[i][j];

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

r(Finish,Work,Available,Need,Allocation,Max,n,m);

for(i=0;

实验结果

实验体会

银行家算法在计算机操作系统中是一个非常重要的算法,这次我编制模拟银行家算法的程序,来验证了程序的正确性。

银行家算法可以避免程序死锁,使各进程处于安全状态。

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

当前位置:首页 > 高中教育 > 其它课程

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

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