作业与作业调度
目录
笔记:
- 作业控制:和进程管理类似,有 JCB 管理。
- 作业状态: 收容,运行,完成三态
- 调度算法:
- 先来先服务 | FCFS:无人机交互,无紧迫性
- 短作业优先 | SJF:无人机交互,无紧迫性
- 优先级调度 | PSA:有优先级
- 高响应比优先 | HRRN:有优先级
参考资料:
在多道批处理系统中,作业是用户提交给系统的一项相对独立的工作。操作员把用户提交的作业通过相应的输入设备输入到磁盘存储器,并保存在一个后备作业队列中。再由作业调度程序将其从外存调入内存。// 将程序从外存调入内存
批处理系统中作业
作业和作业步
作业(Job):作业不仅包含了通常的程序和数据而且还应配有一份作业说明书,系统根据该说明书来对程序的运行进行控制。在批处理系统中,是以作业为基本单位从外存调入内存的。// 作业是一个比程序更为广泛的概念
作业步(Job Step):通常,在作业运行期间,每个作业都必须经过若干个相对独立又相互关联的顺序加工步骤才能得到结果。我们把其中的每一个加工步骤称为一个作业步,各作业步之间存在着相互联系,往往是上一个作业步的输出作为下一个作业步的输入。例如,一个典型的作业可分成:“编译” 作业步,“链接装配” 作业步和 “运行” 作业步。// 编译 -> 装配 -> 运行
作业控制块(Job Control Block,JCB)
为了管理和调度作业,在多道批处理系统中,为每个作业设置了一个作业控制块 JCB,它是作业在系统中存在的标志,其中保存了系统对作业进行管理和调度所需的全部信息。
通常在 JCB 中包含的内容有:作业标识、用户名称、用户账号、作业类型(CPU 繁忙型、I/O 繁忙型、批量型、终端型)、作业状态、调度信息(优先级、作业运行时间)、资源需求(预计运行时间、要求内存大小等)、资源使用情况等。
每当一个作业进入系统时,便由 “作业注册” 程序为该作业建立一个作业控制块 JCB 。再根据作业类型,将它放到相应的作业后备队列中等待调度。调度程序依据一定的调度算法来调度它们,被调度到的作业将被装入内存。在作业运行期间,系统就按照 JCB 中的信息和作业说明书对作业进行控制。当一个作业执行结束进入完成状态时,系统负责回收已分配给它的资源,撤销该作业控制块。// JCB 的调度过程,类似于进程
作业运行的三个阶段和三种状态
作业从进入系统到运行结束,通常需要经历收容、运行和完成三个阶段。相应的作业也就有 “后备状态”、“运行状态” 和 “完成状态”。
收容阶段:操作员把用户提交的作业通过某种输入方式或 SPOOLing 系统输入到硬盘上,再为该作业建立 JCB,并把它放入作业后备队列中。相应地,此时作业的状态为“后备状态”。
运行阶段:当作业被作业调度选中后,便为它分配必要的资源和建立进程,并将它放入就绪队列。一个作业从第一次进入就绪状态开始,直到它运行结束前,在此期间都处于“运行状态”。
完成阶段:当作业运行完成、或发生异常情况而提前结束时,作业便进入完成阶段,相应的作业状态为 “完成状态”。此时系统中的 “终止作业” 程序将会回收已分配给该作业的作业控制块和所有资源,并将作业运行结果信息形成输出文件后输出。
在批处理系统中,作业进入系统后,总是先驻留在外存的作业后备队列上,因此需要有作业调度,以便将它们分批地装入内存。// 外存 -> 内存
在分时系统中,为了做到及时响应,用户通过键盘输入的命令或数据等都被直接送入内存,因而无需配置上述的作业调度机制,但也需要有某种接纳控制措施来限制进入系统的用户数目。即如果系统尚有能力处理更多的任务,将会接纳授权用户的请求,否则,便拒绝接纳。// 键入
在实时系统中,也不需要作业调度,而必需具有接纳控制措施。
先来先服务(first-come first-served,FCFS)调度算法
FCFS 是最简单的调度算法,该算法既可用于作业调度,也可用于进程度。当在作业调度中采用该算法时,系统将按照作业到达的先后次序来进行调度,或者说它是优先考虑在系统中等待时间最长的作业,而不管该作业所需执行时间的长短,从后备作业队列中选择几个最先进入该队列的作业,将它们调入内存,为它们分配资源和创建进程。然后把它放入就绪队列。
当在进程调度中采用 FCFS 算法时,每次调度是从就绪的进程队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后,进程调度程序才将处理机分配给其它进程。// 先进先出
顺便说明,FCFS 算法在单处理机系统中已很少作为主调度算法,但经常把它与其它调度算法相结合使用,形成一种更为有效的调度算法。例如,可以在系统中按进程的优先级设置多个队列,每个优先级一个队列,其中每一个队列的调度都基于 FCFS 算法。
短作业优先(short job first,SJF)的调度算法
由于在实际情况中,短作业(进程)占有很大比例,为了能使它们能比长作业优先执行而产生了短作业优先调度算法。// 减少作业的平均等待时间
短作业优先算法
SJF 算法是以作业的长短来计算优先级,作业越短,其优先级越高。作业的长短是以作业所要求的运行时间来衡量的。SJF 算法可以分别用于作业调度和进程调度。在把短作业优先调度算法用于作业调度时,它将从外存的作业后备队列中选择若干个估计运行时间最短的作业,优先将它们调入内存运行。// 最主要的问题是作业的时间无法准确计算
短作业优先算法的缺点
SJF 调度算法较之 FCFS 算法有了明显的改进,但仍然存在不容忽视的缺点:
必须预知作业的运行时间。在采用这种算法时,要先知道每个作业的运行时间。即使是程序员也很难准确估计作业的运行时间,如果估计过低,系统就可能按估计的时间终止作业的运行,但此时作业并未完成,故一般都会偏长估计。// 这一点非常麻烦
对长作业非常不利,长作业的周转时间会明显地增长。更严重的是,该算法完全忽视作业的等待时间,可能使作业等待时间过长,出现饥饿现象。
在采用 FCFS 和 SJF 算法时,人机无法实现交互。
该调度算法完全未考虑作业的紧迫程度,故不能保证紧迫性作业能得到及时处理。
优先级调度算法(priority-scheduling algorithm,PSA)
先来先服务调度算法和短作业优先调度算法的两种优先级都不能反映作业的紧迫程度。
在优先级调度算法中,基于作业的紧迫程度,由外部赋予作业相应的优先级,调度算法根据该优先级进行调度。
优先级调度算法可以保证紧迫性作业优先运行,它可作为作业调度算法,也可作为进程调度算法。当把该算法用于作业调度时,系统是从后备队列中选择若干个优先级最高的作业装入内存。
高响应比优先调度算法(Highest Response Ratio Next,HRRN)
在批处理系统中,FCFS 算法所考虑的只是作业的等待时间,而忽视了作业的运行时间。而 SJF 算法正好与之相反,只考虑作业的运行时间,而忽视了作业的等待时间。
高响应比优先调度算法则是既考虑了作业的等待时间,又考虑作业运行时间的调度算法。因此既照顾了短作业,又不致使长作业的等待时间过长,从而改善了处理机调度的性能。// 等待+运行
高响应比优先算法是如何实现的呢?
如果为每个作业引入一个动态优先级,使它随等待时间延长而增加,这将使长作业的优先级在等待期间不断地增加,等到足够的时间后,必然有机会获得处理机。该优先级的变化规律可描述为:
由于等待时间与服务时间之和就是系统对该作业的响应时间,故该优先级又相当于响应比 Rp。据此,优先又可表示为:
由上式可以看出:
如果作业的等待时间相同,则要求服务的时间愈短,其优先权愈高,因而类似于 SJF 算法,有利于短作业。
当要求服务的时间相同时,作业的优先权又决定于其等待时间,因而该算法又类似于 FCFS 算法。
对于长作业的优先级,可以随等待时间的增加而提高,当其等待时间足够长时,也可获得处理机。
因此该算法实现了较好的折中。不过在利用该算法时,每次要进行调度之前,都需要先做响应比的计算,显然会增加系统开销。// 计算机系统中的折中思想无处不在