计算机操作系统之银行家算法.docx

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

计算机操作系统之银行家算法.docx

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

计算机操作系统之银行家算法.docx

计算机操作系统之银行家算法

 

淮海工学院计算机工程学院

实验报告书

课程名:

《计算机操作系统》

题目:

实验二银行家算法

班级:

^^

姓名:

^^

 

 

实验二银行家算法

实验目的和要求

应用银行家算法验证进程安全性检查及分配资源

编制模拟银行家算法的程序,并以以下例子验证程序的正确性。

实验环境

1.PC微机。

2.Windows操作系统。

3.C/C++/VB开发集成环境。

实验学时

2学时,必做实验

实验容和步骤

1)根据算法流程图编制可执行程序

2)用以下两个例子验证程序的正确性。

3)按照上述两个例子,输出执行的结果。

算法流程图

银行家算法:

安全性算法:

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

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

 

进程

已占资源

最大需求数

A

B

C

D

A

B

C

D

P1

0

0

1

2

0

0

1

2

P2

1

0

0

0

1

7

5

0

P3

1

3

5

4

2

3

5

6

P4

0

6

3

2

0

6

5

2

P5

0

0

1

4

0

6

5

6

 

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

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

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

进程  分配矩阵   最大需求矩阵      资源总数矩阵

 A   3 0 1 1        4 1 1 1        6 3 4 2

 B   0 1 0 0        0 2 1 2

 C   1 1 1 0        4 2 1 0

 D   1 1 0 1        1 1 1 1

 E   0 0 0 0        2 1 1 0

问系统是否安全?

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

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

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

源代码

#include

#defineN20

#defineM20

usingnamespacestd;

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

{

intj;

for(j=0;j

if(a[k-1][j]>b[k-1][j])return0;

return1;

}

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

{

intj;

for(j=0;j

if(a[k][j]>b[j])return0;

return1;

}

inth(inta[],intn)

{

for(inti=0;i

if(!

a[i])return0;

return1;

}

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

{

intj;

for(j=0;j

if(a[j]>b[k-1][j])return0;

return1;

}

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

{

intj;

for(j=0;j

if(a[j]>b[j])return0;

return1;

}

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

{inti,j,k;

intt[N];

for(i=0;i

t[i]=1;

cout<<"安全性检查!

"<

for(i=0;i

{

if((Finish[i]==0)&&g(Need,Work,m,i))

{

k=i;

t[i]=0;

cout<<"p("<

"<

cout<<"Work["<

";

for(j=0;j

{

cout<

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

Finish[i]=1;

}

cout<

cout<<"Need["<

";

for(j=0;j

cout<

cout<

cout<<"Allocation["<

";

for(j=0;j

cout<

cout<

cout<<"(Work+Allocation)["<

";

for(j=0;j

cout<

cout<

cout<<"Finish["<

";

cout<

cout<

break;

}

else

{

i++;

}

}

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

{

for(i=0;i

{

if(t[i])

{

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

{

cout<<"p("<

"<

cout<<"Work["<

";

for(j=0;j

{

cout<

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

Finish[i]=1;

}

cout<

cout<<"Need["<

";

for(j=0;j

cout<

cout<

cout<<"Allocation["<

";

for(j=0;j

cout<

cout<

cout<<"(Work+Allocation)["<

";

for(j=0;j

cout<

cout<

cout<<"Finish["<

";

cout<

cout<

t[i]=0;

}

}

}

}

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;

cout<<"\n要申请资源,请按'y'或'Y',否则按'n'或'N'"<

cin>>b;

if(b!

='y'&&b!

='Y')

{

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

{

cout<<"此时刻系统安全!

\n";

}

else

{

cout<<"此时刻系统不安全!

\n";

}

}

else

{

{

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

"<

cin>>k;

while(k>n)

{

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

"<

cin>>k;

}

cout<<"\n请输入进程p("<

"<

for(j=0;j

cin>>Request[j];

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

{

if(q(Request,Available,m))

{

for(j=0;j

{

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

}

cout<<"试分配!

"<

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

"<

for(j=0;j

{

cout<

}

cout<

cout<<"\n已分配资源Allocation["<

"<

for(i=0;i

{

for(j=0;j

{

cout<

}

cout<

}

cout<<"\n最大需求矩阵Max["<

"<

for(i=0;i

{

for(j=0;j

{

cout<

}

cout<

}

cout<<"\n需求矩阵Need["<

"<

for(i=0;i

{

for(j=0;j

{

cout<

}

cout<

}

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

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

cout<<"系统处于安全状态!

";

cout<<"\n申请资源成功!

!

!

"<

}

else{

cout<<"\n当前状态不安全!

!

!

!

!

!

";

//恢复数据

for(j=0;j

{

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

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

Need[k-1][j]

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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