实验报告银行家算法Word格式文档下载.docx
- 文档编号:20508217
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:12
- 大小:181.28KB
实验报告银行家算法Word格式文档下载.docx
《实验报告银行家算法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《实验报告银行家算法Word格式文档下载.docx(12页珍藏版)》请在冰豆网上搜索。
2.概要设计
2.1主要数据结构描述
staticintMAX[5][3];
//最大需求矩阵
staticintAVAILABLE[3];
//可利用资源矩阵
staticintALLOCATION[5][3];
//分配矩阵
staticintNEED[5][3];
//需求矩阵
因为数组成员MAX,AVAILABLE,ALLOCATION,NEED的值每次调用一次银行家算法,如果分配成功,都会改变,所以将他们设定为静态成员变量。
intRequest[3];
//请求向量
intWork[3];
//工作向量
boolFINISH[5];
//标记系统是否有足够的资源分配给进程
2.2流程图
(1)银行家算法流程图
单击“执行银行家算法”按钮时会调用OnButton1()函数,相当于银行家算法
注:
只要不按“退出”按钮退出程序,数组MAX,AVAILABLE,ALLOCATION,NEED中会保留上一次执行完后变化的值,不停的单击“进行银行家算法”按钮,程序会在上一次执行完后的基础上反复的执行银行家算法。
(2)安全性算法流程图
3.详细设计
3.1主要算法描述
当进程pi提出资源申请时,系统执行下列步骤:
(1)若Request≤Need,转
(2);
否则错误返回
(2)若Request≤Available,
转(3);
否则进程等待
(3)假设系统分配了资源,则有:
Available:
=Available-Request;
Allocation:
=Allocation+Request;
Need:
=Need-Request
若系统新状态是安全的,则分配完成
若系统新状态是不安全的,则恢复原状态,进程等待
安全性检查的步骤:
(1)Work:
=Available;
Finish:
=false;
(2)寻找满足条件的i:
Finish=false;
Need≤Work;
如果不存在,则转(4)
(3)Work:
=Work+Allocation;
=true;
转
(2)
(4)若对所有i,Finish=true,则系统处于安全状态,否则处于不安全状态
3.2程序界面设计
4.编码实现
4.1开发工具简介
VisualC++集成开发环境下下实现的
4.2部分程序源码
intCSisuoDlg:
:
MAX[5][3]={{7,5,3},{3,2,2},{9,0,2},{2,2,2},{4,3,3}};
AVAILABLE[3]={3,3,2};
ALLOCATION[5][3]={{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};
NEED[5][3]={{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};
safe()
{
inti,j,k,l=0;
intWork[3];
boolFINISH[5];
intp[5];
for(i=0;
i<
3;
i++)
Work[i]=AVAILABLE[i];
5;
{FINISH[i]=false;
}
{
if(FINISH[i]==true)
{continue;
else
{
for(j=0;
j<
j++)
if(NEED[i][j]>
Work[j])
break;
}
if(j==3)//找到满足要求的进程
FINISH[i]=true;
for(k=0;
k<
k++)
Work[k]+=ALLOCATION[i][k];
p[l++]=i;
//记录安全序列
i=-1;
//每次都是从头开始找
continue;
if(l==5)
show+="
经安全性检查,系统安全,本次分配成功。
"
;
\r\n"
本次安全序列:
l;
进程"
CStringc;
c.Format("
%d"
p[i]);
show+=c;
if(i!
=l-1)
-->
return1;
系统处于不安全状态!
!
本次资源申请不成功!
return0;
voidCSisuoDlg:
OnButton1()
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
//show.Empty();
inti;
intflag=1;
Request[0]=ra;
Request[1]=rb;
Request[2]=rc;
if(Request[i]>
NEED[ip][i])
CStringc;
ip);
申请的资源数大于还需要"
CStringb;
b.Format("
i);
show+=b;
类资源的资源量!
申请不合理,出错!
请重新输入!
flag=0;
break;
}
AVAILABLE[i])
CStringd;
d.Format("
show+=d;
申请的资源数大于系统可用"
CStringe;
e.Format("
show+=e;
if(flag==1)
AVAILABLE[i]-=Request[i];
ALLOCATION[ip][i]+=Request[i];
NEED[ip][i]-=Request[i];
if(safe()==1)
同意分配请求!
show+="
showdata();
您的请求被拒绝!
AVAILABLE[i]+=Request[i];
ALLOCATION[ip][i]-=Request[i];
NEED[ip][i]+=Request[i];
showdata();
showdata();
UpdateData(false);
5.结果分析与总结
5.1实验结果与分析
T0时刻的资源分配情况会显示在左下方的文本框里,当有进程要请求资源时,用户在资源请求组合框里相应的位置输入进程号和该进程请求的各类资源数。
点击“进行银行家算法”按钮,会在右边的演示结果文本框中显示结果。
点击“退出”按钮,会退出程序。
按照课本P97页进行测试:
(1)
(2)
(3)
(4)
5.2总结与建议
本次课程设计算法比较简单,主要包括两大部分,银行家算法和安全性算法。
输出安全序列我采用的是每次从头开始遍历的方法。
最后在实现从DOS界面输出转换成VC界面时主要是在定义和声明MAX等几个二维数组时遇到了问题。
一开始要给这几个数组赋初值,每次执行一次银行家算法,它们的值都有可能会改变,而且类中的成员函数会多次调用它们。
最初我是把他们定义成全局变量,虽然编译通过,但链接时确出现了重复定义的错误。
后来经过反复调试,查看相关书籍以及上网找资料。
我将它们声明成了类的公有静态成员变量,并在类的外部给他们初始化。
最终解决了重复定义的问题。
经过这次课程设计,让我了解了死锁的产生原因和避免死锁的方法,掌握了银行家算法的基本原理,加深了对课堂上知识的理解,而且也让我的动手编程能力有了进一步的提高。
6.参考资料
计算机操作系统西安电子科技大学出版社汤子瀛等编著
现代计算机操作系统习题解析与实验指导冶金工业出版社梁盛伦等编著
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验 报告 银行家 算法
![提示](https://static.bdocx.com/images/bang_tan.gif)