• 进程间切CPU,OS可提高计算机的吞吐率
  • 介绍基本调度概念和多个CPU调度算法
    • 也研究为特定系统选择算法的问题

  • 4章为进程模型引入线程
  • 对支持它们的OS,是内核级的线程被OS调度,而no进程
  • 不过,术语 线程调度或 进程调度 常交替使用。
  • 普通调度概念时用进程调度
    • 指定为线程概念时用线程调度

  • 介绍CPU调度,它是多道程序操作系统的基础
  • 描述各种CPU调度算法
  • 讨论为特定系统选择CPU调度算法的评估标准

5.1基本概念

  • 在进程必须等待的时间内,另一进程可拿走CPU使用权

这种调度是操作系统的基本功能

  • 几乎所有的计算机资源在使用前都要调度。CPU是最重要的计算机资源之一。
  • so CPU调度对于操作系统设计来说很重要。

5.1.1 CPU-I/O区间周期

CPU的成功调度依赖于进程的如下属性:进程执行由CPU执行和I/O等待周期组成

  • 进程在这两状态间切换
  • 进程执行从CPU区间( PU burst)开始,之后是I/O区间,接着是另一CPU区间,然后是另一I/O区间,如此进行
  • 最终、最后的CPU区间通过系统请求终止执行(见图5.1)

5 CPU调度

这些CPU区间的长度已被大量地测试过。

  • 虽然它们随着进程和计算机的不同变化很大,但是呈现类似于5.2所示的频率曲线。
  • 曲线常为指数或超指数,
    • 大量短CPU和少量长CPU。
  • I/O约束程序常有很多短CPU区间。
  • CPU约束程序可能有少量的长CPU区间。
  • 这种分布有助于选择合适的CPU调度算法。
    5 CPU调度

5.1.2 CPU 调度程序

  • CPU闲时,OS必从就绪队列中选一个进程执行
  • 进程选择由短调程或CPU调度程序执行
  • 调度程序从内存中选一个能执行的进程,并为之分CPU

就绪队列不必是FIFO

  • FIFO、优先队列、树或无序链表
  • 但概念上,就绪队列内的所有进程都要排队以等待在CPU上运行
  • 记录通常为进程控制块(PCB)

5.1.3 抢占调度

  • CPU调度决策可在如下4种环境下发生
    • 从运行态切到等待状态(I/O请求,或调用wait等待子的终止
    • 从运行态切到就绪态(当出现中断时)
    • 从等待状态切到就绪态(I/O完成)
    • 当进程终止时

对1和4,无选择只有调度

  • 一个新进程(如果就绪队列中已有一个进程存在)必须被选择执行
  • 不过,对于2和3,可进行选择

当调度只能发生在1和4时,称调度方案是非抢占的的或协作的:

  • 否则,称调度方案是抢占的
  • 用非抢占,一旦CPU分配给一个进程,该进程会一直用CPU直到进程终止或切换到等待状态
    • Windows3.x用该种, Windows95用抢占调度,之后的 Windows都用抢占调度
  • Macintosh的 Mac OS X用抢占调度,之前的Macintosh依赖协作调度
  • 协作调度在有的硬件平台上是唯一的方法,因为它不要求抢占调度所需要的特别的硬件(如定时器)支持。

不幸,抢占调度对访问共享数据是有代价的

  • 考虑两个进程共享数据
  • 一正在更新数据时,它被抢占使二运行
  • 二试图读数据,该数据现在处于不一致的状态
  • 此况下要一种新机制来协调对共享数据的访问。
  • 这问题将在第6章讨论

抢占对于操作系统内核的设计也有影响。

  • 在处理系统调用时,内核可能忙于进程活动
  • 这些活动可能涉及要改变重要内核数据(如I/O队列)。
  • 如果一个进程在进行这些修改时被抢占,内核(或设备驱动)需要读取或修改同样的结构,那么会有什么结果呢?肯定会导
    致混乱。
  • 有的操作系统,包括绝大多数UNX,通过在上下文切换之前等待系统调用完成或等待发生I/O阻塞来处理这一问题。
  • 不幸,这种内核执行模式对实时计算和多进程的支持较差。
  • 这些问题及其解决方案在5.4和19.5讨论。

因为根据定义中断能随时发生,且不能总被内核所忽视,所以受中断影响的代码段必须加以保护以免同时访问。

  • 操作系统需要在任何时候都能接受中断,否则输入会丢失或输出会被改写。
  • 为了这些代码段不被多个进程同时访问,在进入时要禁止中断,而在退出时要重新允许中断。
  • 注意到禁止中断代码段发生并不频繁,而且常常只包括很少的指令,这很重要

5.1.4 分派程序

  • 与CPU调度功能有关的另一部分是分派程序( dispatcher)。
  • 分派程序是个模块,用来将CPU的控制交给由短期调度程序选择的进程
  • 其功能包括:
    • 切换上下文
    • 切到use mode
    • 跳转到用户程序的合适位置,以重新启动程序
  • 分派程序应尽可快,因为每次进程切时都用
  • 分派程序停止一个进程而启动另一个所要花的时间称为分派延迟 啥+latency

5.2 调度准则

相关文章:

  • 2021-06-25
  • 2021-12-03
  • 2022-12-23
  • 2021-05-27
  • 2021-08-06
  • 2021-07-26
  • 2021-08-28
猜你喜欢
  • 2021-04-10
  • 2022-12-23
相关资源
相似解决方案