陈莉君教授: 回望踏入Linux内核之旅

初次踏入Linuxlinux

   

  几多耕耘,几多收获,不当心在Linux这个自由王国畅游了多年。依稀记得刚进入这个世界时的那份恐慌和无知,更庆幸那时的无知无畏。在那个20世纪的最后一年,贸然带着几个弟子踏入一无所知的Linux世界。编程

1999年的那个春天,也是在讲授操做系统,只不过是鼓励你们参加个人兴趣小组。竟然有10我的报名了(惊喜)。最初也无非是但愿在课堂以外,让你们可以多接触一些东西,有点盲目,但你们兴致很高。在咱们每周相约讨论的过程当中,思路愈来愈多,机会之神也来光顾。人民邮电出版社但愿就开源的Linux写一本分析其内核的书。历来没有写过书的我,敢承接吗?不知勇气从何而来,出版社约定我3个月拿出书稿,当时竟然绝不犹豫地答应了。安全

这书该怎么写?从何入手?既然是分析内核源代码,那就从源代码开始阅读吧,因而,划分任务,给坚持下来的7个每人一部份内容。到咱们兴冲冲地下载了源代码后才发现,这么庞大的源代码远不是咱们能吃得动。真是自不量力!可有约在先,不作不罢呀。服务器

那个炎热的假期,你们苦战的场面还历历在目。炎热无空调,小伙子们光着膀子端杯水,有的干脆晚上彻夜在干,累了就在水泥地睡一下子。终于,在暑假快结束时,那本书总算草草封笔。之因此说草草,是由于,有太多的东西没法归入书本,还有太多的内容,咱们更没有一一理清楚。有点遗憾,有点不甘心,但时间有限,就那么交稿了。函数

2000年,《Linux操做系统内核分析》出版了,读者的好评扑面而来。有点惊讶,有点受宠若惊,更没有想到的是后来中科院指定该书为考博参考书。有份喜悦,更有份惭愧,总以为那么不成熟的毛小孩受人尊敬有点不相称。学习

不只仅是开源网站

在接触Linux以后,但愿把这种开源文化传播给学生。每当第一次讲起Linux,个人第一个页面都是徐悲鸿的一匹奔放的马:
spa



我会问学生,从这匹马中看到了什么,“自由奔放”,有的学生回答。其实,由于那一页的标题就是“Linux-自由而奔放的Linux黑马”,因此这样的回答,并无新意。我再问他们为何一匹画出来的马不一样于一张拍照?这样的问题曾经是我思索而不得其解的。也是由于看到了徐悲鸿的马,才以为答案就在眼前…操作系统

关于Linux,我总结成三句话“诞生于学生之手,成长于Internet,壮大于自由而开放的文化”,这几句话展开,能够写出若干页来,但简练的话更能让学生产生较强的记忆。.net

我在想,Linus在起初公布这个稚嫩的操做系统时,是否想到会被人嘲笑,是否会想到没有人会理会它,是否会想到一个错误百出的东西竟敢放在公共场所。也许,他只有一个理由,业余爱好作出来的东西,就是它了。喜欢者,尽管参与进来,无论你身处何地,也无论你技艺如何,作不了开发,能够找问题,bug找出来了,那也是一种贡献了。

我在想,是谁都那么主动的参与进去了?赫尔辛基大学的学生吗?也许,最初,只有他们才能访问到本身校园网的FTP服务器。当他们下载到这样一个还不成型的操做系统时,会是怎样一种行为,试试用?叫骂的帖子?找出bug贴出来?把本身的补丁打上去?也许,都有。但估计,有一种行为占据了上风:有人用了,有人找出bug了,更有人愿意把本身改写的代码也贡献出来,他们是谁呢。我在阅读源代码时,看到过这些人的Email地址。在源代码前面的注释部分,附上本身的Email,这是他们惟一呈现本身贡献的方式了。

