Linux 内核

🧭《深入理解 Linux 内核(2.6.11)》 → Linux 6.x 源码结构对照与学习导引 🧩 一、系统整体结构 模块 书中章节 Linux 2.6 路径 Linux 6.x 路径 说明 内核入口(启动流程) 第 2 章 arch/i386/kernel/head.S, init/main.c arch/x86/kernel/head_64.S, init/main.c 入口逻辑相似:仍是 start_kernel(),但支持多架构(x86, ARM, RISC-V) 系统调用入口 第 10 章 arch/i386/kernel/entry.S, arch/i386/kernel/traps.c arch/x86/entry/entry_64.S, kernel/syscall_table.S 系统调用表机制相同,但入口汇编和 syscall wrapper 重写 内核初始化流程 第 3 章 init/main.c init/main.c 主干逻辑仍是 start_kernel() → rest_init() 🧠 二、进程与调度(Process & Scheduler) 模块 书中章节 2.6.11 路径 6.x 路径 说明 进程描述符 第 3–4 章 include/linux/sched.h, kernel/fork.c include/linux/sched.h, kernel/fork.c task_struct 结构仍然存在,字段大幅扩展(多 CPU、NUMA 支持) 进程创建 第 3 章 kernel/fork.c kernel/fork.c 核心函数仍是 do_fork() / copy_process() 进程终止 第 3 章 kernel/exit.c kernel/exit.c 逻辑基本相同 调度器 第 7 章 kernel/sched.c(O(1) 调度器) kernel/sched/core.c, kernel/sched/fair.c(CFS 调度器) 📌 最大差异:现代内核使用 CFS(完全公平调度器)取代了 O(1) 睡眠与唤醒 第 7 章 kernel/sched.c kernel/sched/core.c 同样通过 wait_queue 与 schedule() 🧮 三、内存管理(Memory Management) 模块 书中章节 2.6.11 路径 6.x 路径 说明 页框分配 第 8 章 mm/page_alloc.c mm/page_alloc.c 概念一致(buddy system),但支持 NUMA / CMA / ZONE_DEVICE 虚拟内存管理 第 9 章 mm/mmap.c, mm/mprotect.c mm/mmap.c, mm/mprotect.c vm_area_struct、mm_struct 概念仍相同 页面换出 第 15 章 mm/vmscan.c mm/vmscan.c 逻辑相似但复杂度大幅提升 Slab 分配器 第 8 章 mm/slab.c mm/slub.c, mm/slab_common.c 默认使用 SLUB(比 Slab 更简洁高效) 🧱 四、中断与异常(Interrupts & Exceptions) 模块 书中章节 2.6.11 路径 6.x 路径 说明 中断描述 第 4 章 arch/i386/kernel/irq.c, kernel/irq/handle.c kernel/irq/ 下多文件(manage.c, chip.c, spurious.c 等) 2.6 时是单文件,现在模块化程度更高 中断上下文切换 第 4–5 章 arch/i386/kernel/entry.S arch/x86/entry/entry_64.S 汇编层实现更新为 x86_64 调用约定 软中断、tasklet、工作队列 第 4–5 章 kernel/softirq.c, kernel/workqueue.c kernel/softirq.c, kernel/workqueue.c 概念完全保留 💾 五、文件系统(VFS & FS) 模块 书中章节 2.6.11 路径 6.x 路径 说明 虚拟文件系统层(VFS) 第 12 章 fs/namei.c, fs/open.c, fs/read_write.c fs/namei.c, fs/open.c, fs/read_write.c 几乎同名路径,代码更复杂 inode / dentry 机制 第 12 章 fs/inode.c, fs/dcache.c fs/inode.c, fs/dcache.c 概念完全相同,接口丰富 文件系统注册 第 13 章 fs/super.c fs/super.c 仍然是 register_filesystem() Ext2 文件系统 第 14 章 fs/ext2/ fs/ext4/ 现代系统几乎都使用 ext4 取代 ext2 🔌 六、设备驱动与内核模块(Driver & Module) 模块 书中章节 2.6.11 路径 6.x 路径 说明 模块加载机制 第 20 章 kernel/module.c kernel/module/(目录化) 模块系统大改:支持 LTO、压缩、Rust 模块等 设备驱动模型 第 13 章 drivers/base/ drivers/base/ 书中介绍的 kobject/kset/driver model 仍是基础 字符设备 第 13 章 drivers/char/ drivers/char/ 仍可用同样机制注册字符设备 ⚙️ 七、同步机制(Synchronization) 模块 书中章节 2.6.11 路径 6.x 路径 说明 自旋锁、信号量 第 5 章 kernel/spinlock.c, kernel/semaphore.c kernel/locking/ 完全独立成 kernel/locking/ 模块 RCU(Read-Copy-Update) 第 5 章 初步存在 kernel/rcu/ 现代内核的核心机制之一 原子操作 第 5 章 include/asm/atomic.h include/linux/atomic/ 已高度泛化并支持多架构实现 🌐 八、网络子系统(Networking) 模块 书中章节 2.6.11 路径 6.x 路径 说明 网络协议栈 第 18–19 章 net/ipv4/, net/core/ net/ipv4/, net/core/, net/ipv6/ 路径相同,但功能极大增强(XDP、eBPF) Socket 实现 第 18 章 net/socket.c net/socket.c 接口一致,内部实现复杂化 eBPF 无 无 kernel/bpf/, tools/bpf/ ⚡ 新增:现代 Linux 内核的重大特性 🧩 九、核心入口函数速览(Linux 6.x 仍保留的经典符号) 功能 函数名 路径 内核启动 start_kernel() init/main.c 系统调用 sys_* 系列 kernel/sys_*.c 进程调度 schedule() kernel/sched/core.c 创建进程 do_fork(), copy_process() kernel/fork.c 虚拟内存管理 do_mmap(), do_munmap() mm/mmap.c 文件打开 do_sys_openat2() fs/open.c 读写文件 vfs_read(), vfs_write() fs/read_write.c 🧭 十、推荐的现代学习路线图(结合你的环境) 阶段 内容 对应实践 阶段 1:结构导览 通读 ULK 前 3 章 + 对照 init/, kernel/, arch/x86/ 阅读 init/main.c 中的 start_kernel() 阶段 2:进程调度与内存 对照书中第 3–9 章 阅读 kernel/sched/ 与 mm/page_alloc.c 阶段 3:VFS 与系统调用 书中第 10–14 章 对照 fs/ 与 arch/x86/entry/ 阶段 4:同步与驱动模型 书中第 5、20 章 查看 kernel/locking/, drivers/base/ 阶段 5:现代特性探索 eBPF、io_uring、cgroups、namespaces 阅读 kernel/bpf/, fs/io_uring.c, kernel/cgroup/ ✅ 总结 你完全可以用 Linux 6.x + OrbStack 学《深入理解 Linux 内核》。 ...

April 9, 2026 · 7 min · Theme PaperMod