1、银行家安全算法 2江西科技学院实验项目卡实验中心:计算机中心 实验室: S2-303机房 制卡时间: 2013 年 3月实验项目名称编程实现银行家安全算法实验项目编号课程名称操作系统课程代码81211679适用专业计算机科学与技术实验学时数6实验类型综合实验要求必修实验类别专业实验实验者类别统招本科每批组数45每组人数1实验方式课内实验首开时间 2005 年 9 月变动情况说明无实验教材或指导书名称操作系统实验目的、实验内容、实验原理与实验要求:一、实验目的通过实验加强对银行家安全算法的理解和掌握。二、实验内容熟悉避免死锁发生的方法,死锁与安全序列的关系,编程实现银行家算法,要求输出进程的安全
2、序列。三、实验要求1、 需写出设计说明;2、 设计实现代码及说明3、 运行结果;1 输入Max和All进程的值 得到Need 正确 错误2代码:#include main()int i,j,Max53,All53,Need54,Ava3,a512,q,w,s3;int k=0,c5;int m=5;printf(请输入Max的值;n);for(i=0;i5;i+) for(j=0;j3;j+) scanf(%d,&Maxij);printf(请输入All的值;n); for(i=0;i5;i+) for(j=0;j3;j+) scanf(%d,&Allij); for(i=0;i5;i+) f
3、or(j=0;j3;j+) Needij=Maxij-Allij; for(i=0;i5;i+) Needi3=1;/*多定义need一列 将这一列作为标示位 记录是否已经进程结束 并初始化为1*/printf(请输入Ava的值;n);for(i=0;i3;i+) scanf(%d,&Avai);for(i=0;i5;i+)/*输出need 看是否将标示位赋值成功*/for(j=0;j4;j+)printf(%2d,Needij);printf(n);for(i=0;i5;i+)/*将3个数组的值移到一个数组里*/ for(j=0;j3;j+) aij=Maxij; for(i=0;i5;i+
4、) for(j=0;j3;j+) aij+3=Allij;for(i=0;i5;i+) for(j=0;j3;j+) aij+6=Needij; for(j=0;j3;j+) a0j+9=Avaj;printf( Max All Need Ava n);/*打印该数组*/printf( A B C A B C A B C A B Cn);for(j=0;j1;j+) printf(p%d,j);for(j=0;j12;j+)printf(%5d,a0j); printf(n); for(i=1;i5;i+) printf(p%d,i); for(j=0;j9;j+) printf(%5d,ai
5、j); printf(n); /*该程序可以判断之前的进程是否有安全序列*/ /*lop1:for(i=0;i=Needi0&Ava1=Needi1&Ava2=Needi2&Needi3=1) Ava0=Ava0-Needi0+Maxi0; Ava1=Ava1-Needi1+Maxi1; Ava2=Ava2-Needi2+Maxi2; Needi3=0; ck=i; k+; if(Need03=0&Need13=0&Need23=0&Need33=0&Need43=0) goto lop2; /*for(i=0;i5;i+)for(j=0;j0) m-; goto lop1;else goto
6、 lop3;lop2:printf(安全序列为:n);for(j=0;j5;j+)printf(P%dn,cj);if(!(Need03=0&Need13=0&Need23=0&Need33=0&Need43=0)lop3:printf(不是安全序列n);*/printf(是否需要请求资源 如果要请输入1并输入要在几进程中加入比如在第一进程请求,请输入1,0 不要请输入2n); scanf(%d,%d,&q,&w);/*输入是否请求的值1或者2,并输入在那个进程请求该资源*/ printf(%d,q);if(q=1)/*判断是否请求*/ printf(请输入%d的3个资源请求值,w);for(
7、i=0;i3;i+) scanf(%d,&si); for(i=0;iAvai)/*如果剩余的资源部满足则直接跳出*/printf(剩余资源数不足以满足n); goto lop3; Allwi=Allwi+si;/*将之前所要求的进程请求的进程修改*/Avai=Avai-si;/*将剩余的资源数修改*/for(i=0;i5;i+)/*将修改后的进程重新导入need中*/ for(j=0;j3;j+) Needij=Maxij-Allij;for(i=0;i5;i+)/*将3个数组的值移到一个数组里*/ for(j=0;j3;j+) aij=Maxij; for(i=0;i5;i+) for(j
8、=0;j3;j+) aij+3=Allij;for(i=0;i5;i+) for(j=0;j3;j+) aij+6=Needij; for(j=0;j3;j+) a0j+9=Avaj;printf( Max All Need Ava n);/*打印修改后的该数组*/printf( A B C A B C A B C A B Cn);for(j=0;j1;j+) printf(p%d,j);for(j=0;j12;j+)printf(%5d,a0j); printf(n); for(i=1;i5;i+) printf(p%d,i); for(j=0;j9;j+) printf(%5d,aij);
9、 printf(n);lop1:/*控制跳转的次数*/for(i=0;i=Needi0&Ava1=Needi1&Ava2=Needi2&Needi3=1)/*判断剩余资源是否满足当前资源需要*/ Ava0=Ava0-Needi0+Maxi0;/*修改剩余资源*/ Ava1=Ava1-Needi1+Maxi1;/*修改剩余资源*/ Ava2=Ava2-Needi2+Maxi2;/*修改剩余资源*/ Needi3=0;/*将标示位修改为0*/ ck=i;/*记下当前满足的位置*/ k+; if(Need03=0&Need13=0&Need23=0&Need33=0&Need43=0)/*判断标示位是否已修改*/ goto lop2; /*跳转到lop2*/for(i=0;i5;i+)/*打印标示位是否已修改*/ for(j=0;j0)/*控制跳转的次数*/ m-;/*m初值为5 控制次数*/ goto lop1;else goto lop3;lop2:printf(安全序列为:n);for(j=0;j5;j+)/*打印输出安全序列*/printf(P%dn,cj);if(!(Need03=0&Need13=0&Need23=0&Need33=0&Need43=0)lop3:printf(不是安全序列n);输入书中的例子 可得输入请求的资源过大时所得
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1