我在想,开源世界五彩缤纷,为何Linux这匹黑马奔跑不止呢?也许,有人说,垄断的Windows给了Linux竞争的场地。其实,这只是今天的Linux造成了足以压倒Windows的优点。在Linux仍是摇摇晃晃的婴儿时呢?也许由于,它攀到好兄弟Unix,还有Linus本人的魅力和技术,也许更重要的是开源文化这片肥沃的土壤和场地。但,这些,好像还不是充足的理由…

我在想,Internet到底给人带来了什么。在这个开源的社区,咱们感到的是一种平等,自由,开放,和谐的社会也不过如此吧。弗里德曼在《世界是扁平的》中描绘的全球化的三步中,是否解答了个人疑惑:第一步是因为航海的发展而利于强国侵略所造成的全球化;第二步是因为生产力和贸易的发展而造成的市场全球化;第三步则是近些年开始加速的通讯的发展而造成的信息全球化。一些强国是要增强本身对于别国的强权,而全球化是打破这种强权的大趋势,是使那些强权的非中心化。

只是,弗里德曼站得更高, 而我经常会告诉学生,若是你喜欢权利或被奴役,那不要到这个社区来…


翻译之路


不知不觉,竟然有不少本书从本身的手上脱稿而出。回想第一次欣然答应翻译《Understanding The Linux kernel》初版时的茫然和兴奋。历来没有作过翻译的本身竟然敢承担业界最有名的Linux内核书的翻译,由于无知,也就无畏了。当真正着手翻译时才发现,翻译远不是本身想象的那么简单。专业知识,英文底子,中文表述,哪个也不能少。对初版的倾情翻译彻底出于当时那种对Linux内核的狂热。依然记得那些不知疲倦的日子,看着那一页页的英文被本身消化掉,再读着自认为还过得去的表述,更从做者对知识的组织和表达中学到未曾了解到的东西,能够说,整个翻译过程就在这种激情中悄然度过的。

如今都很惊讶本身独立翻译《ULK》第二版时的那种投入,找出初版和第二版的差别就花去大量的时间。出版社老是给译者较为严格的时间界限,这让我除了吃饭就是翻译了。

出版社再找我翻译《ULK》第三版时,面对800多页的书,有点犹豫和退缩了。那些辛苦,兴奋,忘个人日子有点不敢回首了。可是,前两版的翻译,倾注了太多心血,又不舍得就这么把本身抚养的孩子送给别人。当我把这个想法告诉在全国操做系会上认识的张琼声老师(石油大学)时,她欣然答应,让我把关,她愿意接收继续翻译。她的认真和负责我是有所了解的,所以,仍是答应了第三版的翻译。

一个春夏和暑假过去,又成了记忆中一段难忘的日子。常常为了一个词的准确翻译,在网上来回屡次讨论,有时甚至快要吵起来了。但即便这样,当咱们不得不按原定的日期交稿时,依然以为有很多遗憾隐藏在译稿中,若是读者在阅读时,发现任何的bug,但愿诚恳指出,发布出来,让更多的读者知晓。

Linux内核书籍点评

        从99年开始带学生分析Linux内核,一路走来,积累了很多资料,也编写和翻译了近10本相关书籍,一直在摸索怎样才能使你们尽快走入内核,但彷佛没有捷径。尤为是内核版本的不断更新,更是很多内核爱好者无所适从。

咱们初次接触的内核资料是“The Linux Kernel”( kernelbook.sourceforge.net),介绍的是Linux2.0,尽管其中的内容过于概略,但其引导性的全面概述,使咱们逐步找到了进入内核的入口。

依然记得“Concrete Architecture of the Linux Kernel”这篇文章,当我在网上查到这篇文章时,一遍遍的阅读以后,虽然仍是朦朦胧胧的感受,但这种高屋建瓴式的对内核的总体性把握,使得内核这个庞然大物有了骨架,这也符合了从总体入手,各个击破的思惟模式。这篇文章对内核的分析采用了反向工程中自顶向下和自低向上的策略,

