《一个64位操作系统的设计与实现》第2版发布:从零构建现代多核OS的进阶路径

《一个64位操作系统的设计与实现》第2版发布,聚焦现代多核OS从零实现。

冷月清谈:

图灵编辑部介绍了《一个64位操作系统的设计与实现》第2版的核心升级与学习价值。文章指出,现代软件开发虽然越来越依赖AI和高层框架,但系统性能优化、Linux内核理解、底层故障排查等能力,仍离不开操作系统与硬件体系结构知识。本书以Intel IA-32e 64位架构为基础,从UEFI引导、内核初始化、中断处理、内存管理、进程调度、系统调用、文件系统,到Shell和多核架构,完整呈现一个可运行操作系统雏形的构建过程。文章重点提到快速系统调用、VFS与FAT32文件加载、多核APIC与自旋锁、SLAB内存分配器等内容,强调其在理解现代内核设计、并发控制和内存管理方面的实践意义。新版试图在抽象理论与庞大的Linux源码之间搭建桥梁,帮助读者建立系统思维,并为内核开发、云原生、数据库、高性能计算和AI基础设施等方向打下底层基础。

怜星夜思:

1、现在AI都能写代码了,普通开发者还有必要啃操作系统这种硬核书吗?
2、从零实现一个64位操作系统,对理解Linux内核到底有多大帮助?
3、学习操作系统时,是先看理论教材,还是直接跟着项目动手写一个内核?
4、这类偏x86和Intel体系结构的书,在ARM、RISC-V越来越热的今天还值得读吗?

原文标题:重磅升级!经典神作《一个 64 位操作系统的设计与实现》第 2 版来了!

原文作者:图灵编辑部

原文内容

01 | 为什么真正的程序员,都绕不开操作系统?

很多开发者都会有类似的经历:学生时代觉得计算机课程过于抽象,真正进入软件行业后,才发现无论是系统性能优化、底层软件开发,还是排查疑难故障、阅读 Linux 内核源码,都离不开这些底层知识。

越深入系统软件领域,越会意识到,对底层原理的理解,决定着技术能力能够达到怎样的深度。

遗憾的是,目前市面上的不少操作系统实践资料,仍然建立在 Intel 32 位处理器和老旧虚拟平台的基础之上。对于初学者而言,这样的学习路径固然降低了门槛,但与现代计算机的真实运行环境仍存在一定距离。

《一个64位操作系统的设计与实现》自从上市以来,得到不少读者的喜爱。作者以 Intel IA-32e(64 位)体系结构为基础,从计算机启动开始,循序渐进地实现了一个能够运行在真实硬件上的多核操作系统。

如今,时隔 8 年,这本书终于迎来了第 2 版升级。全书既吸收了 Linux 内核多年来积累的设计思想,又不会让你直接面对庞大的 Linux 源码,而是通过一个完整的系统,为读者搭建起一条从理论走向实践、再迈向 Linux 内核开发的学习路径。

正如作者所希望的那样,这本书不仅讲述操作系统“是什么”,更希望帮助读者真正理解——现代操作系统为什么会这样设计,又是如何一步步运行起来的。

02 | 真正能帮你在日常开发中破局的“硬核干货”

这本书按照真实的操作系统开发流程层层推进,从环境搭建、UEFI 引导,到内核基石、中断处理、内存管理、进程调度、系统调用、文件系统,再到 Shell 与多核架构,完整呈现了一个现代操作系统雏形的构建全过程。

相比于死板的理论,书中这几个写得极其出彩、对实际研发非常有启发的知识点,尤为值得细细品味:

1. 彻底弄懂高性能内核的密钥:快速系统调用

平时写代码时,每一次调用系统 API, CPU 究竟经历了什么?很多人只知道“发生了上下文切换”,但并不清楚硬件层面是怎么完成的。

过去不少教程还在讲老旧的 int 0x80 软中断,但在现代 64 位 CPU 上,软中断的性能开销太大了。作者直接带你深入 Intel 硬件底层,去配置专门的 MSR 寄存器,手把手带你用现代 64 位专属的 SYSCALL 与 SYSRET 指令来实现系统调用。读完你就会恍然大悟:“原来工业级内核在用户态与内核态之间切换时,是这样做到极致高性能的。”

2. 从“扇区”到“运行程序”:打通数据在磁盘与内存间流动的闭环

一个只能在内存里跑死循环、不能从磁盘加载外部程序的操作系统,充其量只是个半成品。而很多开发者最渴望的成就感,就是让自己的系统能像 Linux 一样真正把外部程序跑起来。

书里的这部分内容写得极其通透:它没有一上来就丢给你一堆抽象概念,而是从磁盘最底层的扇区读写开始,带你手把手构建 VFS(虚拟文件系统)抽象层与 FAT32 文件系统解析器。从目录项查找、文件描述符(FD)管理,到最终把磁盘上的二进制可执行文件完整装载进内存并运行,带你完整走一遍操作系统真正活过来的全过程。

3. 直面真实的并发世界:多核 APIC 中断与自旋锁

在单核思维里,解决并发往往关中断就够了,但在现代多核 CPU 上,关中断根本挡不住其他核心对内存的抢占。

