Bootstrap

OS 操作系统 处理器调度

OS 操作系统 处理器调度

(这一章的重点是六个短程调度的算法:FCFS、RR、SRN、SRT、HRRN、Feedback;只介绍单处理器的调度)

调度的种类 Three-Level Scheduling

长程调度 Long-Term Scheduling

当一个新的进程被创建时,需要对是否将其加入进程集做出决策。既然长程调度决定接纳哪一个进程到系统内进行处理,就决定了系统的多道程序度和并发度。

需要对两类进程的数目和比例作出权衡考虑:

  • 受处理器限制的进程 Processor-bounded processes:主要做计算工作,偶尔才会用 I/O

  • 受 I/O 限制的进程 I/O-bounded processes :使用 I/O 设备的时间长于用 CPU 的时间

中程调度 Medium-Term Scheduling

中程调度就是 swapping 的一部分,针对的是内存资源,决定将哪些进程换入、换出内存。swapping 也是基于对多道程序度的管理的需要。

短程调度 Short-Term Scheduling

短程调度就是 CPU 的分派程序,决定应当将处于就绪态的进程中的哪一个作为 CPU 执行的下一个进程。时三类调度中执行最频繁的调度级别。

请添加图片描述

短程调度 Short-Term Scheduling

调度准则 Criteria

调度算法的成功与否取决于,是否能让进程保持 CPU-I/O 脉冲循环:

  • 进程往往以一个 CPU burst 开始执行,接着是 CPU burst 和 I/O burst 交替出现;最后以一个 CPU burst 调用系统调用,结束进程
  • CPU 的速度增长得比磁盘等 I/O 设备要快,因此受 I/O 限制的进程比例越来越大

抢占式调度 VS 非抢占式调度 Non-preemptive vs Preemptive Scheduling

CPU 在以下几种情况时需要作出调度决策:

  1. 当前正在运行的进程进入阻塞态(可能是在等待 I/O 或者等待其他进程发生动作)

  2. 当前正在运行的进程结束了

  3. 当某个(外部)中断出现(可能是某个优先级比较高的进程锁等待的外部事件发生了)

  4. 当某个进程从阻塞态切换到就绪态(可能它的优先级比较高)

抢占式调度 Preemptive Scheduling: 当前正在运行的进程可能会被打断进入就绪态(前面提到的四种情况都有可能需要调度)

  • 优点:没有进程能够垄断处理器,因此可以提供更好的服务
  • 缺点:开销大,需要更好的调度算法和硬件支持来减少开销

非抢占式 Nonpreemptive Scheduling: 只要一个进程在运行就可以一直运行,直到它主动等待、阻塞,或者主动结束时才需要作出调度(只有前面提到的第一、二种情况需要调度)

调度算法的目标 Scheduling Algorithm Goals

所有系统

  • Fairness:类似的进程应当被相同地对待,并且不能让任何进程经受 starvation
  • Enforcing Priorities :进程间需要有优先级,特权进程需要被优先执行
  • Balancing Resources: 尽量充分利用所有资源,不要空闲

批处理系统 Batch System:

  • Throughput: 吞吐量,每个单位时间内能够完成多少进程数
  • Turnaround Time: 周转时间,从用户提交作业到产出结果的时间
  • Processor Utilization: 处理器的利用率(这对于共享系统来说更重要,对一些单用户的系统或者实时系统则不是那么重要)

交互式系统 Interactive System:

  • Response Time: 响应时间,从用户提交请求到开始有应答的时间;这是最重要的一条标准
  • Predictability / Proportionality: 对于同一作业来说,不论当前系统的繁忙程度如何,其周转时间和相应时间应该是比较均匀的、变化较小的,这样可预测性较好。

实现策略

Selection Function

有一个专门的选择函数用于从就绪的进程种选择下一个来执行,选择的标准有:

  • 优先级 Priority
  • 资源需求 Resource Requirements
  • 执行特点 Execution Characteristic
    • w = 该进程存在的时间,包括等待和运行的时间
    • e = 该进程已经运行的时间
    • s = 该进程要求的总的服务时间,包括 e 在内
优先级 Priorities

常常使用优先级来实现调度算法:

  • 调度器总是会优先选择优先级较高的进程来运行
  • 对于每一个优先级,都有相应的就绪队列用于存放同一登记的、处于就绪态的进程
  • 问题:低优先级的进程可能会出现 starvation;为了避免 starvation,可以依据等待时间和执行记录来调整的进程的优先级

请添加图片描述

短程调度策略 Short-Term Scheduling Policies

评价指标

主要介绍六种短程调度策略,都以以下的进程作为例子:

ProcessArrival TimeService Time
A03
B26
C44
D65
E82

**Turnaround Time(TAT)周转时间:**从进程进入系统到最终完成的时间(Finish Time - Arrival Time)

Normalized Turnaround Time 归一化周转时间: TAT / service time(周转时间和处理时间的比例)

  • 最小值为 1 :当归一化周转时间为 1 时,代表服务质量最好,越大则服务质量下降;
  • 归一化周转时间时最常用的评价调度策略的指标,因为需要更长处理时间的进程应当忍受更长的等待时间

① First-Come-First-Served (FCFS)

