mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5
916 字
2 分钟
OS笔记(六):调度的概念、层次
2026-06-05

OS笔记(六):调度的概念、层次#

本文是操作系统笔记系列的第六篇,详细讲解操作系统调度的三个层次(高级调度、中级调度、低级调度)以及七状态模型。


📚 目录#


一、什么是调度?#

1.1 调度的定义#

调度(Scheduling)是操作系统按照某种策略从多个可执行的候选中选择一个来使用某种资源的过程。

1.2 为什么需要调度?#

  • CPU资源有限,进程数量多
  • 需要决定哪个进程获得CPU
  • 需要平衡公平性和效率

二、调度的三个层次#

2.1 高级调度(作业调度)#

作业:一个具体的任务(用户提交的工作单位)。

高级调度:按一定原则从外存的作业后备队列中挑选一个作业调入内存,并创建进程。

特点说明
频率每个作业只调入一次,调出一次
操作调入时建立PCB,调出时撤销PCB
目标控制内存中的进程数量
### 2.2 中级调度(内存调度)
**挂起状态**:内存不够时,将某些进程的数据调到外存等待。
**中级调度**:按照某种策略决定将哪个**挂起状态的进程**重新调入内存。
| 特点 | 说明 |
|------|------|
| **目的** | 提高内存利用率和系统吞吐量 |
| **操作** | 将挂起进程调入/调出内存 |
| **频率** | 比高级调度频繁 |

2.3 低级调度(进程调度)#

低级调度:按照某种策略从就绪队列中选取一个进程,将处理机分配给它。

特点说明
频率最基本的一种调度,频率最高
操作从就绪队列选择进程,分配CPU
必要性一般OS中必须配置
---
<a id="对比"></a>
## 三、三层调度的对比
| 对比项 | 高级调度 | 中级调度 | 低级调度 |
|--------|----------|----------|----------|
| **别名** | 作业调度 | 内存调度 | 进程调度 |
| **调度对象** | 作业 | 挂起进程 | 就绪进程 |
| **位置** | 外存→内存 | 外存↔内存 | 就绪队列→CPU |
| **频率** | 最低 | 中等 | **最高** |
| **影响** | 控制并发度 | 内存利用率 | CPU利用率 |
| **是否存在** | 批处理系统 | 虚拟内存系统 | 所有OS |
---
<a id="七状态"></a>
## 四、七状态模型
在五状态模型的基础上,增加了**挂起就绪**和**挂起阻塞**两个状态。
![七状态模型](/assets/os-notes/Pasted%20image%2020260605193054.webp)
### 4.1 七种状态
| 状态 | 英文 | 含义 |
|------|------|------|
| **创建态** | New | 进程正在创建 |
| **就绪态** | Ready | 在内存中等待CPU |
| **运行态** | Running | 正在CPU上执行 |
| **阻塞态** | Blocked | 在内存中等待事件 |
| **终止态** | Terminated | 进程结束 |
| **挂起就绪态** | Ready Suspend | 在外存中,但已具备运行条件 |
| **挂起阻塞态** | Blocked Suspend | 在外存中,等待某事件 |
### 4.2 状态转换

4.3 挂起的作用#

作用说明
提高内存利用率将不活跃进程调出内存
容纳更多进程外存可以存放更多进程
系统负载调节负载高时挂起低优先级进程

五、Linux实战:调度管理#

5.1 Linux调度器#

Linux使用CFS(Completely Fair Scheduler,完全公平调度器):

特性说明
基于虚拟运行时间运行时间少的进程优先
红黑树组织按虚拟运行时间排序
时间片动态分配根据进程数量和优先级

5.2 查看调度信息#

# 查看进程调度策略
chrt -p <PID>
# 查看进程优先级
ps -eo pid,ni,comm | head
# 查看调度类
cat /proc/<PID>/sched

5.3 调整进程优先级#

# nice值范围:-20(最高)到 19(最低)
nice -n 10 ./my_program # 以较低优先级启动
renice -5 -p <PID> # 修改运行中进程的优先级
# 实时调度策略
chrt -f 50 ./my_program # FIFO实时调度,优先级50
chrt -r 50 ./my_program # Round-Robin实时调度

5.4 CPU亲和性#

# 查看进程在哪个CPU上运行
taskset -p <PID>
# 绑定进程到特定CPU
taskset -c 0,1 <PID> # 绑定到CPU 0和1
taskset -c 2 ./my_program # 启动时绑定到CPU 2

5.5 查看系统调度统计#

# 查看CPU调度统计
cat /proc/schedstat
# 使用mpstat查看CPU使用
mpstat -P ALL 1
# 使用pidstat查看进程调度
pidstat -p <PID> 1

5.6 查看进程状态#

# 查看进程状态(R/S/D/Z/T)
ps aux | awk '{print $8}' | sort | uniq -c
# 统计各状态进程数
echo "运行中: $(ps aux | grep ' R ' | wc -l)"
echo "睡眠中: $(ps aux | grep ' S ' | wc -l)"
echo "僵尸态: $(ps aux | grep ' Z ' | wc -l)"

5.7 cgroup限制CPU#

# 查看cgroup
ls /sys/fs/cgroup/cpu/
# 限制进程CPU使用(50%单核)
mkdir /sys/fs/cgroup/cpu/limited
echo 50000 > /sys/fs/cgroup/cpu/limited/cpu.cfs_quota_us
echo 100000 > /sys/fs/cgroup/cpu/limited/cpu.cfs_period_us
echo <PID> > /sys/fs/cgroup/cpu/limited/tasks

六、本章小结#

核心概念#

概念要点
高级调度外存→内存,作业级别,频率最低
中级调度内存↔外存,挂起进程,提高内存利用率
低级调度就绪队列→CPU,频率最高,最基本
七状态模型五状态 + 挂起就绪 + 挂起阻塞

三层调度对比#

对比项高级调度中级调度低级调度
频率
位置外存→内存内存↔外存就绪→CPU
目的控制并发度内存利用率CPU利用率

考研/期末常见考点#

  1. 三个层次调度的区别和联系
  2. 高级调度和低级调度的频率对比
  3. 七状态模型中挂起状态的作用
  4. 挂起就绪和挂起阻塞的区别
  5. 为什么低级调度是最基本的调度

思考题#

  1. 高级调度和低级调度分别在什么时候发生?
  2. 七状态模型相比五状态模型多了什么?
  3. 挂起状态有什么作用?什么时候会触发挂起?

上一篇OS笔记(五):线程

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

OS笔记(六):调度的概念、层次
https://emilia520.icu/posts/os-221调度的概念层次/
作者
火花花
发布于
2026-06-05
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录