这门课解决什么问题
缺页异常是操作系统内核里绕不开的核心机制,它直接决定了进程怎么申请物理内存、文件页怎么按需载入、写时复制怎么触发,以及内存回收和 swap 怎么把页换出又换回来。很多做底层开发、驱动或性能优化的工程师,平时能调用 kmalloc、mmap 这些接口,但一旦遇到真实的内存延迟抖动、进程意外卡死,或者需要自己实现某种内存管理策略时,往往卡在“内核到底怎么处理这次缺页”这一步。这门课不教你写用户态程序,而是把内核从硬件触发到软件响应的整条链路拆开,让你看清一次访存缺页后,内核到底走了哪些代码路径、做了哪些权限检查、怎么分配并映射物理页。如果你经常需要读内核源码、做内存子系统相关的调试或定制,这门课能帮你把零散的代码片段串成一条可追踪的链路。
适合什么基础与资料怎么用
这门资料不适合零基础。你得先对虚拟内存、页表、进程地址空间这些基本概念有认识,最好读过一点内核代码,至少能跟着源码看懂函数调用关系。资料本身是按内核版本和架构组织的,建议先看概述和 arm64 架构处理这两块,把硬件层怎么触发异常、怎么把现场交给内核通用代码这条路打通;接着看匿名页和文件页这两类最常见的缺页处理,这是日常开发里碰到最多的场景;swap 和写时复制可以放在后面,结合实际调试场景再看;最后的案例分析建议你对照着内核源码一起读,不要只看文字描述。资料没有配套练习题,你得自己准备一份能跑的内核源码树,边看边在代码里做标记,遇到关键函数就跳进去看实现,这样才算真正把资料用透。
学完能独立做什么
学完之后,你应该能独立分析一段内核日志或 ftrace 输出里关于缺页的信息,判断是哪一类缺页占了大头、瓶颈在分配物理页还是在磁盘 IO;在写驱动或定制内核模块时,能更准确地预判某段内存访问会不会触发缺页、会不会走到 swap 路径,从而提前规避性能坑;如果你做虚拟化或容器,理解了 userfaultfd 和异常表,就能自己设计更灵活的内存监控或迁移策略。总的来说,这门课给你的不是某个现成工具的用法,而是一套判断内存问题根源的思路,让你在看内核代码时不再只盯着单个函数,而是能顺着缺页这条主线,把内存管理的各个子系统串起来看。
01 110 - 概述 · 02 210 - arm64架构处理 · 03 310 - 内核通用代码处理 · 04 410 - 匿名页缺页异常 · 05 510
课程目录
* 01 110 - 概述
* 02 210 - arm64架构处理
* 03 310 - 内核通用代码处理
* 04 410 - 匿名页缺页异常
* 05 510 - 文件页缺页异常
* 06 610 - swap缺页异常
* 07 710 - 写实复制缺页异常
* 08 810 - 异常表
* 09 910 - userfaultfd
* 1010 - 案例分析






