首页 > 代码库 > 作业调度算法

作业调度算法

技术分享

 

  在多道程序环境中,主存中有着多个进程,其数目往往多于处理机数量。这就要求系统能按照某种算法动态地把处理机分配给就绪队列中的一个进程,使之执行,分配处理机的任务是由处理机调度程序完成的。

 

处理机调度

  在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。对于批量型作业而言,通常需要经历作业调度(也称为高级调度)和进程调度(也称为低级调度)两个过程才能获得处理机;而对于终端型作业而言,通常只需要经过进程调度就可以获得处理机。除了上述两种调度,操作系统中往往也设置了中级调度,用来提高内存的利用率。

  作业:是一个比程序更为广泛的概念,它不仅包含了通常的程序和数据,而且配有一份作业说明书,系统就是根据该说明书来对程序的运行进行控制。前面所说的某种算法,就是我们后面会提到的几种常用调度算法。

  高级调度(作业调度):其主要功能就是根据某种算法,把外存上处于后备队列中的那些作业调入内存,也就是说,调度的对象是作业。

  低级调度(进程调度):用于决定就绪队列中的哪个进程应该获得处理机,然后再由分派程序执行把处理机分派给该进程的具体操作。

  中级调度:主要目的是为了提高内存利用率和系统吞吐量。它的工作原理就是将暂时不能运行的进程调至外存上去,此时的状态称为挂起。相反当内存空闲时,再将他们调回内存,此时的状态称为就绪,挂在就绪队列上等待进程的调度。

技术分享

为了评价算法的优劣,提出了不同的性能分析标准:

1. cpu利用率:

  cpu是计算机系统中最重要的昂贵的资源,所以应该尽可能使cpu保持工作状态;

2. 系统吞吐量:

  单位时间内cpu完成作业的数量,长作业需要消耗较长的处理机时间,所以会降低系统的吞吐量;

3.周转时间:

  从作业提交到作业完成所经历的时间,包括作业等待、在就绪队列中排队、在处理机上运行以及进行输入输出操作所花费时间的总和。

 

周转时间=作业完成时间-作业提交时间

平均周转时间=(作业1的周转时间+作业2的周转时间+…+作业n的周转时间)/n

带权周转时间=周转时间/作业实际运行时间

平均带权周转时间=(作业1的带权周转时间+…+作业n的带权周转时间)/n

 

4. 等待时间:  

  是指进程处于等处理机状态时间之和,等待时间越长,用户满意度越低。处理机调度算法实际上并不影响作业执行或输入/输出操作的时间,只影响作业在就绪队列中等待所花的时间。因此,衡量一个调度算法优劣常常只需简单地考察等待时间。

5. 响应时间:

  是指从用户提交请求到系统首次产生响应所用的时间。在交互式系统中,周转时间不可能是最好的评价准则,一般釆用响应时间作为衡量调度算法的重要准则之一。从用户角度看,调度策略应尽量降低响应时间,使响应时间处在用户能接受的范围之内。

 

几种常用的调度算法:

1.先来先服务调度算法(FCFS)

  按照各个作业进入系统的自然次序来调度作业。这种调度算法的优点是实现简单,公平。其缺点是没有考虑到系统中各种资源的综合使用情况,往往使短作业的用户不满意,因为短作业等待处理的时间可能比实际运行时间长得多。

  优点:公平,实现简单;

  缺点:不利于短作业。

 

技术分享

平均等待时间 t = (0+1.6+2.2+2.5)/4=1.575
平均周转时间 T = (2+2.6+2.7+2.7)/4=2.5
平均带权周转时间 W = (1+2.6+5.4+13.5)/4=5.625

 

2.短作业(进程)优先调度算法

  短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。

  而短进程优先(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。

  优点:平均等待时间、平均周转时间最少;

  缺点:该算法对长作业不利,SJF调度算法中长作业的周转时间会增加。更严重的是,如果有一长作业进入系统的后备队列,由于调度程序总是优先调度那些 (即使是后进来的)短作业,将导致长作业长期不被调度(“饥饿”现象,注意区分“死锁”。后者是系统环形等待,前者是调度策略问题)。

 

技术分享

平均等待时间 t = (0+2.3+1.4+1)/4=1.175
平均周转时间 T = (2+3.3+1.9+1.2)/4=2.1
平均带权周转时间 W = (1+3.3+3.8+6)/4=3.525

 

3.时间片轮转调度算法(RR)

  将CPU的处理时间划分成一个个的时间片,就绪队列中的进程轮流运行一个时间片。当时间片结束时,就强迫进程让出CPU,该进程进入就绪队列,等待下一次调度,同时,进程调度又去选择就绪队列中的一个进程,分配给它一个时间片,以投入运行。

  在这种算法中,系统将所有就绪进程按到达时间的先后次序排成一个队列,进程调度程序总是选择就绪队列中第一个进程执行,即先来先服务的原则,但仅能运行一个时间片,如100ms。在使用完一个时间片后,即使进程并未完成其运行,它也必须释放出(被剥夺)处理机给下一个就绪的进程,而被剥夺的进程返回到就绪队列的末尾重新排队,等候再次运行。

  在时间片轮转调度算法中,时间片的大小对系统性能的影响很大。如果时间片足够大,以至于所有进程都能在一个时间片内执行完毕,则时间片轮转调度算法就退化为先来先服务调度算法。如果时间片很小,那么处理机将在进程间过于频繁切换,使处理机的开销增大,而真正用于运行用户进程的时间将减少。因此时间片的大小应选择适当。

  优点:兼顾长短作业;

  缺点:平均等待时间较长,上下文切换较费时。适用于分时系统。

 

4.优先级调度算法(HPF)

  每一个作业规定一个表示该作业优先级别的整数,当需要将新的作业由输入井调入内存处理时,优先选择优先数最高的作业。

 

 

5.多级反馈队列调度算法

  将时间片轮转与优先级调度相结合,把进程按优先级分成不同的队列,先按优先级调度,优先级相同的,按时间片轮转。优点是兼顾长短作业,有较好的响应时间,可行性强,适用于各种作业环境。

 

6.高响应比优先调度算法

  根据“响应比=(进程执行时间+进程等待时间)/ 进程执行时间”这个公式得到的响应比来进行调度。高响应比优先算法在等待时间相同的情况下,作业执行的时间越短,响应比越高,满足段任务优先,同时响应比会随着等待时间增加而变大,优先级会提高,能够避免饥饿现象。优点是兼顾长短作业,缺点是计算响应比开销大,适用于批处理系统。

技术分享

 

作业调度算法