文章

Linux 内核学习路线:从 OS 抽象到真实机制

Linux 内核学习路线:从 OS 抽象到真实机制

这组笔记围绕 OS 基础和 Linux 内核机制整理。每个主题先确认基础概念、常见问法和教材模型,再补 Linux 里的真实对象、源码路径和观测入口。

单篇文章不强制覆盖一个完整章节。基础问题、OSTEP 对照、Linux 实现路径、源码阅读和实验记录可以拆开写。

写法

每篇笔记按问题顺序推进,再按需要追加两层记录。

层次作用写进笔记里的形式
基础概念 / 八股确定章节顺序、基础概念、常见问法问题索引、术语表、参考回答
OSTEP / 教材补 OS 抽象、机制边界、算法模型模型对照、状态转换、机制/策略区分
Linux 实现落到真实结构体、函数路径和观察入口Linux 对象、源码入口、/proc、tracepoint、实验命令

每篇笔记至少回答三个问题:

问题说明
基础问题是什么?这一节的基础问题和八股入口是什么
OS 教材里对应什么抽象?进程、地址空间、调度、文件、I/O、同步等模型怎么解释
Linux 里落到什么对象?结构体、函数、状态、tracepoint、命令入口是什么

总体顺序

整体章节安排先走 OS 基础主线,再把 Linux 内核专项内容放在最后。

顺序模块内容范围正式入口
0阅读准备环境、观测工具、如何读 Linux 机器状态并入各章观测入口
1硬件结构CPU 执行、存储层次、Cache、中断的 OS 背景硬件结构
2操作系统结构内核、系统调用、Linux/Windows 内核结构对照操作系统结构
3内存管理虚拟内存、分段、分页、多级页表、TLB、Linux 内存管理内存管理
4进程与线程进程状态、PCB、上下文切换、线程、IPC、同步、死锁进程与线程
5调度算法进程调度、页面置换、磁盘调度;Linux 调度器放在记录里调度算法
6文件系统VFS、fd、inode、目录项、page cache、文件 I/O文件系统
7设备管理设备控制器、驱动、中断、块层、I/O 软件分层设备管理
8网络系统Linux 收发包、socket、I/O 多路复用、Reactor/Proactor网络系统
9Linux 命令系统、进程、内存、文件、网络观测命令Linux 命令
10额外 Linux 内核专题namespace/cgroup、tracing/perf/BPF、内核源码开发、横切路径实验额外专题总览

公开文章只保留这套主线。更细的横切路径和 Linux 源码细节,后续并入对应主线文章或额外专题。

章节拆分原则

每个大模块可以拆成几类笔记。

类型内容例子
基础笔记按问题顺序整理概念和八股进程是什么、线程是什么、PCB 是什么
模型记录对照 OSTEP 或教材模型,补机制边界ready/running/blocked、机制与策略、调度指标
Linux 落点补 Linux 对象、源码路径、命令入口task_struct、mm_struct、VFS、runqueue
路径笔记用一条真实路径串对象read()、fork()、page fault、收包路径
实验笔记用命令、trace、最小代码验证strace、perf sched、bpftrace、/proc

正文里不要把所有内容都堆进同一篇。基础问题讲清楚后,Linux 实现和源码路径可以独立成篇。

各章记录重点

0. 阅读准备:环境与观察工具

很多章节都会用到 Linux 命令和现象观察。这里先记录一组最小工具。

方向入口
系统信息uname -a、/etc/os-release、内核配置
进程线程ps、top -H、/proc/<pid>/status、/proc/<pid>/task
地址空间/proc/<pid>/maps、smaps
文件描述符/proc/<pid>/fd、fdinfo、lsof
系统调用strace、perf trace
调度vmstat、pidstat -w、perf sched
内核事件ftrace、tracefs、bpftrace

1. 硬件结构

这一部分作为 OS/Linux 的硬件背景,不单独追求硬件细节大全。

主题本系列记录
CPU 如何执行程序指令执行、寄存器、程序计数器、上下文保存
存储器层次结构寄存器、Cache、内存、SSD/HDD 与 OS 缓存
CPU Cachecache line、局部性、伪共享、同步原语成本
CPU 如何选择线程从硬件执行切到 OS 调度入口
软中断中断、软中断、网络收包和 deferred work

Linux 落点:/proc/interrupts、softirq、NAPI、调度中断、Cache 对锁和调度的影响。

2. 操作系统结构

这一章主要记录内核能力、Linux 内核特征和少量 Windows 内核对照。重点放在 Linux 内核的边界。

问题Linux 落点
内核是什么管理 CPU、内存、文件系统、设备、网络和安全边界
syscall 是什么用户态进入内核态的正式入口
Linux 内核有什么特点多任务、SMP、ELF、宏内核、模块化
用户态/内核态怎么分权限级别、地址空间隔离、入口路径

