银行家算法及安全算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验名称:银行家算法
实验时
间:
2015.04.20 实验目
的:
1:
利用银行家算法避免死锁
2:掌握银行家算法的基本原理
3:掌握安全算法的基本原理
实验仪器:
PC vc6.0
实验原理:
1:银行家算法的基本原理
■锲行家算法:进程Pj发出资源请求Requests
2:安全算法的基本原理
■安全性算法
Work: -Available;
Finish [ i …“ii);
刁—
我一满足下刘条件的进覆t
rinhh[ i ]^fal*c 且Ncc(l L 找型1 — Finish( > J^true? Work:=Work+AllocatioHj; Finish [ i ]|:=true; 实验内容:请使用银行家算法来避免死锁的产生程序代 码:(供参考) #i nclude #in clude #defi ne False 0 #defi ne True 1 2:安全算法的基本原理 int Max[100][100]={0};〃各进程所需各类资源的最大需求int Avaliable[100]={0};〃系统可用资源 char name[100]={0};// 资源的名称 int Allocation[100][100]={0};// 系统已分配资源 int Need[100][100]={0};// 还需要资源 int Request[100]={0};// 请求资源向量 int temp[100]={0};// 存放安全序列 int Work[100]={0};// 存放系统可提供资源 int M=100;// 作业的最大数为100 int N=100;// 资源的最大数为100 void showdata()〃显示资源矩阵 { int i,j; cout«"系统目前可用的资源[Avaliable]:"«endl; for(i=0;i cout< cout< for (j=0;j cout< cout<<" Max Allocation Need"< coutvv"进程名"; for(j=0;j<3;j++){ for(i=0;i cout< cout<<" "; } cout< for(i=0;i cout<<" "< cout<<" "; for(j=0;j cout<<" "; for(j=0;j cout< } } int cha ngdata(i nt i)〃进行资源分配 { int j; for (j=0;j Avaliable[j]=Avaliable[j]-Request[j]; Allocation[i][j]=Allocation[i][j]+Request[j]; Need[i][j]=Need[i][j]-Request[j]; } return 1; } int safe()〃安全性算法 { int i,k=0,m,apply,Finish[100]={0}; int j; int flag=0; Work[0]=Avaliable[0]; Work[1]=Avaliable[1]; Work[2]=Avaliable[2]; for(i=0;i apply=0; for(j=0;j if (Finish[i]==False&&Need[i][j]<=Work[j]){ apply++; if(apply==N){ for(m=0;m Work[m]=Work[m]+Allocation[i][m];// 变分配数 Finish[i]=True; temp[k]=i; i=-1; k++; flag++; } } } } for(i=0;i if(Finish[i]==False){ coutvv"系统不安全"< return -1; } } coutvv"系统是安全的!"< for(i=0;ivM;i++){// 输出运行进程数组 coutvvtemp[i]; if(ivM-1) coutvv"->"; coutvvendl; return 0;