linux 内核技术文档: klinux document
本文档记录有关操作系统内核的技术细节
开始之前, 希望大家可以读一下陈硕写的 如何阅读 linux 内核代码
阅读内核代码的主要有三种人: reader writer和hacker, 对不同的人有不同的含义,学习方法、侧重点、投入的精力也大不相同
内核的接口稳定,但具体实现变化快, 而且比较注重代码的通用性和复用性,要照顾那些虽然你用不到但少数人会用的需求(比如numa), 原本简单直接的做法上增加间接层, 反而加大了理解代码的负担, 很多时候函数指针回调函数传来传去, 没有 debugger 很难看清楚怎么调用的, 而且 kernel 加了 O2 优化 debugger 还不太好使
如果你本身就要从事内核开发,那么以上这些都不是问题.对于这用户态写server的人,学内核的目的是什么,学到的知识能不能/要不要/如何用到日常开发中,这是值得思考的.
逢人就推荐阅读 Linux 内核源码, 我并不赞成, 希望读者在阅读本项目其他文章之前了解自己需要什么
本文档主要是笔者自己学习内核过程中记录的内容, 以供日后的查阅和理解. 文中表述会尽量正式, 避免口语化, 相关的参考文章都会标注在文末的参考中. 如果读者发现有不妥之处, 欢迎在评论中反馈或者提交 issue.
文中会出现几种特殊的注释风格
NOTE为笔者标注的笔记内容, 用于阅读时的参考补充
TIP为笔者遇到并成功解决的一些小坑, 记录在案以备后续查阅
QUESTION为笔者尚不清楚的一些内容, 或者有关知识点尚未确认, 有此标注的内容读者不要盲目相信