linux使用夥伴系統來管理物理記憶體頁
顧名思義一下,在作業系統分配記憶體的過程中,乙個記憶體塊常常被分成兩個大小相等的記憶體塊,這兩個大小相等的記憶體塊就是夥伴關係,他滿足三個條件
為了便於頁面維護,將多個頁面組成記憶體塊,每個記憶體塊都有2的方冪個頁,方冪的指數被稱為階order,order相同的記憶體塊被組織到乙個空閒鍊錶中,夥伴系統基於2的方冪來申請釋放記憶體頁。當申請記憶體頁時,夥伴系統首先檢查與申請大小相同的記憶體塊鍊錶中,檢看是否有空閒頁,如果有就將其分配出去,並將其從空閒鍊錶中刪除,如果沒有就檢查上一級,以此類推,直到分配成功或者徹底失敗,在成功時還要按照夥伴系統的要求 ,將未分配的記憶體塊進行劃分,並加入到相應的空閒記憶體塊鍊錶
假設要申請乙個256個頁框的塊,先從256個頁框的鍊錶中查詢空閒塊,如果沒有,就去512個頁框的鍊錶中找,找到了則將頁框塊分為2個256個頁框的塊,乙個分配給應用,另外乙個移到256個頁框的鍊錶中。如果512個頁框的鍊錶中仍沒有空閒塊,繼續向1024個頁框的鍊錶查詢,如果仍然沒有,則返回錯誤
釋放記憶體頁時,會檢查其夥伴是否也是空閒的,如果是就將它和它的夥伴合併為更大的空閒記憶體塊,該檢查會遞迴進行,直到發現夥伴正在被使用或者已經合併成了最大的記憶體塊。
linux記憶體管理之夥伴系統(建立)
核心使用夥伴系統來解決記憶體分配引起的外部碎片問題。一 資料結構描述 結構zone中的free area陣列描述夥伴系統該陣列為free area結構 www.2cto.com struct zone www.2cto.com struct free area 下圖為夥伴系統在管理區中的表示。二 夥...
記憶體管理之夥伴演算法
通常情況下,乙個高階作業系統必須要給程序提供基本的 能夠在任意時刻申請和釋放任意大小記憶體的功能,就像malloc 函式那樣,然而,實現malloc 函式並不簡單,由於程序申請記憶體的大小是任意的,如果作業系統對malloc 函式的實現方法不對,將直接導致乙個不可避免的問題,那就是記憶體碎片。記憶體...
linux記憶體管理 夥伴系統演算法
分配記憶體 釋放記憶體 兩個塊的大小相同 兩個塊的位址連續 兩個塊必須是從同乙個大塊分離出來的 linux把每個zone分成max order個free area,每個free are的大小是2的冪次方。max order的值為11,第0組大小為2 0個頁,第1組大小為2 1個頁,依次類推,最大的是...