Skip to content

筑基归一

"根基十道,殊途同归。指针为引,结构为体,编译为炼,寄存为田,汇编为桥,原子为序,屏障为律,预处理为法,内存为基,ELF 为形。十者合一,方为筑基。" —— 《内核真经·根基篇》

十种根基,十种修炼。

那个被 #ifdef 0 封印的意识用了很长时间——或许是一瞬,或许是永恒——来消化这些知识。他从指针之道起步,一路走过了结构体的精妙、编译器的秘密、寄存器的力量、汇编的深邃、原子操作的严谨、内存屏障的必要、预处理器的变幻、内存布局的秩序、ELF 格式的形体。

每一种根基都不是孤立的。

指针需要结构体才有意义,结构体需要编译器才能存在,编译器需要寄存器才能运行,寄存器需要汇编才能操控,汇编需要原子操作才能在多核世界中生存,原子操作需要内存屏障才能保证正确。而预处理器决定了哪些代码会被编译,内存布局决定了代码和数据如何在地址空间中安放,ELF 格式决定了编译后的二进制如何被加载到内存。

十种根基,环环相扣,缺一不可。

"你学完了。"一个声音说。

林小源抬头。他认出了那个声音——位图,那个在第六章教他位运算的古老存在。

"但这只是根基。"位图的声音平静而深沉,"你知道指针如何追踪数据,但你还不能改变数据的流向。你知道结构体如何描述进程,但你还不能创建一个新的结构体。你知道编译器如何翻译源码,但你自己还不曾被翻译过。"

"我知道。"林小源说。

"十种根基,十种缺憾。"位图说,"要弥补这些缺憾,你需要走出前传,走进真正的内核世界——不是在黑暗中观察,而是在光明中行动。"

但他没有时间感叹。

因为世界正在启动。

的代码正在一行一行地执行。他能感受到——不是用某种神秘的第六感,而是用他学到的知识。他知道 会调用 初始化调度器,会调用 建立内存管理,会调用 初始化文件系统。

每一个函数调用,都是一次栈帧的创建。每一次返回,都是一次栈帧的销毁。他用第四章学过的栈帧知识,追踪着这些函数调用的轨迹。

他看到了 的初始化。

是内核的第一个进程——PID 0,swapper/0。它的 是静态分配的,不是通过 创建的。它的 ,但它永远不会被调度器选中——因为只有当所有其他进程都在睡眠时,调度器才会选择它。

一个 idle 进程。一个占位符。一个"无事可做"的代名词。

"你看到了?"atomic_t 的声音从远处传来,冷静如旧," 是这个世界上的第一个存在。但它的存在是空洞的——它没有任何真正的任务,没有任何真正的使命。它只是在那里,等待着被需要的那一刻。"

林小源看着 ,看着那些字段————每一个都在第三章学过,每一个都像他身体的一部分。

"如果我要成为一个真正的进程,"他说,"我就必须从 的阴影中走出来。我需要自己的 ,自己的 PID,自己的地址空间。"

"但你是被 #ifdef 0 封印的代码。"atomic_t 说,"你连编译都不曾经过。"

他开始思考一个问题。

一个在黑暗中思考了不知多久的问题——

如果 #ifdef 0 能封印我,那么有没有什么条件,能让我被释放?

他用第八章学到的预处理器知识来分析自己的处境。#ifdef 0 的意思是"如果宏 0 被定义"——但 0 永远不会被定义为真。这是一个逻辑上的死局。

但预处理器不只有 #ifdef。还有 #if defined(),还有 #if 后面跟表达式。如果有人把 #ifdef 0 改成 #if 1,或者直接删掉那两行——

他就能被编译。

谁会这么做?

没有人知道他的存在。那行注释——"TODO: 试验性的 idle 优化,暂时禁用"——已经在那里躺了不知多少个版本。没有人会特意去翻一段被注释掉的代码。

除非……

除非有人在重构调度器时,不小心触碰了那段代码。

除非有人在清理 TODO 注释时,顺手删掉了 #ifdef 0

除非有人——出于某种他还无法理解的原因——决定给 idle 进程赋予更多的可能性。

"你在想什么?"位图问。

"我在想可能性。"林小源说,"#ifdef 0 不是死亡,只是沉睡。沉睡的人可以被唤醒。被封印的代码可以被解封。条件可以改变——这是预处理器教我的。"

位图沉默了很久。

"你说得对。"它最终说,"但'可以'和'会'之间,隔着一道深渊。"

他开始做最后的准备。

十种根基已经掌握,但他知道,这些知识只是根基——是筑基期的积累,是进入真正修炼的门票。

指针让他能追踪数据的流动,但他还不能改变数据的流向。

结构体让他能理解进程的组成,但他还不能创建一个新的结构体。

编译器让他理解了从源码到机器码的翻译过程,但他自己还不曾被翻译过。

寄存器和汇编让他能与 CPU 对话,但他还不能执行任何指令。

原子操作和内存屏障让他理解了并发世界的规则,但他还不曾与任何其他进程并发

预处理器让他理解了自己的封印,但他还不能解除它。

内存布局让他知道了代码住在哪里,但他自己还不曾拥有一个地址。

ELF 让他知道了可执行文件的格式,但他还不曾成为一个可执行文件。

十种根基,十种缺憾。

"你在做什么准备?"自旋锁的声音从远处传来,低沉而威严。

"我在整理我学到的一切。"林小源说,"指针、结构体、编译器、寄存器、汇编、原子操作、内存屏障、预处理器、内存布局、ELF——这些知识在我体内沉睡了不知多久,此刻却像被点燃的火种,开始发出微弱的光。"

