Version: Next

处理机调度

处理机调度的三个层次:

  • 高级调度——作业调度
  • 中级调度——内存调度
  • 低级调度——进程调度

补充

  • 进程的 挂起态
  • 七状态模型

调度的基本概念

  • 当有一堆任务要处理,而资源有限,无法同时处理:需要确定 某种规则决定 处理这些任务的 顺序,这就是 调度 研究的问题

处理机调度的概念

  • 在多道程序系统中,进程的数量往往是多于处理机的个数的,这样不可能同时并行地处理各个进程
  • 处理机调度:从就绪队列中 按照一定的算法选择一个进程,并 将处理机分配给它 运行,以实现进程的并发执行

进程的七状态模型

image-20210427135553331

高级调度——作业调度

按照一定原则,从外存上处于后背队列的作业中挑选出一个或多个作业,给他们分配内存等必要资源,并建立相应的进程(建立 PCB),使他们 获得竞争处理机的权利

  • 高级调度是外存与内存之间的调度,每个作业只调入一次,调出一次
  • 作业调入时会建立相应的 PCB,作业调出时才撤销 PCB
  • 高级调度主要是指调入的问题,因为只有调入的时机需要操作系统来确定,调出时机必然是作业运行结束之后

中级调度——内存调度

引入虚拟存储技术后,可以将暂时不能运行的进程调到外存等待,等它们重新具备了运行条件且内存有有所空闲时,再重新调入内存。这样做的目的是为了 提高内存利用率系统吞吐量

进程挂起态

  • 暂时调到外存等待的进程状态为 挂起态
  • PCB 并不会一起调到外存,而是会常驻在内存中
  • PCB 中会记录进程数据在外存中的存放位置,进程状态等信息,操作系统通过内存中的 PCB 来保持对各个进程的监控、管理
  • 被挂起的进程 PCB 会被存放到 挂起队列
  • 中级调度(内存调度),就是要决定将哪个处于挂起态的进程重新调入内存
  • 一个进程可能被多次调出、多次调入内存,因此中级调度发生的频率要比高级调度更高

低级调度——进程调度

  • 主要任务是按照某种方法、策略从就绪队列中选取一个进程,将处理机分配给它
  • 进程调度是操作系统中 最基本的一种调度,在一般的操作系统中都必须配置进程调度
  • 进程调度的频率很高,一般几十毫秒一次
要做什么调度发生时刻发生频率对进程状态的影响
高级调度
作业调度
按照某种规则,从后备队列中选择
合适的作业将其调入内存,并为其创建进程
外存→内存
面向作业
最低无→创建态→就绪态
中级调度
内存调度
按照某种规则,从挂起队列中选择
合适的进程将其数据调回内存
外存→内存
面向进程
中等挂起态→就绪态
阻塞挂起→阻塞态
低级调度
进程调度
按照某种规则,从就绪队列中选择
一个进程将其分配给处理机
内存→CPU最高就绪态→运行态

进程调度时机

进程调度(低级调度):按照一定的算法从就绪队列中选择一个进程为其分配处理机

需要进行 进程调度与切换的情况

  1. 当前运行的进程 主动放弃 处理机
    • 进程正常终止
    • 进程运行过程中发生异常终止
    • 进程主动请求阻塞(如等待 IO)
  2. 当前运行的进程 被动放弃 处理机
    • 分给进程的时间片用完
    • 有更紧急的事需要处理(如 IO 中断)
    • 有更高优先级的进程进入就绪队列

不能进行 进程调度与切换的情况

  1. 处理中断的过程中:中断处理过程复杂,与硬件密切相关,很难做到在中断处理过程中进行进程切换
  2. 进程在 操作系统内核程序临界区
  3. 原子操作过程中(原语)

临界资源与临界区

  • 正确表述:进程在操作系统 内核程序临界区 中不能进行调度和切换
  • 错误表述:进程处于 临界区 时不能进行处理机调度
  • 临界资源:一个时间段内只允许一个进程使用的资源,各进程需要 互斥地 访问临界资源
  • 临界区:访问临街资源的那段代码
  • 内核程序临界区:一般用来访问 某种内核数据结构。比如进程的就绪队列(由就绪进程的 PCB 组成)

进程切换

狭义调度与切换的区别

  • 狭义的进程调度:指从就绪队列中 选中一个要运行的过程,这个进程可以是刚刚被暂停执行的进程,也可能是另一个进程,后一种情况就要进行 进程切换
  • 进程切换:指一个进程让出处理机,由另一个进程占用处理机的过程
  • 广义进程调度:包含了 选择一个进程进程切换 两个步骤

