【操作系统】调度Scheduling

782 阅读8分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第12天,点击查看活动详情

要解决的问题:

  • 何时(调度机会)何时将CPU分配给进程?
  • (调度算法)分配原则是什么?
  • 如何(上下文切换)如何分配CPU?

什么是调度: 决定哪个进程/线程应该占用资源(CPU、磁盘等)

何时调度:

  • 新进程开始,决定运行父进程还是子进程
  • 正在运行的进程退出
  • 正在运行的进程被阻塞(I/O或者信号量原因)
  • 输入/输出中断(某些进程将准备就绪)
  • 时钟中断(例如,每10毫秒一次)

调度算法目标:所有系统的

  • 公平: 任何进程都不应挨饿。
  • 策略实施: 确保所述政策得到执行。
  • 效率: 使资源尽可能繁忙

*七状态模型

*长期、中期、短期调度

  • 长期调度器将尝试保持处理器绑定和I/O绑定进程的混合。
  • 中期调度:根据管理多道程序的需要交换决策。
  • 短期调度:确定下一个将执行哪个进程(也称为CPU调度):在可能导致选择另一个进程执行的事件上调用:
    • 时钟中断
    • 输入/输出中断
    • 操作系统调用和陷阱
    • 信号

进程行为

CPU突发事件(burst脉冲) 进程需要CPU的一段时间称为CPU突发。 输入/输出burst 进程需要I/O的一段时间称为I/O突发。

  • 计算密集型(CPU-bound)进程
    • 较长时间的CPU集中使用和较小频率的IO等待
  • IO密集型(IO-bound)进程
    • 短时间的CPU集中使用(短CPU脉冲)和频繁IO等待

调度算法 prepared

Preemptive vs. Non-preemptive

首先区分抢占式和非抢占式调用 Preemptive vs. Non-preemptive:

  • 抢占式调度: 运行过程可能会中断,必须释放CPU(可能会被迫放弃CPU)
  • 非抢占式调度: 运行进程保留CPU,直到它自愿放弃CPU,比如:
    • 进程退出。
    • 切换到阻塞状态
    • 仅1和4(3号)

image.png

算法目标

  • 批处理系统:
    • 吞吐量 单位时间内处理的作业数。
    • 周转时间 从提交到完成的时间(批处理作业)。
    • 处理器利用率 CPU忙的时间百分比。
  • 交互式系统:
    • 响应时间 从首次提交请求到生成第一个响应的时间量。
    • 相称性Proportionality  满足用户的期望。

Single Processor Scheduling Algorithms
 Batch Systems
 First-Come First-Served (FCFS)
 Short Job First
Interactive Systems
 Round Robin
 Priority Scheduling
 Multi-level Queue & Multi-level Feedback Queue
 Shortest Process Next
 Guaranteed Scheduling
 Lottery Scheduling
 Fair Sharing Scheduling

批处理系统中的调度算法

First-Come, First-Served(FCFS先来先服务)

非抢占式,用于批处理系统。

实现:FIFO队列

  • 一个新进程进入队列的尾部。
  • 未阻塞的进程在队列末尾重新进入
  • 调度器从队列的头部进行选择。

性能指标:平均等待时间(等待时间:进程在就绪队列中的总时间)
计算:

image.png

优点:容易实现
缺点:不是最佳调度,发生Convoy effect(短作业等长作业)

Shortest Job First (SJF) 最短作业优先

作业长度相同的情况就FCFS

要求和问题:要提前知道进程使用时间

存在非抢占式和抢占式两个版本

非抢占式版本(进程同时可用):

image.png

抢占式版本:Shortest Remaining Time Next(SRTN或者SRTF) 最短剩余时间优先 进程异步就绪

image.png

优点:

  • 无抢占同时到达情况是最小化平均等待时间的最佳选择。
    • 在长作业之前移动较短的作业会改善短作业的等待时间,而不是损害长作业的等待时间。
  • 帮助保持输入/输出设备繁忙。 缺点:
  • 不实用:无法预测未来的CPU突发时间。
    • 操作系统解决方案:使用过去的行为来预测未来的行为。
  • 饥饿:可能永远不会安排长时间的作业

交互式系统的调度算法

  • 通常抢占式
    • 时间被分为量子quantum(时间间隔)。
    • 调度决策也在每个量子开始时做出。
  • 性能标准
    • 最小响应时间
    • 最佳比例 Best proportionality
  • 代表性算法
    • 轮转调度 Round-robin Scheduling
    • 优先级调度 Priority Scheduling
    • 多级队列和多级反馈队列
    • 最短进程优先
    • 保证调度
    • 彩票调度
    • 公平共享调度

