Linux内核设计与实现(第2版)
基本信息
编辑推荐
程序员学习Linux内核的最佳读物!本书填补了Linux内核理论和实践细节之间的鸿沟。如果你是一名Linux内核爱好者,本书可以帮助你大显身手。如果你是一名普通程序员,本书将会拓宽你的编程思路。如果你初次接触Linux内核,本书则可以帮助你对内核各个核心子系统有一个整体把握。
内容简介回到顶部↑
本书基于linux 2.6内核系列详细介绍linux内核系统,覆盖了从核心内核系统的应用到内核设计与实现等各方面内容。主要内容包括:进程管理、系统调用?中断和中断处理程序、内核同步、时间管理、内存管理、地址空间、调试技术等。本书理论联系实践,既介绍理论也讨论具体应用,能够带领读者快速走进linux内核世界,真正开发内核代码。.
本书适合作为高等院校操作系统课程的教材或参考书,也可供相关技术人员参考。..
本书填补了linux内核理论和实践细节之间的鸿沟。本书针对linux 2.6内核,包括0(1)调度程序、抢占式内核。块i/o层以及i/o调度程序等。本书还包含了linux内核开发者在开发时需要用到的很多信息,包括调试技术、编程风格、注意事项等等。
如果你是一名linux内核爱好者,本书的内容可以帮助你大显身手。如果你是一名普通程序员,本书的内容将会拓宽你的编程思路。如果你初次接触linux内核,本书则可以帮助你对内核各个核心子系统有一个整体把握。...
本书适合作为高等院校操作系统课程的教材或参考书,也可供相关技术人员参考。..
本书填补了linux内核理论和实践细节之间的鸿沟。本书针对linux 2.6内核,包括0(1)调度程序、抢占式内核。块i/o层以及i/o调度程序等。本书还包含了linux内核开发者在开发时需要用到的很多信息,包括调试技术、编程风格、注意事项等等。
如果你是一名linux内核爱好者,本书的内容可以帮助你大显身手。如果你是一名普通程序员,本书的内容将会拓宽你的编程思路。如果你初次接触linux内核,本书则可以帮助你对内核各个核心子系统有一个整体把握。...
作译者回到顶部↑
本书提供作译者介绍
Robed Love是开源社区的名人,很早就开始使用Linux。他活跃于Linux内核和GNOME两个社区。最近,他受聘于Novell公司,作为高级内核工程师在Ximian桌面组工作。他的内核项目包括抢占式内核、进程调度程序、内核事件层,VM增强以及多任务处理性能优化。他创建和维护的另外两个开源项目是schedutils和GNOME卷管理器。此外,他还是Lmux Journal杂志的特邀编辑。.
陈莉君西安邮电学院副教授,自1998年以来一直致力于推动Linux在中国的发展,多年从事Linux内核研究并积极跟踪Linux内核发展动向,对Linux.. << 查看详细
陈莉君西安邮电学院副教授,自1998年以来一直致力于推动Linux在中国的发展,多年从事Linux内核研究并积极跟踪Linux内核发展动向,对Linux.. << 查看详细
目录回到顶部↑
译者序
序言
前言
第1章 linux内核简介.
1.1 追寻linus的足迹:linux简介
1.2 操作系统和内核简介
1.3 linux内核和传统unix内核的比较
1.4 linux内核版本
1.5 linux内核开发者社区
1.6 小结
第2章 从内核出发
2.1 获取内核源码
2.1.1 安装内核源代码
2.1.2 使用补丁
2.2 内核源码树
2.3 编译内核
2.3.1 减少编译的垃圾信息
2.3.2 衍生多个编译作业
2.3.3 安装内核
2.4 内核开发的特点
序言
前言
第1章 linux内核简介.
1.1 追寻linus的足迹:linux简介
1.2 操作系统和内核简介
1.3 linux内核和传统unix内核的比较
1.4 linux内核版本
1.5 linux内核开发者社区
1.6 小结
第2章 从内核出发
2.1 获取内核源码
2.1.1 安装内核源代码
2.1.2 使用补丁
2.2 内核源码树
2.3 编译内核
2.3.1 减少编译的垃圾信息
2.3.2 衍生多个编译作业
2.3.3 安装内核
2.4 内核开发的特点
译者序回到顶部↑
不知不觉涉足Linux内核已经几个年头了,与其他有志(兴趣)于此的朋友一样,我们也经历了学习——实用——追踪——再学习的过程。也就是说,我们也是从漫无边际到茫然无措,再到初窥门径,转而觉得心有戚戚焉这一路走下来的。其中甘苦,犹然在心。.
Linux最为人称道的莫过于它的自由精神,所有源代码唾手可得。侯捷先生云:“源码在前,了无秘密”。是的,但是我们在面对它的时候,为什么却总是因为这种规模和层面所造就的陡峭学习曲线陷入困顿呢?很多朋友就此倒下,纵然Linux世界繁花似锦,纵然内核天空无边广阔。但是,眼前的迷雾重重,心中的阴霾又怎能被阳光驱散呢?纵有雄心壮志,拔剑四顾心茫然,脚下路在何方?
Linux内核入门是不容易,它之所以难学,在于庞大的规模和复杂的层面。规模一大,就不易现出本来面目,浑然一体,自然不容易找到着手之处;层面一多,就会让人眼花缭乱,盘根错节,怎能让人提纲挈领?
“如果有这样一本书,既能提纲挈领,为我理顺思绪,指引方向,同时又能照顾小节,阐述细微,帮助我们更好更快地理解STL源码,那该有多好。”孟岩先生如此说,虽然针对的是C++,但道出的也是研习源码的人们共同的心声。然而,Linux源码研究的方法却不大相同。这还是由于规模和层面决定的。比如说,在语言学习中,我们可以采取小步快跑的方法,通过一个个小程序和小尝试,就可以取得渐进的成果,就能从新技术中有所收获,而掌握Linux呢?如果没有对整体的把握,即使你对某个局部的算法、技术或是代码再熟悉,也无法将其融入实用。其实,像内核这样的大规模的软件,正是编程技术施展身手的舞台(当然,目前的内核虽然包含了一些面向对象思想,但还不能让C++一展身手)。..
那么,我们能不能做出点什么,让Linux的内核学习过程更符合程序员的习惯呢?
Robert Love回答了这个问题。Robert Love是一个狂热的内核爱好者,所以他的想法自然贴近程序员。是的,我们注定要在对所有核心的子系统有了全面认识之后,才能开始自己的实践,但却完全可以舍弃细枝末节,将行李压到最小,自然可以轻装快走,迅速进入动手阶段。
因此,本书相对于Daniel P.Bovet和Marco Cesati的内核巨著《Understanding the Linux Kernel》,少了五分细节;相对于实践经典《Linux Device Drivers》,又多了五分说理。可以说,本书填补了Linux内核理论和实践之间的鸿沟,真可谓“一桥飞架南北,天堑变通途”。
就我们的经验,内核初学者(不是编程初学者)可以从这本书着手,对内核各个核心子系统有个整体把握,包括它们提供什么样的服务,为什么要提供这样的服务,又是怎样实现的。而且,本书还包含了Linux内核开发者在开发时需要用到的很多信息,包括调试技术、编程风格、注意事项等等。在消化这本书的基础上,如果你侧重于了解内核,可以进一步研究《Understanding the Linux Kernel》和源代码本身;如果你侧重于实际编程,可以研读《Linux Device Drivers》,直接开始动手工作,如果你想有一个轻松的内核学习和实践环节,请访问我们的网站www.kemeltravel.net。...
依然记得译第1版时的喜悦,第2版的到来自然就爱不释手了。同事贺炎为两版之间差异所费的心思全部体现在了字里行间,请读者欣赏第2版丰富的内容吧。
Linux最为人称道的莫过于它的自由精神,所有源代码唾手可得。侯捷先生云:“源码在前,了无秘密”。是的,但是我们在面对它的时候,为什么却总是因为这种规模和层面所造就的陡峭学习曲线陷入困顿呢?很多朋友就此倒下,纵然Linux世界繁花似锦,纵然内核天空无边广阔。但是,眼前的迷雾重重,心中的阴霾又怎能被阳光驱散呢?纵有雄心壮志,拔剑四顾心茫然,脚下路在何方?
Linux内核入门是不容易,它之所以难学,在于庞大的规模和复杂的层面。规模一大,就不易现出本来面目,浑然一体,自然不容易找到着手之处;层面一多,就会让人眼花缭乱,盘根错节,怎能让人提纲挈领?
“如果有这样一本书,既能提纲挈领,为我理顺思绪,指引方向,同时又能照顾小节,阐述细微,帮助我们更好更快地理解STL源码,那该有多好。”孟岩先生如此说,虽然针对的是C++,但道出的也是研习源码的人们共同的心声。然而,Linux源码研究的方法却不大相同。这还是由于规模和层面决定的。比如说,在语言学习中,我们可以采取小步快跑的方法,通过一个个小程序和小尝试,就可以取得渐进的成果,就能从新技术中有所收获,而掌握Linux呢?如果没有对整体的把握,即使你对某个局部的算法、技术或是代码再熟悉,也无法将其融入实用。其实,像内核这样的大规模的软件,正是编程技术施展身手的舞台(当然,目前的内核虽然包含了一些面向对象思想,但还不能让C++一展身手)。..
那么,我们能不能做出点什么,让Linux的内核学习过程更符合程序员的习惯呢?
Robert Love回答了这个问题。Robert Love是一个狂热的内核爱好者,所以他的想法自然贴近程序员。是的,我们注定要在对所有核心的子系统有了全面认识之后,才能开始自己的实践,但却完全可以舍弃细枝末节,将行李压到最小,自然可以轻装快走,迅速进入动手阶段。
因此,本书相对于Daniel P.Bovet和Marco Cesati的内核巨著《Understanding the Linux Kernel》,少了五分细节;相对于实践经典《Linux Device Drivers》,又多了五分说理。可以说,本书填补了Linux内核理论和实践之间的鸿沟,真可谓“一桥飞架南北,天堑变通途”。
就我们的经验,内核初学者(不是编程初学者)可以从这本书着手,对内核各个核心子系统有个整体把握,包括它们提供什么样的服务,为什么要提供这样的服务,又是怎样实现的。而且,本书还包含了Linux内核开发者在开发时需要用到的很多信息,包括调试技术、编程风格、注意事项等等。在消化这本书的基础上,如果你侧重于了解内核,可以进一步研究《Understanding the Linux Kernel》和源代码本身;如果你侧重于实际编程,可以研读《Linux Device Drivers》,直接开始动手工作,如果你想有一个轻松的内核学习和实践环节,请访问我们的网站www.kemeltravel.net。...
依然记得译第1版时的喜悦,第2版的到来自然就爱不释手了。同事贺炎为两版之间差异所费的心思全部体现在了字里行间,请读者欣赏第2版丰富的内容吧。
前言回到顶部↑
在我刚开始有把自己的内核开发经验集结成册,撰写一本书的念头时,我其实也觉得有点头绪繁多,不知道该从何下手。我实在不想落入传统内核书籍的窠臼,照猫画虎地再写这么一本。不错,前人著述备矣,但我终归是要写出点儿与众不同的东西来,我的书该如何定位,说实话,这确实让人颇费思量。.
后来,灵感终于浮现出来,我意识到自己可以从一个全新的视角看待这个主题。开发内核是我的工作,开发内核也是我的嗜好,内核就是我的挚爱。这些年来,我不断搜集与内核有关的奇闻轶事,不断积攒关键的开发诀窍,依靠这些日积月累的材料,我可以写一本关于开发内核该做什么--更重要的是——不该做什么的书籍。本质上,这本书仍旧是描述Linux内核是如何设计和实现的,但是写法却另辟蹊径,所提供的信息更倾向于实用。通过本书,你就可以做一些内核开发的工作了——并且是使用正确的方法去做。我是一个注重实效的人,因此,这是一本实践的书,它应当有趣、易读且有用。
我希望读者可以从这本书中领略到更多Linux内核的精妙之处(写出来的和没写出来的),也希望读者敢于从阅读本书和读内核代码开始跨越到开始尝试开发可用、可靠且清晰的内核代码。当然如果你仅仅是兴致所至,读书自娱,那也希望你能从中找到乐趣。
从第1版到现在,又过了一段时间,我们再次回到本书,修补遗憾。本版比第1版内容更丰富:修订、补充并增加新的内容和章节,使其更加完善。第1版之后内核的变化已基本稳定。更值得一提的是,Linux内核联盟做出决定,近期内不进行2.7版内核的开发。于是,内核开发者打算继续开发并稳定2.6版。这很有意义,而本书从中的最大受益就是在2.6版内核上可以稳定相当长的时间。内核的相对稳定为捕获其本质留下余地。一本书能最终获得认可,并成为内核的规范文档,是我的希望。
不管你学习Linux的目的是什么,我都衷心地希望你能喜欢我的书。
作者的体会
开发Linux内核不需要天赋,不需要有什么魔法,连Unix开发者普遍长着的络腮胡子都不一定要有。内核虽然有一些有趣并且独特的规则和要求,但是它和其他大型软件项目相比,并没有太大差别。像所有的大型软件开发一样,要学的东西确实不少,但是内核开发并不神秘,也不深奥,Linux内核开发者其实并不需要付出比其他开发者更多的努力。
认真阅读源码非常必要,Linux系统代码的开放性其实是弥足珍贵的,不要无动于衷地将它搁置一边,从而浪费了大好资源。实际上就是读了代码还远远不够呢,你应该钻研并尝试着动手改动一些代码。寻找一个bus然后去修改它,改进你的硬件设备的驱动程序,总之要有的放矢地做一些实际工作!只有动手写代码才能真正融会贯通。
内核版本..
本书基于Linux 2.6内核系列,具体地说,是基于最新版的2.6.10。内核总在不断更新,一本书很难捕获其动态变化。不过,观其变而抓其质,才是我努力的方向。本书力图呈现着眼于未来的资料,尽可能提供其广泛应用的素材。
读者范围
本书是写给那些有志于理解Linux内核的软件开发者的。本书并不逐行逐字地注解内核源代码,也不是指导开发驱动程序或是内核API的参考手册(如果存在标准的内核API的话)。本书的初衷是提供足够多的关于Linux内核设计和实现的信息,希望读过本书的程序员能够拥有较为完备的知识,可以真正开始开发内核代码。无论开发内核是为了兴趣还是为了赚钱,我都希望能够带领读者快速走进Linux内核世界。本书不但介绍了理论而且也讨论了具体应用,可以满足不同读者的不同需要。全书无处不理论联系实践,也并非一味强调理论或是实践。无论你研究Linux内核的动机是什么,我都希望这本书能将内核的设计和实现分析清楚,起到抛砖引玉的作用。
因此,本书覆盖了从核心内核系统的应用到内核设计与实现等各方面内容;我认为这点很重要,值得花功夫讨论。例如,第7章讨论的是下半部机制。其中分别讨论了内核下半部机制的设计和实现(核心内核开发者会感兴趣),随即介绍了如何使用内核提供的接口实现你自己的下半部(这对设备驱动开发者很有用处)。其实,我认为上述两部分内容是相得益彰的,虽然核心内核开发者主要关注的问题是内核内部如何工作,但是也应该清楚如何使用接口:同样,如果设备驱动开发者了解了接口背后的实现机制,自然也会受益匪浅。
这好比学习某些库的APl函数与研究该库的具体实现。初看,好像应用程序开发者仅仅需要理解API——我们被灌输的思想是,应该像看待黑盒子一样看待接口。而另一方面,库的开发者也只关心库的设计与实现。但是我认为双方都应该花时间相互学习。能深刻了解操作系统本质的应用程序开发者无疑可以更好地利用它。同样,库开发者也决不应该脱离基于此库的应用程序,埋头开发。因此,我既讨论了内核子系统的设计,也讨论了它的用法,希望本书能对核心开发者和应用开发者都有用。
我假设读者已经掌握了C语言,而且对Linux比较熟悉。如果读者还具有与操作系统设计相关的经验和其他计算机科学的概念就更好不过了。当然,我也会尽可能多地解释这些概念,但如果你仍然不能理解这些知识的话,请看本书最后参考资料中给出的一些关于操作系统设计方面的经典书籍。
本书很适合在大学中作为介绍操作系统的辅助教材,与介绍操作系统理论的书相搭配。对于大学高年级课程或者研究生课程来说,可直接使用本书作为教材。
本书的相关网站...
我维护了一个包含本书相关信息的网站:http://tech9.net/rml/kernel_book/。其中包括本书的勘误表、内容扩展和修改,同时也提供了未来重印和再版的信息。希望读者多到这个站点看看。我也对曾在句尾所加的介词深表歉意,那有点画蛇添是,使句子晦涩难懂,扰乱了读者的视线。
后来,灵感终于浮现出来,我意识到自己可以从一个全新的视角看待这个主题。开发内核是我的工作,开发内核也是我的嗜好,内核就是我的挚爱。这些年来,我不断搜集与内核有关的奇闻轶事,不断积攒关键的开发诀窍,依靠这些日积月累的材料,我可以写一本关于开发内核该做什么--更重要的是——不该做什么的书籍。本质上,这本书仍旧是描述Linux内核是如何设计和实现的,但是写法却另辟蹊径,所提供的信息更倾向于实用。通过本书,你就可以做一些内核开发的工作了——并且是使用正确的方法去做。我是一个注重实效的人,因此,这是一本实践的书,它应当有趣、易读且有用。
我希望读者可以从这本书中领略到更多Linux内核的精妙之处(写出来的和没写出来的),也希望读者敢于从阅读本书和读内核代码开始跨越到开始尝试开发可用、可靠且清晰的内核代码。当然如果你仅仅是兴致所至,读书自娱,那也希望你能从中找到乐趣。
从第1版到现在,又过了一段时间,我们再次回到本书,修补遗憾。本版比第1版内容更丰富:修订、补充并增加新的内容和章节,使其更加完善。第1版之后内核的变化已基本稳定。更值得一提的是,Linux内核联盟做出决定,近期内不进行2.7版内核的开发。于是,内核开发者打算继续开发并稳定2.6版。这很有意义,而本书从中的最大受益就是在2.6版内核上可以稳定相当长的时间。内核的相对稳定为捕获其本质留下余地。一本书能最终获得认可,并成为内核的规范文档,是我的希望。
不管你学习Linux的目的是什么,我都衷心地希望你能喜欢我的书。
作者的体会
开发Linux内核不需要天赋,不需要有什么魔法,连Unix开发者普遍长着的络腮胡子都不一定要有。内核虽然有一些有趣并且独特的规则和要求,但是它和其他大型软件项目相比,并没有太大差别。像所有的大型软件开发一样,要学的东西确实不少,但是内核开发并不神秘,也不深奥,Linux内核开发者其实并不需要付出比其他开发者更多的努力。
认真阅读源码非常必要,Linux系统代码的开放性其实是弥足珍贵的,不要无动于衷地将它搁置一边,从而浪费了大好资源。实际上就是读了代码还远远不够呢,你应该钻研并尝试着动手改动一些代码。寻找一个bus然后去修改它,改进你的硬件设备的驱动程序,总之要有的放矢地做一些实际工作!只有动手写代码才能真正融会贯通。
内核版本..
本书基于Linux 2.6内核系列,具体地说,是基于最新版的2.6.10。内核总在不断更新,一本书很难捕获其动态变化。不过,观其变而抓其质,才是我努力的方向。本书力图呈现着眼于未来的资料,尽可能提供其广泛应用的素材。
读者范围
本书是写给那些有志于理解Linux内核的软件开发者的。本书并不逐行逐字地注解内核源代码,也不是指导开发驱动程序或是内核API的参考手册(如果存在标准的内核API的话)。本书的初衷是提供足够多的关于Linux内核设计和实现的信息,希望读过本书的程序员能够拥有较为完备的知识,可以真正开始开发内核代码。无论开发内核是为了兴趣还是为了赚钱,我都希望能够带领读者快速走进Linux内核世界。本书不但介绍了理论而且也讨论了具体应用,可以满足不同读者的不同需要。全书无处不理论联系实践,也并非一味强调理论或是实践。无论你研究Linux内核的动机是什么,我都希望这本书能将内核的设计和实现分析清楚,起到抛砖引玉的作用。
因此,本书覆盖了从核心内核系统的应用到内核设计与实现等各方面内容;我认为这点很重要,值得花功夫讨论。例如,第7章讨论的是下半部机制。其中分别讨论了内核下半部机制的设计和实现(核心内核开发者会感兴趣),随即介绍了如何使用内核提供的接口实现你自己的下半部(这对设备驱动开发者很有用处)。其实,我认为上述两部分内容是相得益彰的,虽然核心内核开发者主要关注的问题是内核内部如何工作,但是也应该清楚如何使用接口:同样,如果设备驱动开发者了解了接口背后的实现机制,自然也会受益匪浅。
这好比学习某些库的APl函数与研究该库的具体实现。初看,好像应用程序开发者仅仅需要理解API——我们被灌输的思想是,应该像看待黑盒子一样看待接口。而另一方面,库的开发者也只关心库的设计与实现。但是我认为双方都应该花时间相互学习。能深刻了解操作系统本质的应用程序开发者无疑可以更好地利用它。同样,库开发者也决不应该脱离基于此库的应用程序,埋头开发。因此,我既讨论了内核子系统的设计,也讨论了它的用法,希望本书能对核心开发者和应用开发者都有用。
我假设读者已经掌握了C语言,而且对Linux比较熟悉。如果读者还具有与操作系统设计相关的经验和其他计算机科学的概念就更好不过了。当然,我也会尽可能多地解释这些概念,但如果你仍然不能理解这些知识的话,请看本书最后参考资料中给出的一些关于操作系统设计方面的经典书籍。
本书很适合在大学中作为介绍操作系统的辅助教材,与介绍操作系统理论的书相搭配。对于大学高年级课程或者研究生课程来说,可直接使用本书作为教材。
本书的相关网站...
我维护了一个包含本书相关信息的网站:http://tech9.net/rml/kernel_book/。其中包括本书的勘误表、内容扩展和修改,同时也提供了未来重印和再版的信息。希望读者多到这个站点看看。我也对曾在句尾所加的介词深表歉意,那有点画蛇添是,使句子晦涩难懂,扰乱了读者的视线。
序言回到顶部↑
随着Linux内核和Linux应用程序越来越成熟,越来越多的系统软件工程师涉足Linux开发和维护领域。他们中有些人纯粹是出于个人爱好,有些人是为Linux公司工作,有些是为硬件厂商做开发,还有一些是为内部项目工作的。.
但是所有人都必须直面一个问题:内核的学习曲线变得越来越长,也越来越陡峭。系统规模不断扩大,复杂程度不断提高。长此以往,虽然现在的内核开发者对内核的掌握越发炉火纯青,但却会造成新手无法跟上内核发展步伐,出现青黄不接的断层。
我认为这种新老鸿沟已经成为内核质量的一个隐患,而且问题将继续恶化。所以那些真正关心内核的人已经开始致力于扩大内核开发群体。
解决上述问题的一个方法是尽量保证代码简洁:接口定义合理,代码风格一致,“一次做一件事,做到完美”等等。这也就是Linus Torvalds倡导的解决办法。
我提倡的解决办法是对代码慷慨地加上注释:能够让读者立刻了解代码开发者意图的文字(识别意图和实现之间差异的工作称为调试。如果意图不明确显然调试就难以进行)。
可是,即使有注解,也没办法清楚地层现内核的各个主要子系统的全景,说明它们到底要做什么。那么,这些开发者又该从何下手呢?
由文字材料来说明这些在起步阶段就该理解的材料,其实是最合适的。..
Robert Love的贡献就在于此,有经验的开发者可以通过本书全面了解内核子系统提供的服务,同时还可以了解这些服务是怎么实现的。对不少人来说,这些知识就已经足够了:那些好奇的人,那些应用程序开发者,那些想对内核的设计品头论足一番的人,都有足够的谈资了。
但是本书同样可以为那些有抱负的内核开发者更上一层楼提供契机,可以帮他们更改内核代码以达到预定的目标。我建议有抱负的开发者能够亲身实践:理解内核某部分的捷径就是对它做些修改,这样能为开发者揭示仅仅通过看内核代码无法看到的深层机理。
严谨认真的内核开发者都应该加入开发邮件列表,不断和其他开发者交流。这是内核开发者相互切磋和并肩前进的最好方法。Robert在本书中对内核生活中至关重要的文化和技巧都做了精彩介绍。
请学习和欣赏Robert的书吧。想必你也希望能精益求精,继续探索,成为内核开发社区中的一员,那么首先你要清楚的是:社区欢迎你。我们评价和衡量一个人是根据他所做的贡献,当你投身于Linux时,你要明白:虽然你仅仅贡献了一小份力,但马上就会有数千万或上亿人受益。这是我们的欢乐之源,也是我们的责任之本。
Andrew Morton...
Open Source Development Labs
但是所有人都必须直面一个问题:内核的学习曲线变得越来越长,也越来越陡峭。系统规模不断扩大,复杂程度不断提高。长此以往,虽然现在的内核开发者对内核的掌握越发炉火纯青,但却会造成新手无法跟上内核发展步伐,出现青黄不接的断层。
我认为这种新老鸿沟已经成为内核质量的一个隐患,而且问题将继续恶化。所以那些真正关心内核的人已经开始致力于扩大内核开发群体。
解决上述问题的一个方法是尽量保证代码简洁:接口定义合理,代码风格一致,“一次做一件事,做到完美”等等。这也就是Linus Torvalds倡导的解决办法。
我提倡的解决办法是对代码慷慨地加上注释:能够让读者立刻了解代码开发者意图的文字(识别意图和实现之间差异的工作称为调试。如果意图不明确显然调试就难以进行)。
可是,即使有注解,也没办法清楚地层现内核的各个主要子系统的全景,说明它们到底要做什么。那么,这些开发者又该从何下手呢?
由文字材料来说明这些在起步阶段就该理解的材料,其实是最合适的。..
Robert Love的贡献就在于此,有经验的开发者可以通过本书全面了解内核子系统提供的服务,同时还可以了解这些服务是怎么实现的。对不少人来说,这些知识就已经足够了:那些好奇的人,那些应用程序开发者,那些想对内核的设计品头论足一番的人,都有足够的谈资了。
但是本书同样可以为那些有抱负的内核开发者更上一层楼提供契机,可以帮他们更改内核代码以达到预定的目标。我建议有抱负的开发者能够亲身实践:理解内核某部分的捷径就是对它做些修改,这样能为开发者揭示仅仅通过看内核代码无法看到的深层机理。
严谨认真的内核开发者都应该加入开发邮件列表,不断和其他开发者交流。这是内核开发者相互切磋和并肩前进的最好方法。Robert在本书中对内核生活中至关重要的文化和技巧都做了精彩介绍。
请学习和欣赏Robert的书吧。想必你也希望能精益求精,继续探索,成为内核开发社区中的一员,那么首先你要清楚的是:社区欢迎你。我们评价和衡量一个人是根据他所做的贡献,当你投身于Linux时,你要明白:虽然你仅仅贡献了一小份力,但马上就会有数千万或上亿人受益。这是我们的欢乐之源,也是我们的责任之本。
Andrew Morton...
Open Source Development Labs








点击看大图





加载中...
