《操作系统实验报告_17.docx》由会员分享,可在线阅读,更多相关《操作系统实验报告_17.docx(24页珍藏版)》请在第一文库网上搜索。
1、京盛丈号熹皇岛台我计算机与通信工在号就操作系统课程设计设计题目FCFS调度算法模拟和进程管理器专业名称计算机科学与技术班级学号2133319学生姓名指导教师马海涛2016.01.112016.01.20设计时间课程设计任务书专业:计算机科学与技术学号:2133319学生姓名(签名设计题目:FCFS调度算法模拟及进程管理器一、设计实验条件808实验室二、设计任务及要求1 .FCFS调度算法的模拟实现;要求:提供10个模拟作业,在屏幕上打印所提供的作业信息,输入进程名作业被放入就绪队列,程序根据FCFS调度算法,对就绪队列中的进程进行调度执行,每个模拟进程执行时打印自身的进程名、到达时间等信息,最
2、后要打印出所调度作业的平均周转时间和平均带权周转时间2 .进程管理器;要求:实现一个系统进程管理器,能够显示当前系统的活动进程信息(进程名、用户、优先级、内存使用等),并能结束或创建特定进程。三、前言融会贯通计算机操作系统课程的内容,通过知识的综合运用,加深对计算机操作系统工作原理及相互联系的认识;掌握进程调度的实现以及原理培养使用代码模拟操作系统功能的能力,同时加深对操作系统的认识四、设计主体1.FCFS调度算法的模拟实现(该部分由组员自己独立完成)1)设计内容建立数据结构,提供10个模拟作业,在屏幕上打印所提供的作业信息,输入进程名作业被放入就绪队列,程序根据FCFS调度算法,对就绪队列中
3、的进程进行调度执行,每个模拟进程执行时打印自身的进程名、到达时间等信息,最后要打印出所调度作业的平均周转时间和平均带权周转时间。和其他调度算法相比较,分析该调度算法的优缺点。2)分析使用java语言模拟进程调度的FCFS算法。算法的核心思想是:根据进程进入就绪队列的到达时间前后顺序来进行处理机调度。先到的进程,有限享受处理机,直到该进程执行完毕或因某事发生等待,而释放处理机。设计思路:为进程建立一个类PCB,其中包含进程名、到达时间、服务时间、开始执行时间、完成时间、周转时间、带权周转时间7个属性。程序初始化时,创建10个PCB对象,每个对象仅初始化进程名和服务时间。之后通过从控制台输入进程名
4、的顺序来决定10个进程进入就绪队列的顺序,也就是处理的顺序。其中周转时间二完成时间-到达时间,带权周转时间二周转时间/服务时间3)结论先来先服务调度算法,有利于长作业,不利于短作业。从运行结果中可以看出短作业带权周转时间明显偏高,该算法有利于CPU繁忙型作业,不利于IO繁忙型作业4)代码以下是进程PCB的代码:pub1icc1assPCBprivateStringname;进程名privateintreachTime;到达时间(由给进行命名的顺序决定)privateintSerViCeTime;服务时间privateintStartTime;开始执行时间privateintfinishTime
5、;完成时间privateintUimaroundTime;周转时间=完成时间到达时间privatedoub1eIUmaroUndTimeWithWeight;带权周转时间二周转时间/服务时间pub1icPCB()(th1s.name=;)初始化时已知服务时间*/pub1icPCB(Stringname,intServiceTime)this.name=name;this.serviceTime=ServiceTime;)打印作业信息*get/set方法组*/pub1icStringgetName()returnname;)pub1icvoidsetName(Stringname)this.na
6、me=name;)pub1icintgetReachTime()returnreachTime;)pub1icvoidsetReachTime(intreachTime)this.reachTime=reachTime;/设置到达时间)pub1icintgetServiceTime()returnServiceTime;)pub1icvoidsetServiceTime(intServiceTime)this.serviceTime=ServiceTime;)pub1icintgetStartTime()returnStartTime;)pub1icvoidsetStartTime(intSt
7、artTime)this.StartTime=StartTime;if(this.startTime=O)(this.finishTime=this.startTime+this.serviceTime;设置完成时间this.turnaroundTime=this.finishTime-this.reachTime;设置周转时间this.turnaroundTimeWithWeight=1.0*this.turnaroundTimethis.serviceTime;设置带权周转时间)pub1icintgetFinishTime()returnfinishTime;pub1icintgetTur
8、naroundTime()returnturnaroundTime;1pub1icdoub1egetTumaroundTimeWithWeight()returnturnaroundTimeWithWeight;* 打印进程信息* /pub1icvoidprintMSG()System.ow.print1n(this.name+t,+this.reachTime+t+this.serviceTime+t+this.startTime+,tt+this.finishTimet+this.turnaroundTime+t+(PoMe.parseDoubIe(ne%,Decima1Format(n#
9、.#).format(this.tumaroundTimeWithWeight);)FCFS算法的核心功能代码:pub1icc1assFCFS* 创建工0个作业pub1icPCBinit()PCBpcbs=newPCBnewPCB(A,1),newPCB(B,100),newPCB(C1),newPCB(D,100),newPCB(“E”,22),newPCB(F,33),newPCB(G,11),newPCB(H,44),newPCB(I,55),newPCB(3,66),;returnpcbs;* /pub1icvoidprintPCB(PCBpcbs)SyStem.ou,Print1n(
10、“作业名tt服务时间”);for(inti=0;ipcbs.1ength;i+)(System.out.print1n(pcbsi.getName()+tt+pcbsi.getServiceTime();privateboo1eanisContain(Stringname)returnABCDEFGHI3.contains(name);将作业按照一定顺序加入就绪队列*/pub1icvoidSe1ectPCB(1ist1ist,PCBpcbs)(ScannerCOnSOIe=newScanner(System.in);Mapmap=newHashMap();for(inti=0;ipcbs.1e
11、ngth;i+)map.put(pcbsi.getName(),pcbsi);)inti=0;初始的到达时间默认是0whi1e(true)* 避免重复输入进程名* /privateboo1eanisInc1ude(1istIistjStringname)for(PCBp:1ist)(if(p.getName().equa1s(name)returntrue;returnfa1se;*SyStem.out.printin(“请输入第”+(i+1)+”个进程名”);Stringname=conso1e.next1ine();if(!isContain(name)System.out.printin
12、(”请输入正确的进程名”);continue;)e1seif(!is1nc1ude(1ist,name)(PCBp=map.get(name);p.setReachTime(i);设置进程到达时间if(i=0)第一个加入到就绪队列,设置开始执行时间pSetStartTime(i);e1seintbefore=1ist.get(i-1).getFinishTime();if(before=10)break;e1seSyStemout.printin(请不要重复输入”);continue;pub1icvoidrunPCB(1ist1ist)intsumTurnaround=0;doub1eSumT
13、urnaroundWithWeight=O;SyStem.out.printin(,进程名t到达时间t服务时间t开始执行时间t完成时间Vt周转时间Vt带权周转时间”);for(PCBp:1ist)tryThread.s1eep(300);p.printMSG();sumTurnaround+=p.getTurnaroundTime();sumTurnaroundWithWeight+=p.getTurnaroundTimeWithWeight();catch(InterruptedExceptione)e.printStackTrace();SyStem.out.printIn(平均周转时间:”+Doub1e.parseDoub1e(newDecima1Format(#.#).format(1.0*sumTurnaround1ist.size()+-平均带权周转时间:+Doub1e.ParSeDOUb1e(newDecima1Format(#.#).format(sumTurnaroundWithWeight1ist.size();5)结果展示:作业信息如下:作北名服务时间A1B100C1DeeE22F33G11H44I5S366输入进程名,将作业加入就绪队列:清输入第1个进程名A清输入第2个进程名B清输入第3个进程名C清输入第7个进程