王道操作系统笔记,视频链接:2.2.1 调度的概念、层次

知识总览

  1. 基本概念
  2. 处理机调度分为三个层次:
    • 高级调度(作业调度)
    • 中级调度(内存调度)
    • 低级调度(进程调度)
  3. 三层调度的联系、对比
  4. 补充知识(由中级调度引出):
    • 进程的“挂起态”
    • 七状态模型
  5. 图示:
    知识总览

调度的基本概念

    • 例1:银行中普通客户先到先服务,VIP用户优先服务
    • 例2:某个公共场所,使用时间短的优先,时间相同的先排队先使用
    • 这些都是调度的例子
  1. 当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则决定处理这些任务的顺序,这就是“调度”研究的问题。

调度的三个层次

高级调度(作业调度)
  1. 作业:一个具体的任务
    用户向系统提交一个作业 ≈ 用户让操作系统启动一个程序(来处理一个具体的任务)
  2. 内存空间有限,有时无法将用户提交的作业全部放入内存中。
  3. 高级调度(作业调度):按一定的原则从外存的作业后备队列中挑选以恶作业调入内存,并创建进程。每个作业只调入一次,调出一次。作业调入时会建立PCB,调出时才撤销PCB。
    PS:简化理解,高级调度就是好几个程序需要启动,到底先启动哪个。
    图示:
    从作业后备序列调入某个任务
低级调度(进程调度)
  1. 低级调度(进程调度/处理机调度)——按照某种策略从就绪队列中选取一个进程,将处理机分配给它。
  2. 进程调度是操作系统中最基本的一种调度,在一般的操作系统中都必须配置进程调度。
    进程调度的频率很高,一般几十毫秒一次。
  3. 图示:
    低级调度
中级调度(内存调度)
  1. 内存不够时,可将某些进程的数据调出外存,等内存空闲或者进程需要运行时再重新调入内存。
    暂时调到外存等待的进程状态为挂起状态,被挂起的进程PCB会被组织成挂起队列
  2. 中级调度(内存调度)——按照某种策略决定将哪个处于挂起状态的进程重新调入内存。
  3. 一个进程可能会被多次调出、调入内存,因此中级调度发生的频率要比高级调度更高。
    注意:中级调度因为涉及访问外存,所以时间开销比低级调度大
  4. 图示:
    中级调度图示
补充知识:进程的挂起态和七状态模型
  1. 暂时调到外存等待的进程状态为挂起状态挂起态,suspend

  2. 挂起态又可以进一步细分为就绪挂起阻塞挂起两种状态

  3. 五状态模型->七状态模型
    后者相较于前者,多了“就绪挂起”与“阻塞挂起”两种状态,并且多了如下关系:

    • “就绪态”与“就绪挂起”可以相互转换
      “阻塞态”与“阻塞挂起”可以相互转换
    • “阻塞挂起”可以在事件出现时转换为“就绪挂起”
    • “创建态”可以在内存不足时转换为“就绪挂起”
    • “运行态”可以转换为“就绪挂起”

    如图所示:
    七状态模型

  4. 注意事项:

    • “挂起”和“阻塞”的区别:两种状态都是暂时不能获得CPU的服务,但挂起态是将进程印象调到外存去了,而阻塞态下进程映像还在内存中。
    • 有的操作系统会把就绪挂起、阻塞挂起分为两个挂起队列,甚至会根据阻塞原因不同再把阻塞挂起进程进一步细分为多个队列。
三层调度的联系、对比
  1. 如图所示:
    三层调度的联系、对比

知识回顾与重要考点

如图所示:
知识回顾与重要考点

一些可能有争议的点

关于中级调度是否是双向
  1. 课件里的表以及最后的总结都明确指出:
    • 中级调度——按照某种规则,从挂起队列中选择合适的进程将其数据调回内存。
    • 但是前面又说:“内存不够时,可将某些进程的数据调出外存,等内存空闲或者进程需要运行时再重新调入内存。”
    • 看上去又暗示有双向,又定义是单向,十分混乱。
    • 个人想法,把它们当成广义和狭义的两种定义,聊的时候说双向,题目聊单向也不算错。
  2. deepseek 修改后的表格:
调度类型 要做什么 调度发生在… 发生频率 对进程状态的影响
高级调度
(作业调度)
按照某种规则,从后备队列中选择合适的作业将其调入内存,并为其创建进程 外存→内存
(面向作业,单向
最低 无→创建态→就绪态
中级调度
(内存调度)
按照某种规则,将进程调入调出内存,以提高内存利用率 内存 ↔ 外存
(面向进程,双向
中等 就绪态↔挂起态
阻塞态↔阻塞挂起
低级调度
(进程调度)
按照某种规则,从就绪队列中选择一个进程为其分配处理机 内存→CPU
(面向进程,单向
最高 就绪态→运行态
关于高级调度是否涉及调出
  1. 课件里说明:
    • 每个作业只调入一次,调出一次。 作业调入时会建立相应的PCB,作业调出时才撤销PCB。
    • 高级调度主要是指调入的问题,因为只有调入的时机需要操作系统来确定,但调出的时机必然是作业运行结束才调出。
    • 调入调出不是针对外存和内存的存储吗?作业运行结束为什么要执行调出?调出到外存有什么意义?
    • 汤小丹版教材定义中,将高级调度定义为“调入”作业,其对立面是作业运行完毕后的“撤销”或“终止”,而非“调出”,所以个人理解,这里的“调出”对应的就是汤小丹版中的删除(撤销进程)操作,理解成和“中级调度”中的“调出”同词不同义吧。
Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