分类: LINUX
2013-02-23 23:56:41
原文地址:Linux内核探索之路——关于人 作者:lli_njupt
如果有好的方法,好的环境,就能让一个人取得他想要的“成功”,这世界几乎不需要“失败”这个词了。提到这个就想起来以前新东方的老罗,老罗讲过他在北京学习英语的一段趣事:一段时间要看一本励志书,然后能再坚持一段时间,不然就会被京城里的滚滚红尘给召唤去了。这说明了什么问题?人,总是想进步,但又惰性难改,难于坚持。
人之天性,既有积极的一面:求知欲和好奇心,促使人不停探索和学习;又有消极的一面:懈怠和懒惰,总是在人前进的道路上消磨意志,动摇决心。好的方法和环境在某种程度上可以放缓这种过程,比如每个阶段都能看到成果,形成良性循环;好的团队气氛,研究氛围也可以提高效率,互相鼓励,共同进步。但是在强调这些外在因素的同时,更要坚定自己的决心——这确实不易。如果你真的觉得值得把自己的一段时间用来奉献给Linux内核,你下定了决定,那么把它养成一个习惯吧。
“行为心理学研究表明:21天以上的重复会形成习惯;90天的重复会形成稳定的习惯。即同一个动作,重复21天就会变成习惯性的动作;同样道理,任何一个想法,重复21天,或者重复验证21次,就会变成习惯性想法。所以,一个观念如果被别人或者自己验证了21次以上,它一定已经变成了你的信念。”一旦养成一个习惯,那么习惯的力量将会在无形中持续,此时的坚持已经成为了自然而然,理所当然。
最初的阶段的特征是“刻意,不自然”,这是最艰难的阶段。你需要十分刻意提醒自己改变,而你也会觉得有些不自然,不舒服,甚至是痛苦。首先环境的对比会非常强烈的影响你,比如你要花时间做一些明显不符合你平常这个时间做的事情,比如上网聊天,打游戏,或者打球,逛街,并且恰恰相反,你在做令你头昏脑胀的事情,有时还相当挫败:即便一些简单的Linux内核实现机制也不能保证就可以一蹴而就,一些地方很可能让你迷惑。此时你要平心静气,告诉自己“慢即是快”,当前不能解决的,先暂且放置,或者把问题发在相关的论坛,相信大家都是热心的。本来对内核的把握就是“循坏往复,总体向上”的。心态此时就起了非常大的作用。有得到必有所失去,既然选择了这件事,就要提醒自己,不要泄气。诚如老罗所说的那些所谓“精神鸦片”的成功学著作,有时候可能要看一看;笔者推荐一种方法就是将你觉得在这个领域很牛x,你很钦佩和敬仰的人的照片放在的面前书桌前,时刻勉励自己。
有一点要提到,笔者在网上购书的时候也会看看书评,发现一个有趣的现象:无论这本书有多经典,总是会有几条评论会否定它的价值。其实应该根据自己当前所处的阶段来选择书籍,否则很可能会揠苗助长。有些国内翻译的书籍虽然颇多瑕疵,但是大部分都是可以接受的,可以对照相关的勘误表和英文原版来分析一下,是书的问题,是翻译的问题,还是自己理解的问题。千万不要,读了几页没有看懂,就断定这书很垃圾,这不但是对原版作者辛勤工作的极大不尊重,同时这很可能让你错过一本能够帮助你的好书
一旦度过最初的一个阶段,就会形成原始的积累,你会发现以前看起来一团乱麻,毫无头绪的代码并非无章可循,反而是井井有条,到处是闪光的地方:从简单的方面来讲:内核链表,哈希表,它们都可以被提取出来为我所用;从复杂方面讲:内核命名空间,它足以颠覆传统虚拟机的观念。内核代码变得相当有条理,单个子功能的代码都集中在一个或者几个.c文件中,一个子系统基本集中在一个文件夹中。
内核是开放的,所以研究它也要保持一颗开放的心。不光要看书,或者添加简单的DEBUG代码,要在整个过程中,充满疑问和想法,然后验证它,比如一系列的Kobject是如何组织的,为什么?那么你就要专门针对它写一些相关的解析函数,以加深对它的理解。更深层次的要求是,你在这个机制上可以增加一些自己的东西,同理也可以减少一些,观察并分析内核的运行状况是否和预想的一样,其实内核代码中最原始的东西很少,基本都是在后来的过程中一行一行增加的,所以通过一些内核变更日志网站,比如lkml,也很有可能追踪到你所迷惑的代码的根源。
一颗谦逊的心,如果是刚刚涉足这一领域,那么一颗谦逊的心可以促进你与他人交流,看清自己的水平,就像一个空杯子,它才能装更多的水。也许在这个领域已经很久了,对Linux内核可以如数家珍,那么不妨在网络论坛上多发表一些自己的高见,帮助他人,毕竟所有的知识都是“Standing on Shoulders of Giants”——站在巨人的肩上得来的。另外也可能精通的是某个特定的CPU架构,不妨看看其他的;每天更新的内核代码就有几百条,也不妨关注等等,所有这些都应成为达到更高点的动力——高山仰止,景行行止,虽不能至,心向往之。
“慢即是快”——笔者再次强调,笔者就是一个实际的例子,比如今天要分析完这一段,那么很可能你分析不来这一段,特别是刚刚开始的时候,要做好思想准备。另外,有些部分比如Bootloader加载到start_kernel阶段,你可能用了一个月,分析的很透彻了,就准备也用一个月来分析内存管理,这是完全不行,很可能需要半年时间,所以张弛有度,切忌贪多恋快。
啰嗦的太多了,写下这些,希望能给有志于探索Linux内核奥秘的人有所帮助,所有的观点都是笔者的愚见,因为笔者还在探索的路上,愿与所有相同志趣的人共勉:“慢即是快”;实践与理论相结合,书不在多,在于研读;在正确的方法和方向上坚持再坚持。
Bean_lee2013-02-24 18:09:22
有一点要提到,笔者在网上购书的时候也会看看书评,发现一个有趣的现象:无论这本书有多经典,总是会有几条评论会否定它的价值。其实应该根据自己当前所处的阶段来选择书籍,否则很可能会揠苗助长。有些国内翻译的书籍虽然颇多瑕疵,但是大部分都是可以接受的,可以对照相关的勘误表和英文原版来分析一下,是书的问题,是翻译的问题,还是自己理解的问题。千万不要,读了几页没有看懂,就断定这书很垃圾,这不但是对原版作者辛勤工作的极大不尊重,同时这很可能让你错过一本能够帮助你的好书
这句话,我不同意,如果你手捧一本烂书,你的损失不只是你读了一本烂书,你更错过了读一本好书的机会,你原本可以把你宝贵的时间花在经典上。几乎每一个领域都有少数经典的教材,读经典,让你进步更快。