关于c++:浅谈如何阅读Linux源码新手必备

37次阅读

共计 3779 个字符,预计需要花费 10 分钟才能阅读完成。

经常有人问:我想学习内核,须要什么根底吗?Linus Torvalds 自己是这样答复的:你必须应用过 Linux。这个……还是有点太泛了吧,我想上面几个根底可能还是须要的,只管不肯定必须:
1, 对于操作系统实践的最高级的常识。不须要通读并了解《操作系统概念》《古代操作系统》等巨著,但总要晓得分时(time-shared)和实时(real-time)的区别是什么,过程是个什么货色,CPU 和系统总线、内存的关系(很粗略即可),等等。
2, 对于 C 语言。不须要曾经很精通 C 语言,只有能纯熟编写 C 程序,能看懂链表、散列表等数据结构的 C 实现,用过 gcc 编译器,就能够了。当然,如果曾经精通 C 语言显然是大占便宜的。
3, 对于 CPU 的常识。这块儿能够在学习内核过程中补,但这样的话你就须要看解说很具体的书,比如前面将会提到的《情景剖析》。你是否相熟 Intel 80386 CPU?尝试着答复这几个问题来判断一下:1)说出 80386 的中断门和陷阱门的区别;2)说出保护模式与实模式的区别;3)多处理器机器上,一般的读 - 改 - 写回一块内存这样的动作,为什么须要非凡的伎俩来爱护。等等。解说基于其它 CPU 的 Linux 内核的书,目前好象只有一本《IA64Linux 内核:设计与实现》──也还是 Intel 的,其它都是解说基于 IA32 的。
以上算是常识方面吧,如果还要再补充一条,我想就是:入手编译过内核。

好了,咱们接下来走。好多人装上 Linux 之后,第一件事找到内核源码所在的门路,关上一个 C 程序文件,开始哗哗哗翻页,看看赫赫有名的 Linux 内核代码到底长啥模样──而后敞开。这是可了解的,但却不是学习的办法。刚开始,必须从读书动手。[color=red] 至多要对内核有一个 Overview 之后,才有可能带着问题去试图浏览源代码自身。[/color] 上面就讲一下我读过的几本书:
1,《Linux 内核设计与实现》,英文名 Linux Kernel Development(所以有人叫它 LKD),机械工业出版社,¥35, 美国 Robert Love 著,陈莉君译者。评说:
此书是当今名列前茅的入门最佳图书。作者是为 2.6 内核退出了抢占的人,对调度局部十分精通,而调度是整个零碎的外围,因而本书是很权威的。这本书解说浅显易懂,全书没有列举一条汇编语句,然而给出了整个 Linux 操作系统 2.6 内核的概观,使你能通过浏览迅速取得一个 overview。而且对内核中较为凌乱的局部(如下半部),它的解说是最透彻的。对没怎么深刻内核的人来说,这是强烈推荐的一本书。
翻译:翻译程度、负责任水平都不错,然而印刷存在一些谬误。买了此书的敌人能够参考我在 Linux 高级利用版的《Linux 内核设计与实现中文版勘误》:
http://bbs.chinaunix.net/forum/viewtopic.php?t=541234
另外,此书 2005 年有了第二版,目前尚无中译本面世。我就是对照着 2nd-en 勘误 1st-cn 的。

2,《Linux 内核源代码情景剖析》上、下。毛德操、胡希明著,浙江大学出版社,上册¥80, 下册¥70. 评说:
本书是基于 2.4.0 内核的,比拟早,也没据说会出第二版。上册解说内存治理、中断、异样与零碎调用、过程管制、文件系统与传统 Unix IPC;下册解说 socket、设施驱动、SMP 和疏导。对于这套书的评估褒贬不一,我集体认为其深度是同类著述中最优良的。本书基于 Intel IA32 体系,因为厚度大,很多体系上的常识都捎带解说了,所以如果你想深刻理解内核的工作机制而又不十分相熟 Intel CPU 的体系结构,本书是最合适的。毛病是:版本较老,没有 TCP/IP 协定栈局部(它讲的 socket 只是 Unix 域协定的),图表太少,不适宜初学者入门。还有就是对学生敌人来说,可能书价偏高,这样的话能够思考先买上册,因为上册是外围局部,下册一大部分都在讲具体 PCI/ISA/USB 设施的驱动。
翻译:没什么翻译,作者是国人,而且行文流畅。自己书桌上诸多计算机经典图书当中,这套是惟一又经典又无阅读障碍的。
http://www.linuxforum.net 内核版好多敌人曾经把这书读到六七遍了,我很羞愧,上册差不多读熟了,下册就 SMP 局部还看过──但这就破费了整整 1 年的工夫,还有好多弄不懂的。这里顺便阐明另外一个钻研内核常见的误区:指标太宏大。要晓得 Linux 内核(最新的 2.6.13)bzip2 压缩之后 37M,解压缩之后 244M,基本不是哪个人可能吃透的。即便是内核的外围开发团队中,恐怕也只 Linus Torvalds、Alan Cox、David Miller、Ingo Molnar 寥寥数人会有比拟全面的理解,其它人都是做本人专门的局部。我本人来说,目前曾经决定放弃内存治理的全副(slab 层、LRU、rbtree 等)、文件系统局部、外设驱动局部,临时也没打算弄 IA32 以外的其它体系的局部。

