操作系统的作业调度

作业(job)是操作系统中一个常见的概念,所谓作业是指用户在一次计算过程或者事务处理过程中,要求计算机系统所作工作的集合。

 所谓作业调度是指按照某种原则,从后备作业队列中选取作业进入内存,并为作业做好运行前的准备工作以及作业完成后的善后处理工作。设计作业调度算法时应达到如下目标:

•    (1) 某段时间内尽可能运行更多的作业,应该优先考虑短作业。

•    (2) 使处理机保持繁忙,应该优先考虑计算量大的作业,即计算型作业。

•    (3) 使I/O设备保持繁忙,应该优先考虑I/O繁忙的作业,即I/O型作业。

•    (4) 对所有的作业尽可能公平合理的。这就要求对每个作业尽可能公平对待,不无故地或无限期地拖延一个作业的执行。

  作业调度离不开具体调度算法,常用的作业调度算法有五种,下面我们作简单的介绍,并以单道批处理系统为例来具体分析每种算法的优劣。

 

 

  先来先服务调度算法

先来先服务调度算法(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

注:通过以上分析,显然,这种算法容易实现,但效率很低。

 

  短作业优先调度算法

短作业优先调度算法(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

注:通过以上分析,虽然这种算法易于实现,且效率也比较高,但未考虑长作业的利益。

 

响应比高者优先调度算法

  先来先服务调度算法只考虑了作业的等待时间,而忽略了作业的运行时间,对短作业不利;最短作业优先调度算法只考虑了作业运行时间的长短,而忽略了作业的等待时间,对运行时间长的作业不利,因为如果始终有短作业进人系统,则较长作业会长时间得不到调度。所以上述两种调度算法都有偏向,即不全面。下面介绍一种既考虑了作业的等待时间又考虑了作业的运行时间的调度算法,它是响应比高者优先调度算法(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

注:通过以上分析,这种算法既考虑了作业的等待时间,也考虑了作业的运行时间,是一种比较理想的调度算法。但这种算法复杂,而且需要动态计算某一作业完成时刻后备队列中每个作业的响应比,增加了系统的开销。

  

最高优先数调度算法

  此算法根据作业的优先数调度作业进入系统运行。为每个作业确定一个优先数,资源能满足且优先数高的作业优先被选中,当几个作业有相同的优先数时,对这些具有相同优先数的作业再按照先来先服务原则进行调度。

作业优先数的确定各系统有所不同,有些系统根据作业对资源的要求确定其优先数,有的系统则使用外部优先数,即由用户自行确定自己作业的优先数。一种方法是由操作系统根据作业的轻重缓急程度、作业估计的计算时间、作业的类型、资源申请情况等因素综合考虑。分析这些因素在实现系统设计目标中的影响,决定各因素的比例,综合得出作业的优先数。另一种方法是用户自己确定。当用户提交自己的作业时连同作业的优先数也一同提交给系统。对于大多数用户来说都希望自己的作业被尽快选中,但需注意不能盲目提高作业的优先数。当然,还有的系统根据作业的等待时间动态地改变其优先数,使等待时间长的作业的优先数随着等待时间的变长而优先数提高,以缩短作业的周转时间和带权周转时间。但动态地改变其优先数显然会增加系统的开销。

 

均衡调度算法

这种调度算法根据作业对资源的要求进行分类,作业调度从各类作业中挑选,尽可能地使使用不同资源的作业同时执行。这样不仅可以使系统中的不同类型的资源都在被使用,而且可以减少作业等待使用相同资源的时间,从而加快作业的执行。

有的系统还对每一类中的各作业确定优先数,作业调度时在每类作业中再按优先数高者优先的调度原则选择作业。这样,既能使各类作业都得到照顾,又能照顾同类作业中的紧迫作业。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值