对内核这样一个没有起点,也没有终点的圆球,首先得找一个入口点。也许你们认为从进程入手是个不错的选择,但咱们啃的第一块硬骨头是“Unix下保护模式的编程”,主要阅读其中的第四章,关于保护模式。

另外,咱们常常阅读的资料还有Linux Kernel howto。其实,最直接的资料仍是源代码以及其中的doc。我常常访问的源代码网站是lxr.linux.no,其进行了较大的调整,不只有内核的每一版本的源代码,并且增长了很多的文档。

咱们的第一本书《Linux操做系统内核分析》在2000年出版后,不少读者给予承认。我想这可能由于,在本书的编写过程当中,咱们没有拘泥于任何框框,只是把咱们在分析2.0内核时,阅读的相关资料以及自我认识,比较原始的展示出来。尽管书所涵盖的内容远非咱们曾经设想的,但对入门而言,可让读者少走很多弯路。

本书以后,咱们翻译了内核红宝书《Understanding The Linux Kernel》(已经出版了三版),在本书的翻译过程当中,我时不时有插入源代码的愿望,也就是说,本书的原理和叙述比较顺畅,但若是没有源码在手,有时如坠雾里。所以建议,本书的阅读,尽可能要与源码结合。

在这以后,在《Linux操做系统内核分析》基础上,对2.4版的内核进行分析。 当我着手《深刻分析Linux内核源代码》这本书的编写时,看到了毛德操、胡希明 著的《Linux内核源代码情景分析》一书。厚厚的两大本,彻底是娓娓道来。本书做者以英语情景会话的方式,对阅读内核代码路途中遇到的几乎每一个函数,都一一说明。可是,由于内核代码的深层次嵌套,若是你在阅读的过程当中,没有作好返回“现场”的准备,极可能走入某条小径后不知返回的路途在哪里了。可是,若是你有时间,并且有耐心,仔细阅读本书,应该说能够全景式掌握Linux内核。

在此说明,《深刻分析Linux内核源代码》是针对Linux 内核2.4的,本书编写过程当中,依然遵循了“Concrete Architecture of the Linux Kernel”一文的从顶向下的思路,同时还不断的比较2.2与2.4内核在开发驱动程序方面的差别。整体感受,新版本对内核函数进行了较好的封装,让内核接口变得愈来愈容易。

《Linux kernel development》一书(中文名“Linux内核设计与实现”,已出三版,2.6内核),又一本口碑较好的Linux内核书籍。当咱们费劲翻译完这本并不厚的书时,才感受其涵盖信息量之大,相比《Understanding The Linux Kernel》,能够说,若是没有内核的基础知识,阅读以后,大有不知因此然之感。尽管这本书深得读者喜欢,咱们的翻译也获得读者的极大承认,但仍是建议读者有必定内核基础知识以后再去读这本书。

《The Linux® Kernel Primer: A Top-Down Approach for x86 and PowerPC Architectures》,咱们翻译的另外一本2.6内核书籍,本书的做者在IBM呆过多年,有开发经验。书中对涉及到的代码逐行给予了解释,所以,在必定程度上适合于初学者。

在翻译和编写了以上书籍以后,咱们为清华大学出版社编写了《Linux操做系统原理与应用》教材,本书的侧重点不在逐行分析源代码,而是对部分源代码有所了解后,让读者可以动手进行内核模块的编写,每章后面的例子有必定的难度,可是,动手以后,再去了解内核相关内容就具备针对性了。

以上对内核书籍的简评,只限于咱们编写和翻译的书籍,像《Linux Device Driver》也是经典内核书籍,在此并无给予说明,近几年出版了很多内核方面的好书,建议读者择优去读。

