---
title: Linux 内核：沿一次程序运行学习
url: https://doc.liz6.com/linux-kernel/00-learning-path
locale: zh
area: linux-kernel
tags:
- Linux 内核
date: 2026-09-12
modified: 2026-09-12
description: 围绕“启动程序、访问内存、读取文件、阻塞与唤醒”解释内核职责，并用一段可重现的观测支撑自己的解释。
---

# Linux 内核：沿一次程序运行学习

适合会读 C 指针、结构体和基本并发代码，能在 Linux 中编译运行小程序的读者。先理解用户态进程、文件描述符和系统调用；不足时先走[系统编程路线](../systems-programming/00-learning-path.md)。内核版本影响结构和路径，阅读源码时记录所用版本，不把某个字段当作永恒接口。

## 学完要能做什么

围绕“启动程序、访问内存、读取文件、阻塞与唤醒”解释内核职责，并用一段可重现的观测支撑自己的解释。

## 必读顺序与阶段自检

1. [task_struct 与进程生命周期](01-process-management/01-task-struct-and-process-lifecycle.md) → [虚拟内存：从一条访存指令理解页表、缺页与 TLB](02-memory-management/01-virtual-memory.md)。

   从进程启动和第一次访问一页内存进入。自检：区分虚拟地址、页表映射、缺页与存储数据本身；能指出进程状态与执行线程的关系。

2. [VFS：从路径名到打开的文件](03-file-system/01-VFS.md) → [块设备层](07-block-device-layer/01-block-device-layer.md)。

   跟踪一个小程序的 open/read/close，把路径查找、打开文件、缓存和设备请求分开。自检：重复读取未必触发新的设备 I/O，必须结合观测说明是哪一层命中。

3. [锁机制与内存顺序](05-synchronization-mechanisms/01-locking-mechanisms.md) → [eBPF 基础](08-ebpf-and-observability/01-ebpf-basics.md) → [调试与测试](11-kernel-development-and-build/02-debugging-and-testing.md)。

   先识别共享对象、生命周期与执行上下文，再选观察工具。自检：一次等待与一次忙等有何差别；观测到的调用次数为何不能直接推出锁正确。

## 选读与前置边界

[RCU](05-synchronization-mechanisms/02-RCU.md)在生命周期与内存顺序之后读；容器走[namespaces](12-containers-and-primitives/01-namespaces.md)和[cgroup](12-containers-and-primitives/02-cgroup.md)；网络走[协议栈概述](06-network-subsystem/01-network-protocol-stack-overview.md)。驱动、DMA、KVM 与电源管理按实际问题进入，不是第一个程序的前置。

## 完成主线的交付物

交付一个打开并两次读取文件的小程序、运行环境与内核版本、系统调用或跟踪输出，以及从用户态到内核的解释。至少写出一个“这份输出还不能证明”的结论。性能问题接[排队论](../theory/03-queueing-theory/index.md)，先区分资源利用率与排队等待。

首次阅读允许跳过长证明和实现细节，但要先完成各阶段自检。出现“知道术语、解释不了结果”时，回到当前例子改变一个条件，再进入下一篇；不需要先通读整个目录。
