处理机的作业调度及其算法

作业调度用来做什么呢?我们知道,在批处理系统中,作业进入系统后只是存在于外存,因此作业调度是适用于批处理系统的一种调度方式。

1、作业控制块(JCB)

作业进入系统后,系统会为每个作业分配一个作业控制块(JCB),用于记录作业的相关信息,这个和进程控制块(PCB)是相似的,在作业退出系统是,该控制块也会被撤销。也就是说,JCB作为作业的唯一标志,随作业而生,随作业而死。

2、作业的三种状态

在作业的生命周期内,存在三种状态,即后备状态,运行状态和完成状态。(1)作业在得到系统为之建立的控制块、填写必要信息后,进入后备队列,此时便处在后备状态了。(2)如果后备状态下的作业被调度程序选中、分配了必要的资源并为其中的某个作业建立了进程之后,作业处于运行状态。(3)作业正常运行完成或因故障而终止时,作业进入完成状态。

3、作业调度的主要功能

作业调度主要完成以下工作。(1)记录系统中各个作业的情况,只有了解作业的运行情况,才能对其进行管理和合理调度。(2)从后备作业中选取一个或多个作业,这项工作关系到系统的功能,选入的作业不能过多,也不能太少。(3)为作业分配主存和外设资源,使其有使用CPU的资格。(4)为作业运行做好准备工作,包括修改作业运行状态,创建进程,填写相关表格等。(5)在作业结速后完成善后工作,比如收回资源、撤销JCB等。

4、作业调度时机

(1)作业完成后。当一个作业结速时,进程数量减少,为使处理机的利用率不降低,应再调入进程。(2)如果在有新作业提交且系统尚未达到饱和时,可以调入新作业。(3)处理机利用率较低时。如果内存中进程多为 I/O 型,计算任务不足以让CPU忙碌,此时可以调入新任务。

5、作业调度算法

(1)先来先服务(First Come First Served,FCFS)算法。先来先服务调度算法的实现思想与“排队买票”类似,就是不计作业运行时间,仅仅按照作业进入后备队列的时间,依次选择一个或多个作业调入内存。下面我们用一个例子来了解FCFS调度算法。

作业名 到达时间(s) 所需CPU时间(s)
作业1 0 25
作业2 2 7
作业3 4 2

作业周转时间=作业等待时间+作业运行时间。所以作业1周转时间为25s,作业2周转时间=25-2+7=30s,作业3周转时间=32-4+2=30s。平均周转时间=(25+30+30)/3=28.3s。由于FCFS只考虑了作业的等待时间而忽略了作业的运行时间,这不利于短运行时间的作业,因为短作业运行时间很短,但等待时间却长,。基于FCFS调度算法的这个特点,FCFS对CPU繁忙型作业较有利,而不利于 I/O 繁忙型作业,因为在执行I/O时,往往要放弃对CPU的占有,当I/O完成后回到队列,却有可能要再等很长一段时间才能重新获得CPU。

(2)最短作业优先(Shortest Job First,SJF)算法。最短作业优先要求每个作业都提供所需运行的时间,每次调度都选择运行时间最短的作业。这时一种非抢占的调度策略。系统一旦选定某个作业,便运行到完成并退出。

作业名 到达时间(s) 所需CPU时间(s)
作业1 0 25
作业2 0 7
作业3 0 2

假设作业1、2、3同时处于就绪状态下,根据所需CPU时间的长短,首先选择作业3,作业3执行结速后再执行作业2,只有作业2退出,作业1才能得到执行。因此作业3、2、1的运行时间分别为2s、9s、34s。平均周转时间为15s。由此可见,SJF的性能要优于FCFS,但实际上,SJF也存在下列缺点,一是需要预先知道各个作业所需CPU时间;二是忽略的作业等待时间,可能某些需要较长计算时间的作业长期无法得到执行;三是缺少剥夺机制,对分时和实时处理仍不理想。

SJF算法也可以改进成抢占机制的。当一个作业正在执行时,有新作业进入就绪状态,且新作业所需CPU时间少于当前作业所需剩余CPU时间,则抢占式SJF强行赶走当前作业,新作业得到运行。这种调度也成为“最短剩余时间优先(Shortest Running Time First,SRTF)”。

作业名 到达时间(s) 所需CPU时间(s)
作业1 0 25
作业2 2 7
作业3 4 2

作业1从时间0开始执行,这时系统内只有一个作业。作业2在第2秒到达,所需运行时间为7秒,少于作业1 所需剩余时间25-2=23秒,所以作业2开始运行。作业3在第4秒到达,所需执行时间少于作业2所需剩余CPPU时间。作业3开始运行。作业三运行结速后比较作业1、2所需运行时间,作业2优先得到运行,最后是作业1。此时作业1的周转时间为2+9+23=34s,作业2周转时间=2+2+5=9s.作业3周转时间=2s.平均周转时间为15秒。虽然在本例中SRTF算法周转时间等于SJF算法周转时间,但更多情况下SRTF算法要优于SJF。

(3)最高响应比优先(Hightest Response-ration First,HRF)算法。HRF算法是介于SJF和FCFS之间的一种算法,它既考虑了作业的等待时间有顾及了作业的运行时间。响应比R=(作业等待时间+作业运行时间)/作业运行时间=1+作业等待时间/作业运行时间。所以,对于运行时间较短的作业,由于分母较小,容易得到较大的响应比。但如果作业的等待时间足够长,由于分子较大,也有可能获得较大响应比,而避免使某个作业长期处于饥饿状态。缺点是每次都要计算各个作业的响应比。

作业名 到达时间(s) 所需CPU时间(s)
作业1 0 25
作业2 2 7
作业3 4 2

实施HRF调度算法如下。开始时只有作业一,则被选中,执行时间为25;作业1执行完之后,作业2、3进入系统,响应比分别为1+23/7、1+21/2,则作业3被选中,执行时间为2;最后执行作业2。平均周转时间=(25+23+32)/3=26.7.可见HRF是介于FCFS和SJF之间的一种算法。

你可能感兴趣的:(作业调度,SJF算法,FCFS算法,HRF算法)