从 fork 到 exit:Linux 调度器全解
ARM64 + PREEMPT_RT · Linux 6.12 · 用 4+1 视图跟着一个程序走完一生。所有代码引用都对照 Linux 6.12.110(linux-6.12.y,主线首个内置 PREEMPT_RT 的 LTS)源码给出 文件:行号;硬件以 12 核三丛集 ARMv9.2 示例平台「X9」为例。
6.12.110内核版本2个系列3篇文档14张架构图
系列索引
系列 0 · 导读
4+1 视图地图、示例平台 X9、贯穿全系列的 demo 程序、阅读路线与术语。
系列 A · 场景主线:一个程序的一生
跟着 demo 从 fork 走到 exit:选核、首次上 CPU、运行、睡眠、唤醒、抢占、迁移、退出。每篇都落到 6.12.110 的源码行号。
这套文档怎么读
这是一套围绕 Linux 6.12.110(linux-6.12.y,主线首个内置 CONFIG_PREEMPT_RT 的 LTS) 的调度器源码解读,目标架构是 ARM64。组织方式借用了软件架构里的 4+1 视图模型:
- +1 场景视图是主线:跟着一个真实的示例程序
demo,从fork()一路走到exit(),每一步看调度器做了什么。 - 逻辑 / 进程 / 开发 / 物理四个视图是横切面,分别回答"有哪些结构""并发怎么保证正确""代码怎么组织、怎么观测""映射到 ARM64 硬件是什么样"。
每一篇文章顶部都有一排视图标签,亮起的就是这一篇用到的视图。
三个约定
- 一个程序:
demo由父进程 fork 出子进程,子进程里再建worker(计算)、io(睡眠/唤醒)、ctrl(SCHED_FIFO 80、1ms 周期)三个线程,一个程序覆盖所有典型调度场景。源码见 导读 0.1。 - 一块板子:示例平台「X9」是一颗 12 核三丛集 ARMv9.2 SoC(4×A520 + 6×A725 + 2×X925,DynamIQ 共享 L3,GICv3)。所有"选哪个 CPU""算力多少"的例子都在它上面推演。
- 一份源码:所有
文件:行号都对应linux-6.12.y @ fa5b06866b64(v6.12.110),可以直接打开核对。
当前进度
| 批次 | 内容 | 状态 |
|---|---|---|
| 第 1 批 | 站点骨架 · 0.1 导读 · A1 fork · A3 首次上 CPU | ✅ 已发布 |
| 第 2 批 | A2 · A4–A9(场景主线补全) | 撰写中 |
| 第 3 批 | B 逻辑视图 · C 进程视图 | 计划中 |
| 第 4 批 | D 物理视图 · E 开发视图 · 全站搜索 | 计划中 |