3,《深刻了解 Linux 内核》第二版。中国电力出版社。也是陈莉君译。此书是 Linux 内核黑客在举荐图书时的首选。评说:
此书 C 版的 converse 兄送了我一本第一版,因而就没买第二版,比拟悔恨。因而只就第一版说一说,第一版基于 2.2, 第二版 2.4。我见 O’Reilly 官方主页上说第三版的英文版将于 2005 年 11 月出版,也不知咱们何时能力见到。此书图表很多,形象地给出了要害数据结构的定义,与《情景剖析》相比,本书内容紧凑,不会一个问题解说动辄上百页,有提纲挈领的功能,然而深度上要逊于《情景剖析》。

4, 其它的几本书。市面上能见到的其它的 Linux 内核的图书,象《Linux 设施驱动程序》、《Linux 内核源代码齐全正文》以及新出的《Linux 内核剖析及编程》等。
《Linux 设施驱动程序》第二版是基于 2.4 的,中文翻译不错,中国电力出版。这书强调入手实际,但它是解说“设施驱动”的,不是最外围的货色,而且有些货色没硬件的话无奈实际,可能更适宜驱动开发的程序员吧,不太适宜那些 For fun and profit 的人。此书有第三版英文版,东南大学出版社影印,解说 2.6 的,行文流畅,解说的面也比第二版更宽泛,我读过其中对于同步与互斥、内存调配的局部,感觉很不错。
《Linux 内核源代码齐全正文》(机械工业出版社)是同济大学的博士生赵炯的著述,解说 0.1Linux 内核,我没买也没看,有看过的敌人说一说。
《Linux 内核剖析及编程》(电子工业出版社)是刚刚出版的,国人写的,解说 2.6.11。很多人说好,但有人说不够零碎,我没买,不敢评说。
还有一本清华出的《Linux 内核编程指南(第三版)》,原书应该是好书,然而翻译、排版非常糟烂,脱字跳行,基本没法看,我买了一本又扔掉了。

5, 其它资源。TLDP(The Linux Documentation Project)有大量文档,其中不少是对于内核的,有些是在国外出版过的,象《Linux Kernel Interls》《The Linux Kernel》《Linux Kernel Module Programming Guide》等,作者都是亲自加入开发的人,著述较为可信。
Http://www.linuxforum.net
中国 Linux 论坛的内核版。该版是钻研内核的中文 Linux 社区中程度最高的,有很多专家级别的牛人,强烈推荐去学习一下(但倡议不要问太过分简略的问题,人家脾气再好也会烦的 ^_^),它的置顶贴几乎是一个无所不包的 FAQ,精华区也有很多材料。只惋惜太过曲高和寡,人气不是很旺。

6, 一本不是解说 Linux 的书:《古代体系结构上的 Unix 零碎:内核程序员的 SMP 和 Caching 技术》,人民邮电出版社 2003 版,定价¥39. 本书尽管不是解说 Linux,然而对所有 Unix 内核都是实用的,适宜对 SMP 和 CPU 的 Cache 这些组成原理常识不是很熟的敌人,而且是很多国外牛人举荐的书。中文版翻译十分负责。

还有个很重要的问题:怎么浏览内核源代码。有的敌人喜爱在 Windows 上工作,用 Source Insight;有的在 Linux,用 Source Navigator;还有专门浏览源代码的软件,象 lxr(Linux Cross Reference);还有用 ctags/ectags/cscope 等,这些都是很优良的软件。我集体用 Vim + ctags 浏览(参考了 http://www.linuxforum.net 内核版 wheelz 大侠的文档,)。

此外,前边曾经提到的一个重要的问题是:你钻研内核的目标是什么,开发?乐趣?如果是开发,而且是国内做开发,把 kernel API 相熟一下就差不太多了(你也晓得国内的程度有多差),比方说 copy_from_user()、kmalloc() 函数等,kernel API 在 Internet 上找失去,编译内核时也能够用 DocBook 生成(具体请参考内核源代码包下的 README 文件);如果是钻研,那就差异很大了,须要下很大的苦功:会用 kmalloc() 绝不阐明你懂得 Linux 内核的虚存管理子系统,正如同会讲汉语不阐明你懂中国文化一样。

有须要 Linux 入门材料的能够 +qun832218493 收费支付

正文完
 0