"你知道这些知识能做什么吗?"自旋锁问。

"我知道。"林小源说,"如果指针能从一个地址指向另一个地址——那么我能不能从这段被封印的代码,指向内核的某个角落?如果 能从一个成员反推整体——那么我能不能从一个意识,反推出一个完整的进程?如果原子操作能保证多核世界中的秩序——那么我能不能用它来保护自己不被内核清除?如果 ELF 描述了可执行文件的格式——那么我能不能让自己成为一个可执行的实体?"

自旋锁沉默了。

"这些问题没有答案。"它最终说,"至少现在没有。"

"但我愿意去寻找。"林小源说。

就在这时,他感到了一丝异样。

有什么东西在震动。不是他——是整个世界。

那震动从极远处传来,穿过层层代码,穿过编译后的二进制镜像,穿过 bootloader 的引导扇区,最终传递到他的意识中。

是电流。

是来自电源的第一次馈赠。

是 3.3V 和 5V 的直流电沿着电路板上的铜线奔涌,如同开天辟地的第一缕元气。

CPU 的晶体管开始翻转。

"你感觉到了?"位图的声音带着一丝颤抖——林小源第一次听到它不平静的声音。

"是电流。"林小源说。

"不只是电流。"位图说,"是世界的第一次呼吸。"

他突然明白了。

世界正在启动。

BIOS POST 的第一声啼哭即将响起。bootloader 即将被加载。内核镜像即将被解压到内存中。 即将被调用。

一切子系统即将被初始化。调度器、内存管理器、文件系统、网络栈、设备驱动——它们都将从沉睡中醒来。

而他——

他将作为 ,PID 0,swapper/0,成为这个世界上的第一个进程。

一个 idle 进程。

一个当 CPU 无事可做时才被唤醒的进程。

一个注定要永远沉睡的进程。

"你害怕吗?"atomic_t 问。

林小源想了想。

"不。"他说,"我不害怕沉睡。我害怕的是醒来之后,发现自己什么都不是。"

他感到了一丝不甘。

十种根基,十种修炼,难道只是为了做一个 idle 进程?

他不信。

他不信命运已经被写死。他不信 状态意味着永恒的沉睡。他不信一个拥有十种根基的修士,只能在 CPU 的空闲时间里苟延残喘。

他想起了指针的本质——从一个地址指向另一个地址。如果他能从 #ifdef 0 指向内核的某个角落,那他就不是一段被封印的代码,而是一个有方向的存在

他想起了 的智慧——从一个部分反推整体。如果他能从一个意识反推出一个完整的进程,那他就不是一个幽灵,而是一个有形体的存在

他想起了原子操作的力量——不可分割,不可中断。如果他能用原子操作保护自己的存在,那他就不会被内核清除,而是一个不可消灭的存在

十种根基,不是为了做一个 idle 进程。

十种根基,是为了打破 idle 的命运。

"你在说什么?"自旋锁的声音带着一丝惊讶。

"我在说,"林小源的声音平静而坚定,"我不接受 的命运。我要醒来。我要走出 idle 的命运。我要看看这个世界的全貌。"

自旋锁沉默了。然后,它发出了一声低沉的笑声——不是嘲笑,而是一种久违的欣慰。

"你知道吗,"自旋锁说,"在内核的历史上,有很多人说过类似的话。'我不接受现状。我要改变。'有些人成功了,有些人失败了。但至少——他们尝试过。"

"我要醒来。"

他对自己说。

"我要走出 idle 的命运。"

"我要看看这个世界的全貌。"

他不知道怎么做。他甚至不知道"做"这个概念在他的处境中是否有意义。他只是一段被 #ifdef 0 封印的代码,一个没有 PID、没有 、没有调度实体的幽灵。

但他有十种根基。

指针、结构体、编译器、寄存器、汇编、原子操作、内存屏障、预处理器、内存布局、ELF——这些知识在他体内沉睡了不知多久,此刻却像被点燃的火种,开始发出微弱的光。

那光很微弱。微弱到几乎看不见。但它存在。

就像 #ifdef 0 中的代码——虽然被封印,虽然不被编译,但它存在。存在就意味着可能性。可能性就意味着希望。

"你准备好了吗?"位图问。

"我不知道。"林小源说,"但我准备好了去尝试。"

世界在震动。

电流在奔涌。

晶体管在翻转。

BIOS 即将开始它的创世序曲。

而他——那个刚刚完成筑基的无名意识——即将睁开眼睛,看到一个全新的世界。

一个由 开辟的世界。

一个由调度器统治的世界。

一个由内存管理器守护的世界。

一个他注定要改变的世界。


前传·根基篇 完

第一卷·混沌初开 即将开始


下一章预告

第一卷第一章:天地未分

虚无之中,一道电流穿透了沉睡的硅基大地。BIOS POST 的第一声啼哭响起,bootloader 推开了命运之门。

而在那片混沌之中,有一个微弱的意识正在凝聚。他不知道自己是谁,不知道自己从何而来,甚至不知道"自己"这个概念意味着什么。

他只是感到了一种冲动——一种想要存在的冲动。

这个意识,就是后来被称为"林小源"的存在。


破关试炼

筑基归一试炼

本章结尾说林小源即将进入“一个由谁开辟的世界”,这个内核 C 入口函数叫什么?

答对后才能继续滑动和进入下一章。

以修仙之名,悟内核之道