经常有人问:我想学习内核,须要什么根底吗?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收费支付