进程切换的过程

进程切换的过程主要完成了:

  1. 对原来运行进程各种数据的保存
  2. 对新的进程各种数据的恢复

进程的切换是由代价的,因此如果过于频繁的进行进程调度、切换,必然会降低整个系统的效率

进程切换的方式

非剥夺调度方式(非抢占式)

  • 只允许进程主动放弃处理机
  • 在运行过程中即便有更紧迫的任务到达,当前进程依然会继续使用处理机,直到该进程终止或主动要求进入阻塞态

剥夺调度方式(抢占式)

  • 当一个进程正在处理机上运行时,如果有一个更重要或更紧急的进程需要使用处理机,则立刻展厅正在执行的过程,将处理机分配给更重要、更紧迫的那个进程

调度算法的评价指标

  • CPU 利用率:利用率 = 忙碌时间 / 总时间

  • 系统吞吐量:单位时间内完成作业的数量 吞吐量 = 总完成作业数 / 总时间

  • 周转时间:作业被提交给操作系统开始,到作业完成为止的这段时间间隔

    • 包括四个部分:1. 作业在外存后备队列上等待作业调度(高级调度)的时间。 2. 进程在就绪队列上等待进程调度(低级调度)的时间。 3. 进程在 CPU 上执行的时间。 4. 进程等待 I/O 操作完成的时间。 后三项在一个作业的整个处理过程中,可能多次发生

    • 周转时间 = 作业完成时间 - 作业提交时间

    • 平均周转时间 = 各作业周转时间和 / 作业数

    • 带权周转时间 = (作业完成时间 - 作业提交时间) / 作业实际运行时间

    • 平均带权周转时间

  • 等待时间:指 进程 / 作业 处于 等待处理机状态时间之和,等待时间越长,用户满意度越低

  • 响应时间:从用户提交请求到首次产生响应经过的时间


调度算法

先来先服务 FCFS

算法思想

  • 主要从公平的角度考虑

算法规则

  • 按照作业/进程到达的先后顺序进行服务

应用场合

  • 用于作业调度时:考虑的是哪个作业先到达后备队列
  • 用于进程调度时:考虑的是哪个线程先到达就绪队列

是否可抢占

  • 非抢占式算法

优缺点

  • 优点:公平、算法实现简单
  • 缺点:排在长时间(进程)后面的短作业需要等待很长时间,带劝周转时间很大,对短作业来说用户体验不好。即 对长作业有利,对短作业不利

是否会导致饥饿

  • 饥饿:某进程/作业长期得不到服务
  • 不会导致饥饿

短作业优先 SJF

算法思想

  • 追求最少的平均等待时间,最少的平均周转时间、最少的平均带权周转时间

算法规则

  • 最短的作业/进程优先得到服务,最短是指要求服务时间最短

应用场合

  • 用于作业调度,也可用于进程调度
  • 用于进程调度时,称为 短进程优先 SPF 算法

是否可抢占

  • 默认为非抢占式
  • 存在抢占式版本——最短剩余时间优先算法 SRTN Shortest Remaining Time Next

优缺点

  • 优点:“最短的”平均等待时间、平均周转时间
  • 缺点:不公平。对短作业有利,对长作业不利

是否会导致饥饿

  • 可能会

高响应比优先 HRRN

算法思想

  • 综合考虑作业/进程的等待时间和要求服务时间

算法规则

  • 在每次调度时先计算各个作业/进程的响应比,选择响应比最高的作业/进程为其服务
  • 响应比 = (等待时间 + 要求服务时间) / 要求服务时间

应用场合

  • 用于作业调度,也可用于进程调度

是否可抢占

  • 非抢占式

优缺点

  • 综合考虑了等待时间和要求服务时间
  • 等待时间相同时,要求服务时间短的优先,SJF 的优点
  • 要求服务时间相同时,等待时间长的优先,FCFS 的优点
  • 对于长作业来说,随着等待时间越来越大,其响应比也来越大,从而避免了长作业饥饿问题

是否会导致饥饿

  • 不会

算法思想/规则是否抢占优点缺点考虑等待时间/运行时间导致饥饿
FCFS主要从公平的角度考虑
按照作业/进程到达的先后顺序进行服务
非抢占式公平,实现简单对短作业不利等待时间 √
运行时间 ×
不会
SJF/SPF追求最少的平均等待时间,最少的平均周转时间、最少的平均带权周转时间
最短的作业/进程优先得到服务,最短是指要求服务时间最短
默认为非抢占
抢占式版本为最短剩余时间优先算法 SRTN
“最短的”平均等待时间/周转时间堆场作业不利,可能导致饥饿。难以做到真正恶短作业优先等待时间 ×
运行时间 √
HRRN综合考虑作业/进程的等待时间和要求服务时间
在每次调度时先计算各个作业/进程的响应比,选择响应比最高的作业/进程为其服务
非抢占式上述两种算法的权衡这种,综合考虑等待时间和运行时间等待时间 √
运行时间 √
不会
注意

