• 在CPU的调度中,究竟采用何种调度策略以及使用何种调度算法,取决于操作系统的类型和设计目标。
  • 在批处理系统中,系统的主要设计目标是增加系统的吞吐量及提高资源的利用率,因此CPU的调度可以使用先来先服务调度算法。
  • 分时系统的设计目标重点考虑响应时间和使用计算机的公平性,CPU的调度通常采用基于时间片的轮转调度算法。
  • 在实时系统中,要保证系统对随机发生的外部事件能够及时做出响应,则CPU的调度通常采用高优先级的抢占式调度算法。

调度原则

处理机调度算法的共同目标
  • 资源利用率:为提高系统的资源利用率,应使系统中的处理机和其它所有资源都尽可能地保持忙碌状态,其中最重要的处理机利用率可用以下方法计算:
    操作系统 单处理器调度算法_操作系统
  • 公平性。公平性是指应使诸进程都获得合理的CPU 时间,不会发生进程饥饿现象。
    公平性是相对的,对相同类型的进程应获得相同的服务;但对于不同类型的进程,由于其紧急程度或重要性的不同,则应提供不同的服务。
  • 平衡性。由于在系统中可能具有多种类型的进程,有的属于计算型作业,有的属于I/O型。为使系统中的CPU和各种外部设备都能经常处于忙碌状态,调度算法应尽可能保持系统资源使用的平衡性。
    策略强制执行。对所制订的策略其中包括安全策略,只要需要,就必须予以准确地执行,即使会造成某些工作的延迟也要执行。
批处理系统的目标
  • 平均周转时间短。
    周转时间:作业从提交到完成的时间间隔。

    • 系统吞吐量高。
      吞吐量是指在单位时间内系统所完成的作业数,与批处理作业的平均长度有关。如果单纯是为了获得高的系统吞吐量,就应尽量多地选择短作业运行。
    • 处理机利用率高。对于大中型计算机,CPU价格昂贵,致使处理机的利用率成为衡量系统性能的十分重要的指标;而调度方式和算法又对处理机的利用率起着十分重要的作用。如果单纯是为使处理机利用率高,应尽量多地选择计算量大的作业运行。
  • 周转时间定义

    • 周转时间Ti

      1.平均周转时间
      操作系统 单处理器调度算法_操作系统_02

      2.带权周转时间
      操作系统 单处理器调度算法_操作系统_03

      3.平均带权周转时间
      操作系统 单处理器调度算法_操作系统_04

分时系统的目标
  • 响应时间快
  • 均衡性
实时系统的目标
  • 截止时间的保证
  • 可预测性

常用算法

先来先服务调度算法 (FCFS)

  • 按照作业/进程进入系统的先后次序进行调度,先进入系统者先调度;即启动等待时间最长的作业/进程
  • 是一种最简单的调度算法,即可用于作业调度,也可用于进程调度

几个术语

  • 到达时间、服务时间、开始时间
  • 完成时间、等待时间
  • 周转时间:完成时间-到达时间
  • 带权周转时间:周转时间/服务时间

操作系统 单处理器调度算法_操作系统_05
先来先服务(先进先出)优缺点

  • 比较有利于长作业(进程),而不利于短作业(进程)
  • 有利于CPU繁忙型作业(进程) ,而不利于I/O繁忙型作业(进程)
  • 用于批处理系统,不适于分时系统

短作业/进程优先调度算法

  • 短作业(进程)优先调度算法SJ§F,以要求运行时间长短进行调度,即启动要求运行时间最短的作业
  • 可以分别用于作业调度和进程调度
  • 短作业优先(SJF)的调度算法,是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行;而短进程优先(SPF)调度算法,则是从就绪队列中选出一估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时,再重新调度

