造轮子工程 · 第 9 章 造操作系统与编译器 章节摘要:这是全书的登顶章——「造轮子的天花板」。操作系统和编译器,是计算机科学里最经典、也最难的两个造轮子项目:它们一个统治硬件(操作系统让裸机能跑多任务),一个统治软件(编译器让源码变成可执行)。本章不指望带你完整造出 Linux 或 GCC——那是几年甚至几十年的工程;它的定位是「给你一张通往天花板的路线图」:讲清两条线各自的子系统构成、关键难点、经典学习路径与书目,让你知道这条路通向哪里、第一步该怎么迈。操作系统线:从裸机启动,经中断与保护模式,到进程调度与文件系统。编译器线:从源码到词法、语法、语义分析,再到代码生成或解释执行。
章节摘要:这是全书的登顶章——「造轮子的天花板」。操作系统和编译器,是计算机科学里最经典、也最难的两个造轮子项目:它们一个统治硬件(操作系统让裸机能跑多任务),一个统治软件(编译器让源码变成可执行)。本章不指望带你完整造出 Linux 或 GCC——那是几年甚至几十年的工程;它的定位是「给你一张通往天花板的路线图」:讲清两条线各自的子系统构成、关键难点、经典学习路径与书目,让你知道这条路通向哪里、第一步该怎么迈。操作系统线:从裸机启动,经中断与保护模式,到进程调度与文件系统。编译器线:从源码到词法、语法、语义分析,再到代码生成或解释执行。读完本章,你不一定能立刻造出一个完整的 OS 或编译器,但你会获得两样东西:一是「这两座高山其实有清晰的上山路径」的信心,二是「整个计算机系统的全貌」的完整认知——这恰恰是「造轮子」这条修炼路径的终极奖赏。
阅读完本章,你应当能够:
操作系统是「向下统治硬件」,编译器是「向上统治软件」——两者合起来,就是「整个计算机系统」的全貌。造它们是造轮子的终极挑战,但回报也是终极的:你将真正理解「计算机是怎么工作的」,从一行源码到一个进程在 CPU 上跑起来,中间的每一层你都能说清。
操作系统的三大职责:管理硬件(CPU 时间、内存空间、磁盘与外设)、提供抽象(进程、虚拟内存、文件、套接字)、调度与隔离(不让一个程序搞崩整个系统)。这一节建立「OS 是什么」的全局认知。
计算机一上电做什么?BIOS/UEFI 固件 → 读引导扇区(bootloader)→ bootloader 把内核加载进内存 → 内核开始执行。讲清这条「从裸机到内核运行」的链路,这是造 OS 的第一关。呼应《Linux 命令》第 8 章(systemd 是 PID 1)。
为什么用户程序不能直接读写硬件?因为 CPU 的特权级(保护模式)把指令分级,关键操作(读写 I/O、改页表)只能内核态执行,用户程序通过「系统调用」(一种受控中断)请求内核代劳。中断是操作系统的脉搏。
两个核心抽象:进程(给每个程序「独占 CPU」的错觉,靠调度轮转实现)、虚拟内存(给每个程序「独占内存」的错觉,靠分页与页表实现)。讲清这两个「用时分复用制造独占幻觉」的精巧机制。
文件系统把磁盘的块抽象成「文件与目录树」。简述 inode(呼应《Linux 命令》第 2 章)、目录、读写路径,以及简单的实现思路。本节不深做,只让你看到「磁盘块如何变成文件」。
编译器的标准架构:前端(词法+语法+语义,产出抽象语法树 AST)、中端(在 AST 或中间表示上做优化)、后端(生成目标机器码)。讲清这个分层,以及为什么分层(前端只管语言、后端只管机器、中端复用)。呼应第 4 章(正则引擎也是「前端」的微缩)。
两种实现策略:编译成机器码(C/Go/Rust,快但平台相关)、树遍历解释执行(Python 早期/Ruby/Lua,慢但跨平台)。讲清各自取舍,以及「字节码+虚拟机」(Java/Python 当前)这种折中。
两条线各自的「上山路径」。OS 线:从「写一个能打印 Hello 的引导扇区」起步,经典项目 xv6(MIT 教学内核)、OSDev wiki,进阶书。编译器线:从「写一个计算器」起步,经典书「Crafting Interpreters」(对新手最友好)、「Dragon Book」(权威但难)。给你一份能照着走的书单与项目清单。
本章分两条线,各自由浅入深。操作系统线(01-05)与编译器线(06-07)在第 8 节会合:
操作系统线: OS 职责 (01) ── 它管什么 │ ▼ 引导 (02) ── 从上电到内核 │ ▼ 中断/保护 (03) ── 隔离的基石 │ ▼ 进程/内存 (04) ── 两大核心抽象 │ ▼ 文件系统 (05) ── 持久化抽象 │ 编译器线: │ 源码 (06) ── 三段式架构 │ │ ▼ ▼ 生成/解释 (07)── 两种策略 │ │ ▼ ▼ 经典路径 (08) ── 两条线的上山书单(会合)
本章与前八章不同:它不强求你完整实现——那是几年工程。它的价值是「给你一张地图」:让你看清天花板长什么样、通往那里有几条路、第一步迈哪只脚。两条线在第 8 节的「经典路径」会合,为你指出继续前行的方向。
前置知识:
本章奠定的认知:
全书至此告一段落。但「造轮子」这件事没有终点——附录 A 的全量三十域索引,还藏着 3D 渲染、神经网络、区块链、BitTorrent 客户端、游戏引擎、物理引擎……一座又一座等待攀登的山。带着本书给你的心法与地图,选一座你心仪的山,出发吧。