轮转调度 Round-robin Scheduling

实现:

  • 每个进程获得一个小的CPU时间单位(时间量或时间片),通常为10-100毫秒。
  • 允许进程运行直到时间片周期过期,然后发生时钟中断,运行的进程被置于就绪队列中。
  • 如果进程在量子过去之前已阻塞或完成,则CPU切换完成。 特点:
  • 保证不会挨饿。
  • 相当于抢占式的FCFS。
  • 就绪队列被视为循环队列。
  • 超过时间片的进程返回到就绪队列的末尾

image.png

对于时间量子(时间片)的大小:

  • 时间量太大
    • 如果量子大小足够大,可以在单个量子内完成大多数进程
    • 低上下文切换开销。
    • 如果量子尺寸太大,退化为FCFS,响应时间差。
  • 时间量太小
    • 上下文切换太多(开销)
    • 上下文切换时间=0.1-1ms
    • CPU利用率低。

优点:

  • 在作业之间公平分配CPU,无饥饿。
  • 作业长度变化时,平均等待时间较短。
  • 最短的作业完成得相对较快。
  • 周转时间通常大于SRTF,但响应时间更好。 缺点
  • 平均等待时间差,作业长度相似
  • 性能取决于时间片的长度。
    • 如果时间片太短,频繁上下文切换的开销大。
    • 如果时间片过长,则退化为FCFS。
  • 没考虑优先级。

优先级调度 Priority Scheduling

优先级相同时,FCFS

优先级设置两种方法

  • 静态(对于具有已知和常规应用程序行为的系统)
    • 具有静态优先级的流程在整个流程生命周期中保持该优先级
  • 动态
    • 具有动态优先级的进程将在其执行过程中由调度程序更改该优先级
  • 静态优先级和动态优先级可以共存。

image.png

优点:

  • 提供一个良好的机制,可以精确定义每个流程的相对重要性。 缺点:
  • 低优先级工作可能会导致饥饿。
  • 可以通过老化过程来避免:当它们在系统中花费时间时,增加优先级。
  • 可能不会给出最好的AWT。

多级队列 Multi-Level Queue

优先级调度的扩展

  • 用于根据进程类型、CPU时间、IO访问、内存大小等属性将进程划分为多个队列
  • 将就绪队列拆分为多个队列,将进程永久分配给一个队列。

问题:需要事先将进程分配给最合适的优先级队列。

多级反馈队列 Multi-Level Feedback Queue

  • 进程在队列之间移动。
    • 启动高优先级队列中的每个进程;当它完成每个CPU burst时(用完给定时间片),将其移动到优先级较低的队列
    • 反馈=利用过去预测未来-青睐过去没有太多使用CPU的作业-接近SRTN
  • 每个队列表示CPU使用率相似的作业。
  • 给定队列中的作业使用给定的时间片执行。

例子:计算使用多级反馈队列时的平均周转时间,如下所示。注意,前2个队列的优先级基于到达时间。

image.png

image.png 优势

  • 适合根据CPU burst需求划分进程。
  • 让I/O绑定的进程经常运行。
  • 为CPU绑定的进程提供更长的CPU块。 缺点
  • 优先级由系统控制。一个进程常常因为它使用了大量的I/O,被认为很重要,
  • 行为更改可能计划不当的进程

最短进程优先 Shortest Process Next

类似于批处理系统的最短作业优先SJF

  • 优点:完成时间最短,非抢占式
  • 缺点:但依赖于对进程完成时间的估计,而且响应时间慢

保证调度 Guaranteed Scheduling (QoS)

计算实际消耗的CPU时间与有权使用的CPU时间的比率(自创建以来的时间除以n),选择比率最低的一个,当正在运行的进程的比率超过其“目标比率”时,切换到另一个进程。

如下图中,实际消耗的CPU时间为3,3,2,有权使用的CPU时间比率7/3,,比率最低的为

image.png

彩票调度 Lottery Scheduling

基于概率,优先级高获得的“彩票”多,平均CPU时间与票证数量成比例

优势 易于理解的 高度响应 可以支持流程之间的合作。 易于支持优先级和比例要求。

缺点 困难在于确定票证分配,尤其是在进程来去去受阻的环境中。 对于通用调度来说,这不是一个有用的算法,但对于具有长时间运行的进程的环境更有用,这些进程可能需要分配CPU的共享,例如在服务器上运行多个虚拟机。

公平分享调度 Fair-Share Scheduling

这是基于用户的公平,不是基于内存(轮转调度)的

*实时系统

*策略和机制