操作系统 单处理器调度算法_操作系统_06
缺点

  • 对长作业不利。严重的是,若一长作业(进程)进入系统的后备队列(就绪队列),由于调度程序总是优先调度那些(即使是后进来的)短作业(进程),将导致长作业(进程)长期不被调度——饥饿
  • 完全未考虑作业(进程)的紧迫程度,因而不能保证紧迫性作业(进程)会被及时处理
  • 由于作业(进程)的长短只是根据用户所提供的估计执行时间而定的,而用户又可能会有意或无意地缩短其作业的估计运行时间,致使该算法不一定能真正做到短作业优先调度。

先来先服务和短作业优先算法

FCFS/SJF调度算法的性能
操作系统 单处理器调度算法_操作系统_07
由此可见,SJF能有效地降低作业的平均等待时间,提高系统吞吐量

轮转调度算法

简单的时间片轮转法(RR—Round Robin)
  • 系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片
  • 当执行的时间片用完时,由一个计时器发出时钟中断请求,调度程序便停止该进程的执行,并将其放就绪队列尾;然后,再把处理机分配给就绪队列中新的队首
  • 时间片的大小从几ms到几百ms
    操作系统 单处理器调度算法_操作系统_08

缺点:紧迫任务响应慢。
UNIX中采用:时间片+优先权

分时系统中常用时间片轮转法
  • 时间片选择问题
    • 固定时间片
    • 可变时间片
    • 时间片大小
  • 与时间片大小有关的因素
    • 系统响应时间
    • 就绪进程个数
    • CPU能力

时间片大小的确定
(1)系统对响应时间的要求
数目N和时间片q成反比,即T=Nq,因此在进程数一定时,作为分时系统首先就是必须满足系统对响应时间的要求。时间片的长短将正比于系统所要求的响应时间。
(2)就绪队列中进程的数目
在分时系统中,就绪队列上所有的进程数,是随着在终端上机的用户数目而改变的,但系统应保证,当所有终端用户上机时,获得较好的响应时间。
(3)系统的处理能力
系统的处理能力是必须保证用户键入的常用命令能在一个时间片内处理完毕,否则将无法保证得到满意的响应时间,而且会使平均周转时间及带权周转时间都很长。

在RR调度算法中,应在何时进行进程的切换:
① 若一个时间片尚未用完,正在运行的进程便已经完成,就立即激活调度程序,将它从就绪队列中删除,再调度就绪队列中队首的进程运行,并启动一个新的时间片。
② 在一个时间片用完时,计时器中断处理程序被激活。如果进程尚未运行完毕,调度程序将把它送往就绪队列的末尾。
操作系统 单处理器调度算法_操作系统_09

高响应比优先调度算法

  • 是FCFS和SJF的结合,克服了两种算法的缺点
  • 调度策略:响应比最高的作业优先启动
  • 因等待时间+服务时间=该作业的响应时间,故该优先权又相当于响应比RP。据此,又可表示为
    操作系统 单处理器调度算法_操作系统_10

对HRRF的小结

  • 等待时间相同的作业,则要求服务的时间愈短,其优先权愈高——对短作业有利
  • 要求服务的时间相同的作业,则等待时间愈长,其优先权愈高——是先来先服务
  • 长作业,优先权随等待时间的增加而提高,其等待时间足够长时,其优先权便可升到很高, 从而也可获得处理机——对长作业有利
  • 是一种折衷,既照顾了短作业,又考虑了作业到达的先后次序,又不会使长作业长期得不到服务。

缺点:要进行响应比计算,增加了系统开销

采用高响应比优先调度的进程执行示例
操作系统 单处理器调度算法_操作系统_11

优先级调度算法(priority-scheduling algorithm,PSA)

  • 对于先来先服务调度算法,作业的等待时间就是作业的优先级,等待时间越长,其优先级越高。
  • 对于短作业优先调度算法,作业的长短就是作业的优先级,作业所需运行的时间越短,其优先级越高。但上述两种优先级都不能反映作业的紧迫程度。
