本文是我在众多博客中找到的比较全的调度算法整理,合并过来大家凑合看看
作业调度:
1.先来先服务调度算法所谓作业调度是指按照某种原则,从后备作业队列中选取作业进入内存,并为作业做好运行前的准备工作以及作业完成
后的善后处理工作。设计作业调度算法时应达到如下目标:
(1) 某段时间内尽可能运行更多的作业,应该优先考虑短作业。
(2) 使处理机保持繁忙,应该优先考虑计算量大的作业,即计算型作业。
(3) 使I/O设备保持繁忙,应该优先考虑I/O繁忙的作业,即I/O型作业。
(4) 对所有的作业尽可能公平合理的。这就要求对每个作业尽可能公平对待,不无故地或无限期地拖延一个作业的执行。
作业调度离不开具体调度算法,常用的作业调度算法有五种,下面我们作简单的介绍,并以单道批处理系统为例来具 体分析每种算法的优劣。
2.短作业优先调度算法先来先服务调度算法(first come first service,FCFS)按作业到达系统的先后次序进行调度。该算法优先考虑在系统
中等待时间最长的作业,而不考虑作业运行时间的长短。例如,有4个作业组成的一个作业流,如表2-1所示,在给出了
作业的提交时间、运行时间后,经计算给出了作业的开始时间、完成时间、周转时间和带权周转时间。
由于单道批处理系统处理作业是一个接着一个的进行,所以第一个作业的结束时间就是第二个作业的开始时间,第二个
作业的结束时间就是第三个作业的开始时间,等等。所以,作业运行的次序为:1,2,3,4。
由此:此作业流的平均周转时间为T =(2.0+1.5+1.2+1.5)/4=1.55h, 此作业流的平均周转时间为W =(1.0+3.0+6.0+3.75)/4=3.4375h
注:通过以上分析,显然,这种算法容易实现,但效率很低。
3.响应比高者优先调度算法短作业优先调度算法(shortest job first,SJF)总是从作业的后备队列中挑选运行时间最短的作业,作为下—个调度运
行的对象。仍然采用上面的4个作业组成的一个作业流,计算其调度性能,如表2-2所示,经计算给出了作业的开始时
间、完成时间、周转时间和带权周转时间。
在如表2-2所示的计算过程中,由于作业1的开始时间是5:00,而其余作业均未到达,故先运行作业1,当作业1运行完
毕,其余作业均按短作业优先运行。所以,作业运行的次序为:1, 3,4,2。
由此:此作业流的平均周转时间为T =(2.0+2.1+0.7+1.0)/4=1.45h。
此作业流的平均周转时间为W =(1.0+4.2+3.5+2.5)/4=2.8h
注:通过以上分析,虽然这种算法易于实现,且效率也比较高,但未考虑长作业的利益。
4.最高优先数调度算法
先来先服务调度算法只考虑了作业的等待时间,而忽略了作业的运行时间,对短作业不利;最短作业优先调度算法只 考虑了作业运行时间的长短,而忽略了作业的等待时间,对运行时间长的作业不利,因为如果始终有短作业进人系统,
则较长作业会长时间得不到调度。所以上述两种调度算法都有偏向,即不全面。下面介绍一种既考虑了作业的等待时间
又考虑了作业的运行时间的调度算法,它是响应比高者优先调度算法(highest response-ratio next ,HRN)。所谓响
应比高者优先调度算法,就是在每次调度作业运行时,先计算后备作业队列中每个作业的响应比,然后挑选响应比最高
者投入运行。
响应比R定义如下: R=作业的响应时间/作业的运行时间
作业的响应时间=作业的等待时间+作业的运行时间
因此,作业的响应比为:R=1+作业的等待时间/作业的运行时间。
从以上公式中可从看出,一个作业的响应比随着等待时间的增加而提高。这样,只要系统中的某作业等待了足够长的时
间,它总会成为响应比最高者而获得运行的机会。在相同等待时间的情况下,短作业优先,而对于相同运行时间的作
业,等待时间长的作业优先运行。
仍然采用上面的4个作业组成的一个作业流,计算其调度性能,如表2-3所示,经计算给出了作业的开始时间、完成时
间、周转时间和带权周转时间。
在如表2-3所示的计算过程中,由于作业1的开始时间是5:00,而其余作业均未到达,故先运行作业1。当作业1运行完 毕,计算后备队列中作业2,3,4的响应比。按照以上的定义和计算公式,计算如下:
作业2:R=(60+30)/30=3
作业3:R=(30+12)/12=3.5
作业4:R=(24+24)/24=2
可见,作业3的响应比最高,选择作业3运行,故表2-3中作业3的开始时间为作业1的完成时间,即7:00,当作业3运行完
毕,计算后备队列中作业2,4的响应比,计算如下:
作业2:R=(72+30)/30=3.4
作业4:R=(36+24)/24=2.5
显然,这次应该选择作业2,故表2-3中作业2的开始时间为作业3的完成时间,即7:12,最后运行作业4。故作业运行的次
序为:1, 3,2, 4。
由此:此作业流的平均周转时间为T =(2.0+1.7+0.7+1.5)/4=1.475h,
此作业流的平均周转时间为W =(1.0+3.4+3.5+3.75)/4=2.9125
注:通过以上分析,这种算法既考虑了作业的等待时间,也考虑了作业的运行时间,是一种比较理想的调度算法。但这
种算法复杂,而且需要动态计算某一作业完成时刻后备队列中每个作业的响应比,增加了系统的开销。
5.均衡调度算法
此算法根据作业的优先数调度作业进入系统运行。为每个作业确定一个优先数,资源能满足且优先数高的作业优先被 选中,当几个作业有相同的优先数时,对这些具有相同优先数的作业再按照先来先服务原则进行调度。
作业优先数的确定各系统有所不同,有些系统根据作业对资源的要求确定其优先数,有的系统则使用外部优先数,即由
用户自行确定自己作业的优先数。一种方法是由操作系统根据作业的轻重缓急程度、作业估计的计算时间、作业的类
型、资源申请情况等因素综合考虑。分析这些因素在实现系统设计目标中的影响,决定各因素的比例,综合得出作业的
优先数。另一种方法是用户自己确定。当用户提交自己的作业时连同作业的优先数也一同提交给系统。对于大多数用户
来说都希望自己的作业被尽快选中,但需注意不能盲目提高作业的优先数。当然,还有的系统根据作业的等待时间动态
地改变其优先数,使等待时间长的作业的优先数随着等待时间的变长而优先数提高,以缩短作业的周转时间和带权周转
时间。但动态地改变其优先数显然会增加系统的开销。
这种调度算法根据作业对资源的要求进行分类,作业调度从各类作业中挑选,尽可能地使使用不同资源的作业同时执
行。这样不仅可以使系统中
的不同类型的资源都在被使用,而且可以减少作业等待使用相同资源的时间,从而加快作业的执行。
有的系统还对每一类中的各作业确定优先数,作业调度时在每类作业中再按优先数高者优先的调度原则选择作业。这
样,既能使各类作业都得到照顾,又能照顾同类作业中的紧迫作业。
进程调度:
-
先来先服务 (FCFS,first come first served)
在所有调度算法中,最简单的是非抢占式的FCFS算法。
算法原理:进程按照它们请求CPU的顺序使用CPU.就像你买东西去排队,谁第一个排,谁就先被执行,在它执行的过程中,不会中断它。当其他人也想进入内存被执行,就要排队等着,如果在执行过程中出现一些事,他现在不想排队了,下一个排队的就补上。此时如果他又想排队了,只能站到队尾去。
算法优点:易于理解且实现简单,只需要一个队列(FIFO),且相当公平
算法缺点:比较有利于长进程,而不利于短进程,有利于CPU 繁忙的进程,而不利于I/O 繁忙的进程 -
最短作业优先(SJF, Shortest Job First)
短作业优先(SJF, Shortest Job First)又称为“短进程优先”SPN(Shortest Process Next);这是对FCFS算法的改进,其目标是减少平均周转时间。
算法原理:对预计执行时间短的进程优先分派处理机。通常后来的短进程不抢先正在执行的进程。
算法优点:相比FCFS 算法,该算法可改善平均周转时间和平均带权周转时间,缩短进程的等待时间,提高系统的吞吐量。
算法缺点:对长进程非常不利,可能长时间得不到执行,且未能依据进程的紧迫程度来划分执行的优先级,以及难以准确估计进程的执行时间,从而影响调度性能。 -
最高响应比优先法(HRRN,Highest Response Ratio Next)
最高响应比优先法(HRRN,Highest Response Ratio Next)是对FCFS方式和SJF方式的一种综合平衡。FCFS方式只考虑每个作业的等待时间而未考虑执行时间的长短,而SJF方式只考虑执行时间而未考虑等待时间的长短。因此,这两种调度算法在某些极端情况下会带来某些不便。HRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。这样,即使是长作业,随着它等待时间的增加,W / T也就随着增加,也就有机会获得调度执行。这种算法是介于FCFS和SJF之间的一种折中算法。
算法原理:响应比R定义如下: R =(W+T)/T = 1+W/T
其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。
算法优点:由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF法,从而采用HRRN方式时其吞吐量将小于采用SJF 法时的吞吐量。
算法缺点:由于每次调度前要计算响应比,系统开销也要相应增加。 -
时间片轮转算法(RR,Round-Robin)
该算法采用剥夺策略。时间片轮转调度是一种最古老,最简单,最公平且使用最广的算法,又称RR调度。每个进程被分配一个时间段,称作它的时间片,即该进程允许运行的时间。
算法原理:让就绪进程以FCFS 的方式按时间片轮流使用CPU 的调度方式,即将系统中所有的就绪进程按照FCFS 原则,排成一个队列,每次调度时将CPU 分派给队首进程,让其执行一个时间片,时间片的长度从几个ms 到几百ms。在一个时间片结束时,发生时钟中断,调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前的队首进程,进程可以未使用完一个时间片,就出让CPU(如阻塞)。
算法优点:时间片轮转调度算法的特点是简单易行、平均响应时间短。
算法缺点:不利于处理紧急作业。在时间片轮转算法中,时间片的大小对系统性能的影响很大,因此时间片的大小应选择恰当
怎样确定时间片的大小:时间片大小的确定
1.系统对响应时间的要求
2.就绪队列中进程的数目
3.系统的处理能力 -
多级反馈队列(Multilevel Feedback Queue)
多级反馈队列调度算法是一种CPU处理机调度算法,UNIX操作系统采取的便是这种调度算法。
多级反馈队列调度算法描述:
(1)进程在进入待调度的队列等待时,首先进入优先级最高的Q1等待。
(2)首先调度优先级高的队列中的进程。若高优先级中队列中已没有调度的进程,则调度次优先级队列中的进程。例如:Q1,Q2,Q3三个队列,只有在Q1中没有进程等待时才去调度Q2,同理,只有Q1,Q2都为空时才会去调度Q3。
(3)对于同一个队列中的各个进程,按照时间片轮转法调度。比如Q1队列的时间片为N,那么Q1中的作业在经历了N个时间片后若还没有完成,则进入Q2队列等待,若Q2的时间片用完后作业还不能完成,一直进入下一级队列,直至完成。
(4)在低优先级的队列中的进程在运行时,又有新到达的作业,那么在运行完这个时间片后,CPU马上分配给新到达的作业(抢占式)。
在多级反馈队列调度算法中,如果规定第一个队列的时间片略大于多数人机交互所需之处理时间时,便能够较好的满足各种类型用户的需要。