夥伴演算法 buddy system

2021-06-18 20:45:56 字數 685 閱讀 7030

夥伴演算法

linux的夥伴演算法把所有的空閒頁面分為10個塊組,每組中塊的大小是2的冪次方個頁面,例如,第0組中塊的大小都為20 (1個頁面),第1組中塊的大小為都為21(2個頁面),第9組中塊的大小都為29(512個頁面)。也就是說,每一組中塊的大小是相同的,且這同樣大小的塊形成乙個鍊錶。

我們通過乙個簡單的例子來說明該演算法的工作原理。

假設要求分配的塊其大小為128個頁面(由多個頁面組成的塊我們就叫做頁面塊)。

該演算法先在塊大小為128個頁面的鍊錶中查詢,看是否有這樣乙個空閒塊。如果有,就直接分配;

如果沒有,該演算法會查詢下乙個更大的塊。具體地說,就是在塊大小為256個頁面的鍊錶中查詢乙個空閒塊。如果存在這樣的空閒塊,核心就把這256個頁面分為兩等份,乙份分配出去,另乙份插入到塊大小為128個頁面的鍊錶中。

如果在塊大小為256個頁面的鍊錶中也沒有找到空閒頁塊,就繼續找更大的塊,即512個頁面的塊。如果存在這樣的塊,核心就從512個頁面的塊中分出128個頁面滿足請求,然後從384個頁面中取出256個頁面插入到塊大小為256個頁面的鍊錶中。然後把剩餘的128個頁面插入到塊大小為128個頁面的鍊錶中。

如果512個頁面的鍊錶中還沒有空閒塊,該演算法就放棄分配,並發出出錯訊號。

夥伴系統演算法

如有問題,歡迎一起討論 struct free area static struct page rmqueue struct zone zone,unsigned int order return null define mark used index,order,area change bit i...

關於夥伴演算法

關於位圖 linux核心夥伴演算法中每個order 的點陣圖都表示所有的空閒塊,比如我家的電腦記憶體256m 現在連上個qq主頁都比較卡 理論上的order為0的bitmap有256m 4k 2 塊。為什麼要除以二呢?因為 點陣圖的某位對應於兩個夥伴塊,為1就表示其中一塊忙,為0表示兩塊都閒。每次a...

Linux夥伴演算法

最近 一由於筆者能力有限,文中難免存在不足,如果發現錯誤之處,希望能幫助我及時糾正錯誤之處。1 夥伴演算法的用途 管理物理記憶體,解決外碎片問題。2 滿足以下條件的兩個塊稱為夥伴 l 兩個塊具有相同的大小,記作b l 它們的實體地址是連續的 l 第一塊的第乙個頁框的實體地址是2 b 2 12 的倍數...