Linux 源码趣读

@闪客 著(可以关注我的公众号:闪客)

内容简介

本书用读一本小说的心态来去阅读 Linux 0.11 的源码,跟着我一起读下去,你会对整个操作系统的体系结构和逻辑细节有着非常清晰地认识,并从此爱上阅读更多的操作系统源码。

  • 第一部分:进入内核前的苦力活。覆盖从开机到 Linux 下的 main 方法的关键流程解析,并帮你清晰认识 Intel CPU 的体系结构
  • 第二部分:大战前期的初始化工作。讲述 main 方法中的各种初始化函数,这些函数是操作系统各个模块的交互桥梁,为理解后续操作系统各个模块的运作原理打好基础。
  • 第三部分:一个新进程的诞生。讲述从内核态切换至用户态,并建立起第一个用户进程的全部过程。学完这部分,你将会理解一个多进程的操作系统是如何建立和运作的。
  • 第四部分:shell 程序的到来。 主要讨论如何将磁盘中存储的 shell 程序加载到内存中来,并最终交给 CPU 去执行。通过这个过程你会看清一个程序从硬盘到最终被执行的全部过程。
  • 第五部分:一条 shell 程序的执行。让我们跟着一条 shell 程序“走南闯北”,从用户输入给电脑一个字符串开始,一直讲到该程序的最终执行,这一过程能帮你把前面所学融会贯通,整个操作系统的启动流程与运作原理,将会生动形象地浮现在你的脑海中。

前言

每个程序员都有一个操作系统梦,而操作系统也是每个程序员的心结。

很粗糙地了解一点操作系统知识,一知半解的,已经无法满足当下程序员的口味了。但要说深入剖析操作系统,又是大部分程序员都很惶恐的一件事。那如果是要读一遍操作系统源码,那简直跟要了命一样。

其实,操作系统的源码并没有那么可怕,也很多优秀的操作系统书籍都是以 Linux 0.11 这个经典版本为研究对象进行讲解的,可为什么即便是 Linux 0.11 这种代码量最少的版本,仍然令很多人望而却步呢?

先不直接回答这个问题,我们看一下 《天龙八部》 的最开头。

青光闪动,一柄青钢剑倏地刺出,指向中年汉子左肩,使剑少年不待剑招用老,腕抖剑斜,剑锋已削向那汉子右颈。那中年汉子...

记住这个感觉没?我们再看一下 《Linux 内核设计的艺术》 的最开头。

对于操作系统而言,稳定且可靠地运行是最重要的。现行技术方案是将用户进程与用户进程之间、用户进程与操作系统之间进行分离,操作系统可以管理用户进程,但是用户进程之间不能相互干预 ...

好了,不用读下去了,这句话看似高瞻远瞩地从宏观上帮我们梳理操作系统体系结构,但对于尚不了解操作系统的人来说,完全不知道它在说什么,只有劝退的作用。

虽然说思想很重要,但你在没有任何细节做积累时去强行进行思想的拔高,是拔不上去的,还不如一直保持一张白纸的状态。

反观《天龙八部》的开头,连人物的名字都没有,更别说梳理整个体系结构了,直接上来一个精彩镜头,让你迅速进入故事情节。可是读完整部小说的读者,无一不对里面的人物如数家珍,对大理的风光仿佛亲眼看见了一般,对宋辽矛盾的激烈感同身受。

为什么会这样呢?因为一切的爱恨情仇和民族矛盾,都是我们通过一个个人物和事件的刻画,感悟出来的。**只有自己感悟出来的知识和靠自己总结出来的结论,才真正属于自己。**而那些一上来就试图把整个脉络给你梳理清楚的尝试,对于新手来说无一不是徒劳,即便是死记硬背记住了,也终究不是属于自己的知识,无法感同身受。

我学操作系统的过程中,也有这样的感觉。

我曾一次次试图从一个上帝视角来看操作系统的知识体系,从宏观层面跟着大部头书籍梳理操作系统的整体逻辑,我发现无一不是以失败告终。而当我放下包袱,用读一本小说的心态来去阅读 Linux 源代码时,我发现,我从来没有去想着梳理出什么体系,但不知道从哪一行代码开始,整个操作系统的体系结构已经较为清晰地出现在我面前了,竟是那么的不知不觉。而且我也清晰地知道,这样的体系是怎么一步步从第一行代码开始,逐步建立起来的。

所以,我想把我的这个过程毫无保留地分享给大家,于是在 2021 年 11 月 8 号,我在我的公众号【低并发编程】开始陆续连载 Linux 0.11 源码趣读这个系列,于 2022 年 09 月 06 号发布最后一篇文章完结,共 50 回。

在这个过程中,我收获了一大批对该系列感兴趣的读者,不断有读者对这个系列提出自己的想法、改进建议、内容勘误,甚至有不少读者整理自己的"读书笔记"发给我。这些事让我非常感动,也是我能坚持下来不断更新并优化的动力。

后来,越来越多的读者建议我把这个系列整理成书,沉淀下来,我也越来越觉得这件事情非常有意义,我也十分愿意去做,于是便有了这本书。

本书特色

本书用读一本小说的心态带你一起阅读 Linux 0.11 的源码,用通俗的语言打破你对操作系统源码的恐惧。

当然,只是用读小说的心态,并不是说将里面的各种技术都采用拟人化的方式讲解,而是按照 Linux 0.11 源码的执行顺序,像按照时间线阅读一本小说一样,本着探索与发现的心态来阅读,你会发现,原来阅读源码这么有趣,也会像看小说一样有种"上头"的感觉。

同时,本书在讲解晦涩难懂的技术原理和细节时,配有大量生动形象且准确的图解,让你有"画面感。

读者对象

如果你是一个程序员,但是计算机底层知识相对薄弱,又一直没有一个深入学习的突破口,那本书很适合你。

如果你是一个学生,不想仅仅停留在课堂上对操作系统概念上的理解,想要深入源码细节来加深自己的理解,那本书很适合你。

如果你是非技术相关的朋友,但是对操作系统非常感兴趣,或者想找到一个契机来较为深入地了解计算机的原理,那本书很适合你。

勘误与支持

由于作者水平有限,书中难免会出现一些错误或不准确的地方,恳请广大读者朋友批评指正。

致谢

感谢微信公众号"闪客"的读者们,你们对该系列的支持是我坚持下去的动力。

感谢微信公众号“码农翻身”的作者刘欣,是我公众号成长道路上的引路人。

感谢成都道然科技有限责任公司的姚新军(@长颈鹿27)老师,在本书的创作过程中提供了非常多的建议和帮助,也是我人生中第一本出版书籍的引路人。

谨以此书献给一路关注我支持我的读者朋友们,希望所有喜欢计算机的朋友们都能在书中收获知识和快乐!

闪客