你有没有过这种经历——操作系统这门课学完了,考试也过了,但脑子里全是抽象的概念:进程、内存管理、文件系统……它们到底怎么在机器里跑起来的?完全没概念。我就是这样。学了四年计算机,简历上写着“熟悉操作系统”,但心里虚得很。直到翻开这本书,才发现原来操作系统不是只能靠想象去理解的东西。它把一万多行内核代码一行一行拆给你看,让你知道那些高大上的概念,落地之后长什么样。
关于这本书
《Linux内核完全注释》由赵炯编著,机械工业出版社2004年出版。赵炯是同济大学工学博士,研究方向为计算机通信-。这本书选择Linux 0.11版本的内核作为研究对象,全部源代码只有大约一万四千行。全书共13章,涵盖内核体系结构、进程控制、内存管理、文件系统等内容-。这本书曾被《中华读书报》评为“2004年度十大电脑图书”之一-,豆瓣评分8.5分。
三个让我重新认识“学习”的观点
第一,学复杂的东西,最好的办法是找那个“最小但完整”的版本。Linux内核如今有几千万行代码,谁也不可能从头看到尾。但这本书选的0.11版本只有一万多行,却“五脏俱全”,操作系统中涉及的基本功能都包括了。真正的高手不是一上来就啃最难的东西,而是会找一个足够小、足够完整的样本,把它彻底吃透。这个道理放在任何领域都管用——你想学写作,别一上来就模仿大师的长篇,先拆一篇千字好文;你想学做菜,别一上来就做满汉全席,先把一道番茄炒蛋做到极致。
第二,“逐行阅读”不是笨办法,是最快的捷径。有人说这本书就是“代码注释堆出来的”,没太大技术含量-。但恰恰是这种“笨功夫”最有价值。读源码最怕什么?最怕看一行忘一行,不知道这段代码在整个系统里扮演什么角色。这本书把每一行代码在干什么、为什么这么写,都掰开揉碎讲清楚了-。“嚼烂了喂给你”听起来不高级,但对于入门的人来说,有人愿意嚼烂了喂你,是你的福气。等你把这一万多行啃下来,再去看现代内核,会发现很多底层逻辑是相通的。
第三,理解一个系统,要从“它怎么启动”开始。这本书最经典的部分是开头的几章——makefile、80386的保护模式、内存寻址、引导启动程序。很多人学操作系统,上来就学进程调度、文件系统,但这些都是在操作系统已经跑起来之后的事。一个系统最核心的秘密,往往藏在它“从0到1”的那个过程里。计算机怎么从通电到把操作系统加载进来?这个链条搞清楚了,后面所有东西都有了根基。
这本书怎么帮到我
说实话,我到现在也没把这本书完全啃完,但它确实改变了我学技术的方式。
分享三个我从这本书里“偷”来的方法:
第一,找一个“最小样本”先打透。以前学新技术,我习惯铺开了学——买一本大而全的书,从头翻到尾,结果啥也没记住。现在我会先问:这个东西有没有一个“最小但完整”的版本?比如学一个框架,我不看官方文档的全部,先找一个官方的最小示例项目,把它的每一行代码都搞清楚。把一个点打穿,比扫一片更有用。
第二,看不懂的时候,就“逐行硬啃”。这本书教会我一个道理:有些东西没有捷径,唯一的捷径就是硬着头皮走过去。以前我看代码遇到看不懂的地方,习惯跳过去,结果越跳越多,最后全崩了。现在我会停下来,一行一行查,一行一行问自己“这行在干嘛”。慢是慢了,但看完之后是真的懂了。
第三,永远从“启动”开始理解一个系统。不管学什么新东西,我都先问三个问题:这个东西怎么开始的?它的“第一条指令”是什么?从0到1经历了哪些步骤?把起点搞清楚了,后面的路自然就顺了。
推荐给谁
推荐指数:⭐⭐⭐⭐(四星。对入门者极其友好,但内核版本较老,且需要一定的汇编和x86硬件基础)
适合两类人:一是计算机专业学生或自学者,想真正理解操作系统底层运作但被现代内核的庞大吓退了的-;二是想体验“逐行阅读真实工业级代码”是什么感觉的开发者。
不太适合两类人:一是想了解最新Linux内核技术的——0.11版本和现在的内核差异巨大;二是完全没有任何C语言和汇编基础的朋友,这本书对你来说门槛太高了。
互动问题:你有没有哪次学习经历,是靠“啃一个最小样本”硬啃下来的?评论区聊聊~