Linux的進程和內存是兩座大山,沒有翻過這兩座大山對於內核的理解始終是不完整的。
關於Linux內存管理,在開始之前做些准備工作。
首先bing到了Quora的《How can one really learn Linux Kernel Memory Management?》,這也是大部分初學者,或者說大部分Linux內核開發人員的疑問?
正如Vaishali Thakkar所說,最好的方法是讀代碼,但是面對這么龐雜的代碼,往往是無從下手。Vaishali Thakkar推薦從LSF/MM論壇入手去了解年度報告,但是這些技術往往都是最前沿的。倒是下面的路徑相對合適:
- LinuxMM - linux-mm.org Wiki
- Understanding the Linux Virtual Memory Manager 關於Linux內存管理的經典之作,雖然有點老2.4,但仍然有可取之處。
- 一些內存管理Maintainer的博客:Rik van Riel's home page Mel Gorman
- Kernel coverage at LWN.net內核開發相關細節
- 最方便的內核幫助文檔。
其他方法還包括通過IRC channel #mm on OFTC提問,閱讀代碼有疑問使用‘git blame’查找對應的git,然后通過閱讀注釋來理解背景。
最后還可以通過修改代碼或者參數來做實驗,驗證自己的想法。
另一位Chen Gang同樣提到了Understanding the Linux Virtual Memory Manager這本書。另由於MMU是架構相關的,要想理解內存管理,不閱讀MMU規格書是不可能的,對於ARM架構在官網提供了下載。同樣提到了閱讀代碼的重要性,雖然不是立即體現出來效果,但是久而久之會起效的。另外還可以通過修改MM相關參數,來做實驗;和閱讀MM相關 commits。
補充一個Mel Gorman用於測試內核MM的工具集mmtests。
最后,正如Chen Gang所說“MM is a tough topic”,前面的路注定不平坦。戒驕戒躁,一步一個腳印吧!