金融保险操作系统 银行家算法.docx
- 文档编号:5999548
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:17
- 大小:44.18KB
金融保险操作系统 银行家算法.docx
《金融保险操作系统 银行家算法.docx》由会员分享,可在线阅读,更多相关《金融保险操作系统 银行家算法.docx(17页珍藏版)》请在冰豆网上搜索。
金融保险操作系统银行家算法
淮海工学院计算机工程学院
实验报告书
课程名:
《计算机操作系统》
题目:
实验二银行家算法
班级:
^^
姓名:
^^
实验二银行家算法
实验目的和要求
应用银行家算法验证进程安全性检查及分配资源
编制模拟银行家算法的程序,并以以下例子验证程序的正确性。
实验环境
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]=Need[k-1][j]+Request[j]; Work[j]=Available[j]; } for(i=0;i Finish[i]=0; cout<<"\n恢复数据: "< 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< } cout<<"系统中尚无足够的资源满足进程p["< "< } } elsecout<<"系统中尚无足够的资源满足进程p["< "< elsecout<<"出错,进程所需要的资源数目已超过它所宣布的最大值! "< } } voidmain() { cout<<"---------------------------------------------------------"< cout<<"------------------模拟银行家算法------------------"< cout<<"---------------------------------------------------------"< cout<<"--------------------江之风海之韵-------------------"< cout<<"------------------------QuQu-------------------------"< cout<<"---------------------------------------------------------"< intAvailable[M]; intMax[N][M]; intAllocation[N][M]; intNeed[N][M]; intWork[M]; intFinish[N]; inti,j,n,m; //定义全局变量 cout<<"输入进程的数量: ";//从此开始输入有关数据 cin>>n; cout<<"输入资源种类数: "; cin>>m; cout<<"输入各种资源可利用的数量Available["< "< for(j=0;j { cin>>Available[j]; Work[j]=Available[j];//初始化Work[j] } cout<<"\n输入各进程对各类资源的最大需求数Max["< "<