您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 网络操作系统课程设计报告模板
《网络操作系统》课程设计报告书题目:银行家算法学号:121007339学生姓名:周金英专业:网络工程指导教师:史军勇2014年5月30日目录1功能描述.......................................................................................................................................21.1银行家算法.......................................................................................................................21.1.1银行家算法实现功能...........................................................................................22系统设计.......................................................................................................................................32.1银行家算法流程图...........................................................................................................42.1.1安全性检查流程图..........................................................................................................53系统实现.......................................................................................................................................54系统测试与分析.........................................................................................................................10教师评分表.....................................................................................................................................121功能描述系统中设置若干数据结构,避免死锁。1.1银行家算法操作系统按照银行家制定的规则为进程分配资源,当进程首次申请资源时,要测试该进程对资源的最大需求量,如果系统现存的资源可以满足它的最大需求量则按当前的申请量分配资源,否则就推迟分配。当进程在执行中继续申请资源时,先测试该进程本次申请的资源数是否超过了该资源所剩余的总量。若超过则拒绝分配资源,若能满足则按当前的申请量分配资源,否则推迟分配。1.1.1银行家算法进程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函数检查此次资源分配后系统是否处于安全状态。否则本次试探分配作废,恢复原来的资源分配状态,该进程等待。2系统设计开始输入进程个数no1输入资源类数no2输入进程最大需求矩阵Max、已分配矩阵Allocation和可利用资源矩阵AvailableNeed[][]=Max[][]-Allocation[][]输出资源分配情况输入申请资源进程该进程申请的资源量NRequest[]Need[][]?YRequest[]Available[][]?退出图1预分配调用check()函数进行安全性检查退出调用结束安全性算法流程图调用check()函数Nneed[][]=work[]finish[]=false?Ywork[]=work[]+allocation[][]finish[]=true所有进程的finish[]==true?YN输出安全序列,并打印出当前输出提示:系统不安全资源分配情况3系统实现#includestdio.h#includestdlib.h#includeconio.h#defineboolint#defineTRUE1#defineFALSE0#definem50intno1;//进程数intno2;//资源数intr;intallocation[m][m],need[m][m],available[m],max[m][m];charname1[m],name2[m];//定义全局变量voidmain()work[]=available[]finish[]=false{voidcheck();voidprint();inti,j,p=0,q=0;charc;intrequest[m],allocation1[m][m],need1[m][m],available1[m];printf(请输入进程总数:\n);scanf(%d,&no1);printf(请输入资源种类数:\n);scanf(%d,&no2);printf(请输入Max矩阵:\n);for(i=0;ino1;i++)for(j=0;jno2;j++)scanf(%d,&max[i][j]);//输入已知进程最大资源需求量printf(请输入Allocation矩阵:\n);for(i=0;ino1;i++)for(j=0;jno2;j++)scanf(%d,&allocation[i][j]);//输入已知的进程已分配的资源数for(i=0;ino1;i++)for(j=0;jno2;j++)need[i][j]=max[i][j]-allocation[i][j];//根据输入的两个数组计算出need矩阵的值printf(请输入Available矩阵\n);for(i=0;ino2;i++)scanf(%d,&available[i]);//输入已知的可用资源数print();//输出已知条件check();//检测T0时刻已知条件的安全状态if(r==1)//如果安全则执行以下代码{do{q=0;p=0;printf(\n请输入请求资源的进程号(0~4):\n);for(j=0;j=10;j++){scanf(%d,&i);if(i=no1){printf(输入错误,请重新输入:\n);continue;}elsebreak;}printf(\n请输入该进程所请求的资源数request[j]:\n);for(j=0;jno2;j++)canf(%d,&request[j]);for(j=0;jno2;j++)if(request[j]need[i][j])p=1;if(p)printf(请求资源超过该进程资源需求量,请求失败!\n);else{for(j=0;jno2;j++)if(request[j]available[j])q=1;//判断请求是否超过可用资源数if(q)printf(没有做够的资源分配,请求失败!\n);else//请求满足条件{for(j=0;jno2;j++){available1[j]=available[j];allocation1[i][j]=allocation[i][j];need1[i][j]=need[i][j];available[j]=available[j]-request[j];allocation[i][j]+=request[j];need[i][j]=need[i][j]-request[j];}print();check();//检测分配后的安全性if(r=0)//如果分配后系统不安全{for(j=0;jno2;j++){available[j]=available1[j];allocation[i][j]=allocation1[i][j];need[i][j]=need1[i][j];}printf(返回分配前资源数\n);print();}}}c=getchar();}while(c=='y'||c=='Y');}}voidcheck()//安全算法函数{intk,f,v=0,i,j;intwork[m],a[m];boolfinish[m];r=1;for(i=0;ino1;i++)finish[m]=0;//初始化进程均没得到足够资源数并完成for(i=0;ino2;i++)work[i]=available[i];//work[i]表示可提供进程继续运行的各类资源数k=no1;do{for(i=0;ino1;i++){if(finish[i]==0){f=1;for(j=0;jno2;j++)if(need[i][j]work[j])f=0;if(f==1){finish[i]=1;a[v++]=i;//记录安全序列号for(j=0;jno2-1;j++)work[j]=work[j]+allocation[i][j];//释放该进程已分配的资源}}}k--;//每完成一个进程分配,未完成的进程数就减1}while(k0);f=1;for(i=0;ino1;i++)//判断是否所有的进程都完成{if(finish[i]==0){f=0;break;}}if(f==0)//若有进程没完成,则为不安全状态{printf(系统处在不安全状态!);r=0;}else{printf(\n系统当前为安全状态,安全序列为:\n);for(i=0;ino1;i++)printf(p%d,a[i]);//输出安全序列}}voidprint()//输出函数{inti,j;printf(\n);printf(*************此时刻资源分配情况*********************\n);printf(进程名/号|Max|Allocation|Need|\n);for(i=0;ino1;i++){printf(p%d/%d,i,i);for(j=0;jno2;j++){printf(%d,max[i][j]);}for(j=0;jno2;j++){printf(%d,allocation[i][j]);}for(j=0;jno2;j++){printf(%d,need[i][j]);}printf(\n);}printf(\n);printf(各类资源可利用的资源数为:);for(j=0;jno2;j++){printf(%d,available[j]);}printf(\n);}4系统测试与分析教师评分表评分标准等级报告内容不完整、紊乱、存在雷同。不及格报告内容完整、格式整齐,由个人或小组独立完成。及格满足及格要求前提下,能够正确理解任务;报告语言叙述流畅,语句语法、标点正确。中等满足中等要求前提下,程序运行正确,符合任务功能要求;代码规范,有详细注
本文标题:网络操作系统课程设计报告模板
链接地址:https://www.777doc.com/doc-2142556 .html