后续 read()、fork()、page fault、网络收包都从这里的边界展开。

3. 内存管理

按主题顺序:虚拟内存、内存分段、内存分页、多级页表、TLB、段页式内存管理、Linux 内存管理。

主题Linux 落点
为什么要有虚拟内存进程地址空间、隔离、权限、按需分配
内存分段历史模型;现代 Linux 主要依赖分页
内存分页page table、PTE、page frame
多级页表节省页表内存,配合硬件页表遍历
TLB地址翻译缓存、TLB shootdown
Linux 内存管理mm_struct、VMA、page fault、COW、page cache

额外补:mmap 区域、匿名页/文件页、RSS/PSS、buddy/slub、reclaim、OOM。

4. 进程与线程

这一章是整个系列的核心基础。按主题顺序拆。

主题Linux 落点
进程程序运行实例、资源边界、task_struct
进程状态ready/running/blocked 到 Linux R/S/D/T/Z
进程控制结构PCB 到 task_struct、mm_struct、files_struct
进程控制fork()、clone()、execve()、exit()、wait()
上下文切换schedule()、runqueue、线程/进程切换成本
线程Linux 线程也是 task;pid/tgid、clone() flags
IPCpipe、message queue、shared memory、signal、socket
多线程同步mutex、semaphore、condition variable、futex、RCU
死锁四个条件、排查、锁顺序

额外补:Linux task 生命周期、等待队列、信号、线程组、调度类。

5. 调度算法

调度算法分成进程调度、页面置换、磁盘调度三类。这里不把教材算法当术语堆砌,而是先讲清楚适用问题。

主题Linux 落点
FCFS/SJF/HRRN/RR/优先级/多级反馈队列教材调度算法的目标和代价
页面置换算法FIFO、LRU、Clock、LFU 与 Linux reclaim 的关系
磁盘调度算法机械磁盘模型、块层、电梯调度的历史背景
Linux 调度器CFS/EEVDF、实时调度、runqueue、wakeup latency

调度模块会拆成两类:教材算法笔记和 Linux 调度器笔记。

6. 文件系统

按主题顺序:文件系统基本组成、VFS、文件使用、文件存储、文件系统结构、文件 I/O。

主题Linux 落点
文件系统基本组成inode、目录项、超级块、数据块
虚拟文件系统VFS、struct file、dentry、inode、file_operations
文件使用open()、fd、read()、write()、close()
文件存储连续/链式/索引分配,Ext 系列实现背景
文件系统结构挂载、块组、元数据、日志
文件 I/Obuffered/direct、blocking/nonblocking、sync/async、page cache

额外补:fork() 后 fd 继承、file offset 共享、page cache、writeback。

7. 设备管理

设备管理可以从“键盘敲入 A 字母发生了什么”切入。这个模块按一次设备事件展开。

主题Linux 落点
设备控制器MMIO/PIO、寄存器、DMA
设备驱动程序driver model、字符设备、块设备
I/O 软件分层VFS、block layer、request queue
中断处理IRQ、softirq、tasklet、workqueue

额外补:中断上下文不能随便睡眠,deferred work 为什么存在。

8. 网络系统

网络系统按 socket、收发包、零拷贝、I/O 多路复用和事件模型展开。

主题Linux 落点
Linux 如何收发网络包NIC、DMA、IRQ、NAPI、sk_buff、协议栈
文件传输性能page cache、零拷贝、sendfile()、splice()
I/O 多路复用select/poll/epoll、wait queue、ready list
Reactor/Proactor事件循环模型、同步/异步 I/O 边界
网络性能指标ss、ip、sar、tcpdump、BPF

额外补:XDP、tc BPF、netfilter、qdisc。

9. Linux 命令

命令部分不单独做成工具清单,而是给每个模块配观察入口。

模块命令入口
进程线程ps、top、pidstat、/proc/<pid>
内存free、vmstat、/proc/meminfo、/proc/<pid>/smaps
文件系统ls -li、stat、lsof、df、mount
I/Oiostat、pidstat -d、blktrace
网络ss、ip、tcpdump、sar -n
内核事件perf、ftrace、bpftrace

10. 额外 Linux 内核专题

这些内容作为扩展专题放在最后。

专题内容
read() 横切路径syscall、fd、VFS、用户地址、page cache、wait queue、调度
namespace / cgroup容器的隔离和资源控制机制
tracing / perf / BPFtracepoint、kprobe、uprobe、BPF map、verifier、BTF、CO-RE
Linux 内核源码阅读源码树、Kconfig、module、QEMU、oops/panic、patch workflow
最小实验用小代码或命令验证进程、调度、内存、文件、网络路径

参考资料

本文由作者按照 CC BY 4.0 进行授权