《2022年银行家算法及安全算法》由会员分享,可在线阅读,更多相关《2022年银行家算法及安全算法(15页珍藏版)》请在金锄头文库上搜索。
1、实验名称:银行家算法实验目的:1:利用银行家算法防止死锁2:掌握银行家算法的基本原理3:掌握安全算法的基本原理实验仪器:实验原理:1:银行家算法的基本原理精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 15 页2:安全算法的基本原理实验内容:请使用银行家算法来防止死锁的产生程序代码:供参考#include #include #include #define False 0 #define True 1 int Max100100=0;/ 各进程所需各类资源的最大需求int Avaliable100=0;/ 系统可用资源精选学习资料 -
2、- - - - - - - - 名师归纳总结 - - - - - - -第 2 页,共 15 页char name100=0;/ 资源的名称int Allocation100100=0;/系统已分配资源int Need100100=0;/ 还需要资源int Request100=0;/ 请求资源向量int temp100=0;/ 存放安全序列int Work100=0;/ 存放系统可提供资源int M=100;/ 作业的最大数为 100 int N=100;/资源的最大数为 100 void showdata()/显示资源矩阵 int i,j; cout系统目前可用的资源 Avaliable:
3、endl; for(i=0;iN;i+) coutnamei ; coutendl; for (j=0;jN;j+) coutAvaliablej ;/ 输出分配资源coutendl; cout Max Allocation Needendl; cout进程名; for(j=0;j3;j+) for(i=0;iN;i+) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 15 页coutnamei ; cout ; coutendl; for(i=0;iM;i+) cout i ; for(j=0;jN;j+) coutMaxij ; c
4、out ; for(j=0;jN;j+) coutAllocationij ; cout ; for(j=0;jN;j+) coutNeedij ; coutendl; int changdata(int i)/进行资源分配 int j; for (j=0;jM;j+) 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 15 页Avaliablej=Avaliablej-Requestj; Allocationij=Allocationij+Requestj; Needij=Needij-Requestj; return 1; int s
5、afe()/安全性算法 int i,k=0,m,apply,Finish100=0; int j; int flag=0; Work0=Avaliable0; Work1=Avaliable1; Work2=Avaliable2; for(i=0;iM;i+) apply=0; for(j=0;jN;j+) if (Finishi=False&Needij=Workj) apply+; if(apply=N) for(m=0;mN;m+) Workm=Workm+Allocationim;/变分配数精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5
6、 页,共 15 页Finishi=True; tempk=i; i=-1; k+; flag+; for(i=0;iM;i+) if(Finishi=False) cout系统不安全 endl;/不成功系统不安全return -1; cout系统是安全的 !endl;/如果安全,输出成功cout分配的序列 :; for(i=0;iM;i+)/输出运行进程数组couttempi; if(iM-1) cout; coutendl; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 15 页return 0; void share()/利用银行
7、家算法对申请资源对进行判定 char ch; int i=0,j=0; ch=y; cout请输入要求分配的资源进程号(0-M-1i;/ 输入须申请的资源号cout请输入进程i 申请的资源 :endl; for(j=0;jN;j+) coutnamejRequestj;/输入需要申请的资源 for (j=0;jNeedij)/ 判断申请是否大于需求,假设大于则出错 cout进程 i 申请的资源大于它需要的资源; cout 分配不合理,不予分配!Avaliablej)/ 判断申请是否大于当前资源,假设大于则 /出错cout进程i 申请的资源大于系统现在可利用的资源; cout 分配出错,不予分配
8、 !endl; ch=n; break; if(ch=y) changdata(i);/根据进程需求量变换资源showdata();/根据进程需求量显示变换后的资源safe();/根据进程需求量进行银行家算法判断 void addresources()/添加资源int n,flag; coutn; flag=N; N=N+n; for(int i=0;in;i+) coutnameflag; coutAvaliableflag+; showdata(); safe(); void delresources()/删除资源char ming; int i,flag=1; coutming; for
9、(i=0;iN;i+) if(ming=namei) flag=0; break; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 9 页,共 15 页 if(i=N) cout该资源名称不存在,请重新输入:; while(flag); for(int j=i;jN-1;j+) namej=namej+1; Avaliablej=Avaliablej+1; N=N-1; showdata(); safe(); void changeresources()/ 修改资源函数cout系统目前可用的资源 Avaliable:endl; for(int i=
10、0;iN;i+) coutnamei:Avaliableiendl; cout输入系统可用资源 Avaliable:Avaliable0Avaliable1Avaliable2; cout经修改后的系统可用资源为endl; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 10 页,共 15 页for (int k=0;kN;k+) coutnamek:Avaliablekendl; showdata(); safe(); void addprocess()/添加作业int flag=M; M=M+1; cout请输入该作业的最打需求量Maxendl
11、; for(int i=0;iN;i+) coutnameiMaxflagi; Needflagi=Maxflagi-Allocationflagi; showdata(); safe(); int main()/主函数 int i,j,number,choice,m,n,flag; char ming; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 11 页,共 15 页cout*资 源 管 理 系 统 的 设 计 与 实 现*endl; coutn; N=n; for(i=0;in;i+) cout资源i+1ming; namei=ming;
12、 coutnumber; Avaliablei=number; coutendl; coutm; M=m; cout 请 输 入 各 进 程 的 最 大 需 求 量 (m*n矩阵)Max:endl; for(i=0;im;i+) for(j=0;jMaxij; do flag=0; cout 请输入各进程已经申请的资源量(m*n 矩阵)Allocation:endl; for(i=0;im;i+) for(j=0;jAllocationij; if(AllocationijMaxij) flag=1; Needij=Maxij-Allocationij; if(flag) cout申请的资源大
13、于最大需求量,请重新输入!n; while(flag); showdata();/显示各种资源safe();/用银行家算法判定系统是否安全while(choice) cout*银行家算法演示精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 13 页,共 15 页*endl; cout 1:增加资源endl; cout 2:删除资源endl; cout 3:修改资源endl; cout 4:分配资源endl; cout 5:增加作业endl; cout 0:离开endl; cout*endl; coutchoice; switch(choice) ca
14、se 1: addresources();break; case 2: delresources();break; case 3: changeresources();break; case 4: share();break; case 5: addprocess();break; case 0: choice=0;break; default: cout请正确选择功能号 (0-5)!endl;break; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 14 页,共 15 页return 1; 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 15 页,共 15 页