既然你已经看了 ULK ,那么看代码已经是一个比较好的选择了。
https://www.kernel.org/doc/gorman/html/understand/ 这里有一份材料,相比 ULK 更加深入的介绍了 mm 的各个部分,但因为材料基于 2.6 ,作为看代码的辅料进行。
https://github.com/chenshuo/linux-study 我这里推荐使用这个项目来学习 Linux 内核,这个项目抽离 Linux 代码,使得 Linux 可以像程序一样编译调试,这样看起来会更加的清晰。
后面是学习 Linux 内核最最最最重要的部分了:
学习 Linux 内核,到底是在学习什么?什么是 Kernel ,我的理解是内核是一系列算法和模型的集合,这些算法和模型是用来调配硬件的,调配硬件不一定要懂硬件模型,因为内核中的算法和模型集合抽象程度已经相当高了。
学习内核,及学习其中的算法,我举个例子,比如说学习 zfs ,我们吧 zfs 中的加到数据库的容灾中去,改造数据库,这是一个例子。比如说学习 mm ,mm 中的 slab 内存分配原理,再看看市面上另外优秀的内存分配算法实现,如 mimalloc ,从而定制更加精细的内存分配算法,这是一个点。你说从什么启动,什么 bootloader 开始学起,没有意义,舍近求远,因为 mm 和这些完全无关,这就是独立的算法和设计模块。很多市面上所谓的那种简易操作系统书,总喜欢大篇幅再 loader 上做文章,这也是舍近求远的做法。我们学习的是 modern os ,"modern"这个词至关重要。
你可以根据我给的第一个 link ,结合第二个连接源码看看 Nodes ,Zones ,TLB ,Slab 等等结构,更多的精细算法我就没研究过了,我研究过 net 和 ext 部分。