作业(job)是操作系统中一个常见的概念,所谓作业是指用户在一次计算过程或者事务处理过程中,要求计算机系统所作工作的集合。
•
•
•
•
先来先服务调度算法(first come first service,FCFS)按作业到达系统的先后次序进行调度。该算法优先考虑在系统中等待时间最长的作业,而不考虑作业运行时间的长短。例如,有4个作业组成的一个作业流,如表2-1所示,在给出了作业的提交时间、运行时间后,经计算给出了作业的开始时间、完成时间、周转时间和带权周转时间。
由于单道批处理系统处理作业是一个接着一个的进行,所以第一个作业的结束时间就是第二个作业的开始时间,第二个作业的结束时间就是第三个作业的开始时间,等等。所以,作业运行的次序为:1,2,3,4。
此作业流的平均周转时间为W =(1.0+3.0+6.0+3.75)/4=3.4375h
注:通过以上分析,显然,这种算法容易实现,但效率很低。
短作业优先调度算法(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
注:通过以上分析,虽然这种算法易于实现,且效率也比较高,但未考虑长作业的利益。
响应比高者优先调度算法
R=作业的响应时间/作业的运行时间
作业的响应时间=作业的等待时间+作业的运行时间
因此,作业的响应比为:R=1+作业的等待时间/作业的运行时间。
从以上公式中可从看出,一个作业的响应比随着等待时间的增加而提高。这样,只要系统中的某作业等待了足够长的时间,它总会成为响应比最高者而获得运行的机会。在相同等待时间的情况下,短作业优先,而对于相同运行时间的作业,等待时间长的作业优先运行。
仍然采用上面的4个作业组成的一个作业流,计算其调度性能,如表2-3所示,经计算给出了作业的开始时间、完成时间、周转时间和带权周转时间。
作业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
注:通过以上分析,这种算法既考虑了作业的等待时间,也考虑了作业的运行时间,是一种比较理想的调度算法。但这种算法复杂,而且需要动态计算某一作业完成时刻后备队列中每个作业的响应比,增加了系统的开销。
最高优先数调度算法
作业优先数的确定各系统有所不同,有些系统根据作业对资源的要求确定其优先数,有的系统则使用外部优先数,即由用户自行确定自己作业的优先数。一种方法是由操作系统根据作业的轻重缓急程度、作业估计的计算时间、作业的类型、资源申请情况等因素综合考虑。分析这些因素在实现系统设计目标中的影响,决定各因素的比例,综合得出作业的优先数。另一种方法是用户自己确定。当用户提交自己的作业时连同作业的优先数也一同提交给系统。对于大多数用户来说都希望自己的作业被尽快选中,但需注意不能盲目提高作业的优先数。当然,还有的系统根据作业的等待时间动态地改变其优先数,使等待时间长的作业的优先数随着等待时间的变长而优先数提高,以缩短作业的周转时间和带权周转时间。但动态地改变其优先数显然会增加系统的开销。
均衡调度算法
这种调度算法根据作业对资源的要求进行分类,作业调度从各类作业中挑选,尽可能地使使用不同资源的作业同时执行。这样不仅可以使系统中的不同类型的资源都在被使用,而且可以减少作业等待使用相同资源的时间,从而加快作业的执行。
有的系统还对每一类中的各作业确定优先数,作业调度时在每类作业中再按优先数高者优先的调度原则选择作业。这样,既能使各类作业都得到照顾,又能照顾同类作业中的紧迫作业。