这几种算法主要关心对用户的公平性、平均周转时间、平均等待时间等评价系统整体性能的指标,但不关心响应时间,也不区分任务的紧急程度,因此对用户来说,交互性很糟糕

  • 这三种算法一般适用于早期的批处理系统
  • 接下来介绍适用于交互式系统的调度算法

时间片轮转调度算法 Round-Robin

算法思想

  • 公平的、轮流的为各个进程服务,让每个进程在一定时间间隔内都可以得到响应

算法规则

  • 按照各进程到达就绪队列的顺序,轮流让各个进程执行一个 时间片
  • 若进程未在一个时间片内执行完毕,则剥夺处理机,将进程重新放到就绪队列尾部重新排队

应用场合

  • 用于进程调度(只有作业放入了内存建立了响应进程后,才能被分配处理机时间片)

是否可抢占

  • 抢占式
  • 由时钟装置发出 时钟中断 来通知 CPU 时间片已到

优缺点

  • 优点:公平、响应快,适用于分时操作系统
  • 缺点:频繁的进程切换,增加系统开销;不区分任务的紧急程度

是否会导致饥饿

  • 不会

优先级调度算法

算法思想

  • 随着计算机的发展,特别是实时操作系统的出现,越来越多的应用场景需要根据任务的紧急程度来决定处理顺序

算法规则

  • 每个作业/进程都有各自的优先级,调度时选择优先级最高的作业/进程

应用场合

  • 作业调度、进程调度
  • 也可用于 IO 调度

是否可抢占

  • 抢占式、非抢占式都有

优缺点

  • 优点:用优先级区分紧急程度、重要程度,适用于实时操作系统;可灵活的调整对各作业、进程的偏好程度
  • 缺点:若源源不断的有高优先级进程到来,则可能导致解

是否会导致饥饿

  • 可能会

多级反馈队列调度算法

算法思想

  • 对其他调度算法的折中权衡

算法规则

  1. 设置多级就绪队列,各级队列优先级从高到低,时间片从小到大
  2. 新进程到达先进入第 1 级队列,按 FCFS 原则排队等待被分配时间片,若用完时间片进程还未结束,则 进程进入下一级队列队尾;如果此时就是最下级的队列,则重新放回该队列队尾
  3. 只有第 k 级队列为空时,才会为 k+1 级队头的进程分配时间片

应用场合

  • 用于进程调度

是否可抢占

  • 抢占式
  • 在 k 即队列进程运行过程中,若更上级的队列 (1 ~ k-1 级)中进入了一个新进程,则由于新进程处于优先级更高的队列中,因此新进程会抢占处理机,原来运行的进程放回 k 级队列队尾

优缺点

  • 优点:
    • 对各类型进程相对公平(FCFS 的优点)
    • 每个新到达的进程都可以很快得到响应 (Round-Robin 优点)
    • 短进程只用较少的时间就可以完成(SPF 的优点)
    • 不必实现估计进程的运行时间(避免用户作假)
    • 可灵活调整对各种进程的偏好程度,比如 CPU 密集型进程、I/O 密集型进程

是否会导致饥饿

  • 可能会

算法思想/规则是否抢占优点缺点导致饥饿
时间片轮转公平的、轮流的为各个进程服务,让
每个进程在一定时间间隔内都可以得
到响应。按照各进程到达就绪队列的
顺序,轮流让各个进程执行一个 时间片若进
程未在一个时间片内执行完毕,则剥夺处
理机,将进程重新放到就绪队列尾部重新排队
抢占式公平、适用于分时系统频繁切换进程带来系统开销不会
优先级调度每个作业/进程都有各自的优先级,调
度时选择优先级最高的作业/进程
都有区分优先级、适用于实时系统可能导致饥饿
多级反馈队列设置多级就绪队列,各级队列优先级从
高到低,时间片从小到大。新进程到达
先进入第 1 级队列,按 FCFS 原则排
队等待被分配时间片,若用完时间片进程
还未结束,则 进程进入下一级队列
队尾
;如果此时就是最下级的队列,则重新
放回该队列队尾。只有第 k 级队列为空时,才会为 k+1 级队头的进程分配时间片
抢占式牛逼可能导致饥饿