以此类推,当进程调度至第11轮次时,全部进程运行完毕并销毁,三条队列全部微孔,整个进程调度完毕:
六、调试总结及心得体会
第一次实验由于教材有类似的程序源码,所以相对来说还是比较简单,我只需要更改其中一部分算法就可以实现多级队列调度算法,但是我在实现过程中还是学到不少东西,重新温习了一遍C语言,特别是指针和结构体部分,完成一个功能模拟首先必须理解其中的算法,然后设计出良好的数据结构是完成这次实验的关键,在整个实验流程中,对于不同功能模块指针的设计和使用非常重要,必须确定那些指针是全局指针,运行时需不需要时常改变,哪些指针必须设置为局部作为第三者使用。这对后期调BUG给与了我很大的方便 。
七、思考题
1、分析不同调度算法的调度策略,比较不同调度算法的优缺点,总结它们的适用范围 答:
“最高优先数优先”是根据进程的优先级数决定是否运行的,此算法用于批处理系统中,也作为多种操作系统中的进程调度算法,还可用于实时系统中。
“轮转法”相当于先来先服务高度算法,每次都是调度后备作业中的第一个,这个算法比较有利于长进程,不利于短进程。
13
学号: 姓名: 协作者:________
实验__二__题目__ 作业调度_______ 第 周星期
一、实验目的
本实验要求学生模拟作业调度的实现,用高级语言编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解。
二、实验内容和要求
1、为单道批处理系统设计一个作业调度程序
(1)、编写并调试一个单道处理系统的作业调度模拟程序。 (2)、作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者
优先(HRN)的调度算法。
先来先服务就是每次调度都是从后备作业队列中,选择一个最先进入该队列的作业,将它调入内存,为它分配资源、创建进程,然后放入就绪队列,投入运行,一直运行到完成或发生某事件而阻塞后,才放弃处理。
最短作业优先是从后备队列中选择一个估计运行时间最短的作业,将它调入内存运行并一直执行到完成,或发生某事件而被阻塞放弃处理时,再重新调度。 响应比高者优先是通过计算出作业的响应比,按响应比高而进行调度的,其计
算公式是:优先权=(等待时间+要求服务时间)/要求服务时间.
(3)、由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU时限等因素。
(4)、每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时
间、所需的运行时间、所需的资源、作业状态、链指针等等。作业的状态可以是
等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。
(5)、对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权
周转时间,以及这组作业的平均周转时间及带权平均周转时间,并比较各种算法的优缺点。
三、实验主要仪器设备和材料
实验环境
硬件环境:个人台式机 Microsoft Windows XP Professional (SP3) 软件环境:C语言编程环境,VC++ 6.0
四、实验原理及设计方案
14
1、实验原理
先来先服务算法:是按照作业进入输入井的先后次序来挑选作业,先进入输入井的作业优先被挑选,当系统中现有的尚未分配的资源不能满足先进入输入井的作业,那么顺序挑选后面的作业。 FCFS算法简单易行,但性能却不大好。
短作业优先算法:总是按照作业要求运行时间来选择作业,每次挑选要求作业执行时间短且资源要求能满足的作业优先分派处理机,通常后来的短作业不抢先正在执行的作业。SJF改善平均周转时间和平均带权周转时间,缩短作业的等待时间 ,提高系统的吞吐量,但对长作业非常不利。
响应比高者优先算法:最高响应比优先法(HRN,Highest Response_ratio Next)是对FCFS方式和SJF方式的一种综合平衡。FCFS方式只考虑每个作业的等待时间而未考虑执行时间的长短,而SJF方式只考虑执行时间而未考虑等待时间的长短。因此,这两种调度算法在某些极端情况下会带来某些不便。HRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。 响应比R定义如下: R =(W+T)/T = 1+W/T
其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W / T也就随着增加,也就有机会获得调度执行。这种算法是介于FCFS和SJF之间的一种折中算法。由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF法,从而采用HRN方式时其吞吐量将小于采用SJF 法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。
2、设计方案
struct source{ /*定义资源需求结构*/ char memery[5]; /*主存需求*/ };
struct jcb { /* 定义作业控制块PCB */ char name[10];
char state; /* 状态 */
double super; /* 响应比优先权 */ int ntime; /* 需要运行时间 */ int rtime; /* 开始运行时间 */
int ptime; /*提交时间*/ int ftime; /*完成时间*/ int machine; /*磁带机数量*/
source *needsources; /*资源需求链*/
struct jcb* link; /* 下一个作业控制块的地址 */ }*ready=NULL,*run,*p;
15
3、 程序流程图 用先来先服务算法调度队首作业投入运行,更改作业状态为R,记住作业开始运行时间,修改下一作业指针等,计算运行作业i的完成时刻,周转时间和带权周转时间 作业调度算法? 开始 初始化作业JCB和资源source,所有作业按照先后顺序排列,作业提交时间为系统默认时间p->ptime=Systemtim,作业完成时间p->ftime=0 1 先来先服务算法 2 短作业优先算法 3 响应比高优先算法 用短作业算法调度需求时间最短的作业投入运行,更改作业状态为R,记住作业开始运行时间,修改下一作业指针等,计算运行作业i的完成时刻,周转时间和带权周转时间 用响应比高优先算法,先计算所有作业高响应比,调度队响应比最高的首作业投入运行,更改作业状态为R,记录作业开始运行时间和完成时间,修改下一作业指针等,计算运行作业i的完成时刻,周转时间和带权周转时间 Y 作业运行完毕? 释放该作业占用资源 N N 等待队列空? 结束 Y 计算并打印这组作业的平均周转时间及带权平均周转时间
16