這半年來在工作上負責開發一個在Linux核心中的記憶體管理模組,主要用來處理視訊記憶體的需求。在開發的過程閱讀了不少資料,我將其中不錯的文章整理一下,或許對剛接觸的朋友會有點幫助: Memory management reference (MMR):這個網站非常適合新手入門記憶體管理。其中的幾篇入門文章寫得尤其好。從 overview 可以知道記憶體管理的技術範圍,從 allocation 可以知道malloc()/free()的基本實作手法與優缺點,從 recycling 則可以知道常見的garbage collection機制。 Inside memory management (IMM):閱讀過MMR的基礎文章後,就可以從不同的角度去獨立學習。這篇文章講的是如何在Linux上實現一組最簡單的malloc()/free()。 Buddy memory allocation (BMA):IMM這篇文章實現了簡單的記憶體配置,但馬上也面臨到嚴重的external fragmentation的問題,減緩的手法之一是透過buddy memory allocation,wikipedia上的說明非常清楚,實作的話可以參考對岸好手雲風的 設計 。 Slab allocator :BMA的方式一定程度的減緩了external fragmentation,但卻也令小塊記憶體配置頻繁時的internal fragmentation的情況變得嚴重,解決手法很多,slab allocator試著解決這個問題,並提升了效能。實作方式可以參考 libumem 。 What every programmer should know about memory :如果你想要深入學習記憶體管理技術,那麼從記憶體的硬體模組、計算機架構、作業系統的角度切入是不可或缺的,但是從頭閱讀數本教科書然後截取出跟記憶體相關章節有點累人,好在glibc的 維護者 寫了一篇好文章,介紹程式設計師所應該知道的基礎。 閱讀Linux source code:我是在有了前面這些基礎後,重新看Linux相關書籍與記憶體管理技術才有較深入的理解,包括MMU、page cache、hot-n-cold page、slab framework、swap...,畢竟Linux kernel hacker對很多名...