阅读linux内核源代码,其中一个难点在于如何去理解各种结构体和使用宏指令构造的框架,而且以往介绍内核的资料、书籍里大都遵循《操作系统》的思路进行模块化的分解,这也是承袭着C语言结构化设计的特点。
但从代码阅读角度看,对内核代码进行更高级别的抽象,有助于理解模块间的互动,以及理解代码实现的诸多要素。这个方法论涉及到几个抽象:
1、一切皆是进程,进程的要素包括,独一无二的名字,代码,数据,堆,栈,参数,环境,和内核的接口,操作系统要做的每件事,其实都是进程,可以看作是进程类的一个子对象,都是0号进程派生出来的对象。
2、结构体也是一种类,内核代码里,是通过各种结构体的嵌套来实现的,通过结构体成员的访问,来实现各组件的通信。而结构体其实是面向对象的初始形式。进程是个大类,里面包含很多子类,比如内存管理、设备等。
3、模块初始化是一种构造,构造进程是fork,构造进程需要的内存、设备、文件,也各自要调用自己的初始化函数。
阅读源代码,可以按照如上三个抽象,找到并阅读关联代码,或许对内核框架有更清晰的认知。