基本概念
高级调度/作业调度/长程调度:从后备队列中选择多个作业调入内存,为它们创建进程并分配必要的资源,然后链接到就绪队列上。(主要用于批处理系统)
低级调度/进程调度/短程调度:按照某种调度算法,从内存的就绪队列中选择一个就绪进程获得CPU,并分派程序执行进程切换的具体操作。
中级调度/交换调度/中程调度:按照一定的策略,把内存中的进程交换到外存交换区,或将外存交换区中的挂起进程调入内存。(为缓解内存压力)
非抢占式调度方式/非剥夺式调度方式:不允许其他进程抢占正在运行的进程的CPU的使用权(实现简单、系统开销小;难以满足有紧急任务的进程要求)分时系统、实时系统不适用。
抢占式调度方式/剥夺式调度方式:允许调度程序根据某个抢占原则(优先权原则、短进程优先原则、时间片原则),强行抢占正在运行的进程的CPU的使用权。
资源利用率:
公平性:在用户或系统没有特殊要求时,进程应该被公平对待,避免出现进程饥饿现象。
各类资源的平衡利用:尽可能使系统中的所有资源都处于忙碌状态
策略强制执行:准确执行,即使会造成某些工作的延迟也要执行
优先级:保证某些紧急的作业能够得到及时处理
周转时间:从作业提交给系统开始,到作业完成为止。包括作业在外存后备队列中等待的时间、相应进程进入内存后在就绪队列中等待的时间、进程在CPU上执行的时间及进程等待I/O操作完成的时间。(t1:提交给系统的时刻;t2:完成的时刻;Tw:作业在系统中的等待时间;Ts:作业在系统中的运行时间)
带权周转时间:
系统吞吐率:单位时间内系统完成作业的个数
操作系统类型和设计目标
批处理系统:资源利用率高、平均周转时间短、系统吞吐量大
分时操作系统:交互性好、响应时间短
实时操作系统:能够处理紧急任务、保证时间要求
常用调度算法
例1: 作业流
先来先服务调度算法(FCFS)
按照作业或进程到达系统的先后次序进行调度(可用于高级调度、低级调度,非抢占式调度方式)
例1 使用FCFS调度算法进行计算
开始执行时间 = 上一个进程的完成时间(初值为0)
完成时间 = 开始执行时间 + 服务时间
周转时间 = 完成时间 - 到达时刻
带权周转时间 = 周转时间➗服务时间
FCFS算法有利于长进程,不利于短进程,有利于CPU繁忙的进程,不利于I/O操作繁忙的进程,很少单独使用。
短进程(作业)优先调度算法(SPF、SJF)
SPF:从后备队列中选择一个或多个估计运行时间最短的作业,将它们调入内存运行
SJF:从就绪队列中选择一个或多个估计运行时间最短的作业,将CPU分派给它,使其执行
可用于高级调度、低级调度
例1 使用非抢占式的SPF调度算法进行计算
所以调度顺序为A、B、E、C、D
开始执行时间 = 上一个进程的完成时间(初值为0)
完成时间 = 开始执行时间 + 服务时间
周转时间 = 完成时间 - 到达时刻
带权周转时间 = 周转时间➗服务时间
注:当A进程完成时,只有B进程到达,所以B进程先服务;B进程完成时,C、D、E进程均已到达,因此按照短进程优先原则,先对E进程服务(E进程的服务时间为2,C进程的服务时间为4,D进程的服务时间为5);以此类推。
SPF/SJF算法缩短进程的平均周转时间,不利于长进程 (可能会导致长进程的饥饿现象),没有考虑进程的紧迫程度,不利于处理紧急任务,不能准确的估算进程所需的运行时间。
轮转调度算法(RR)
RR调度算法:用于低级调度专为分时操作系统设计。假设系统有n个就绪进程,RR 调度算法是将CPU的处理时间划分成n个太小相等的时间片,系统将所有的就绪进程按先来先服务原则排成一个就绪队列,每次调度时将就绪队列的队首进程分派到CPU上执行,并令其只能执行一个时间片;当时间片用完时,调度程序中止当前进程的执行,将它送到就绪队列的队尾,再调度下一个队首进程执行。RR调度算法是以时间片为单位轮流为每个就绪进程服务的,从而保证所有的就绪进程在一个确定的时间段内,都能够获得一次CPU 执行。(抢占式调度算法)
优先级调度算法
-
非抢占式优先级调度算法:系统一旦把CPU分派给优先级最高的就绪进程后,该进程便一直执行下去,直到完成;或因某事件阻塞使该进程放弃CPU时,系统方可调度另一优先级最 高的进程。(主要用于批处理系统,也可用于某些对实时性要求不严的实时系统中)
-
抢占式优先级调度算法:系统同样将CPU分派给优先级最高的就绪进程,使之执行。但在执行期间,如果出现一个优先级更高的就绪进程,该进程可以抢占CPU,使正在执行的低优先级进程中断执行。当然,每当一个进程就绪后,系统都要按照优先级抢占原则判断是否进行抢占,导致调度开销大为增加。(常用于比较严格的实时系统及对性能要求较高的批处理和分时系统中)
最高相应比优先调度算法(HRRN)
HRRN:同时考虑每个作业的等待时间和要求服务时间,从中选出响应比最高的作业投入执行。(非抢占式调度算法)
多级队列调度算法
主要思想:组建多个就绪队列,进程就绪后根据其类型或性质链接到相应的就绪队列,不同的就绪队列可以设置不同的优先级,同一个就绪队列中的进程也可以设置不同的优先级,允许对每个就绪队列实施不同的调度算法。
多级反馈队列调度算法 (FB)
算法描述:
- 系统设置多个就绪队列,每个就绪队列具有不同的优先级,第1级就绪队列的优先级最高,以下各级就绪队列的优先级逐次降低。优先级高的队列会优先调度执行。同一就绪队列的进程优先级相同,按照先来先服务原则排序调度。
- 为每个队列设置大小不同的时间片。为优先级最高的第1级就绪队列中的进程设置的时间片最小,随着队列的级别增加,其进程的优先级逐级降低,但被赋予的时间片逐级增加。通常,时间片成倍增长。
- 新进程先进入第一个就绪队列,并按先来先服务原则等待调度。当调度到该进程时,该进程若能在一个时间片内完成,便可退出:若它在规定的时间片内未能完成,就转人下一级队列末尾等待调度,依此类推。在第n个队列中便采取时间片轮转的方式运行。
- 系统总是从第一个就绪队列里的进程开始调度;只有前i-1级就绪队列都为空时,才调度第i级就绪队列中的进程。当一个进程在运行时,更高优先级的就绪队列中来了一 个进程,那么高优先级的进程可以抢占当前运行进程的CPU。被抢占的进程可以排到原就绪队列末尾,也可仍留在队首,以便下次重新获得CPU时把原先分配到的时间片的剩余部分用完。
习题
例2 :假设4个作业到达系统的时间及所需服务的时间如下表所示:
参考:《计算机操作系统》电子工业出版社