简介
在操作系统,作业控制一般分为联机作业控制和脱机作业控制,作业周期控制是对脱机作业控制中作业周期进行控制。脱机作业控制,用户把他对作业运行的控制意图,连同源程序和操作数据,甚至包括发生故障时的处理手段一起输入到系统中,由系统根据其意图来控制整个作业的运行。
相应地,系统将作业的生命周期分为四个阶段:进入阶段、调度阶段、运行阶段撤离阶段,对应地,作业也有进入、后备、运行和撤离四个状态。分别有四个进程建议控制,从作业进入系统起,其状态的转变及其过程都由系统加以控制,用户与操作员均无需干预。1在作业的生命周期四个阶段中,作业周期控制主要作用在调度阶段,这影响到一个作业要多长时间才能完成。因此,作业周期控制与作业调度密切相关。
作业调度概述作业调度的主要功能是根据作业控制块中的信息,审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中选取某些作业调入内存,并为它们创建进程、分配必要的资源。然后再将新创建的进程插入就绪队列,准备执行。因此,有时也把作业调度称为接纳调度(Admission Scheduling)。
对用户而言,总希望自己作业的周转时间尽可能的少,最好周转时间就等于作业的执行时间。然而对系统来说,则希望作业的平均周转时间尽可能少,有利于提高 CPU 的利用率和系统的吞吐量。为此,每个系统在选择作业调度算法时,既应考虑用户的要求,又能确保系统具有较高的效率。在每次执行作业调度时,都须做出以下两个决定。1) 决定接纳多少个作业:作业调度每次要接纳多少个作业进入内存, 取决于多道程序度(Degree of Multiprogramming),即允许多少个作业同时在内存中运行。2) 决定接纳哪些作业:应将哪些作业从外存调入内存,这将取决于所采用的调度算法。2
调度算法先来先服务
先来先服务(FCFS, First Come First Serve)是最简单的调度算法,按先后顺序进行调度。
定义:按照作业提交或进程变为就绪状态的先后次序,分派CPU;当前作业或进程占用CPU,直到执行完或阻塞,才出让CPU(非抢占方式)。在作业或进程唤醒后(如I/O完成),并不立即恢复执行,通常等到当前作业或进程出让CPU。适用场景:比较有利于长作业,而不利于短作业。有利于CPU繁忙的作业,而不利于I/O繁忙的作业。
轮转法
轮转法(Round Robin)是让每个进程在就绪队列中的等待时间与享受服务的时间成正比例。定义:将系统中所有的就绪进程按照FCFS原则,排成一个队列。每次调度时将CPU分派给队首进程,让其执行一个时间片。时间片的长度从几个ms到几百ms。在一个时间片结束时,发生时钟中断。调度程序据此暂停当前进程的执行,将其送到就绪队列的末尾,并通过上下文切换执行当前的队首进程。进程可以未使用完一个时间片,就出让CPU(如阻塞)。时间片长度变化的影响:
过长->退化为FCFS算法,进程在一个时间片内都执行完,响应时间长。
过短->用户的一次请求需要多个时间片才能处理完,上下文切换次数增加,响应时间长。
对响应时间的要求:T(响应时间)=N(进程数目)*q(时间片)
就绪进程的数目:数目越多,时间片越小
系统的处理能力:应当使用户输入通常在一个时间片内能处理完,否则使响应时间,平均周转时间和平均带权周转时间延长。
多级反馈队列
多级反馈队列算法(Round Robin with Multiple Feedback)是轮转算法和优先级算法的综合和发展。定义:设置多个就绪队列,分别赋予不同的优先级,如逐级降低,队列1的优先级最高。每个队列执行时间片的长度也不同,规定优先级越低则时间片越长,如逐级加倍。新进程进入内存后,先投入队列1的末尾,按FCFS算法调度;若按队列1一个时间片未能执行完,则降低投入到队列2的末尾,同样按FCFS算法调度;如此下去,降低到最后的队列,则按“时间片轮转”算法调度直到完成。仅当较高优先级的队列为空,才调度较低优先级的队列中的进程执行。如果进程执行时有新进程进入较高优先级的队列,则抢先执行新进程,并把被抢先的进程投入原队列的末尾。