*********计算机科学与技术学院
操作系统课程设计
题
系
专
班
业:
级:
学生姓名:
目:
作业调度设计
别: 计算机科学与技术学院
网络工程
******
******
学
号:
********
指导老师:
******
完成日期:
2015 年 6 月 10 日
目 录
第 1 章 程序设计要求 ...................................................................................................................... 1
1.1 作业调度 .............................................................................................................................. 1
1.2 程序设计要求 ...................................................................................................................... 1
1.3 运行环境 ............................................................................................................................. 1
第 2 章 设计思想及流程 .................................................................................................................. 2
2.1 常用作业调度算法简介 .....................................................................................................2
2.2 常用作业调度算法原理对比 .............................................................................................2
2.3 三种调度算法优劣比较 ......................................................................................................4
第 3 章 设计所涉及的主要数据结构 ..............................................................................................4
3.1 作业调度所需的数据结构.................................................................................................4
第 4 章 程序清单 .............................................................................................................................. 4
第 5 章 运行结果 .............................................................................................................................. 7
第 6 章 设计心得 ............................................................................................................................ 10
参考文献 .......................................................................................................................................... 10
第 1 章 程序设计要求
1.1 作业调度
作业调度的主要功能是根据某种调度算法,从作业后备队列中挑选一批作业
进入执行状态,为被选中的作业分配资源和创建进程,并在作业执行结束后释放
其所占用的资源等。
1.2 程序设计要求
通过模拟作业调度算法的设计加深对作业管理基本原理的理解。通过计算同
一组作业在采用不同算法的执行时间、周转时间、带权周转时间等了解各个算法
的优劣。
具体设计要求如下:
(1)对输入的每个作业必须编号,输出时要有作业序号、运行时间及等待
时间(包括总的等待时间);
(2)报告中的运行情况要包括输入和输出情况;
(3)比较上面几种调度算法的优劣。
1.3 运行环境
本设计实现运行环境如表 1-1 所示的计算硬件指标,使用 C 语言编程,同时需要安装
Microsoft Visual C++ 6.0 软件。
表 1-1 计算机硬件指标
指标
CPU
主频
内存
硬盘
操作系统
性能
Pertium ®Dual-Core CPU E6600
3.07GHz
4GB
500GB
Windows 7
1
第 2 章 设计思想及流程
2.1 常用作业调度算法简介
常用的作业调度算法有以下几种:FCFS(先来先服务算法)、SJF(短作业优先算法)、
HRN(最高响应比优先算法)
先来先服务算法(FCFS):按作业进入系统的先后次序进行调度,即每次调度都从后备
队列中选择一个最先进入该队列的作业,将它调入内存,分配资源,创建相应的进程,放入
进程就绪队列准备运行。即等待时间最长的作业。
短作业优先算法(SJF):优先调度并处理短作业。所谓的“短作业”并不是指物理作
业长度短,而是指作业的运行时间短。
最高响应比优先算法(HRN):优先调度并处理响应比最高的作业。
2.2 常用作业调度算法原理对比
先来先服务算法:按照各个作业进入系统(输入井)的自然次序来调度算法。该算法比
较有利于长作业,但是不利于短作业。
短作业优先调度算法:
(1)短作业优先调度算法可以照顾到实际上在所有作业中占很大比例的短作业,使它
能比长作业优先执行。SPF 优先调度算法:是从就绪队列中选出一估计运行时间最短的进程,
将处理机分配给它,使它立即执行到完成,或发生某事件而被阻塞放弃处理机时,再重新调
度。
(2)该算法完全未考虑作业的紧迫程度,因而不能保证紧迫性作业(进程),会得到及
时处理;
(3)由于作业(进程)的长短只是根据用户所提供的估计执行时间而定,而用户又可
能会有意或无意地缩短其作业的估计执行时间,致使该算法不一定能真正做到短作业优先调
度。
高响应比优先调度算法在批处理系统中,用作作业调度的短作业优先算法是一个比较好
的算法。其主要缺点是作业的运行得不到保证。如果我们能为每个作业引入前面所述的动态
优先权机制,并使以速率 a 增加,则长作业在等待一定的时间后,必须有机会分配到处理机。
该优先权的变化可描述为:
优先权=(等待时间+要求服务时间)/要求服务时间
由于等待时间加上要求服务时间,就是系统对该作业的响应时间,故该优先权又相当于
2
响应比 Rp = 等待时间加要求服务时间/要求服务时间=响应时间/要求服务时间
由上式可以看出:
(1)如果作业的等待时间相同,则要求服务的时间愈短,其优先权愈高,因而该算法
有利于短作业;
(2)当要求服务的时间相同时,作业的优先权决定于其等待时间,因而实现了先来先
服务;
(3)对于长作业,当其等待时间足够长时,其优先权便可升到很高,从而也可获得处
理机。
该算法既照顾了短作业,又考虑了作业到达的先后顺序,也不会使作业长期得不到服务。
因此,该算法实现了一种较好的折衷。当然,再利用该算法时,每要进行调度之前,都需先
进行响应应比的计算,这会增加系统的开销。
三种作业调度算法流程图如图 1 所示。
图 1 三种作业调度算法流程图
3
2.3 三种调度算法优劣比较
如果系统中长作业较多,先来先服务算法较为优越;如果系统中短作业较多,短作业优
先调度算法较为优越;而高响应比优先调度算法是前两种算法的折衷。
第 3 章 设计所涉及的主要数据结构
3.1 作业调度所需的数据结构
1)作业控制块(JCB)
为了管理和调度作业,作业进入系统时由系统为每个作业建立一个作业控制块(JCB),
它记录该作业的有关信息。当作业退出系统时,JCB 也一起被撤销,JCB 是作业在系统中存
在的唯一标志。不同系统的 JCB 包含的信息是不同的,通常 JCB 包含如下信息:
(1)作业的标识信息:作业名、作业状态及作业说明书文件名等;
(2)作业的资源需求信息:运行时间、最迟的完成时间、要求的存储空间、要求的设
备情况等;
(3)作业的类型级别和状态信息:作业类型(计算机还是 I/O 型)、优先权、作业的
状态等;
(4)调度参数及其控制信息:进入系统的时间、开始运行的时间、已运行的时间、存
储地址等。
2)作业后备队列
在批处理系统中通常有多个作业被收容在输入井中,作业一旦进入输入井,就处于后备
状态。为方便管理,可以按照某种原则,将磁盘输入井中处于后备状态的 JCB 排成一个或
多个队列,称其为作业后备队列。作业调度是从作业后备队列中根据某种调度算法来挑选作
业。
第 4 章 程序清单
1)后备作业队列中,输入 3 个作业各自运行所需要的时间及存储空间。
(1)按先来先服务的原则进行调度,输出作业调度的顺序及等待的时间。
(2)按最短作业(即运行时间最短)优先的原则进行调度,输出作业调度的顺序及等
待时间。
(3)按响应比高者优先的原则进行调度,输出作业调度的顺序及等待的时间。根据运
4
行情况,比较各种算法。
2)后备作业队列中,先输入 3 个作业各自运行所需要的时间,然后每输入一个作业的
运行时间,就按响应比高优先的原则进行调度,直到输入作业的运行时间为 0 时,依次输出
响应比高的其它作业。
主要代码如下:
//响应比高者算法
void hrn(int m)
{
JCB*min;
int i,iden;
system("cls");
inital();
for(i=0;istate=='W'&&p->reachtime<=times)
//判断是否将新建作业插入到就绪队列,如果是,置 1
//调用 super()函数
//当作业的状态置
为等待态时
if(iden)
{
min=p;iden=0;
}
//通过响应比来判断作业的优先次序
else if(p->super>min->super)min=p;
//若 p 指针指向的是作
业响应比高于 min,则 p 指向的作业先开始
p=p->next;
}while(p!=NULL);
if(iden)
{
i--;times++;
//每开始完成一个作业,剩下的作业的开
始时间就加一
if(times>1000){printf("\nruntime is too
long...error...");getch();}
}
else
{
running(min,m);
//调用 running()函数
}
}
final();
}
//调用 final()函数
5
//最短作业优先算法
void sjf(int m)
{
JCB*min;
int i,iden;
system("cls");
inital();
for(i=0;istate=='W' && p->reachtime<=times)
//当作业的状态置
if(iden){
min=p;iden=0;
}
else if(p->needtimeneedtime)min=p;
//当 p 指针
指向的作业运行所需时间小于 min,则 p 指向的作业先开始
p=p->next;
}while(p!=NULL);
if(iden){
i--;times++;
if(times>100){printf("\nruntime is too
long...error...");getch();}
}
else{
running(min,m);
//调用 running()函数
}
}
final();
}
//先来先服务算法
void fcfs(int m)
{
int i,iden;
system("cls");
inital();
for(i=0;istate=='W' && p->reachtime<=times) iden=0;
//如果
将作业的状态置为“等待”,则不将作业加入队列
6