资源描述:
《银行家安全算法实验报告》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、©南昌大学卖殓掖告・・・(2)徭程變观辗行家姿全算倣学生姓名:学号:专业班级:实验类型:口验证口综合■设计口创新实验日期:实验成绩:一、实验目的通过实验加强对银行家安全算法的理解和掌握。二、实验内容熟悉避免死锁发生的方法,死锁与安全序列的关系,编程实现银行家算法,要求输出进程的安全序列。三、实验要求1、需写出设计说明;2、设计实现代码及说明3、运行结果;四、主要实验步骤设计说明:假定系统屮有五个进程PO,Pl,P2,P3,P4,和三类资源A、B、C,在TO时刻的资源分配情况如下图所示,且TO时刻系统安全。进程卩■Max"AAllocation^BV0AVNedBO
2、1Available^ABOABO1Po』1753u1101(k111743「LPh1322卩'1201L4JP2"902J302亠6XAAAA4JP3#11222丿1211121rLd1433"1002卩1431J1流程图:重要数据说明:请求向量:request[3]可利用资源向量:available[3]分配矩阵:allocation[5][3]需求矩阵:need⑸[3]工作向量:work[3]进程完成标志:finish[5]安全序列:safe[5]请求进程号:proc找到满足条件的进程的标志:found系统处于安全的标志:safty系统能满足请求向量的标志:
3、give设计实现代码:#includevoidmain()intrequest[3];intavailable]]二{3,3,2};intallocation[5][3]={{0,l,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}};intneed[5]⑶二{{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}};intwork[3J;intfinish[]={0,0,0,0,0};intsafe[5];intproc,found=0,safty=1,ij=0,n,x,give=1;printf(H
4、资源情况cillocationneed1availableH);/*显示TO吋刻资源分配情况表*/printf("进程ABcABCABCH);printfCP0010743332“);printf(HPl200122“);printf(nP2302600H);printfCP321101l“);printfC'P400243l“);printf(u请输入要请求的进程号门;scanf(n%dH,&proc);printf(u请输入对资源A,B,C的请求量:“);scanf("%d,%d,%d",&request[0],&reque
5、st[l],&request[2]);for(i=0;i<3;i++){if(requestfi]-need[proc]fi]>0)/*判断请求向量是否超过进程所需的资源数*/{printf("所需资源数超过最大需求,错误!”);give二0;break;}if(request[i]-available[i]>0)/*判断请求向量是否超过系统可利用资源数*/{printf("尚无足够资源,请等待!”);give=0;break;1}if(give==l)/*若上诉两种情况都不超过*/{for(i=0;i<3;i++)/*系统试探着把资源分配给请求的进程*/
6、{available[i]=available[ij-requestli];allocation[proc][i]=allocation[proc][i]+request[i];need[proc][il=needfprocl[i]-request[il;work[i]=available[i];}while(l)/*执行安全性算法*/found=0;for(n=0;n<5;n++)/*没找到,跳出循环,结束查找可}for(n=O;n<5;n++)/*判断是否所有进程的finish[n]==l都满足*/if(finish[n]==O)/*有不满足的进程*//*在五
7、个进程中从P0到P4寻找满足finish[n]==Ol=Lneed[i]<=work[i]的进程勺if(finish[n]==O&&need[n][0]-work[0]<=0&&need[nl[1l-work[11<=0&&needfn][21-work[2]<=0)严若找到,释放出分配给它的资源*/found=l;safe[j]=n;j=j+l;finish[n]=l;for(x=0;x<3;x++){work[x]=work[x]+allocation[n][x];}}}if(found==0)break;printf(n系统进入不安全状态,不分配资源!“
8、);/*显