Linux系統記憶體管理之夥伴系統分析

2021-08-28 18:01:01 字數 1987 閱讀 1808

1.夥伴系統概念

夥伴系統是一種經典的記憶體管理方法。linux夥伴系統的引入為核心提供了一種用於分配一組連續的頁而建立的一種高效的分配策略,並有效的解決了外碎片問題。

2.夥伴系統的組織結構

linux中的記憶體管理的「頁」大小為4kb。把所有的空閒頁分組為11個塊鍊錶,每個塊鍊錶分別包含大小為1,2,4,8,16,32,64,128,256,512和1024個連續頁框的頁塊。最大可以申請1024個連續頁,對應4mb大小的連續記憶體。每個頁塊的第乙個頁的實體地址是該塊大小的整數倍。

3.夥伴系統的記憶體分配及釋放

當向核心請求分配(2^(i-1),2^i]數目的頁塊時,按照2^i頁塊請求處理。如果對應的塊鍊錶中沒有空閒頁塊,則在更大的頁塊鍊錶中找。當分配的頁塊中有多餘的頁時,夥伴系統根據多餘的頁框大小插入到對應的空閒頁塊鍊錶中。

釋放單頁的記憶體時,核心將其置於cpu快取記憶體中,對很可能出現在cache的頁,則放到「快表」的列表中。在此過程中,核心先判斷cpu快取記憶體中的頁數是否超過一定「閾值」,如果是,則將一批記憶體頁還給夥伴系統,然後將該頁新增到cpu快取記憶體中。

釋放多頁的塊時,核心首先計算出該記憶體塊的夥伴的位址。核心將滿足以下條件的三個塊稱為夥伴:(1)兩個塊具有相同的大小,記作b。(2)它們的實體地址是連續的。(3)第一塊的第乙個頁的實體地址是2*(2^b)的倍數。如果找到了該記憶體塊的夥伴,確保該夥伴的所有頁都是空閒的,以便進行合併。記憶體繼續檢查合併後頁塊的「夥伴」並檢查是否可以合併,依次類推。

4.夥伴系統的反碎片機制

核心將已分配頁分為以下三種不同的型別:

(1)不可移動頁:這些頁在記憶體中有固定的位置,不能夠移動。

(2)可**頁:這些頁不能移動,但可以刪除。核心在**頁佔據了太多的記憶體時或者記憶體短缺時進行頁面**。

(3)可移動頁:這些頁可以任意移動,使用者空間應用程式使用的頁都屬於該類別。它們是通過頁表對映的。當它們移動到新的位置,頁表項也會相應的更新。

在記憶體子系統初始化期間,所有的頁都被標記為可移動的。在啟動期間,核心核心分配的記憶體是不可移動的。此時核心的策略是分配乙個盡可能大的連續記憶體塊,將其從可移動列表轉換到不可移動列表。分配乙個盡可能大的連續記憶體塊而不是選擇更小的滿足要求的記憶體塊的原因如下:

例如:現有一塊可移動的具有16頁的連續空閒記憶體塊。當核心需要分配1頁不可移動記憶體頁時。分配器選擇後8頁(而不是一頁)轉移到不可移動列表,然後從不可移動列表中選擇1頁用於分配。如果核心又需要分配1頁不可移動記憶體頁則從不可移動列表中選擇一頁用於分配,下圖顯示了進行4次分配後記憶體的分布。

但如果核心只選擇1頁用於分配將其加入到不可移動列表,當下次需要分配時又選擇一頁加入到不可移動列表,下圖顯示了按照這種方式進行4次分配後記憶體的分布。

因此,當沒有滿足可用於分配的不可移動空閒塊時,分配器會在可移動列表中遷移乙個盡可能大的連續記憶體塊給不可移動列表。這樣避免了啟動期間核心分配的記憶體雜湊到物理記憶體各處,從而使其他型別的記憶體分配免受碎片的干擾。

linux 物理記憶體管理之夥伴系統

linux使用夥伴系統來管理物理記憶體頁 顧名思義一下,在作業系統分配記憶體的過程中,乙個記憶體塊常常被分成兩個大小相等的記憶體塊,這兩個大小相等的記憶體塊就是夥伴關係,他滿足三個條件 為了便於頁面維護,將多個頁面組成記憶體塊,每個記憶體塊都有2的方冪個頁,方冪的指數被稱為階order,order相...

linux記憶體管理之夥伴系統(建立)

核心使用夥伴系統來解決記憶體分配引起的外部碎片問題。一 資料結構描述 結構zone中的free area陣列描述夥伴系統該陣列為free area結構 www.2cto.com struct zone www.2cto.com struct free area 下圖為夥伴系統在管理區中的表示。二 夥...

linux記憶體管理 夥伴系統演算法

分配記憶體 釋放記憶體 兩個塊的大小相同 兩個塊的位址連續 兩個塊必須是從同乙個大塊分離出來的 linux把每個zone分成max order個free area,每個free are的大小是2的冪次方。max order的值為11,第0組大小為2 0個頁,第1組大小為2 1個頁,依次類推,最大的是...