非抢占式优先权调度算法
抢占式优先权调度算法
  • 把处理机分配给优先权最高的进程,但在执行期间,只要出现另一个优先权更高的进程,则进程调度程序就立即停止当前进程的执行,并将处理机分配给新到的优先权最高的进程
  • 注意:只要系统中出现一个新的就绪进程,就进行优先权比较
  • 该调度算法,能更好地满足紧迫作业的要求,故而常用于要求比较严格的实时系统中,以及对性能要求较高的批处理和分时系统中

优先权的类型

  • 静态优先权

    问题:用户将优先权设的较高,对其他进程不利。 短进程优先对长进程不利。

    • 静态优先权在创建进程时确定,且在进程的整个运行期间保持不变。一般地,优先权是利用某一范围内的一个整数来表示的,例如,0~7或 0 ~255, 又把该整数称为优先数
    • 确定进程静态优先权的依据
  1. 进程类型:系统进程,用户进程
  2. 进程对资源的需求
  3. 用户要求

动态优先权

  • 具有相同优先权初值的进程,则最先进入就绪队列,其将因其动态优先权变得最高而优先获得处理机,此即FCFS算法
  • 具有各不相同的优先权初值的就绪进程,则优先权初值低的进程,在等待了足够的时间后,其优先权便可能升为最高,从而可以获得处理机
  • 随进程的推进或随其等待时间的增加而改变,以获得更好的调度性能
  • 可规定,在就绪队列中的进程,随其等待时间的增长,其优先权以速率a提高    
  • 当采用抢占式优先权调度算法时,如果再规定当前进程的优先权以速率b下降,则可防止一个长作业长期地垄断处理机

操作系统 单处理器调度算法_操作系统_12

多级反馈队列调度算法

设置多个就绪队列,并为各个队列赋予不同的优先级

  • 第一个队列的优先级最高,第二个队列次之,其余各队列的优先权逐个降低
  • 该算法赋予各个队列中进程执行时间片的大小也各不相同,在优先权愈高的队列中,为每个进程所规定的执行时间片就愈小。例如,第二个队列的时间片要比第一个队列的时间片长一倍,……,第i+1个队列的时间片要比第i个队列的时间片长一倍
  • 系统中设置多个就绪队列,每个队列对应一个优先级。
  • 各就绪队列中进程的运行时间片不同,高优先级队列的时间片小,低优先级队列的时间片大。时间片依次为8ms、16ms、32ms……
  • 新进程进入系统后,先放入第1个队列的末尾。
    系统先运行第1个队列中的进程,只有在高优先级队列空的情况下,才从下一级就绪队列中选取进程运行。
  • 每一个队列中的进程调度采用先来先服务FCFS算法。
  • 当一个等待终端输入的进程被唤醒时,它被转到最高优先级队列中,当一个等待磁盘I/O或网卡数据的进程就绪时,它被转到次优先级队列中。

操作系统 单处理器调度算法_操作系统_13
注意

  • 仅当第1~(i-1) 队列均空时,才会调度第i队列中的进程运行
  • 第 i 队列中某进程正在运行时,又有新进程进入优先权较高的队列( 第1 ~ (i - 1) 中的任何一个队列 ),则此时新进程将抢占正在运行进程的处理机,调度程序把正在运行的进程放回到第i队列的末尾
  • 第 i 队列中某进程正在运行时,该进程因等待事件发生而进入阻塞队列,等待事件发生后,调度程序把进程放回到第 i 队列的末尾
多级反馈队列调度算法的性能
  • 终端型作业用户

    • 终端型作业用户所提交的作业多属于交互型作业,通常较小,系统只要能使这些作业在第一队列所规定的时间片内完成即可
  • 短批处理作业用户

    • 若在第1队列中执行一个时间片即可完成,便可获得与终端型作业一样的响应时间
    • 如在第一个队列中不能完成,只需在第2、3队列中各执行一个时间片
  • 长批处理作业用户

    • 长作业将依次在第1,2,3…,n队列中执行,最终按轮转方式运行