八年程序员之书籍篇--OS/Linux(二):Kernel

谈到Linux Kernel书籍,首先得提以下几本:

1.《Linux Kernel Development》-《Linux内核设计与实现》-Robert Love-陈莉君/康华-第3版-机械工业出版社(英/中),简称LKD;篇幅不大,但言简意赅,对内核的各个子系统做了大概的介绍,包括进程及调度、中断和下半部、内核同步、内存管理、CFS、设备模型等,对初接触内核者而言,在纯OS理论书籍和linux Kernel细节书籍间架起了一座桥梁;对Linux Kernel已有涉猎者而言,怎么讲述你理解的kernel呢?该书给出了优秀的范例;阅读此书时,勿究细节,不需对源码,重点是了解子系统和其设计思想;初接触内核时,要面对一大堆信息,难免有难以下手之感,这本书给大略概览,指出下一步学习的方向,总的来说,比较适合初学者一些;评价:4.

  以下是对书中一些章节的杂记:3/4章讲进程及调度,此部分的内容不算丰富,对CFS调度算法的讲解有些泛(对我而言,的确从此一系列难以想到该调度算法是个啥样子);6章其实并不必要,如准备研究kernel,这些应该是基础知识,是的,一本数据结构/算法的书也会比这个更详细到位;7/8章中断和bottom half,这是很赞的2章,讲述非常清楚,比起《ULK》来说,更喜欢这个!9/10章讲内核同步,需注意跟用户态同步方式的区别;12/15讲内存管理,这是很多程序员非常关心的内容,12章讲内核内存,该内容觉得应该可以提到开始讲,15章讲用户内存,这个则需要在进程之后;13章CFS,18章设备,内容都比较单薄,但不失为是设计思想的好介绍,毕竟略详细下就不是区区2章了,写成几本书都是可以的^_^

2.《Understanding the Linux Kernel》-《深入理解Linux内核》-Daniel P. Bovet & Marco cesati-陈莉君等-第3版-中国电力出版社(中),简称ULK;Linux kernel算法的鸿篇巨制,中文版800多页密密麻麻的字体让人望而却步,阅读此书前后历时1年多,部分内容对照代码研究,最终哀叹难以全部或大部分看下,或许,选取自己感兴趣部分深入研究是更适合的方式;个人水准欠佳,不敢妄议书中内容,就算是下过功夫的几章还是不敢说掌握了,水很深,还是需要再研读研读,如果有条件,另文专门总结下;对比LKD,此书翻译质量欠佳,个人觉得有损陈教授linux名家声誉,愿意看英文者可以考虑研读影印版;评价:4.5(中文版)。

3.《Linux内核源代码情景分析》-毛德超 胡希明-浙江大学出版社;看起来2本大砖头,1500+的篇幅,对比ULK更吓人,不过放心,读起来比ULK好读!一是作者是中国人(华人?),文字不会有翻译的转手,很贴近我们的思维;二是讲解方式,章节中的内容是很集中、连贯的,对比ULK类似卡片式一段一段好太多了;三是很多都是代码,并且完全参考对应版本,使用代码阅读工具如Source Insight等,其实很顺畅;不足之处:一,代码变动是永恒的,2.4版内核到现在都10多年了,难免难以跟上内核的新变动;二,源码多文字多,图例少,其实我很喜欢西方的书风格,怕你不懂讲得特详细,图例一把一把地上,很形象;三,目录或者索引太粗略,1500+的书目录只有区区4页,LKD300页的书都有7页目录啊,须知目录即提纲,某节的内容讲了100多页实在让人难以搞清楚其中的脉络,拿着砖头翻不容易啊!四,太厚了,太重了...评价:4.5

  乱侃:此书2、3、4、10章应该细读,5、8章较专,8章内容还可能有些过时,6、7、9可以参考其他书籍;虽然Linus说RTFSC,但毕竟精力有限,花很多时间在10多年前的代码虽非不值,亦属不智,选择自己最需要的内容、对需要内容用最好的方式去学习是很有其必要的~不是每个人都需要把kernel的代码瞅上一瞅,更不需要都瞅上一瞅...

 4.《Linux Device Driver》-《Linux 设备驱动程序》-Jonatban Corbet等-魏永明等-第3版-中国电力出版社(中),简称LDD;同以上几本不同,其实此书并不是讲kernel算法或代码的,从写驱动这个应用出发,讲解了大量内核API的使用,确实,驱动跟内核联系比较紧密,难以完全通过系统调用在用户态完成;如果您需要写驱动,该书参考价值尤高,如果您是想研究内核设计及实现,该书不是必须的。就驱动而言,该书在贴近实践方面也有所欠缺,看起来有些像API手册了。评价:4.5.

以上4本据说是原来Linux Kernel书籍中的"四大金刚",崇山峻岭,高山仰止啊...

 

以下几本或没有细读,或没有读完,或只闻其名,但从我了解来看,应该值得一读:

5.《Understanding the Linux Virtual Memory Management》-《深入理解Linux虚拟内存管理》-Mel Gorman-白洛-北京航天航空出版社(中),简称ULVMM;这本书专门讲kernel的内存管理子系统,虽然比较专,但Memory乃是基础设施,很有一番研究的必要,而且一法通万法通,与其贪多求全想了解kernel方方面面,还不如先研究透一部分;不足是此书同《情景分析》一样是基于2.4内核的,除了前面200余页,后面代码部分价值要打个折扣。未曾通读,不评价;

6.《Understanding Linux Network Interals》-《深入理解Linux网络技术内幕》-Cbristian Benvenuti-夏宏等-中国电力出版社(中),简称ULNI;这本书是另一个专题:Network,如果研读过Stevens的《TCP/IP Illustrated》者,会有些似曾相识之感,不过Stevens原理代码面面俱到,而且TCP/IP各层都有讲述;这里主要讲kernel细节,且没有传输层及以上内容;1000页的篇幅,如果您不是想研究Kernel 网络部分或做协议栈,不必要看此书。未曾通读,不评价;

7.《Professional Linux Kernel Architecture》-《深入Linux内核架构》-Wolfgang Mauerer-郭旭-人民邮电出版社(中),简称PLKA;又一本厚达千页的书,跟ULK类似,我只在书店翻过一会,其中对数据结构/代码/图表的讲述方式,我感觉很不错,没看过的书,不说太多,应该不会差就是;

8.《Essential Linux Device Drivers》-《精通Linux设备驱动程序开发》-Sreekrishnan Venkateswaran-宋宝华等-人民邮电出版社,简称ELDD;驱动开发领域的另一名著,从目录看对比LDD更趋向应用,一个做驱动开发的兄弟认为此书比LDD更实用,我没有看过,就把此兄弟的意见列在这里吧,供参考;

 

以下2本是国内研究早期Kernel的作品,另一个途径来研究Kernel,距离当下Kernel毕竟距离过远,应用价值不大,但作为kernel入门级读物,还是不错的:

9.《Linux内核完全注释》/《Linux内核完全剖析》-赵炯-机械工业出版社,后面似乎还有本基于0.12内核的,我看过第一本,不厚,对0.11内核做了全面的注释,不过理解kernel不需要把所有代码都看过透^_^,并且用bochs搭建了测试环境,亲自实验后,对kernel的理解应该是会加深很多,值得一读,一定要实践操作,理解才深刻。后面2本一本比一本厚,就木有通读了,应该是在各个细节上更加强了吧!评价:4;

10.《Linux内核设计的艺术》-新设计团队-机械工业出版社,也是基于0.11内核的,几个特点:一里面的图很有特色,二创造了不少名词如"怠速""主奴机制"等,三前后吹牛的话真是不少;其中讲述的方式有些类似《情景分析》,不过深度比起来就...当然,0.11的内核跟2.4内核也不是一个量级的;抛开恶心的自恋文字,作为入门书还是不错的,但说到达到所谓“世界级”水准,还差得远!评价:3.5;

 

还有一本我看过kernel的入门书,提一下:

11.《the Linux Kernel Primer》-《Linux内核编程》-Claudia Salzberg Rodriguez等-陈莉君等-人民邮电出版社,书名为Primer,内容也确实primer,对内核子系统的讲述不全面,只有进程及调度、内存、VFS等,另不同于以上提到的书籍采用X86体系结构,还对比了PPC架构,从研究kernel的角度看是鸡肋,原理一样的东西还要讲2遍?还有一点里面代码不少,列出了行号,但似乎并没有说明是基于哪个内核版本...不过,作为入门书还算可以,直接接触源码,讲解详细。不过在kernel书籍如此多、厚的情况下,这本书确实没啥必要。评价:3.5;

 

总结:Linux Kernel的经典书不少,但对应kernel的庞大复杂,书也很厚很多,对书本身的看法已经列在上面了,关于kernel学习,谈几点经验:

1.首先要想好学kernel的目的,开发?研究?好奇?不同的目标,需要的投入不一样,努力的方向不一样,最终的结果也不一样;

2.研究kernel需要一些汇编和硬件的知识,否则妨碍对kernel的理解,对C/数据结构/常用算法有一定了解;

3.不要贪多求全,集中力量弄懂一两个子系统比都看要好得多,宁可只懂一个子系统,也不要泛泛地都懂一点,其实什么都不会;

4.一定要看源码,编译内核等去实践,光看书是学会不了kernel的

 

enjoy kernel!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值