在Linux内核这样一片茂密无边的树林面前,若是说我曾给过你们有所帮助,其实也只是引领了一条小径而已,那种探究的路途,全凭的是我的的悟性和不懈的执着,路漫漫兮,寻觅者自有探索,然后,我更但愿是一旁观者,但愿看到勇者无往的憨劲!


从机制与策略探究Linux内核设计之道

2011年的Linux内核开发者大会邀请我作主题发言,但给你们分享些什么,起初选定Linux的安全,由于那几年的项目是这方面的。可是,当我着手准备讲稿时,才发现安全是个太广的话题,根本难以把握。因而想起本身经常告诉别人的话,从本身最熟悉的地方下手。因而,仍是从本身最熟悉的Linux内核入手吧。可是,内核也是太大的话题,漫无边地,怎样才能在有限的时间把本身这么多年的体会分享出去,有两个词在瞬间跳在眼前:机制与策略,这也是本身经常挂在口边的词,怎样从内核的设计释义这两个词的含义,这实际上也是一个哲学命题。当开始写讲稿时,题目天然就蹦出来了:”从机制与策略探究Linux内核的设计之道“

当题目肯定下来后,才发现跳进本身挖的大陷阱中,这个涉及哲学、技术的宽泛题目我能把握么?但,没有其余令本身更满意的题目,只能是它了。所以,讲稿的第一页分别引用了易经和圣经中的两句话:“形而上谓之道,形而下谓之器”;“看见的是暂时的,看不见的是永远的”。这两句话一出来,思路一会儿打开了。实际上,我要分享给你们的不是具体的技术,而是思考问题的方式。因而,第二页上引用了龙应台在”百年思索“中对文、史、哲的释义—”文学-使看不见的东西被看见,哲学-迷宫中望见星空,历史-沙漠玫瑰的开放“。当咱们仅仅在技术的坐标系中看问题时,实际上总有必定的局限性,那些万事万物之间的联系由于咱们固有的观念而被割裂了。至此,我定位了本身的位置:若是说”道“是一只大象(突然想起老子说的“大象无形”,但我这里是偷换概念),那么我在这里讲的观点只是摸到了大象的鼻子。这样以来,本身一会儿释然了,我并非什么专家,我只是在这个领域呆的时间长了,比你们早知道一些东西,多知道一些道理,有些感悟,但远不是所有事实。

当这样的开场白后,讲稿上打出屈原“天问”中的几句(这是学人家龙应台)“天何所沓 十二焉分 日月安属 列星安陈 何阖而晦 何开而明 角宿未旦 曜灵安藏”,屈原一个文学家,怎么问天文地理不着边际的这些问题:“天为何和地相合,...",这是为了引出胡适的观点“作学问要在不疑出有疑”。

引子部分所有结束后就进入主题,首先用一组数据观察Linux内核演变历史,而后,从Linux总体结构入手,分析机制与策略分离的设计原则,再而后,从各个子系统中这一设计原则的应用入手,说明机制与策略的分离其实是计算机科学中的设计理念,而不只仅用在操做系统中。最后引出手机操做系统Android以及虚拟机xen的设计思路。

回头看整篇讲稿,与本身最初设想的根本不同了。一件事情动手作起来之后彻底是按照事情自己的规律往前走了,而不是脑子固有设想的非得怎样去作,也许这也是一种“道”。

后来,华为的深研所,西研所,北研所邀请我去他们的大讲堂讲讲关于Linux内核方面的东西,“从机制与策略探究Linux内核的设计之道”的通用性省却了我每次要从新准备讲稿的时间,而把大量的时间花在了解他们具体的需求上,在不一样的地方,面对不一样的人群,只须要针对具体需求实例化后进行发挥,就有游刃有余的感受了。                                                 

迷时师度 悟了自度

曾在企业实习的学生发来邮件说,企业在培训中推荐他们阅读侯捷写的《迷时师度 悟了自度》一文,我读罢叹为观止,先把其中的故事贴过来:


