作业调度算法模拟系统,课程设计报告,截图,详细代码。
操作系统课程设计(学年设计、学年论文)任务书
作业调度算法模拟系统,课程设计报告,截图,详细代码。
四、具体成果形式和要求通过此次课程设计, 我们理解和掌握了三种调度算法的使用。 了解了三 种算法的优劣,并制作了课程设计报告和相应的作业模拟程序。
进 度 安 排
起止日期 2013.6.3-2013. 6.10 2013.6.11-2013 .6.17 2013.6.18-2013 .6.30
工作内容 熟悉与本设计相关的操作系统理论知识及相关 编程环境。 进行系统建模
编写代码实现上述模型, 并撰写课程设计报告。
主 要 参 考 资 料 指导教师 意见 系 (教研室) 主任意见
汤小丹,梁红兵,哲凤屏,汤子赢.计算机操作系统(第五版)[M].西安:西 安电子科技大学出版社,2007. 何钦铭,颜晖.C 语言程序设计[M].北京:高等教育出版社,2008. 胡学刚.数据
结构(C 语言版)[M].北京:高等教育出版社,2008. 张小进.Linux 系统应用基础教程[M].北京:机械工业出版社,2008. 赵生慧.Java 面向对象程序设计[M].北京:高等教育出版社,2007.
(签字) :
年
月
日
(签字) :
年
月
日
作业调度算法模拟系统,课程设计报告,截图,详细代码。
操作系统课程设计说明书
学院名称:班级名称:学生姓名:学 号: 2011302 2011211303 题 目:指导教师
姓 名:起止日期:
计算机与信息工程 2011级网络工程2班 童玉龙 周速 吴明诏 汪泽 王边 2011211299 2011211346 2011211318 作业调度算法模拟系统 张燕玲 2013年6月3日~2013年6月30日
作业调度算法模拟系统,课程设计报告,截图,详细代码。
第一部分:正文部分
一、选题背景
操作系统课程设计是集中实践性环节之一,是学习完《操作系统》课程后进行的一次全面的综合练习。
本次课程设计级要求学生达到熟练掌握操作系统的基本理论知识;掌握不同的调度算法;能够利用所学的基本编程知识,实现课程章节中涉及到的一些基本算法,从而加深理论知识的理解,树立掌握操作系统中各种作业调度算法。
二、设计思路
作业调度的实质是一种资源分配,调度算法是指根据系统的资源分配策略所规定的额资源分配算法。为了理解和掌握先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)三种算法,可以做如下工作;
1.设置作业形式,应包含如下信息:作业号、作业到达时间、作业要求服务时间、 等待时间、 开始运行时间、 结束运行时间、周转时间、带权周转时间、优先权和是否已经完成;
2. 设置一个作业数量num;
3.分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法对队列中的作业进行调度;
4.先来先服务(FCFS)对先来的作业优先处理;
5.最短作业优先(SJF)对已就绪作业进行短作业优先服务;
6.响应比=(等待时间+需要服务时间)/需要服务时间,响应比高者优先(HRN)是对已就绪作业进行响应比高者优先服务,以免一些程序长时间不能被执行;
7.对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比较各种算法优劣。
三、过程论述
3.1模拟实现作业调度算法中三种算法的简介
该三种算法包括:FCFS(先来先服务算法)、SJF(短作业优先算法)、HRN(最
作业调度算法模拟系统,课程设计报告,截图,详细代码。
高响应比优先算法)。
先来先服务算法(FCFS):按照各个作业进入系统(输入井)的自然次序来调度算法。
短作业优先算法(SJF):优先调度并处理短作业。所谓的“短作业”并不是指物理作业长度短,而是指作业的运行时间短。
最高响应比优先算法(HRN):优先调度并处理响应比最高的作业。 先来先服务算法比较有利于长作业,而不利于短作业。 3.2三种作业调度算法原理
先来先服务算法按照各个作业进入系统(输入井)的自然次序来调度算法。该算法比较有利于长作业,但是不利于短作业。
短作业优先调度算法
(1)短作业优先调度算法可以照顾到实际上在所有作业中占很大比例的短作业,使它能比长作业优先执行。SPF优先调度算法:是从就绪队列中选出一估计运行时间最短的进程,将处理机分配给它,使它立即执行到完成,或发生某事件而被阻塞放弃处理机时,再重新调度。
(2)该算法完全未考虑作业的紧迫程度,因而不能保证紧迫性作业(进程),会得到及时处理;
(3)由于作业(进程)的长短只是根据用户所提供的估计执行时间而定,而用户又可能会有意或无意地缩短其作业的估计执行时间,致使该算法不一定能真正做到短作业优先调度。
高响应比优先调度算法在批处理系统中,用作作业调度的短作业优先算法是一个比较好的算法。其主要缺点是作业的运行得不到保证。如果我们能为每个作业引入前面所述的动态优先权机制,并使以速率a增加,则长作业在等待一定的时间后,必须有机会分配到处理机。该优先权的变化可描述为:
优先权=(等待时间+要求服务时间)/要求服务时间
由于等待时间加上要求服务时间,就是系统对该作业的响应时间,故该优先权又相当于响应比Rp = 等待时间加要求服务时间/要求服务时间=响应时间/要求服务时间
由上式可以看出:
作业调度算法模拟系统,课程设计报告,截图,详细代码。
(1)如果作业的等待时间相同,则要求服务的时间愈短,其优先权愈高,因而该算法有利于短作业;
(2)当要求服务的时间相同时,作业的优先权决定于其等待时间,因而实现了先来先服务;
(3)对于长作业,当其等待时间足够长时,其优先权便可升到很高,从而也可获得处理机。
该算法既照顾了短作业,又考虑了作业到达的先后顺序,也不会使作业长期得不到服务。因此,该算法实现了一种较好的折衷。当然,再利用该算法时,每要进行调度之前,都需先进行响应应比的计算,这会增加系统的开销。 3.3三种算法的流程图 3.3.1先来先服务算法流程图
作业调度算法模拟系统,课程设计报告,截图,详细代码。
3.3.2短作业优先算法流程图
作业调度算法模拟系统,课程设计报告,截图,详细代码。
3.3.3高响应比优先调度算法
作业调度算法模拟系统,课程设计报告,截图,详细代码。
3.4模拟三种调度算法的实现 3.4.1 模拟先进先出调度算法的实现
int FCFS()/*先进先出算法*/ { }
3.4.2 模拟短作业优先调度算法的实现 int SJF(int pre)/*短作业优先算法*/
int current; int i,j;
for(i=0; i<num; i++) { }
for( j=i; j<num; j++) /* 和后面的作业比较*/ { }
return current; /* 返回当前作业*/
if(!JCB[j].finish && JCB[j].arrTime<JCB[current].arrTime) { }
current=j; /*找出先来的未完成作业*/ if(!JCB[i].finish) { }
current=i; /* 找到第一个还没完成的作业*/ break;
作业调度算法模拟系统,课程设计报告,截图,详细代码。
{
int current,i,j; for(i=0; i<num; i++) { }
for(j=i; j<num; j++) /* 和后面的作业比较*/ {
if( !JCB[j].finish) /* 还没完成(运行)*/ {
if(JCB[current].arrTime<=JCB[pre].finTime)/*如果作业在上一if(!JCB[i].finish) { }
current=i; /*找到第一个还没完成的作业*/ break;
个作业完成之前到达*
{
if(JCB[j].arrTime<=JCB[pre].finTime
&&
JCB[j].serTime<JCB[current].serTime )
current=j; /* 找出到达时间在上一个作业完成之前,服务
时间比较小的未完成作业*/
}
else /*如果作业是在上一个作业完成之后到达*/ {
if(JCB[j].arrTime<JCB[current].arrTime)
current=j; /*找出比较早到达的一个*/
作业调度算法模拟系统,课程设计报告,截图,详细代码。
if(JCB[j].arrTime==JCB[current].arrTime) /*如果同时到
达*/
if(JCB[j].serTime<JCB[current].serTime)
current=j; /*找出服务时间比较短的一个*/
} }
3.4.3模拟高响应比调度算法的实现
int HRN(int pre)/*高响应比优先调度算法*/ {
int current=1,i,j;
/* 优先权 =(等待时间+服务时间)/服务时间*/ for(i=0; i<num; i++) {
JCB[i].waiTime=JCB[pre].finTime-JCB[i].arrTime; /*等待时间 =上 }
return current; /*返回当前作业*/
}
一个作业的完成时间-到达时间*/
JCB[i].priority=(JCB[i].waiTime+JCB[i].serTime)/JCB[i].serTime; }
for(i=0; i<num; i++) {
if(!JCB[i].finish) {
作业调度算法模拟系统,课程设计报告,截图,详细代码。
}
}
break;
for( j=i; j<num; j++) /*和后面的作业比较*/ {
if( !JCB[j].finish) /* 还没完成(运行)*/ {
if(JCB[current].arrTime<=JCB[pre].finTime) /*如果作业在上
一个作业完成之前到达*/
{
if(JCB[j].arrTime<=JCB[pre].finTime
&&
JCB[j].priority>JCB[current].priority )
current=j;/* 找出到达时间在上一个作业完成之前,优先
权高的作业*/
}
else /* 如果作业是在上一个作业完成之后到达*/ {
if(JCB[j].arrTime<JCB[current].arrTime)
current=j; /* 找出比较早到达的一个*/
if(JCB[j].arrTime==JCB[current].arrTime) /* 如果同时到
达*/
}}
}
if(JCB[j].priority>JCB[current].priority)
current=j; /*找出服务时间比较短的一个*/
作业调度算法模拟系统,课程设计报告,截图,详细代码。
}
四、结果分析
4.1模拟先来先服务调度算法运行结果。如图4-1。
图4-1
由运行结果可以看出,短作业D的服务时间最短,但带权周转时间高达5f,而长作业C的服务时间为5,带权周转时间仅为2f,因此先来先服务算法比较有利于长作业,而不利于短作业。
4.2 模拟短作业优先调度算法运行结果。如图4-2。
图4-2
由运行结果可以看出,短作业优先算法每次都从未完成的队列中选取服务时间最短的作业进行调度。通过比较,短作业优先算法的平均带权周转时间小于先来先服务算法,提高了系统的吞吐量。因此,相对于短作业较多或者较为重要的系统中,可选这短作业优先调度算法。
4.3 模拟高响应比优先调度算法运行结果。如图4-3。
由运行结果可以看出,该算法既照顾了短作业,有考虑了作业到达的先后次序,不会使长作业长期得不到服务。因此,该算法是一个很好的折衷。
作业调度算法模拟系统,课程设计报告,截图,详细代码。
图4-3
五、结论(或总结)
三种调度算法各有优劣。如果系统中长作业较多,先来先服务算法较为优越;如果系统中短作业较多,短作业优先调度算法较为优越;而高响应比优先调度算法是前两种算法的折衷。
经过一周的努力,课程设计基本完成了,这次课程设计培养了我们耐心、慎密、全面地考虑问题的能力,从而加快了问题解决的速度、提高了个人的工作效率,以及锻炼围绕问题在短时间内得以解决的顽强意志。
在编写程序的过程中,我们的能力得到了提高,同时养成了科学、严谨的作风和习惯。为此要感谢信息学院开设了这门操作系统课程设计,为我们提供了进一步学习算法、操作系统和巩固C语言程序计设的平台。
第二部分:参考文献
1.汤小丹,梁红兵,哲凤屏,汤子赢.计算机操作系统(第五版)[M].西安:西安电子科技大学出版社,2007.
2.何钦铭,颜晖.C语言程序设计[M].北京:高等教育出版社,2008. 3.胡学刚.数据结构(C语言版)[M].北京:高等教育出版社,2008. 4.张小进.Linux系统应用基础教程[M].北京:机械工业出版社,2008. 5.赵生慧.Java面向对象程序设计[M].北京:高等教育出版社,2007.
学生签名:童玉龙 填表日期:2013年6月30日
作业调度算法模拟系统,课程设计报告,截图,详细代码。
第三部分: 指导教师评语
(从学生的工作态度、工作量、设计(论文)的创造性、学术性、实用性及书面表达能力等方面给出评价。)
第四部分:成绩评定
指导教师签名: 填表日期: 年 月 日
作业调度算法模拟系统,课程设计报告,截图,详细代码。
附录
源代码:
#include <stdio.h> #include <windows.h> #include <string.h>
#include <conio.h>/*conio.h是一个包含一些字符处理函数的头文件,如getch(),
getch()是无显示的从键盘接收一个字符,有显示的接收是getchar()*/ typedef char string[10]; /* //定义string为含有10个字符元素的字符数组类型*/
struct task {
string name; /*作业号*/ int arrTime; /* 作业到达时间*/ int serTime; /*作业要求服务时间*/ int waiTime; /*等待时间*/ int begTime; /*开始运行时间*/ int finTime; /*结束运行时间*/ int turTime; /*周转时间*/ int wTuTime; /*带权周转时间*/ int priority;/*优先权*/ int finish;/*是否已经完成*/
}JCB[5];
int num; void input()