本文转载,版权归作者所有。商业转载请联系作者授权,非商业转载请注明出处。作者:陈立军来源:微信公众号linux代码阅读领域(id:linuxdev)第一次踏入Linux,付出那么多,收获那么多,一不小心就游进了Linux的自由王国年。依稀记得初入这个世界时的恐慌和懵懂,更感激当时的懵懂和无畏。20世纪最后一年,我贸然带着几个弟子走进了懵懂的Linux世界。1999年春天,我也在教操作系统,只是鼓励大家加入我的兴趣小组。居然有10人报名(惊喜)。当初无非是希望大家多接触课堂以外的东西。有点盲目,但每个人都很感兴趣。在我们每周例会和讨论的过程中,越来越多的想法来了,机会之神也光顾了。人民邮电出版社希望写一本分析其内核的开源Linux书籍。我没写过书,敢承接吗?不知道哪里来的勇气。出版社答应我三个月出稿,我毫不犹豫地答应了。这本书应该怎么写?从哪儿开始?既然是分析内核源码,那我们就从源码开始阅读吧,所以,分任务,给坚持的7个人每人一部分内容。我们兴致勃勃的下载了源码后,发现这么庞大的源码根本不是我们能吃的。真的不知所措!但是先有预约,不去做就停不下来。那个炎热的假期里,大家辛勤工作的情景还历历在目。天气很热,而且没有空调。年轻人脱下衬衫端着水杯。他们中的一些人通宵工作,累了就睡在水泥地上。终于,在暑假结束的时候,这本书终于合上了。之所以说仓促,是因为书中无法收录的东西太多,内容太多我们没有一一梳理。有点遗憾,有点不甘,但时间有限,还是投稿吧。2000年,《Linux操作系统内核分析》问世,深受读者好评。我有些惊讶,有些受宠若惊,没想到的是,后来中科院指定本书为考试参考书。一半是欣喜,一半是惭愧,总觉得这样一个不成熟的毛孩子,被人尊重有点不合适。不只是开源接触Linux后,希望将这种开源文化传播给同学们。每当我第一次谈起Linux,我的第一页就是徐悲鸿的奔马。我会问学生在这匹马身上看到了什么,“洒脱”,有的学生回答。其实因为那个页面的标题是“Linux-FreeandUnrestrainedLinuxDarkHorse”,所以这样的回答并不新鲜。我又问他们为什么画的马和照片不一样?这个问题曾经是我想不通的问题。也是因为看到了徐悲鸿的马,才觉得答案就在眼前……关于Linux,我总结为三句话:“生于学生手中,长于网络,强于网络”thanafreeandopenculture”,这几句展开,可以写好几页,但简洁的文字会让学生的记忆力更强。我在想,当初Linus宣布这个不成熟的操作系统的时候,他会不会觉得人们会嘲笑他,会不会觉得没人会关注,他会不会觉得一个错误百出的东西还敢放它在公共场所。或许,他只有一个原因,那就是他的爱好所造就的。喜欢的人,即使你参与了,不管你在哪里,技术多好,如果你不会做开发,你能发现问题和bug,那也是一种贡献。我在想,谁积极参与了呢?您是赫尔辛基大学的学生吗?或许,最初,只有他们才能访问自己校园网的FTP服务器。当他们下载这样一个未成型的操作系统时,他们会有什么样的行为,试试看?骂帖?找到错误并发布?把你自己的补丁放在上面?也许,两者都有。但估计有一种行为占了上风:有人用,有人找bug,有人愿意贡献自己重写的代码。他们是谁?当我阅读源代码时,我看到了这些人的电子邮件地址。在源码前的评论区,附上自己的Email,这是他们展示贡献的唯一方式。我在想,开源的世界多姿多彩,为什么Linux这匹黑马一直在跑?或许,有人说是Windows的垄断让Linux有了一席之地。其实这只是当今Linux压倒Windows的一个优势。当Linux还是一个摇摇欲坠的婴儿时呢?或许是因为爬上了好兄弟Unix,还有Linus本人的魅力和技术,或许更重要的是开源文化的沃土和场地。然而,这些,似乎都不是充分的理由……我在想,互联网给人们带来了什么。在这个开源社区里,我们感受到的是一种平等、自由、开放,和谐社会无非如此。《世界是扁平的》弗里德曼的全球化三步走是否解答了我的疑惑:第一步是全球化,因为航海的发展,有利于强国的侵略;第二步是由于生产力和贸易的发展形成的市场全球化;第三步是近几年通信加速发展形成的信息全球化。一些强大的国家想加强自己对其他国家的影响力,全球化是打破这种权力并分散这些权力的大势所趋。只是弗里德曼站得更高,我经常跟学生说,如果你喜欢权力或者喜欢奴役,那么就不要来这个社区……不知不觉,在翻译的道路上,有很多出自我自己双手的书都是脱稿的。回想起第一次欣然同意翻译《Understanding The Linux kernel》第一版时的迷茫和激动。我以前从来没有做过翻译,但我敢于承接业界最著名的Linux内核书籍的翻译。因为无知,所以无所畏惧。当我真正开始翻译的时候,才发现翻译远没有想象中那么简单。专业知识、英语基础、汉语表达,缺一不可。第一版的热情翻译,完全是出于当时对Linux内核的热情。还记得那些不知疲倦的日子,看着自己消化的那几页英文,再读自己认为还过得去的表达方式,从作者对知识的组织和表达中学到不懂的东西。可以说,整个翻译过程就是在这种激情中悄悄度过的。现在,我为独立翻译《ULK》第二版的投入而感到惊讶。找出第一版和第二版之间的区别花了很多时间。出版社总是给译者一个比较严格的时限,害得我一边翻译一边吃饭。当出版社让我翻译《ULK》第三版时,面对一本800多页的书,我有些犹豫和退缩。不敢回首那段辛苦、激动、忘我的日子。但是,前两版的翻译费了太多功夫,我舍不得把自己养的孩子送给别人。当我把这个想法告诉我在全国作业部会议上认识的张琼生老师(石油大学)时,她爽快地答应让我检查,并愿意接受并继续翻译。我理解她的认真和责任,所以我同意翻译第三版。一个春夏暑假过去了,成为我记忆中难忘的一天。为了一个词的准确翻译,我经常在网上来来回回讨论很多次,有时甚至差点吵架。但即便如此,当我们不得不在原定日期交稿时,我们仍然觉得翻译中隐藏着许多遗憾。如果读者在阅读过程中发现任何错误,希望真诚地指出并发表,让更多的读者知道。LinuxKernelBookReview从1999年开始带领学生分析Linux内核,一路走来,积累了大量资料,还撰写和翻译了近10本相关书籍。捷径。尤其是内核版本的不断更新,让很多内核爱好者无所适从。我们最先接触到的内核资料是《TheLinuxKernel》(kernelbook.sourceforge.net),里面介绍了Linux2.0。入口。我还记得《Linux内核的具体体系结构》一文。当我在网上找到这篇文章的时候,翻来覆去读了一遍,虽然还是有一种朦胧的感觉,但是这篇关于内核完整性的高层观把握了内核这个庞然大物的骨架,这也是在符合从整体出发,个别分解的思维模式。本文对内核的分析采用了逆向工程中自上而下和自下而上的策略。对于内核这样一个没有起点也没有终点的球来说,首先需要找到一个切入点。可能大家觉得从进程入手是个不错的选择,但是我们啃的第一块硬骨头是《ProgramminginProtectedModeunderUnix》,主要看的是它的第4章,关于保护模式的。另外,我们经常看的资料是LinuxKernelhowto。其实最直接的信息就是源码和里面的doc。我经常访问的源代码网站是lxr.linux.no,已经进行了重大调整。它不仅有各个版本内核的源代码,还增加了很多文档。2000年我们的第一本书《Linux操作系统内核分析》出版后,得到了很多读者的认可。我想这可能是因为我们在写这本书的过程中,没有拘泥于任何框架,只是以一种比较原始的方式展示了我们在分析2.0内核时阅读的相关资料和自学知识。虽然本书涵盖的内容与我们曾经想象的相去甚远,但对于入门来说,却能让读者少走很多弯路。这本书之后,我们又翻译了内核红皮书《Understanding The Linux Kernel》(已出三版)。在这本书的翻译过程中,时不时会有插入源码的欲望,也就是说,这本书的原理和叙述比较顺畅,但是如果手头没有源码,有时就像坠入迷雾。因此,建议本书的阅读尽量结合源码阅读。之后在《Linux操作系统内核分析》的基础上对2.4版本的内核进行分析。当我开始写《深入分析Linux内核源代码》这本书的时候,我偶然发现了毛德操和胡锡明的书《Linux内核源代码情景分析》。厚厚的两本书,完全是滔滔不绝。本书作者以英语情景对话的方式,对内核代码阅读过程中遇到的几乎每一个函数进行了讲解。但是,由于内核代码的嵌套很深,如果在阅读的过程中还没有准备好回到“场景”,走进某条路后,你可能就不知道哪里是回去的路了。但是,如果你有时间和耐心仔细阅读本书,应该说你可以全景式地掌握Linux内核。这里说明《深入分析Linux内核源代码》是针对Linuxkernel2.4的。在本书的写作过程中,依然沿用了《Linux内核的具体体系结构》一文自上而下的思路,同时不断对比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内核这样的禅意作品中,高手的代码到处都是。代码背后的文字和原理,或者说一些经典的原理和声音代码,都与之相关,无法用文字描述,悟也没有办法。更多精彩更新来袭...欢迎关注账号:linux代码阅读领域(id:linuxdev)![正在上传文件...]()
