操作系统笔记-2.2.1 调度的概念、层次
·
王道操作系统笔记,视频链接:2.2.1 调度的概念、层次
知识总览
- 基本概念
- 处理机调度分为三个层次:
- 高级调度(作业调度)
- 中级调度(内存调度)
- 低级调度(进程调度)
- 三层调度的联系、对比
- 补充知识(由中级调度引出):
- 进程的“挂起态”
- 七状态模型
- 图示:

调度的基本概念
-
- 例1:银行中普通客户先到先服务,VIP用户优先服务
- 例2:某个公共场所,使用时间短的优先,时间相同的先排队先使用
- 这些都是调度的例子
- 当有一堆任务要处理,但由于资源有限,这些事情没法同时处理。这就需要确定某种规则来决定处理这些任务的顺序,这就是“调度”研究的问题。
调度的三个层次
高级调度(作业调度)
- 作业:一个具体的任务
用户向系统提交一个作业 ≈ 用户让操作系统启动一个程序(来处理一个具体的任务) - 内存空间有限,有时无法将用户提交的作业全部放入内存中。
- 高级调度(作业调度):按一定的原则从外存的作业后备队列中挑选以恶作业调入内存,并创建进程。每个作业只调入一次,调出一次。作业调入时会建立PCB,调出时才撤销PCB。
PS:简化理解,高级调度就是好几个程序需要启动,到底先启动哪个。
图示:
低级调度(进程调度)
- 低级调度(进程调度/处理机调度)——按照某种策略从就绪队列中选取一个进程,将处理机分配给它。
- 进程调度是操作系统中最基本的一种调度,在一般的操作系统中都必须配置进程调度。
进程调度的频率很高,一般几十毫秒一次。 - 图示:

中级调度(内存调度)
- 内存不够时,可将某些进程的数据调出外存,等内存空闲或者进程需要运行时再重新调入内存。
暂时调到外存等待的进程状态为挂起状态,被挂起的进程PCB会被组织成挂起队列。 - 中级调度(内存调度)——按照某种策略决定将哪个处于挂起状态的进程重新调入内存。
- 一个进程可能会被多次调出、调入内存,因此中级调度发生的频率要比高级调度更高。
注意:中级调度因为涉及访问外存,所以时间开销比低级调度大。 - 图示:

补充知识:进程的挂起态和七状态模型
-
暂时调到外存等待的进程状态为挂起状态(挂起态,suspend)
-
挂起态又可以进一步细分为就绪挂起、阻塞挂起两种状态
-
五状态模型->七状态模型
后者相较于前者,多了“就绪挂起”与“阻塞挂起”两种状态,并且多了如下关系:- “就绪态”与“就绪挂起”可以相互转换
“阻塞态”与“阻塞挂起”可以相互转换 - “阻塞挂起”可以在事件出现时转换为“就绪挂起”
- “创建态”可以在内存不足时转换为“就绪挂起”
- “运行态”可以转换为“就绪挂起”
如图所示:

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

知识回顾与重要考点
如图所示:
一些可能有争议的点
关于中级调度是否是双向
- 课件里的表以及最后的总结都明确指出:
- 中级调度——按照某种规则,从挂起队列中选择合适的进程将其数据调回内存。
- 但是前面又说:“内存不够时,可将某些进程的数据调出外存,等内存空闲或者进程需要运行时再重新调入内存。”
- 看上去又暗示有双向,又定义是单向,十分混乱。
- 个人想法,把它们当成广义和狭义的两种定义,聊的时候说双向,题目聊单向也不算错。
- deepseek 修改后的表格:
| 调度类型 | 要做什么 | 调度发生在… | 发生频率 | 对进程状态的影响 |
|---|---|---|---|---|
| 高级调度 (作业调度) |
按照某种规则,从后备队列中选择合适的作业将其调入内存,并为其创建进程 | 外存→内存 (面向作业,单向) |
最低 | 无→创建态→就绪态 |
| 中级调度 (内存调度) |
按照某种规则,将进程调入调出内存,以提高内存利用率 | 内存 ↔ 外存 (面向进程,双向) |
中等 | 就绪态↔挂起态 阻塞态↔阻塞挂起 |
| 低级调度 (进程调度) |
按照某种规则,从就绪队列中选择一个进程为其分配处理机 | 内存→CPU (面向进程,单向) |
最高 | 就绪态→运行态 |
关于高级调度是否涉及调出
- 课件里说明:
- 每个作业只调入一次,调出一次。 作业调入时会建立相应的PCB,作业调出时才撤销PCB。
- 高级调度主要是指调入的问题,因为只有调入的时机需要操作系统来确定,但调出的时机必然是作业运行结束才调出。
- 调入调出不是针对外存和内存的存储吗?作业运行结束为什么要执行调出?调出到外存有什么意义?
- 汤小丹版教材定义中,将高级调度定义为“调入”作业,其对立面是作业运行完毕后的“撤销”或“终止”,而非“调出”,所以个人理解,这里的“调出”对应的就是汤小丹版中的删除(撤销进程)操作,理解成和“中级调度”中的“调出”同词不同义吧。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐



所有评论(0)