从零写OS内核——一本书,搞懂操作系统核心
关于这本书
这是一本从零动手写操作系统内核的实践型教程。
市面上的操作系统教材,要么是厚厚的理论书,翻几页就睡着;要么是直接贴代码,读者根本不知道”为什么这样设计”。这本书不一样——每一章都是一次完整的编码工作,从最底层的硬件初始化开始,一行一行把内核搭起来。
我们最终要做成一个可以在真实 x86_64 硬件上启动的微型操作系统,支持虚拟内存、进程调度、文件系统、设备驱动,甚至自带一个简单的命令行 Shell。它不是玩具,而是一个结构完整、思路清晰的真实内核雏形。
你会学到什么
- CPU 启动与固件协议:BIOS/MBR → UEFI + GPT,理解计算机上电后发生了什么
- 分页与虚拟内存:从实模式到保护模式,构建进程隔离的地址空间
- 物理内存管理:Buddy 系统、Slab 分配器,工业级内存管理的原理与实现
- 进程与调度:上下文切换、调度算法、多核支持,让多个任务真正并发运行
- 文件系统:VFS 抽象层、ext2 实现,建立统一的文件接口
- 设备驱动框架:设备模型、devfs、字符/块设备,写驱动不再神秘
- 图形与窗口:Framebuffer、Display Server、LVGL 集成,做出带窗口的图形界面
- 网络基础:TCP/IP 协议栈入门,用 socket 拿百度首页
- 用户态工具链:自己实现 ls、cat、mkdir 等基础命令
内容结构
全书分为六卷:
第一卷:启动与基础设施(第1~6篇)
从最底层讲起:Multiboot 协议、进入保护模式、启用分页机制、构建栈和堆。你的内核将在这一卷获得”活下去”的基本能力。
第二卷:进程与内存(第7~17篇)
进程是怎么来的?fork/exec 的本质是什么?虚拟内存区域(VMA)如何管理?这一卷深入操作系统最核心的两大子系统。
第三卷:文件系统(第18~21篇)
打通 VFS 抽象层,实现 ext2 文件系统,让内核具备持久化存储能力。用户程序加载、动态链接,全部基于这套文件系统。
第四卷:图形与窗口(第22~30篇)
从Framebuffer 到 Display Server,再到 LVGL 集成,做出一个带窗口、鼠标支持的图形桌面雏形。窗口管理器、事件分发、组件布局——全亲手写。
第五卷:设备与驱动(第31~35篇)
设备模型、devfs、PCIe 驱动框架、e1000 网卡驱动。理解 Linux 设备驱动模型的设计思想,并将其应用于自己的内核。
第六卷:网络与进阶(第36~最终篇)
TCP/IP 协议栈实现、用 socket 读取 HTTP 页面、多核与并发进阶。结尾章节会把手写内核与真实 Linux 的设计做对比,帮助你建立更大的全局视野。
学习路径建议
新手路线(第1篇 → 第35篇,一路跟做)
按顺序阅读,每篇都有完整可运行的代码。建议在 QEMU + GDB 中单步调试,理解每一步的寄存器状态变化。
工程师路线(先通读理论章节,再动手补全代码)
有些章节偏原理性(内存管理、调度器),可以先快速通读设计思路,再回到具体实现对照阅读。
进阶路线(第35篇之后 + 源码对照 Linux)
结尾章节提供了大量与 Linux 内核的对照说明,适合有一定基础的同学对比学习。
预备知识
- C 语言:能读懂指针、结构体、位运算即可,无需精通模板元编程
- 计算机组成原理:初中级水平足够,知道 CPU、内存、寄存器是什么
- 命令行基础:会 gcc 编译、会 qemu 启动即可,其他全在书里手把手教
不要求你懂汇编(本书会随用随讲 x86 汇编),不要求你学过操作系统(但最好有好奇心),不要求任何”造诣”——只需要一台电脑,和一个愿意动手的决心。
代码说明
本书所有代码均为完整可运行的production-ready 代码,每一篇的代码都经过实际启动验证(QEMU + 真实硬件双验证)。每篇开头会说明本篇的代码仓库版本,结尾会给出常见坑的解决方案。
代码仓库地址:[GitHub 仓库](书出版后补充)
一起交流
学习过程中遇到问题,欢迎在评论区留言。每篇内容都配套有对应的微信公众号文章,扫码即可参与讨论。
写这本书的初衷很简单:让真正想理解操作系统的人,有一个可以跟着动手的真实起点。不再被”内核太难了”吓退,不再对着万亿行代码发呆。从零开始,一行一行,我们把内核写出来。
评论