第六句是使用 kernel 地图定位目标代码。应该说学习内核就是学习内核的源代码,但是内核代码千千万,又到处像个迷宫一样,不迷路都很难,又怎么去直面它?这时我们就需要这样的一幅内核地图来帮助我们去定位所要分析的目标代码,并缩小目标代码的范围与代码量。
接下来是第七句话:分析内核源码,态度决定一切。我们很多人或许有这样的困惑,也分析浏览了很多内核的源码,可总是觉得分析完浏览完脑子里还是空空的,并没有感觉到多大的收获。这个时候我们或许可以去看看是不是自己在分析代码时的态度出现了问题。我们在分析内核源码时,只有遵循严谨的态度,去理解每一段代码的实现,多问多想多记,而不是抱着走马观花,得过且过的态度,最终必然会有很大的收获。
最后一句是:以内核源码为中心,坚持学习资源建设。在我们内核学习的过程中,内核源码本身就是最好的参考资料,其他任何经典或非经典的书最多只是起到个辅助作用,不能也不应该取代内核代码在我们学习过程中的主导地位。但是这些辅助的作用也是不可忽视的,我们需要以内核源码为中心,坚持各种学习资源的长期建设不动摇。
除了这里的八句话,其他的可能会对大家有帮助的感悟或者方法还有很多 。
把内核当朋友,就是要把内核看成一个鲜活的生命体,而不是一堆死气沉沉的代码。
具体一点来说,我们在学习与浏览内核的实现时,可以将它看成是现实世界的映射。内核是由现实中的人写出来的,因此不管是有意还是无意,都会不可避免的包含了一些自己的现实感情,我们研究内核时可以体会下这种脉络,这种隐藏在代码背后的哲学。比如,我们可以认为内核是个大世界,一个个进程就是这个世界中的一个个生命体,进程管理和调度就是这个大世界中的权力机关,内存是进程的家,内核的目标就是要做到使每个进程都居者有其屋。
既然要把内核看成是一个鲜活的个体,那么我们认识它的第一件事就是了解它的一些基本信息,就像我们人与人之间互相认识首先也是通过个人的基本信息一样。
首先从名字开始, kernel 在字典中主要有两种定义,一种是 “ 软的,一个坚果可食用的部分 ” ,对 Linux kernel 来说,当然适用的是第二种定义: “ 某个东西的核心部分 ” 。所以从广义上来说, linux kernel 就是 linux 操作系统里最为核心的部分,而从狭义上来说,它不过就是 Linus 那群人人写的那点儿代码。