课程会给出一些加分题,不少题目会要求深入源代码。
1. 阅读完整源代码的重要性
Linux系统创始人Linus Torvalds在一篇新闻投稿上所说的,要理解一个软件系统的真正运行机制,一定要阅读其源代码(RTFSC – Read The Fucking Source Code)。可以这么理解:源码才是第一手资料,其他资料(如博文)已是二手+了。
除此之外,阅读源代码是一种能力。有些系统并没有太多资料,比如2011年的Contiki OS,想了解系统运行原理(或者解决某个深层次问题),只能深入分析源代码。参考:Contiki分析笔记。
2. 选择Linux哪个内核版本
Linux从1991年2~4月的0.00版本(没有发布)到现在的6.2.5(2023-03-11发布),代码量一直在增加,如下图所示:
图2 Linux内核各版本源代码行数(赵炯《Linux内容完全注释 内核版本0.11》)
图1 Lines of code in the Linux kernel (图片来源于这里)
阅读最新内核版本的源代码,因代码量太大不现实。Linux 0.12内核代码只有463KB左右(大概2万行左右),涵盖了Linux精髓的内容,是一个很好的开始。除此之外,赵炯博士撰写的书《Linux内核完全剖析:基于0.12内核》,也可以辅助了解。
- 赵炯. Linux内核完全剖析:基于0.12内核[M]. 机械工业出版社.
- 源代码:Index of /Linux.old/Linux-0.12/
建议:先从Linux 0.12开始,理解了在0.12的实现原理,有余力,再去看最新版本的实现。
3. 一些参考例子
以下是我在学习过程中深入源代码理解系统运行原理的一些例子。
- Contiki分析笔记:Contiki OS,研究生期间项目组用到的操作系统,当时资料甚少,想了解原理,不得不深入源代码
- The ONE分析笔记:博士期间,使用The ONE仿真器做网络编码,The ONE对MAC层高度抽象,但我需要为其增加广播功能,方能做网络编码实验。基于此,深入源码,了解了整个仿真器的运行原理
更多资料: