独辟蹊径品内核:Linux内核源代码导读(china-pub首发)
基本信息
编辑推荐
本书注重实例分析,尽量在讨论“如何做”的基础上,深入讨论为什么要这么做,从而实现本书的写作宗旨:“授人以渔”。
内容简介回到顶部↑
本书根据最新的2.6.24内核为基础。在讲述方式上,本书注重实例分析,尽量在讨论“如何做”的基础上,深入讨论为什么要这么做,从而实现本书的写作宗旨:“授人以渔”。在内容安排上,本书包含以下章节x86硬件基础;基础知识;linux内核makefile分析;linux内核启动;内存管理;中断和异常处理;系统调用;信号机制在类unix系统中;时钟机制;进程管理;调度器;文件系统;常用内核分析方法。.
本书适合初、中级linux用户、从事内核相关开发的从业人员,也可以作为各类院校相关专业的教材及linux培训班的教材,也可作为linux内核学习的专业参考书。...
本书适合初、中级linux用户、从事内核相关开发的从业人员,也可以作为各类院校相关专业的教材及linux培训班的教材,也可作为linux内核学习的专业参考书。...
目录回到顶部↑
第1章 x86 硬件基础. 1
1.1 保护模式1
1.1.1 分页机制1
1.1.2 分段机制7
1.2 系统门13
1.3 x86 的寄存器14
1.4 典型的pc 系统结构简介16
第2章 基础知识 18
2.1 at&t 与intel 汇编语法比较18
2.2 gcc 内嵌汇编20
2.3 同步与互斥25
2.3.1 原子操作25
2.3.2 信号量27
2.3.3 自旋锁29
2.3.4 rcu 机制35
2.3.5 percpu 变量39
2.4 内存屏障41
2.4.1 编译器引起的内存屏障41
2.4.2 缓存引起的内存屏障44
2.4.3 乱序执行引起的内存屏障47
1.1 保护模式1
1.1.1 分页机制1
1.1.2 分段机制7
1.2 系统门13
1.3 x86 的寄存器14
1.4 典型的pc 系统结构简介16
第2章 基础知识 18
2.1 at&t 与intel 汇编语法比较18
2.2 gcc 内嵌汇编20
2.3 同步与互斥25
2.3.1 原子操作25
2.3.2 信号量27
2.3.3 自旋锁29
2.3.4 rcu 机制35
2.3.5 percpu 变量39
2.4 内存屏障41
2.4.1 编译器引起的内存屏障41
2.4.2 缓存引起的内存屏障44
2.4.3 乱序执行引起的内存屏障47
前言回到顶部↑
几乎每一个操作系统内核的学习者在初学阶段都会感觉到难以入门。这是由于内核涉及到知识面非常广泛,需要学习者从根本上掌握大量的知识,这包括:程序编译,链接,装载的细节,操作系统理论,计算机系统体系结构,数据结构与算法,深厚的C/汇编语言编程功底。如此相对较高的门槛常常令很大一部分初学者望而却步。那么是不是一定要先学好以上的各门知识后才能学习内核呢?事实上大部分学习者在学习以上各门知识都会遇到同样的问题,因为知识是一个网状结构。所以重要的不是先去学会什么知识,而是学会如何学习,学会在自己掌握的知识体系上提出问题,学会思考,进而坚持不懈的解决心中的疑问。笔者从学完C/C++ 语言开始,由于C/C++ 的示例程序都是在命令行下的,于是常常想如何才能编写出视窗程序,学习了MFC,但是同样想不通诸如WM_CHAR,WM_LBUTTONDOWN 的消息从何而来,带着MFC 中诸多疑问,笔者开始学习Windows SDK 程序开发,在这个学习过程中感觉对MFC 的认识更加深入了,但同时又有新的问题想不通,于是进而学习Windows DDK,之后开始学习操作系统内核。在这个过程中,笔者也遇到过数不尽的疑问,但是都是需要的时候再补充相关知识。因此初学者要明白,学习并不需要等到“万事具备”了才可以开始。需要的是保持好奇心,养成思考的习惯,树立解决问题的决心。很多读者渴望寻找好的入门教材,也常常有人问看什么书才能进步的快,但是当他们看了别人推荐的书却没有取得同样的收获,这是为什么呢?笔者认为,读书有以下几种境界:
1. 面对书上讲到的某个知识点,不能接合自己掌握的知识提出疑问,仅仅知识死记书本上的东西。这种状态就算学到最高境界,也仅仅只是能把书本上的知识点完好的记下来在脑海中形成孤立的知识节点。.
2. 面对书本上讲到的某个知识点,能接合自己掌握的知识提出疑问,但是大多数时候没有探索精神,仅仅局限于到其他书籍或者请教别人来排除心中的疑问。脑海中的知识形成了简单网状结构,但由于探索能力长期得不到锻炼,综合自己的知识去分析和解决问题的能力十分有限。
3. 面对书上讲到的某个知识点,能接合自己掌握的知识提出疑问,并且能根据问题补充相关必要的知识,不断综合分析各知识点的关系,提出各种假设和验证排除的方法并亲自验证,解决不了问题决不罢休。如能经过长期锻炼,其脑海中的知识点形成复杂的网状结构,综合分析能力必将加强。
4. 根据自己掌握的知识,提出全新的问题,并始终坚持找到答案为止。这种境界需要渊博的知识作为基础。
因此,不要还没学内核就被吓倒,说了这么多看似和内核无关的东西,就是要从先排除读者的心理担忧,树立正确的态度,重要的不是学会什么,而是学会学习。确定自己处于哪一种学习境界,然后通过学习某项具体的知识把自己提升到更高的境界。在现实生活中我们不难发现,能力强的学什么都又快又好。其根本原因在于他们处于更高的学习境界,并形成了良性循环!
有很多的人都渴望学习操作系统内核,但是内核涉及到的知识非常广泛,因此很多人半途而废,许多人往往抱怨没有好的书籍,教材。实际上,对于同一本书籍,不同的读者收获也是不同的,这取决于他们的态度和学习方法。笔者建议,在读书的时候,一定要以自己心中的疑问作为主线,而不要没有任何疑问就死记书本上的知识。
如何使用本书..
笔者认为对于任何知识的学习,首先是以自我为中心,任何书籍资料都是用来解答读者心中的疑问的,因此在你阅读一本书时,首先要明确自己的疑问是什么?这可以是一个非常梗概的问题,例如:“Linux 内核是什么?”;也可以是一个非常细节的问题,例如:“按下键盘上的A,到屏幕上显示出字符A 的内部原理”。当你有了来自内心深处经过独立思考的疑问后,阅读对你来说是一种享受,一种乐趣。来自内心的疑问,经过不断的综合分析,缜密的推理,坚持不懈的查阅和求索,之后拨开迷雾见天日喜悦只有经过才能体会。虽然本书是一本很厚的书,但是这不是畏惧的理由,也不要因为它厚,就给自己下一个决心,制定一个阅读计划,几个月要读完本书。学习是主动探求的过程,而不是被动接受,在这个过程中,有太多的东西,不是谁可以计划出来的。例如:在笔者学习内核之初,看到大量的传言,读完《Understanding the linux Kernel》,读完《Linux 内核情景分析》... 就可以成为“高手”了。于是笔者常常捧着厚厚的书,寻思着自己什么时候可以读完,然而有时好几天也前进不了几页,免不了感慨自己今生将与“高手”无缘,但是又心有不甘,于是囫囵吞枣的“快速”前进,但是越前进,就越感觉到艰难。“欲速则不达”这个道理人人都懂,但是在切身体会之前,人人都会犯这个错误。在经历了很长一段曲折和郁闷之后,笔者摆脱了“书”的束缚,完全以自己的疑问为中心,例如在读到中断处理时,由于知识不够全面,于是丢开内核的书籍,阅读了大量的计算机体系结构方面的资料,同样计算机体系结构的书籍也很厚,但是我也没有想过要把它们读完,这时只捡中断相关的读,之后再来读内核的书籍,发现自己原理懂了,但是具体到理解代码时,就迷糊了,于是有补充GCC 内嵌汇编,C 代码编译到汇编代码的相关知识,反复试验等等。这个过程很慢,但是积累到最后,笔者发现自己读的非常快,甚至可以不读了,因为很多地方,只要读到前面的,就领悟了作者后面想要说什么了。
至今,我仍然没有完成当初为了成为“高手”而制定下的“宏伟”目标,因为我没有完整的读完《Understanding the Linux Kernel》、《Linux 内核情景分析》或《Linux 内核完全剖析》等等这类传说中“惊世骇俗”之作中的任何一本。但是笔者却从这些著作中受益菲浅。
现在,你应该知道要如何使用本书了吧?那就是不要拘泥如任何教条。虽然本书经笔者从初学到现在的心得体会以及相关笔记和资料整理而成,初学者的大量疑问都能在本书本书中找到答案。但是每个人都是独一无二的,笔者希望任何一个读者能综合利用本书和其它相关资料寻找你自己的答案。多问一点为什么,多一点假设,多一点思考,多一点推理,多一点试验,多一点坚持。最后,你会感慨原来传说中的任何“秘籍”都是“浪得虚名”,因为读完它,你不一定能成为“高手”,而“高手”却不需要读完它。能否成为“高手”的决定性因素取决于你的学习方法和学习态度,而好的“秘籍”仅仅只是催化剂。
由于笔者水平有限,纰漏之处在所难免,因此希望读者能够指正。笔者的联系方式是:
Addylee2004@163.com. 另外对本书有任何问题,意见或建议,勘误等等,欢迎前来http://www.osplay.org与笔者进行讨论。...
1. 面对书上讲到的某个知识点,不能接合自己掌握的知识提出疑问,仅仅知识死记书本上的东西。这种状态就算学到最高境界,也仅仅只是能把书本上的知识点完好的记下来在脑海中形成孤立的知识节点。.
2. 面对书本上讲到的某个知识点,能接合自己掌握的知识提出疑问,但是大多数时候没有探索精神,仅仅局限于到其他书籍或者请教别人来排除心中的疑问。脑海中的知识形成了简单网状结构,但由于探索能力长期得不到锻炼,综合自己的知识去分析和解决问题的能力十分有限。
3. 面对书上讲到的某个知识点,能接合自己掌握的知识提出疑问,并且能根据问题补充相关必要的知识,不断综合分析各知识点的关系,提出各种假设和验证排除的方法并亲自验证,解决不了问题决不罢休。如能经过长期锻炼,其脑海中的知识点形成复杂的网状结构,综合分析能力必将加强。
4. 根据自己掌握的知识,提出全新的问题,并始终坚持找到答案为止。这种境界需要渊博的知识作为基础。
因此,不要还没学内核就被吓倒,说了这么多看似和内核无关的东西,就是要从先排除读者的心理担忧,树立正确的态度,重要的不是学会什么,而是学会学习。确定自己处于哪一种学习境界,然后通过学习某项具体的知识把自己提升到更高的境界。在现实生活中我们不难发现,能力强的学什么都又快又好。其根本原因在于他们处于更高的学习境界,并形成了良性循环!
有很多的人都渴望学习操作系统内核,但是内核涉及到的知识非常广泛,因此很多人半途而废,许多人往往抱怨没有好的书籍,教材。实际上,对于同一本书籍,不同的读者收获也是不同的,这取决于他们的态度和学习方法。笔者建议,在读书的时候,一定要以自己心中的疑问作为主线,而不要没有任何疑问就死记书本上的知识。
如何使用本书..
笔者认为对于任何知识的学习,首先是以自我为中心,任何书籍资料都是用来解答读者心中的疑问的,因此在你阅读一本书时,首先要明确自己的疑问是什么?这可以是一个非常梗概的问题,例如:“Linux 内核是什么?”;也可以是一个非常细节的问题,例如:“按下键盘上的A,到屏幕上显示出字符A 的内部原理”。当你有了来自内心深处经过独立思考的疑问后,阅读对你来说是一种享受,一种乐趣。来自内心的疑问,经过不断的综合分析,缜密的推理,坚持不懈的查阅和求索,之后拨开迷雾见天日喜悦只有经过才能体会。虽然本书是一本很厚的书,但是这不是畏惧的理由,也不要因为它厚,就给自己下一个决心,制定一个阅读计划,几个月要读完本书。学习是主动探求的过程,而不是被动接受,在这个过程中,有太多的东西,不是谁可以计划出来的。例如:在笔者学习内核之初,看到大量的传言,读完《Understanding the linux Kernel》,读完《Linux 内核情景分析》... 就可以成为“高手”了。于是笔者常常捧着厚厚的书,寻思着自己什么时候可以读完,然而有时好几天也前进不了几页,免不了感慨自己今生将与“高手”无缘,但是又心有不甘,于是囫囵吞枣的“快速”前进,但是越前进,就越感觉到艰难。“欲速则不达”这个道理人人都懂,但是在切身体会之前,人人都会犯这个错误。在经历了很长一段曲折和郁闷之后,笔者摆脱了“书”的束缚,完全以自己的疑问为中心,例如在读到中断处理时,由于知识不够全面,于是丢开内核的书籍,阅读了大量的计算机体系结构方面的资料,同样计算机体系结构的书籍也很厚,但是我也没有想过要把它们读完,这时只捡中断相关的读,之后再来读内核的书籍,发现自己原理懂了,但是具体到理解代码时,就迷糊了,于是有补充GCC 内嵌汇编,C 代码编译到汇编代码的相关知识,反复试验等等。这个过程很慢,但是积累到最后,笔者发现自己读的非常快,甚至可以不读了,因为很多地方,只要读到前面的,就领悟了作者后面想要说什么了。
至今,我仍然没有完成当初为了成为“高手”而制定下的“宏伟”目标,因为我没有完整的读完《Understanding the Linux Kernel》、《Linux 内核情景分析》或《Linux 内核完全剖析》等等这类传说中“惊世骇俗”之作中的任何一本。但是笔者却从这些著作中受益菲浅。
现在,你应该知道要如何使用本书了吧?那就是不要拘泥如任何教条。虽然本书经笔者从初学到现在的心得体会以及相关笔记和资料整理而成,初学者的大量疑问都能在本书本书中找到答案。但是每个人都是独一无二的,笔者希望任何一个读者能综合利用本书和其它相关资料寻找你自己的答案。多问一点为什么,多一点假设,多一点思考,多一点推理,多一点试验,多一点坚持。最后,你会感慨原来传说中的任何“秘籍”都是“浪得虚名”,因为读完它,你不一定能成为“高手”,而“高手”却不需要读完它。能否成为“高手”的决定性因素取决于你的学习方法和学习态度,而好的“秘籍”仅仅只是催化剂。
由于笔者水平有限,纰漏之处在所难免,因此希望读者能够指正。笔者的联系方式是:
Addylee2004@163.com. 另外对本书有任何问题,意见或建议,勘误等等,欢迎前来http://www.osplay.org与笔者进行讨论。...
评论交流
共有16人开贴评论 21人参与评论 10人参与打分 查看
评价等级:







发表于:2011-4-15 0:23:00
曾经写过一篇比较详细的评论,不知道被China pub放到哪里去了。但今天无意看到这里,发现不少人对此书颇有微词,实在看不下去,要站出来说几句话。
1. 本书内容绝对原创,Linux内核和驱动著名的书籍,包括近些年国内出版的图书,我基本都看过,没看到这本书有任何抄袭的迹象;
2. 说到代码打印得比较多,这在我看来这个说法比较无稽之谈,Bible级的情景分析也是很多代码;这两本书本来风格就比较像;大家写作风格各异,不一定要所有分析内核的书都要像ULK那样只列出函数的主要流程就好的,相比我更喜欢本书和情景分析的风格;
3. 本书的分析相当透出,详细内容我一时想不起来了,但比如CFS,是我看了这么多资料和书籍里面本书是说得最到位和畅快的;再比如关于电源管理部分的介绍,也相当深入;
4. 本书涉及到的不少话题是其它分析内核的书籍里都没有设计的,当时对照本书看代码,感觉收获颇多;
5. 作者关于一些实用工具,介绍的也很好,记得最好kprobe的介绍,很棒,我在我的开发板上曾经折腾过,有意思。
本书绝对算是近些年内核书籍的佳作!
1. 本书内容绝对原创,Linux内核和驱动著名的书籍,包括近些年国内出版的图书,我基本都看过,没看到这本书有任何抄袭的迹象;
2. 说到代码打印得比较多,这在我看来这个说法比较无稽之谈,Bible级的情景分析也是很多代码;这两本书本来风格就比较像;大家写作风格各异,不一定要所有分析内核的书都要像ULK那样只列出函数的主要流程就好的,相比我更喜欢本书和情景分析的风格;
3. 本书的分析相当透出,详细内容我一时想不起来了,但比如CFS,是我看了这么多资料和书籍里面本书是说得最到位和畅快的;再比如关于电源管理部分的介绍,也相当深入;
4. 本书涉及到的不少话题是其它分析内核的书籍里都没有设计的,当时对照本书看代码,感觉收获颇多;
5. 作者关于一些实用工具,介绍的也很好,记得最好kprobe的介绍,很棒,我在我的开发板上曾经折腾过,有意思。
本书绝对算是近些年内核书籍的佳作!
| 我要写评论 |
| 查看所有评论交流(共16条) |


点击看大图




加载中...