文档介绍:螇昆明理工大学信息工程与自动化学院学生实验报告莄(2013—2014学年第二学期)膁课程名称:操作系统开课实验室:2014年4月28日蒈年级、专业、班袇螄学号袃蒁姓名羇膅成绩莁芀实验项目名称肇银行家算法薆指导教师肃杨云飞罿教师评语膆螃蒁教师签名:螈年月日膆一、实验目的膄通过编写银行家算法,要求学生进一步掌握如何实现死锁的避免,进一步熟练使用数组进行程序的设计及实现。芃二、实验原理及基本技术路线图(方框原理图)袁用C语言或C++语言开发。实现银行家算法、安全性检测算法。数据可以从键盘输入,也可以初始化在数组里,还可以事先保存在文本文件中;输出结果参考课件,最好能逐步显示。要求实现N个进程和M种资源的管理,N和M可定义为宏或常量。有能力的同学再完成死锁检测算法。芆薅蚁薀莆羆莂荿银行家算法流程图蒆莇袀莁薆蒃薂膀蚆袄芄罿螆芅螂蚈螅蚆蒄螁袅袃袂蒀羅芄蚄艿Y荿N蚅Y肁N节Y荿N肆Y螃N肀系统初始化葿输入进程个数no1蒆输入资源类数no2芁输入进程最大需求矩阵Max、已分配矩阵Allocation和可利用资源矩阵Available衿打印输出此时资源分配情况表蕿Need[][]=Max[][]-Allocation[][]薃输入欲申请资源进程号羃输入是否合法薈输入该进程申请的资源量虿Request[]>Need[][]?羄蒁继续分配(Y)?蚁or螈退出(N)?莅Request[]>Available[][]?膃莀预分配袈调用check()函数进行安全性检查螆退出系统薁腿羈袃芃羈羈芄请加上算法的详细描述。程序功能结构图、流程图、数据结构定义、主要变量的说明、函数的说明等螀三、所用仪器、材料(设备名称、型号、规格等)。羁计算机一台肈四、实验方法、步骤蚅进程i发出请求资源申请,蒂(1)如果Request[j]<=need[i,j],转向步骤(2),否则认为出错,因为他所需要的资源数已经超过它所宣布的最大值。蝿(2)如果:Requesti[j]<=available[i,j],转向步骤(3),否则表示尚无足够资源,进程i需等待。膈(3)若以上两个条件都满足,则系统试探着将资源分配给申请的进程,并修改下面数据结构中的数值:肅Available[i,j]=Available[i,j]-Request[j];羀Allocation[i][j]=Allocation[i][j]+Request[j];薈need[i][j]=need[i][j]-Request[j];芈(4)试分配后,执行安全性检查,调用check()函数检查此次资源分配后系统是否处于安全状态。若安全,才正式将资源分配给进程;否则本次试探分配作废,恢复原来的资源分配状态,让该进程等待。肄(5)用do{…}while循环语句实现输入字符y/n判断是否继续进行资源申请。膀程序源代码:聿#include<>袆#include<>膁#include<>袂#definem50袈羆intno1;//进程数薂intno2;//资源数莀intr;蚇intallocation[m][m],need[m][m],available[m],max[m][m];肅charname1[m],name2[m];//定义全局变量羃voidmain()肂{莆 voidcheck();膅 voidprint();莄 inti,j,p=0,q=0;薀 charc;葿 intrequest[m],allocation1[m][m],need1[m][m],available1[m];芅 printf("----------------------------------------------\n");薁 printf("银行家算法的设计与实现\n");节printf("---------------------------------------------\n");膈 printf("请输入进程总数:\n");芅 scanf("%d",&no1);羂 printf("请输入资源种类数:\n");虿 scanf("%d",&no2);羇printf("请输入Max矩阵:\n");莅 for(i=0;i<no1;i++)莃 for(j=0;j<no2;j++)莁 scanf("%d",&max[i][j]);//输入已知进程最大资源需求量罿蒅 printf("请输入Allocation矩阵:\n");螃 for(i=0;i<no1;i++)衿 for(j=0;j<no2;j++)螈 scanf("%d",&allocation[i][j]);//输入已知的进程已分配的资源数薅膄 for(i=0;i<no1;i++)薁 for(j=0;j<no2;j++)薇 need[i][j]=max