- 1、本文档共12页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统原理课程设计报告多级反馈队列调度算法
《操作系统原理》课程设计报告
多级反馈队列调度算法
学院(系):
班 级: 学号
学生姓名:
组 员:
指导教师:
时间: 2009 年 6 月29日 至 2009 年7月 3日
目录
一.课程设计的目的 2
二.课程设计的内容及要求 2
三.实现原理 2
四.关键算法实现流程图 3
4.1 多级反馈队列调度算法实现流程图 3
4.2 文件详细 3
五.软件运行环境及限制 4
六.结果输出及分析 4
6.0.1 初始界面 4
6.1 主程序界面 5
6.2 执行界面 6
6.3 执行完成 7
6.4 其他功能 8
6.5 算法结果说明 9
6.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.
文档评论(0)