Linux内核分析的过程,是对自己肯定,否定,再肯定并不断重复这个循环的过程。作为coder,唯一的快感就是有一种自我肯定的得意。然而这个过程很快会被无情的打破,因为这么庞大的内核,我们始终有一种盲人摸象的茫然。
内核分析课程结束了,但是Linux内核分析的路还远远没有结束。经过这么久的学习,我们大概摸到了Linux内核学习的框架以及方法。
Linux内核被内核黑客优化的如此精妙,以至于我们在惊叹于其中的某一点而走火入魔不能自拔,忘记了我们此行的目的。一叶障目是很可怕的,不能像一颗石子一样丢尽了水中就沉了下去,要学会起伏,要荡出涟漪。
细细回味,自己究竟学到了什么呢?曾经想,要认真的学习Linux内核,然而并没有兑现自己之前的承诺,由于各种事情的的耽搁,到后面也懈怠了。
Linux内核以汇编一个简单的C程序引发的思考铺展开来的。其中深入的了解了函数调用的机制,堆栈的使用。
当然我们并不满足于此,我们胸怀的是Linux内核,是整个世界,于是我们又学习了基础的linux内核代码mykernel内核代码深度剖析,名字起的唬人,至于深度够不够,还要各位看官来评价。
最初的的时候,会为了某一点的实现原理而细致的查资料,费尽心思的思考,到底为什么会这样,这样对不对,与同学们讨论。- 于是便有了错误的结论-mykernel-调度上下文ebp作用,错误的结论让各位见笑了,幸亏被带了回来,但终究自己对那一部分有了可能最深入的理解。
真正地去学习Linux内核代码,是从Linux内核的启动过程初见开始的,学会了如何去用gdb跟踪内核的执行流程,似乎也懂了一些Linux内核启动的的皮毛,不过大部分的时候都是亦步亦趋地跟着代码的流程走,生硬地翻译代码的意思,并不能联系上下文的含义。
嗯,开始偷懒了,在Linux系统调用窥探以及Linux系统调用始末中,选了一个不需要任何参数的API getpid(),我深深地佩服自己的机智,可是后面的剧情却和预想不符。在menuOS中使用API间接地进行系统调用的时候,发现,只有第一次的API使用能进入系统调用。有句话怎么说来着,自己作的死,含着泪也要作完。没办法,拿来主义呗,于是有了似懂非懂的姊妹篇Linux系统调用始末续...,各位看官,当笑话看看就行。这个本是牵强之解,虽然后面关于getpid的真正原因已经找到,但是由于自己的懒惰也就不了了之。
不论酸甜苦辣,生活还是要继续的,Linux创建进程的坎坷之路写出来了,完全看得出我的敷衍,思路的空洞尽显文字的匮乏,取而代之的是整篇的图片。
可执行程序,是怎么“动”起来的算是一个转折点吧,可以看到的是,提出的净是问题,却不见相应的答案。还好的是,也算是磕磕绊绊的了解了ELF的执行方式。水是很深,不过愿意花时间去看些其他的资料,还是能弄地更透彻。不论什么,总要有取舍吧。
最后一次作业,进程的切换和系统的一般执行过程,又恢复了以前的“硬解程序”的风格,真是讽刺,也许这就是首尾相呼应吧。
Linux内核对我们来说,像是海。以前也许只是听过海很蓝很大,现在自己也能站在海边眺望。
不管怎么说,对整个Linux的框架也有所了解,可以自己去征服自己喜欢的领域了。