算法: (非抢占式)使用一个就绪队列,新进入就绪态的进程加入队尾;当前进程停止运行时,选择队头(即等待时间最长)的进程来运行

请添加图片描述

优点: 实现简单,对处理时间较长的进程表现好;

缺点: FCFS 偏爱受 CPU 限制的进程,最终可能导致对 CPU 的使用率和对 IO 设备的使用率都下降。(因为受 IO 限制的进程每次使用 CPU 的时间很短,就又要进行 IO 操作,进入等待队列,导致服务质量下降,进而导致 IO 的利用率也降低;最后当受 CPU 限制的进程运行完后,往往只剩下受IO限制的进程,又导致 CPU 的利用率降低)

(FCFS 的缺点提醒我们应当让使用资源时间较短的进程拥有更高的优先级)

总结: FCFS 对于单处理器来说并不是一个很好的选择,经常用于搭配其他的调度策略(例如 FeedBack)一起使用。

② Round-Robin(轮转) / Time Slicing(时间分片)

算法: (抢占式)也有一个类似 FCFS 的队列机制;当一个进程新进入运行态时启动时钟,退出时关闭;时钟每隔一定时间就产生中断,因此每个进程最多能运行一个定长的时间片。

关键: 时间片长度的选择

  • 如果太长,可以考虑极端情况,那么变得和 FCFS 一样;
  • 如果太短,可以考虑极端情况,进程间切换的时间比时间片还长,得不偿失。

请添加图片描述

优点: RR 在分时系统或者交易处理系统方面尤为高效;

缺点: Unfairness,时间片对于 FCFS 的问题解决是不彻底的,受 IO 限制的进程的优先级还是没有得到提升。因此受 IO 限制的进程表现差, IO设备利用率低,进程间的响应时间差距大。

Virtual Round-Robin(VRR)

**算法: **(作为 RR 的改进策略)在原来队列的基础上再引入一条辅助队列,并且让辅助队列比原先的队列优先级更高:

  • 主要队列:当进程从运行态切换到就绪态时,加入该队列;

  • 辅助队列:当进程从阻塞态切换到就绪态时,加入该队列。

③ Shortest Process Next(SPN) / Shortest Job First

算法:(非抢占式)下一个执行的进程为预计使用 CPU 时间最短的进程(即队列变成了一个以时间期望为 key 的优先队列)

请添加图片描述

优点: 与 FCFS 相比表现好很多;当所有进程同时到达就绪队列时,SPN 所有非抢占式调度算法中最优解(可以证明);

缺点: 对于使用 CPU 时间较长的进程,有可能出现 starvation;对于 FCFS 偏好长进程的优化还不够彻底(主要是因为没有抢占机制);需要估计每个 busrt 的运行时间。

关键: 如何估计运行时间(例如,可以按照运行时间的历史记录,为每个进程保存一个每个 burst 的运行平均时间)

④ Shortest Remaining Time

算法: (抢占式,相当于是 SPN 的抢占版本)

  • 抢占时机:新的进程进入就绪队列时
  • 抢占原则:比较新的进程与当前运行进程的预期剩余时间,谁短谁运行

请添加图片描述

优点: 解决了 FCFS 对于长时间进程的偏爱;相比于 RR,SRT 不会产生额外的无用的中断

Priority Scheduling 优先级调度

算法: 按照某种优先级进行调度,同种优先级的则按照 FCFS 规则排列;可以是抢占式的也可以是非抢占式的

SPN 就是优先级调度的一个特例,优先级为下一个 burst 的预计时长;

受 IO 限制的进程应当拥有更高的优先级。

⑤ Highest Response Ratio Next

算法: (非抢占式)考虑预计响应比,响应比越大的进程先执行(相对等待时间越长的进程越先执行)

响应比: R = w + s s R=\frac{w+s}{s} R=sw+s w w w 是进程等待的时间, s s s 是预计的服务时间(随着 w w w 的增大, R R R 增大)(响应比就是归一化周转时间)

请添加图片描述

优点: 相比于 SPN 或 SRT,不会发生 starvation !

缺点: 和 SPN 或 SRT 一样需要估计 service time

⑥ Feedback(反馈)

思想:(抢占式)SPN、SRT 和 HRRN 对于服务时间的估计并不总是能被实现,于是我们可以根据进程上一次 CPU burst 的表现来及时调整进程的优先级(即关注于进程当前已经运行的时间,而不是预计的剩余时间)最终表现为更偏向于新的、短 burst 的进程。

算法: 使用多个队列 RQ0-n,每一级队列内部使用 RR 策略;当某个进程运行时,将当前时间片全部用完,那么它将被下放到下一级队列;新加入系统的进程进入第一级队列,总体情况是越来越往下移动。

(时间片用完,说明它对 CPU 时间的需求越大,因此要降低它的优先级)

请添加图片描述

缺点: 长时间的进程会发生 stavation

变体:

  • 优先级越低的队列时间片长度越长,例如 RQi 的时间片长度可以是 2 i 2^i 2i 个单位(因为优先级越低说明它对 CPU 时间的需求越大)
  • 可以用 HRRN 的机制,对当前队列等待时间过长的进程提升其优先级,到上一层队列

总结

请添加图片描述

;