Linux 的 Buddy 頁框分配系統

當需要進行分段配置 (例如載入行程) 時,Linux會使用對偶式記憶體管理演算法 (Buddy System Algorithm) 配置分頁,在 Buddy 系統中,一個頁框代表一段連續的分頁,該演算法將的頁框區分為十種區塊大小,分別包含了 1, 2, 4, 8, 16, 32, 64, 128, 256, 512 個連續的頁框,其中每個區塊的第一的頁框位置一定是區塊大小的倍數。舉例而言,一個包含 32 個頁框的區塊之起始位址一定是 32 * 4KB 的倍數。

Buddy 系統利用一個名為 free_area[10] 的陣列,該陣列中儲存了對應大小的位元映像圖 (bitmap),以記錄區塊的配置狀況。當有分頁配置需求時,Linux 會尋找大小足夠的最小區塊,舉例而言,如果需要13 個頁框,則 Linux 會從大小為 16 的頁框區中取出一個可用頁框,分配給需求者。但是如果大小為 16 的頁框區沒有可用頁框,則會從大小為 32 的頁框區取得,然後分成兩半,一半分配給需求者,另一半則放入大小為 16 的可用頁框區中。

當某頁框被釋放時,Buddy 系統會試圖檢查其兄弟頁框是否也處於可用狀態,若是則將兩個頁框合併以形成一個更大的可用頁框,放入可用頁框串列中。

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License