(金融保险)操作系统银行家算法
淮海工学院计算机工程
学院 实验报告书
课程名: 《计算机操作系统》 题目: 实验二 银行家算法 班级: ^ ^ 姓名: ^ ^
实验二银行家算法
实验目的和要求
应用银行家算法验证进程安全性检查及分配资源
编制模拟银行家算法的程序,并以以下例子验证程序的正确性。
实验环境
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 P1 P2 P3 P4 P5 0 1 1 0 0 B 0 0 3 6 0 C 1 0 5 3 1 D 2 0 4 2 4 A 0 1 2 0 0 B 0 7 3 6 6 C 1 5 5 5 5 D 2 0 6 2 6 最大需求数
(1)现在系统是否处于安全状态?
(2)如果现在进程P2提出需要(0,4,2,0)个资源的请求,系统能否满足它的请求?
【例2】用银行家算法考虑下列系统状态:
进程分配矩阵最大需求矩阵资源总数矩阵
A301141116342 B01000212 C11104210 D11011111
E00002110
问系统是否安全?若进程B请求(0,0,1,0),可否立即分配?此后进程E也请求(0,0,1,0),可否分配给它?
通过运行程序发现,例1当中的系统处于不安全状态,进程P2提出的请求无法实现;例2当中的系统处于安全状态,进程B提出的请求能实现,此后进程E的请求也能实现。
源代码
#include intf(inta[N][M],intb[N][M],intm,intk) { intj; for(j=0;j intg(inta[N][M],intb[],intm,intk) { intj; for(j=0;j inth(inta[],intn) { for(inti=0;i for(j=0;j intq(inta[],intb[],intm) { intj; for(j=0;j } intsafe(intFinish[N],intWork[M],intNeed[N][M],intAllocation[N][M],intn,intm) {inti,j,k; intt[N]; for(i=0;i cout<<\"p(\"< cout< for(i=0;i cout<<\"p(\"<cout< cout< 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'\"< if(b!='y'&&b!='Y') { if(safe(Finish,Work,Need,Allocation,n,m)) { cout<<\"此时刻系统安全!\\n\"; } else { cout<<\"此时刻系统不安全!\\n\"; } } else { { cout<<\"\\n请输入申请资源的进程编号(1,2,…,\"< cout<<\"您输入了错误的进程号,请核查后重新输入:\"< cout<<\"\\n请输入进程p(\"< if(q(Request,Available,m)) { for(j=0;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<<\"试分配!\"< Allocation[k-1][j]=Allocation[k-1][j]-Request[j]; Need[k-1][j]=Need[k-1][j]+Request[j]; Work[j]=Available[j]; } for(i=0;i cout<<\"---------------------------------------------------------\"< cin>>n; cout<<\"输入资源种类数:\"; cin>>m; cout<<\"输入各种资源可利用的数量Available[\"< Work[j]=Available[j];//初始化Work[j] } cout<<\"\\n 输入各进程对各类资源的最大Max[\"< cout<<\"\\n 请输入各进程当前已分配的资Allocation[\"< 源数量 Finish[i]=0; for(j=0;j Need[i][j]=Max[i][j]-Allocation[i][j]; } } r(Finish,Work,Available,Need,Allocation,Max,n,m); for(i=0;i 银行家算法在计算机操作系统中是一个非常重要的算法,这次我编制模拟银行家算法的程序,来验证了程序的正确性。银行家算法可以避免程序死锁,使各进程处于安全状态。 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- xiaozhentang.com 版权所有 湘ICP备2023022495号-4
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务