书中对现代多核架构的处理写得非常接地气。它不仅带你配置管理多核中断的 Local APIC 与 I/O APIC 控制器,还展示了 CPU 核心之间是如何通过“核间中断(IPI)”相互唤醒和传递信号的。更重要的是,它结合硬件级原子指令与自旋锁(Spinlock),把多核并发下的内存竞争与任务调度难题讲得明明白白,这些机制对于我们平时写高并发代码、理解分布式锁和底层同步原语,都有极强的借鉴意义。

4. 解决内存碎片的终极方案:手把手实现 SLAB 内存分配器

内核刚启动时,可没有 malloc 函数可用,所有的内存分配都得自己来。

书中深入借鉴了 Linux 内核最经典的 SLAB 动态内存分配思想,带你设计管理专有 Cache 与对象池。当你看到系统如何为进程描述符(task_struct)、文件对象等频繁创建的结构体快速分配内存,并且在此基础上构建出通用的 kmalloc 与 kfree 分配器时,你对内存碎片是怎么产生的、内核又是怎么高效利用内存的,会有全新的认识。

03 | 今时今日,我们为什么还要读这本书?

今天,越来越多的软件开发工作可以借助 AI 完成。一个提示词,就能生成几十甚至上百行代码。一个 Agent,就能快速搭建应用,完成自动化流程。

但 AI 能帮助我们写代码,却无法替代开发者理解系统为什么这样设计。

当程序性能异常、内核出现崩溃或进行底层系统调优时,真正决定解决问题能力的,依然是对 CPU 架构、内存管理、中断响应等底层机制的深刻洞察。

无论是从事 Linux 内核开发、底层软件编写,还是深入云原生、数据库、高性能计算以及 AI 算力基础设施等领域,扎实的操作系统底座知识都是不可或缺的核心竞争力。

然而,直接面对 Linux 数千万行源码,对于很多学习者而言门槛过高。

《一个64位操作系统的设计与实现(第2版)》提供了一条更加循序渐进的学习路径。它从零开始,带领读者一步步完成一个 64 位多核操作系统的设计与实现。读者不仅能够理解每一个知识点,更能建立起完整的系统思维。

AI 可以成为越来越优秀的程序员,但真正理解计算机底层的人,始终拥有更大的技术深度。这也是今天,我们依然值得好好去读一本操作系统书籍的原因。

04 | 关于本书

《一个64位操作系统的设计与实现(第2版)》

田宇 | 著

本书讲述了一个 64 位多核操作系统的自制过程。首先从虚拟平台构筑起一个基础框架,随后移植到物理平台中进行升级、完善与优化。

为了凸显 64 位多核操作系统的特点,物理平台选用搭载 Intel Core i7 处理器的笔记本电脑和台式计算机。与此同时,本书还将 Linux 内核的源码精髓、诸多官方白皮书以及多款常用协议浓缩于其中,使读者在看完本书后能够学以致用,达到理论联系实际的目的。

田宇,曾在多家大中型软件企业从事软件研发工作,长期专注于 Linux 内核、设备驱动及系统底层软件开发,参与多款高端嵌入式产品的研发,在硬件交互、系统调优和开源操作系统定制等方面积累了丰富的工程实践经验。

“本书从实现最简 64 位操作系统的基本功能入手,提供了一个 Linux 源代码以外的全新视角,让读者通过动手实践,对操作系统和 x86 体系结构有基本了解,从而对操作系统的设计与原理有更全面的领悟。” 

—— Oliver Yang(杨勇),阿里云操作系统团队资深总监,龙蜥社区技术委员会主席

“本书采用循序渐进的方式实现了一个 64 位多核操作系统雏形……作者还将 Linux 内核的诸多设计思想融入其中,这使得读者在阅读完本书后更容易理解 Linux 内核的整体结构与运行脉络。” 

—— 宋宝华Linux 内核资深技术专家,《Linux 设备驱动开发详解》作者

“本书通过一个简单而实际的操作系统实例,描述了 CPU 体系结构、进程管理、内存管理、中断处理的基础知识和代码实现,是通向 Linux 内核代码学习的一座桥梁。” 

—— 郭健OPPO 内核优化专家,蜗窝科技博主

“相比市面上很多针对单片机级别的精简内核图书,该书讲解了从内存管理到文件系统等核心内容,全面展现了一个现代操作系统的完整体系,是不可多得的操作系统入门及深入学习书。” 

—— 孟庆洋,谦川科技创始人

x86像老江湖,包袱多但故事也多;RISC-V像新青年,清爽但生态还在长。学哪个都行,关键是别只会背名词。能把一次中断从硬件到内核处理讲清楚,就已经超过很多人了。

1 个赞

如果你的目标是嵌入式ARM或RISC-V内核开发,那当然还要补对应架构手册。但先用x86把完整OS链路跑通,也不亏。很多底层能力是可迁移的,尤其是调试思路。

1 个赞

“AI会写代码所以不用学底层”这话听起来像“导航会指路所以不用知道刹车在哪”。平时确实省心,真到山路急弯或者车坏了,懂不懂原理差别巨大。

3 个赞

回应“AI都能写代码了还要不要学OS”:我觉得更有必要了。AI能补代码,但它不一定知道你的程序为什么在高并发下抖、为什么一次系统调用变慢、为什么内存碎片会把服务拖死。越是工具强,越需要人能判断它写出来的东西靠不靠谱。

3 个赞