您好,欢迎来到小侦探旅游网。
搜索
您的当前位置:首页(金融保险)操作系统银行家算法

(金融保险)操作系统银行家算法

来源:小侦探旅游网


(金融保险)操作系统银行家算法

淮海工学院计算机工程

学院 实验报告书

课程名: 《计算机操作系统》 题目: 实验二 银行家算法 班级: ^ ^ 姓名: ^ ^

实验二银行家算法

实验目的和要求

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

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

实验环境

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 #defineN20 #defineM20 usingnamespacestd;

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

for(j=0;jif(a[k-1][j]>b[k-1][j])return0; return1; }

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

for(j=0;jif(a[k][j]>b[j])return0; return1; }

inth(inta[],intn) {

for(inti=0;iintp(inta[],intb[N][M],intm,intk) { intj;

for(j=0;jb[k-1][j])return0; return1; }

intq(inta[],intb[],intm) { intj;

for(j=0;jb[j])return0; return1;

}

intsafe(intFinish[N],intWork[M],intNeed[N][M],intAllocation[N][M],intn,intm) {inti,j,k; intt[N];

for(i=0;icout<<\"安全性检查!\"<for(i=0;iif((Finish[i]==0)&&g(Need,Work,m,i)) { k=i; t[i]=0;

cout<<\"p(\"<cout<Work[j]=Work[j]+Allocation[i][j]; Finish[i]=1; }

cout<cout<<\"Need[\"<cout<<\"Allocation[\"<cout<cout<<\"(Work+Allocation)[\"<cout<<\"Finish[\"<if(g(Need,Work,m,k))//依次找到满足条件的后面几个进程 {

for(i=0;iif(g(Need,Work,m,i)) {

cout<<\"p(\"<cout<Work[j]=Work[j]+Allocation[i][j]; Finish[i]=1; }

cout<cout<<\"Need[\"<cout<<\"Allocation[\"<for(j=0;jcout<cout<<\"(Work+Allocation)[\"<cout<<\"Finish[\"<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'\"<>b;

if(b!='y'&&b!='Y') {

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

cout<<\"此时刻系统安全!\\n\"; } else {

cout<<\"此时刻系统不安全!\\n\"; } } else { {

cout<<\"\\n请输入申请资源的进程编号(1,2,…,\"<>k; while(k>n) {

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

cout<<\"\\n请输入进程p(\"<>Request[j]; if(p(Request,Need,m,k)) {

if(q(Request,Available,m)) {

for(j=0;jAvailable[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[\"<cout<cout<cout<<\"\\n已分配资源Allocation[\"<for(j=0;jcout<cout<cout<<\"\\n最大需求矩阵Max[\"<for(j=0;jcout<cout<cout<<\"\\n需求矩阵Need[\"<for(j=0;jcout<cout<if(safe(Finish,Work,Need,Allocation,n,m)) {//判断当前状态的安全性 cout<<\"系统处于安全状态!\"; cout<<\"\\n申请资源成功!!!\"<cout<<\"\\n当前状态不安全!!!!!!\"; //恢复数据 for(j=0;jAvailable[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]; }

for(i=0;icout<<\"\\n恢复数据:\"<cout<<\"各种资源可利用的数量Available[\"<cout<cout<cout<<\"\\n已分配资源Allocation[\"<for(j=0;jcout<cout<cout<<\"\\n最大需求矩阵Max[\"<for(j=0;jcout<cout<cout<<\"\\n需求矩阵Need[\"<for(j=0;jcout<cout<cout<<\"系统中尚无足够的资源满足进程p[\"<elsecout<<\"系统中尚无足够的资源满足进程p[\"<elsecout<<\"出错,进程所需要的资源数目已超过它所宣布的最大值!\"<voidmain() {

cout<<\"---------------------------------------------------------\"<cout<<\"输入进程的数量:\";//从此开始输入有关数据

cin>>n;

cout<<\"输入资源种类数:\"; cin>>m;

cout<<\"输入各种资源可利用的数量Available[\"<cin>>Available[j];

Work[j]=Available[j];//初始化Work[j] }

cout<<\"\\n

输入各进程对各类资源的最大Max[\"<cout<<\"\\n请严格按照(\"<for(j=0;j>Max[i][j]; }

cout<<\"\\n

请输入各进程当前已分配的资Allocation[\"<cout<<\"\\n请严格按照(\"<需求数

源数量

Finish[i]=0; for(j=0;jcin>>Allocation[i][j];

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

r(Finish,Work,Available,Need,Allocation,Max,n,m); for(i=0;ir(Finish,Work,Available,Need,Allocation,Max,n,m); for(i=0;ir(Finish,Work,Available,Need,Allocation,Max,n,m); for(i=0;ir(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

本站由北京市万商天勤律师事务所王兴未律师提供法律服务