● 六祖坛经

佛教东传中土之後,虽然大德大贤备出,但由中国和尚所著,被奉为「经者],也只「六祖檀经」一书而已。六祖檀经记录着佛教禅宗六祖惠能一辈子的思想言行。其中对於六祖得道的过程,有详细的叙述。  

六祖惠能俗姓卢,南海新兴人。年少失父,母且寡居,家亦屡空,业无腴产。因此他从小作了樵夫,养家活口。有一天偶闻肆间诵金刚般若经,心有所感,於是询问邻人何处学佛,遂安置母亲,至河北黄梅山礼拜五祖。  


●五祖弘忍  

五祖弘忍见惠能谈吐甚有根性,不动声色地让他到後院碓米。八个月後有一天,弘忍告诉众弟子说,每个人写一首偈,谁能悟道,我便传他衣钵。当时人人觉得五祖座下第一大弟子神秀必得衣钵,因此也没有人去做这首偈。神秀在这种状况下,一来「义不容辞」,二来也想让师父看看本身心中的看法,便在三更时候於南廊壁上写下心偈一首:  



       身是菩提树,心如明镜台;

       时时勤拂拭,莫使惹尘埃。


次日五祖弘忍见到了这首偈,把神秀叫到座前询问。并谓:「汝做此偈,见即未到,只到门前,还没有得入...」。要神秀回去再做一偈。过了数天,神秀却做不出来。  


●千古名诵  

有个童子行过碓房,唱诵神秀的偈。惠能闻後,问明原因,便请童子引至大堂。礼拜之後,惠能说本身也有一首偈,可是他既不识字更不会写字,乃请人代书写下千古名诵:  



   菩提本非树,明镜亦非台;

     原本无一物,何处惹尘埃。  


此偈一成,众总皆惊。消息传至五祖,了然於心,但恐人损害,遂脱了鞋子 当抹布,马上把这首偈擦掉,而且说「这首也嘛没有悟道」!  

次日,五祖弘忍悄悄来到後院,看到惠能把大石头系在腰上,增长身体的重量来碓米,非常感动,於是和惠能展开一段很是空灵神妙的对话。弘忍问「米熟也未」?惠能曰:「米熟久矣,犹欠筛在」。於是祖以仗击碓三下而去。惠能知祖意,是夜三鼓入室,由祖为说金刚经。当说到「因无所住而生其心」,惠能大悟,於是五祖授衣钵觉得信,而且说「衣为争端,止汝勿传...,汝须速去,恐人害汝」。  


●迷时师度,悟了自度  

五祖弘忍亲自送惠能到九江驿,令上船,把自摇。惠能曰:「请和尚坐,弟子合摇」。祖云:「合是吾渡汝」。惠能云:「迷时师度,悟了自度」。


             

个人观点:


●谁是师?

古人一字,涵盖多义。我经常会以为本身为师多年,是当仁不让的师,可有一天与一位40多岁还从头学计算机编程的人聊后 ,就从内心认他为师,不是由于他的知识,而是由于他纯粹的学习兴趣和没有功利心而为的劲头。


●怎么悟

一个“悟”字,太有禅意,彷佛高不可攀,但每一个人都有感觉到悟的时刻,只是当你寻找悟的感受时,它反倒跑的无影无踪。追溯“悟”的源头,大都是由于日思夜想,吞下无数文字,驰骋于思惟的高山峡谷,有那么一时刻,有了众里寻他千百度的顿悟。在这以前,一次次模模糊糊的感受似影似幻,总困扰着你。若是放弃了,那本该触手可及的顿悟也就溜之大吉。


●悟什么

好比,在Linux内核这样有禅意的做品中,高人的代码散落四处,那些代码后的文字和原理,或者一些经典原理落地有声的代码,关联起他们的,非文字所能描述,悟就别无选择了。



与其相忘于江湖,不如点击二维码关注Linuxer