利用银行家算法避免死锁.docx

上传人:b****3 文档编号:26426210 上传时间:2023-06-19 格式:DOCX 页数:10 大小:84.71KB
下载 相关 举报
利用银行家算法避免死锁.docx_第1页
第1页 / 共10页
利用银行家算法避免死锁.docx_第2页
第2页 / 共10页
利用银行家算法避免死锁.docx_第3页
第3页 / 共10页
利用银行家算法避免死锁.docx_第4页
第4页 / 共10页
利用银行家算法避免死锁.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

利用银行家算法避免死锁.docx

《利用银行家算法避免死锁.docx》由会员分享,可在线阅读,更多相关《利用银行家算法避免死锁.docx(10页珍藏版)》请在冰豆网上搜索。

利用银行家算法避免死锁.docx

利用银行家算法避免死锁

 

利用银行家算法避免死锁

 

 

一、实验题目:

利用银行家算法避免死锁

二、实验内容:

银行家算法、安全性算法

3、实验目的

熟悉及模拟实现银行家算法,实现资源分配,理解系统产生死锁的原因,提高编程能力。

4、实验过程:

1、基本思想

(1)如果Requesti[j]<=need[i][j],则转

(2);否则,出错。

(2)如果Requesti[j]<=Available[j],则转(3);否则,出错。

(3)系统试探分配资源,修改相关数据:

Available[j]-=Requesti[j];

Alloctioan[i][j]+=Requesti[j];

need[i][j]-=Requesti[j];

(4)系统执行安全性检查,如安全,则分配成立;否则试探险性分配作废,系统恢复原状,进程等待。

2、主要数据结构

booltest_Request(int*,int*);//测试函数

voidfenpei();//分配函数

boolsafe_check();//安全检测函数

voidrecover(int);//回收函数

boolcheck_finish();//检测finish函数

intfinish[10];//已完成的进程序列

intwork[10];//进程工作序列

intmmax[10][10];//进程最大需求

intAlloctioan[10][10];//进程已得到的

intneed[10][10];//进程还需分配的

intAvailable[10];//系统拥有的资源

 

intn;//告诉系统第几个进程需要申请

Inth;intk;//h为进程数目;k为资源数目

intRequest[10];

 

3、输入、输出(文字描述)

1)输入进程m和资源n;

2)分别输入矩阵mmax,Alloctioan,Available,

3)输入需要申请的进程p,如果p不在范围内则提示“输入错误,请重新输入进程序号:

”。

4)输入Request[i]需要资源的数目,如果Request[i]不符合判定要求则输出"系统资源不足!

或超过最大需求资源值",

5)如果预分配是安全的就输出"不会产生死锁,安全进程队列为:

"和序列号,否则输出"产生死锁!

!

"。

4、程序流程图(必要的描述)

5、截屏(输入、输出)

6、源程序

#include"stdafx.h"

#include

usingnamespacestd;

booltest_Request(int*,int*);//测试函数

voidfenpei();//分配函数

boolsafe_check();//安全检测函数

voidrecover(int);//回收函数

boolcheck_finish();//检测finish函数

intfinish[10]={0,0,0,0,0,0,0,0,0,0};//已完成的进程序列

intwork[10];//进程工作序列

intmmax[10][10];//进程最大需求

intAlloctioan[10][10];//进程已得到的

intneed[10][10];//进程还需分配的

intAvailable[10]={0,0,0,0,0,0,0,0,0,0};//系统拥有的资源

intn;//告诉系统第几个进程需要申请

Inth;intk;//h为进程数目;k为资源数目

intRequest[10];

intmain()

{cout<<"请输入进程数m(m<=10),资源数n(n<=10)";

cout<

cin>>h>>k;

cout<<"请输入mmax的值"<

for(inti=0;i

{for(intj=0;j

cin>>mmax[i][j];

}

cout<<"请输入Alloctioan的值"<

for(inti=0;i

{

for(intj=0;j

cin>>Alloctioan[i][j];

}

for(inti=0;i

for(intj=0;j

need[i][j]=mmax[i][j]-Alloctioan[i][j];

cout<<"need"<

for(inti=0;i

{

for(intj=0;j

cout<

cout<

}

cout<<"Available"<

for(inti=0;i

Cin>>Available[i];

cout<

";

cin>>n;

while(n<0||n>h)//输入正确的进程序号

{

cout<<"输入错误,请重新输入进程序号:

";

cin>>n;

}

n=n-1;

cout<<"输入该进程所要申请的各资源数:

"<

for(intj=0;j

cin>>Request[j];

cout<

if(test_Request(Request,Available)&&test_Request(Request,need[n]))//调用booltest_Request(int*p,int*q)来比较

{

fenpei();

if(safe_check())//调用boolsafe_check()安全算法

{cout<<"不会产生死锁,安全进程队列为:

"<

for(inta=0;a

cout<<"P"<

}

else

cout<<'\a'<<"产生死锁!

!

";

}

else

{

cout<<"系统资源不足!

或超过最大需求资源值";

for(intm=0;m

{

need[n][m]+=Request[m];

Available[m]+=Request[m];

Alloctioan[n][m]-=Request[m];;

}

}

intx;

cin>>x;

}

 

booltest_Request(int*p,int*q)//用指针来比较返回bool值

{

for(intm=0;m

{

if(*(p+m)>*(q+m))

return0;

if(*(p+m)<=*(q+m)&&m==k-1)

return1;

}

}

voidfenpei()//fenpei函数来试着分配

{

for(intm=0;m

{

need[n][m]-=Request[m];

Available[m]-=Request[m];

Alloctioan[n][m]+=Request[m];;

}

}

boolsafe_check()//安全算法

{

inti,j=0;

while

(1)

{

for(i=0;i

if(test_Request(need[i],Available)&&finish[i]==0)

break;

if(i

{

recover(i);

finish[i]=1;

work[j]=i+1;

j++;

}

if(i>=h)

{

if(check_finish())//调用check_finish()

returntrue;

else

returnfalse;

}

}

}

voidrecover(inti)

{

for(intm=0;m

Available[m]+=Alloctioan[i][m];

}

boolcheck_finish()

{

for(inti=0;i

{

if(finish[i]==0)

returnfalse;

else

if(finish[i]!

=0&&i==h-1)

returntrue;

}

}

7、实验小结

通过学习了操作系统的原理及知识后,对操作系统有了进一步的了解,在原理的基础上我们采用模拟的方法来编写关于银行家算法的程序,锻炼了我们的操作动手能力,加强了对书本知识的了解,把书本内容应用到实际操作上,同时也训练了我们的变成能力。

操作系统确实是一门高深的学问,值得我们去不断的学习,研究。

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

当前位置:首页 > 总结汇报 > 学习总结

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

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