本书是在研究生院比较受欢迎的杨老师带领下完成的。09年的时候,在课堂上说在做这个课题,想招募学生一块做,当时由于时间关系没有参与,然后就没有下文了。11年初的时候,就看到在群里有宣传了,于是到chinapub上下载了样章看了看,关于文件的,第一眼的感觉很好,因为图比较多,我觉得图的信息量比文字的要大,一个好图能够说清楚很多事。
今天从图书馆借到这本书,下午的时候翻阅了下(真没有细读,下面的吐槽不一定对),于是有些想法,借着这个机会吐下槽,只代表我个人观点,可能有些偏颇。
近一年来一直在看代码,改代码,中间有很多喜悦,也有很多痛苦不足为外人道也。我有时也在思考我们需要什么样的源代码分析文字。
以前读侯捷的《STL源码剖析》,一直笃信书的后封皮上写的“源码之前,了无秘密”,于是看了很多源码。分析到最后给我的感受是,源码不一定要行行俱到,理论与代码要结合,故如《追踪Linux TCP/IP代码运行》这样的纯贴代码加少量分析的书是很让人生厌,并且头疼的。
多年的经验告诉我,“工欲善其事必先利其器”,故找到好的并适合自己的工具就显得很有必要。个人推荐Source Insight、Doxygen、Understand等多种工具,覆盖阅读,分析,画图,总结等各个环节,这些工具的应用能够让你读代码快速而充分。
工具是为了更好的分析,即然是分析源码,就要有相关计算机的基础知识,设计数据结构、算法、编程语言(各种奇技淫巧)等等。
计算机中有个著名的论断“数据结构+算法 = 程序”,在C++标准库中,标准模板库(STL)的六大概念都是围绕着这个等式来的。在这背后,最重要的是抽象。应该说抽象是计算机各种理论(编程语言、数据结构等)的基础。能够将一段程序的思想剥离并抽象出来是需要很强的能力的,将一段程序讲得生动更是不容易的一件事情。代码的实现是多种多样的,但是思想是活的,能够运用思想是种能力的体现。
读源码,首先的是找出核心的数据结构。数据结构的定义与你要完成的功能、算法是息息相关的,所以是最大的抽象,最能体现能力的地方。算法无论最终的结果如何,都会转换到无非是对数据结构的操作,最终都会转换到查找、排序、链表或数组(哈希)的增删查找等操作。
所以,核心数据的结构的表示很重要,在计算机领域用得最多的是面向对象的UML类图。计算机领域发明了UML这样的描述工具也就是为了更好的描述抽象的思想。传统如流程图、数据流图等,这些工具类似于英语成为通用的交流语言,所以分析代码这样简介的图或许是必须的。
分析数据结构的各个域,了解其抽象的含义,其实就是将基本原理娓娓道来的好机会,毕竟原理是原理,需要映射到代码中。
数据结构的分析是静态的分析,数据结构的设计是为了使用,为了生成数据(“数据为王”的时代!),这时我们就要关注变量,变量的何时生成,何时销毁,何时变化,有哪些操作接口。在这个分析中,需要从全局变量着手。全局变量与全局变量的之间的关系,全局变量的数据流。找出核心的处理过程。这个可以用流程图来表示,调用关系等标识。
在这个过程中,你需要静态与动态的结合,有时你还需要补充些理论知识(如IA32架构、文件系统等)能够让你理解代码事半功倍。
但是很可惜本书中并没有类似的分析,本书给我最大的感受是类似于实验报告,顺着代码往下走,走不通了,再找些理论知识补补,看哪里可以继续读下去。然后一切都为这个服务。后面最多加个无关痛痒的总结。这个过程你可以按照作者的思路阅读代码,但是他没法给你那种“原来如此”的感觉,这个要靠你自己去悟。
全书我都没有看到代码的总体框架图,类似于TCP分层一样的图。有的只是硬盘内存这样的设备(形象倒是形象,但是我觉得抽象更重要些)。比如已经有那么多文件系统分析的资料,其实完全可以吸收引用过来,没有必要闭门造车。
对于作者引以为豪的最后一章提出“主奴机制”,英文就是“Master——Slaver”,我接触过的文章中,更多的是翻译为“主从机制”,相应的设备叫“主设备”“从设备”。
书的最后,说恭喜阅读到最后,还建议我们多读几遍,也就是说我们还得重复作者走过的道路。
总之,本书最大的问题在于只是记录了分析源码的过程,但是缺少必要的反刍消化,全局性的框架没有建立起来,而把问题留给了读者。
我眼中的代码阅读
对“我眼中的代码阅读”的回应
《Linux内核设计的艺术》热门书评
-
我眼中的代码阅读
27有用 0无用 iLove 2012-02-06
本书是在研究生院比较受欢迎的杨老师带领下完成的。09年的时候,在课堂上说在做这个课题,想招募学生一块做,当时由于时间关系没有参与,然后就没有下文了。11年初的时候,就看到在群里有宣传了,于是到chinap...
-
看Linux 0.11的代码不如做MIT的JOS实验
21有用 0无用 Richard 2013-04-03
我刚好上了作者的课,需要买这本书。上课的时候有个实验,是改进或者实现自己的操作系统内核。当时我试图去改Linux 0.11的内核,发现这个内核里面硬编码的地方不少,而且上手的曲线非常陡峭,于是选择了跟着MIT的JOS实验去做。 &...
-
0.11版原来真的是世界级的水平了~
18有用 3无用 lynus 2011-07-14
做推广不要太过火了吧如果要分析0.11版,赵炯博士的书朴实无华,看得出是作者心血之作,非常有诚意。国内的书现在总是显得推广的广告口号太虚了,“艺术”之词更有是相当有胆量去用啊~而且,豆瓣上给这本书捧上天的人还真多啊,肉麻的程度让你发指了++++++++++++++++++++++++++++++++...
-
不值得购买
13有用 0无用 Kelvin 2011-10-03
恭喜出版社,成功忽悠我买了这本书。网上评论大量水军,真令人失望。这本书对linux0.11的剖析,看似大篇代码,其实理解不高,真正让人迷惑的地方一笔带过,不该讲解的地方拼命的讲解。比如,第38页末到39页,讲一个怎么返回到main函数,自以为精妙的废话连篇了一页多的纸。如果一个人可以读到38页了,前...
-
世界级水平
5有用 1无用 悟饭打棒球 2011-07-05
看了2章,觉得就是赵炯和于渊书的结合体,第一章差不多就是于渊书的内容,不晓得出版书有没有检查抄袭的办法 不知道这世界级水平是啥概念,可能是对0.11的研究是世界级了吧。炒作也该有个限度吧...
书名: Linux内核设计的艺术
作者: 新设计团队
出版社: 机械工业出版社华章公司
副标题: 图解Linux操作系统架构设计与实现原理
出版年: 2011-6-20
页数: 444
定价: 79.00元
装帧: 平装
ISBN: 9787111347446