首页/操作系统/02-process/多处理机调度 🔗 在 Obsidian 中打开
操作系统 · 02-process

多处理机调度

重要度 ★★★ 多处理机调度负载均衡多核调度
速查
多处理机调度决定进程/线程在多 CPU 上的分配:SMP(每 CPU 独立调度)是主流;处理器亲和性利用缓存局部性,负载均衡(推/拉迁移)与之存在矛盾。

速查

项目
定义在多 CPU 系统中将进程/线程分配到各处理器上
两种模型非对称多处理(AMP)、对称多处理(SMP)
SMP 主流每个 CPU 运行自己的调度程序(独立调度)
关键问题负载均衡、处理器亲和性、缓存一致性

核心概念

多处理机调度是在拥有多颗 CPU(或多核)的系统中,决定哪个进程/线程在哪颗 CPU 上执行的问题。

两种多处理机模型

  1. 非对称多处理(AMP):一个主处理器负责调度,其他处理器执行。简单但主处理器成为瓶颈
  2. 对称多处理(SMP):每个 CPU 运行自己的调度程序,从公共/私有就绪队列中选取进程。主流方案

SMP 调度策略

  • 公共就绪队列:所有 CPU 共享一个就绪队列,CPU 空闲时从队列中取进程。简单但可能有竞争
  • 私有就绪队列:每个 CPU 有自己的就绪队列。无竞争,但需要负载均衡

处理器亲和性(Processor Affinity)

  • 软亲和性:调度器尽量让进程在同一 CPU 上运行(利用缓存),但可以迁移
  • 硬亲和性:进程绑定到特定 CPU,不允许迁移

负载均衡

  • 推迁移(Push Migration):周期性检查各 CPU 负载,将进程从重载 CPU 推到轻载 CPU
  • 拉迁移(Pull Migration):空闲 CPU 从忙碌 CPU 的队列中拉取进程

关键性质

对比项公共就绪队列私有就绪队列
队列数量1 个(共享)每个 CPU 一个
负载均衡自动(共享队列)需要额外机制
竞争问题有(需加锁)
实现复杂度简单复杂

常见考法

考法解题套路
AMP vs SMPAMP 有主 CPU 瓶颈,SMP 是主流
处理器亲和性软亲和性(尽量不迁移)vs 硬亲和性(不允许迁移)
负载均衡推迁移(主动推送)vs 拉迁移(空闲 CPU 拉取)
为什么需要亲和性利用 CPU 缓存(热数据在缓存中),迁移会导致缓存失效

易错点

注意
  • SMP 是对称多处理——每个 CPU 地位平等,都有自己的调度器
  • 处理器亲和性的目的是利用 CPU 缓存,不是"绑定 CPU"
  • 负载均衡和处理器亲和性是矛盾的——迁移进程会破坏亲和性
  • 公共就绪队列不需要负载均衡(所有 CPU 从同一队列取进程),但需要加锁
  • 多核 CPU 和多 CPU 的调度原理相同——每个核视为一个独立处理器

核心结论

必背
  1. SMP 是现代多处理机系统的主流模型,每个 CPU 独立调度
  2. 处理器亲和性利用缓存局部性提高性能,减少缓存失效
  3. 负载均衡是私有队列方案必须解决的问题,与亲和性存在矛盾
  4. 公共队列简单但有锁竞争,私有队列无竞争但需负载均衡
  5. 多核 CPU 的出现使多处理机调度成为每个 OS 都要面对的问题

记忆卡片

AMP 和 SMP 的核心区别?
AMP 有专用主处理器负责调度,SMP 每个 CPU 独立调度(地位平等)。
什么是处理器亲和性?
调度器尽量让进程在同一 CPU 上运行,利用 CPU 缓存提高性能。
推迁移和拉迁移的区别?
推:重载 CPU 主动推进程给轻载 CPU;拉:空闲 CPU 主动从忙碌 CPU 拉取进程。
公共就绪队列的优缺点?
优点:自动负载均衡、简单;缺点:队列需加锁,有竞争。
负载均衡和亲和性的矛盾?
负载均衡需迁移进程,迁移会破坏亲和性(缓存失效)。

交互动画 · 推/拉负载均衡

CPU A(重载) CPU B(轻载)
点击「推迁移」把 CPU A 上进程迁移到轻载的 CPU B
注意:迁移会破坏处理器亲和性(CPU 缓存失效)
私有就绪队列方案下,SMP 通过推/拉迁移实现负载均衡;公共队列则无需此机制但需加锁。

相关知识点

scheduling-algorithm-comparison process-and-thread

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。