您好,欢迎访问三七文档
当前位置:首页 > 临时分类 > 08级操作系统课程设计报告书 - 副本
课程设计报告书2011/2012学年第1学期课程名称:操作系统实践课程设计专业班级:计算机0801_________学号:080405003姓名:_______王乾龙___________指导教师:邵虹课程设计指导教师评语成绩:____________指导教师签字:________________题目1银行家算法的实现1.1题目的主要研究内容及预期达到的目标编程序模拟实现银行家算法。1.2题目研究的工作基础或实验条件(1)硬件环境:widows(2)软件环境:JAVA,VC1.3设计思想先对用户提出的请求进行合法性检查,即检查请求是否大于需要的,是否大于可利用的。若请求合法,则进行预分配,对分配后的状态调用安全性算法进行检查。若安全,则分配;若不安全,则拒绝申请,恢复到原来的状态,拒绝申请。1.4流程图1、系统主要过程流程图2、银行家算法流程图3、安全性算法流程图1.5主要程序代码packagebank;importjava.util.Scanner;publicclassTest{intno1,no2;staticintMax[][];//最大需求staticintAllocation[][];//已分配资源数staticintNeed[][];//仍需资源数staticintAvailable[];//可利用资源数staticStringname1[];staticStringname2[];staticboolean[]Finish;staticint[]temp={0};//存放安全序列staticintwork[];staticint[]Request;Scannerinput=newScanner(System.in);publicstaticvoidmain(String[]args){Testt=newTest();t.printFrame();//t.print();t.Safty();t.judge();}/*输入初始化数据*/publicvoidprintFrame(){System.out.println(*****************************************************);System.out.println(**);System.out.println(*银行家算法设计与实现*);System.out.println(**);System.out.println(*****************************************************);System.out.print(请输入系统中进程的个数:);no1=input.nextInt();System.out.print(请输入资源的种类数:);no2=input.nextInt();Max=newint[no1][no2];Allocation=newint[no1][no2];Need=newint[no1][no2];Available=newint[no2];name1=newString[no1];name2=newString[no2];intsum[]=newint[3];for(inti=0;ino1;i++){System.out.print(请输入进程+i+的名字:);name1[i]=input.next();}for(inti=0;ino2;i++){System.out.print(请输入资源+i+的名字:);name2[i]=input.next();}for(inti=0;ino1;i++){for(intj=0;jno2;j++){System.out.print(请输入进程+name1[i]+的+name2[j]+类资源最大需求量:);Max[i][j]=input.nextInt();}}for(inti=0;ino1;i++){for(intj=0;jno2;j++){System.out.print(请输入进程+name1[i]+的+name2[j]+类资源已占有资源量:);Allocation[i][j]=input.nextInt();Need[i][j]=Max[i][j]-Allocation[i][j];}}for(inti=0;ino2;i++){System.out.print(请输入类资源+name2[i]+的可利用资源数:);Available[i]=input.nextInt();}for(inti=0;ino2;i++){Available[i]=Available[i]-sum[i];}}/*打印輸出*/publicvoidprint(){System.out.println(**************此时刻资源分配情况**************);System.out.println(NumberNameMaxAllocationNeed);for(inti=0;ino1;i++){System.out.print(+i+);System.out.print(name1[i]+);for(intj=0;jno2;j++){System.out.print(Max[i][j]+);}for(intj=0;jno2;j++){System.out.print(+Allocation[i][j]);}for(intj=0;jno2;j++){System.out.print(+Need[i][j]);}System.out.println();}System.out.print(各个类资源可利用的资源数分别为:);for(intj=0;jno2;j++){System.out.print(+Available[j]);}System.out.println();}/***进行安全性检测*/publicvoidSafty(){Finish=newboolean[no1];temp=newint[no1];inti,k=0,m,apply,j;//k为安全序列的序列数intflag=0;work=newint[no2];for(i=0;ino2;i++){work[i]=Available[i];}for(i=0;ino1;i++)//当前执行换后,重第一个开始检测{apply=0;for(j=0;jno2;j++){if(Finish[i]==false&&Need[i][j]=work[j])//{apply++;if(apply==no2){for(m=0;mno2;m++)work[m]=work[m]+Allocation[i][m];//变分配数Finish[i]=true;temp[k]=i+1;//保存安全序列i=-1;//k++;flag++;}}}}for(i=0;ino2;i++){if(Finish[i]==false){System.out.println(系统不安全!);}else{System.out.print(系统是安全的,安全序列为:);for(i=0;ino1;i++)//输出运行进程数组{System.out.print(temp[i]+--);}System.out.println();print();}}}/*进行资源分配*/publicvoidchangdata(inti){intj;for(j=0;jno2;j++){Available[j]=Available[j]-Request[j];Allocation[i][j]=Allocation[i][j]+Request[j];Need[i][j]=Need[i][j]-Request[j];}}/*利用银行家算法对申请资源对进行判定*/voidjudge(){Request=newint[no2];charch='y';inti=0,j=0;System.out.print(请输入您要分配的资源进程号:);for(j=0;j10;j++){i=input.nextInt();if(ino1){System.out.println(输入错误,请重新输入:);continue;}elsebreak;}//System.out.println(错误次数太多,看来您今天不适合进行操作,系统退出!);//System.exit(0);}System.out.println(请输入进程+i+申请的资源:);for(j=0;jno2;j++){System.out.print(name2[j]+类资源请求:);Request[j]=input.nextInt();//输入需要申请的资源}for(j=0;jno2;j++){if(Request[j]Need[i][j])//判断申请是否大于需求,若大于则出错{System.out.println(进程+i+申请的资源大于它所需要的资源。);System.out.println(分配不合理,不予分配!);ch='n';break;}else{if(Request[j]Available[j])//判断申请是否大于当前资源,若大于则{System.out.println(进程+i+申请的资源大于系统现在可利用的资源。);System.out.println(分配不合理,不予分配!);ch='n';break;}}}if(ch=='y'){changdata(i);//根据进程需求量变换资源Safty();//根据进程需求量进行银行家算法判断}System.out.println(请输入您所要进行的操作:1:继续分配2:退出);for(i=0;i5;i++){intchoice=input.nextInt();if(choice==1)judge();elseif(choice==2)System.exit(0);elseSystem.out.println(输入错误,请重新输入:);}System.out.println(错误次数太多,看来您今天不适合进行操作,系统退出!);System.exit(0);}}1.6运行结果及分析(可以抓取界面)1.开始界面2.初始化并打印输出3.用例测试a:进程1发出请求Request(2,1,2)——RequestNeed,不予分配。4.用例测试b:进程0发出请求Request(2,2,2)——RequestAvailable,不予分配。5.用例测试c:进程1发出请求Request(1,0,1)——可以分配。6.用例测试d:进程0发出请求Request(1,0,1)——系统不安全。7.输入测试a:如果所输入的要分配资源的进程号不在存在的进程,则报错请求重新输入。8.输入测试b:在选择继续分配还是退出中,如果输入不符合求,则报错请求重新输入,连续错误5次后系统将自动关闭。1.7心得体会通过对此题目的研究,我基本达到了预期目标,编程模拟实现了银行家算法。题目2磁盘调度算法的模拟2.1题目的主要研究内容及预期达到的目标模拟实现磁盘调度算法中的FCFS、SSTF、SCAN和CSCAN算法。2.2题目研究的工作基础或实验条件(1)硬件环境:windows(2)软件环境:VisualC++2.3设计思想用户输入当前磁头和磁道范围,随机的生成10个磁道数。然后通过四种磁盘调度的模拟算法来显示出不同的方法调度后的磁道顺序。开始生成的随机数列是字符串形式的,在每个算法过程中都要将其先转换成数组形式,然后将值赋给一个临时的数组。总体思想是将数组逐一的相减得到磁道数,然后将整个数组向前移动一位。计算出总磁道数和平均寻道长度。在后面的两个算法中用到了冒泡排序将数组先按大小排序然后再处理。最后将得到的数组结果再转换成字符串的形式输出。在list控件中也显示出来,这样便于对这几种方法进行比较独处结论。2.4流程图(1)FCFS开始初始化临时数组Rline[10]初始化变量x,i,k,All,Temp复
本文标题:08级操作系统课程设计报告书 - 副本
链接地址:https://www.777doc.com/doc-3272240 .html