操作系统原理课程设计报告--多级反馈队列调度算法.doc_第1页
操作系统原理课程设计报告--多级反馈队列调度算法.doc_第2页
操作系统原理课程设计报告--多级反馈队列调度算法.doc_第3页
操作系统原理课程设计报告--多级反馈队列调度算法.doc_第4页
操作系统原理课程设计报告--多级反馈队列调度算法.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

操作系统原理课程设计报告多级反馈队列调度算法 学院(系): 班 级: 学号 学生姓名: 组 员: 指导教师: 时间: 2009 年 6 月29日 至 2009 年7月 3日目录一课程设计的目的2二课程设计的内容及要求2三实现原理2四关键算法实现流程图34.1 多级反馈队列调度算法实现流程图34.2 文件详细3五软件运行环境及限制4六结果输出及分析46.0.1 初始界面46.1 主程序界面56.2 执行界面66.3 执行完成76.4 其他功能86.5 算法结果说明96.6 算法核心代码9七心得体会11八参考文献11一 课程设计的目的本课程设计是学生学习完计算机操作系统(第三版)课程后,进行的一次全面的综合训练,通过课程设计,让学生更好地掌握操作系统的原理及实现方法,加深对操作系统基础理论和重要算法的理解,加强学生的动手能力。二课程设计的内容及要求设计一个虚拟处理机,编程序演示堆积反馈队列调度算法的具体实现过程三实现原理该程序基于计算机调度算法中的多级反馈队列算法,使用java语言描述,通过线程和对象的调用来实现该算法的演示。在多级反馈队列算法中,当一个新进程进入内存后,首先将它放入第一队列的末尾,按fcfs原则排队等待调度。当轮到该进程执行时,如它能在该时间片内完成,变可准备撤离系统;如果它在一个时间片结束时尚未完成,调度程序便将该进程转入第二队列的末尾,在同样地按fcfs原则等待调度执行;如果它在第二个队列中运行一个时间片后仍未完成,在一次将它放入第三队列,如此下去,当一个长作业(进程)从第一队列依次降到第n队列后,在第n队列中便采取按时间片转轮的方式运行。仅当第一队列空闲时,调度程序才调度第二队列中的进程运行;仅当第1(i-1)队列均为空时,才会调度第i队列中的进程运行。如果处理机正常第i队列中的某个进程服务时,又有新进程进入优先权较高的队列(第1(i-1)中的任何一个队列),此时新进程将抢占正在运行进程的处理机,即由调度程序把正在运行的进程返回第i队列的末尾,把处理机分配给新到的高优先权进程。四关键算法实现流程图4.1 多级反馈队列调度算法实现流程图4.2 文件详细work.java:用于封装每个进程的java bean,将每个进程的信息封装到对象里面便于使用。seqqueue.java:用户封装每个队列的java bean,将每个队列的信息封装到对象里面便于使用。arithmetic.java:核心类文件,用于算法的计算和界面的控制。view.java:用于构建界面的类文件,用于向用户演示整个算法运行的过程,以及与用户的交互操作。controlview.java:用于构建控制台的类文件,用于与用户交互以及控制程序的进程等。五软件运行环境及限制由于本程序是由java程序编写,具有跨平台的性能。在具有java支持的环境中皆能运行,建议在windows2003 server及windows xp系统下运行。环境要求:jdk1.6版本及其以上六结果输出及分析6.0.1 初始界面初始化程序需要的空间等6.1 主程序界面左上方显示队列中排队的进程,左下为执行完成的情况右上为执行信息,右下方为正在处理的进程用户可以对程序进行操作算法实现思想6.2 执行界面及时地添加进程并按多级反馈队列调度算法来执行6.3 执行完成执行完成后显示出所有的进程的执行情况用户可以通过控制台来重新执行6.4 其他功能换肤功能6.5 算法结果说明进程运行时,将启动两个线程,分别用来添加任务和执行任务,在任务执行过程中,不断的更新当前的执行情况,并接受用户的操作。6.6 算法核心代码算法核心代码为arithmetic.java,代码如下:class delthread extends thread/执行进程suppresswarnings(deprecation)public void run()while(true)if(isstop)view.setsq(sq);/更新面板数据view.showwork();view.shownewwork(-3, null);/刷新正在处理的面板delthreadflag=true;delthread.this.stop();else if(!sq0.isempty()doin(0);/执行第一个队列else if(!sq1.isempty()doin(1);/执行第二个队列else if(!sq2.isempty()doin(2);/执行第三个队列else if(!sq3.isempty()doin(3);/执行第四个队列else if(addthreadflag)/添加进程关闭且所有队列为空时自动关闭view.shownewwork(-2, null);/刷新正在处理的面板delthreadflag=true;delthread.this.stop();public void doin(int sqnum)/执行某个队列doflag=sqnum;/标志正常处理第sqnum队列try work=sqsqnum.delete();/取出队首元素view.addmes(执行队列+(sqnum+1)+中的+work.getname()+);/添加信息view.setsq(sq);/更新面板数据view.showwork();/刷新队列面板view.shownewwork(sqnum+1, work);/刷新正在处理的面板int sqtime=sqsqnum.gettime();/获取队列时间片if(isover(sqsqnum, work)/在时间片类执行完了int worktime=work.getlefttime();/获取进程的剩余执行时间for(time=0;newflag&timeworktime;time+)thread.sleep(1000);overthread(work);elsefor(time=0;newflag×qtime;time+)thread.sleep(1000);if(newflag)/没有新进程加入队列work.setlefttime(work.getlefttime()-sqsqnum.gettime();if(sqnum=3)/最后一个队列addinseqqueue(sqnum, work);/放入下个队列view.addmes(+work.getname()+未执行完,转入队列+(sqnum+1)+队尾);elseaddinseqqueue(sqnum+1, work);/放入下个队列view.addmes(+work.getname()+未执行完,转入队列+(sqnum+2)+队尾);else/有新进程加入队列view.addmes(有进程进入了优先级更高的队列);view.addmes(+work.getname()+进入队列尾部);work.setlefttime(work.getlefttime()-time);addinseqqueue(sqnum, work);/放入队列尾部newflag=true;work=null;view.shownewwork(sqnum+1, work);/刷新正在处理的面板 catch (exception e) e.printstacktrace();七心得体会通过这次课程设计,不仅让我进一步地了解了多级反馈队列调度算法,更重要的提高了我们的动手能力。这次的课程设计项目也让我意识到,未来的编程不是简简单单就能完成。而编程中所出现的问题也需要大家共同协商解决。开始的时候以为这道题有些难,经过对资料的查询.如:多级反馈队列调度算法如何的实现机制等,很快的找到了解决的办法并迅速的编写出了代码。.对问题缺乏仔细的分析是我的一个缺点,通过这次课程设计我克服了这个缺点,更学会了如何地利用无限的网络资源来帮助自己完善程序,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论