核心記憶體分配(夥伴系統和slab系統)


在作業系統設計中,**核心記憶體分配**是一個關鍵方面,它涉及為核心級操作和資料結構分配記憶體。當程序在使用者模式下執行並請求額外記憶體時,核心會從空閒頁幀列表中維護頁面的分配。

因此,核心記憶體分配可以定義如下:

“作業系統核心為其內部操作和資料結構分配記憶體的過程稱為**核心記憶體分配**”。

換句話說,在作業系統的核心空間中分配記憶體的過程稱為核心記憶體分配。其中,核心空間是為作業系統保留的一部分記憶體。核心空間主要用於執行系統級作業,例如排程任務、硬體裝置管理、記憶體管理等。因此,核心記憶體與使用者級記憶體不同。核心記憶體通常受到保護,以防止使用者級程序直接訪問或修改它。

在作業系統中,分配核心記憶體是一項關鍵任務,因此必須正確有效地執行。

根據系統的需求和記憶體分配的型別,有兩種重要的核心記憶體分配技術,即**夥伴系統**和**slab系統**。在本文中,我們將討論這兩種分配核心記憶體的方法,即夥伴系統和slab系統。讓我們從夥伴系統開始。

什麼是夥伴記憶體分配系統?

大小相等的部分稱為夥伴。在作業系統的上下文中,夥伴系統是一種用於記憶體分配的演算法。在**夥伴系統**中,可用的記憶體空間被劃分為大小固定且相等的塊。然後,這些塊以二叉樹結構的形式組織起來。在這個二叉樹結構中,每個塊都有一個夥伴塊,其大小與其相鄰塊的大小相同。

夥伴系統是一種高效的記憶體分配技術,因為它避免了記憶體空間的碎片。夥伴系統確保所有分配的塊都具有相同的大小,以便可以輕鬆地將其與夥伴塊合併在一起。夥伴系統的另一個主要優點是它允許快速分配和釋放記憶體塊,這是即時系統中的一個重要要求,可以提高效能。

在夥伴系統中,每當發出記憶體分配請求時,記憶體分配器都會查詢適當大小的記憶體塊。如果找到一個大小大於所需大小的塊,則會將其重複劃分為更小的塊,直到獲得所需大小的塊。一旦找到所需大小的塊,分配器就會將其標記為已分配,並向請求程序傳送指標。

此外,如果一個記憶體塊從一個程序中釋放,則分配器會搜尋其夥伴塊,並檢查它是否也空閒。如果夥伴塊也空閒,則將這兩個塊合併在一起以形成一個更大的塊。然後將這個更大的塊標記為空閒,並將其添加回二叉樹結構。合併空閒塊的過程會重複進行,直到不再可能合併為止。

夥伴系統的優點

以下是夥伴系統的主要優點:

  • 與其他記憶體分配演算法相比,夥伴系統涉及的外部碎片更少。

  • 夥伴系統使用二叉樹結構來表示已使用或未使用的記憶體塊。

  • 在夥伴系統中,合併相鄰塊很容易。

  • 夥伴系統提供快速分配和釋放記憶體。

  • 夥伴系統分配正確大小的記憶體塊。

夥伴系統的缺點

儘管夥伴系統有幾個優點,但它也有一些缺點,如下所示:

  • 夥伴系統會導致內部碎片。

  • 夥伴系統使用二叉樹,因此它要求所有分配單元都是2的冪。

什麼是Slab記憶體分配系統?

**Slab系統**是另一種用於分配核心記憶體的技術。Slab記憶體分配系統的主要優點是它消除了由於記憶體分配和釋放導致的碎片。換句話說,slab分配系統是在作業系統中用於管理核心記憶體的一種記憶體分配策略。

**注意** - 在slab系統中,兩個必需的術語是:slab和cache。

  • **Cache** - Cache是一個非常高速的小型記憶體空間。在slab系統中,一個cache包含一個或多個slab。對於每個唯一的核心資料結構,都存在一個單一的cache空間。

  • **Slab** - Slab是一個容器,用於儲存特定型別核心物件的的資料。它由物理上連續的頁組成,如上圖所示。

在slab記憶體分配系統中,為核心資料結構分配記憶體是在固定大小的塊中進行的,稱為**slab**。每個slab包含一個或多個相同型別的物件。一旦分配了slab,就可以根據需要有效地分配和釋放其物件。

我們還可以使用slab分配系統來管理使用者空間程式無法直接訪問的核心記憶體。此過程包括核心本身使用的資料結構,以及裝置驅動程式和其他核心模組使用的資料結構。

每當發出為特定資料結構分配記憶體的請求時,分配器都會搜尋適當大小的slab。如果已存在所需大小的slab,則將其用於分配必要的記憶體。如果不存在所需大小的slab,則會為該特定資料結構保留的記憶體池中分配一個新的slab。

在slab系統中,同一個slab用於分配所有相同大小的物件,因此它有助於減少核心記憶體的碎片。它還有助於透過減少與記憶體分配和釋放相關的開銷來提高系統性能。

因此,在作業系統中,用於分配核心記憶體的slab系統也是一種有效的策略來管理核心記憶體。

結論

在作業系統中,分配核心記憶體是一個關鍵部分,需要仔細考慮以確保穩定的系統性能。根據需求和要儲存資料的性質,有兩種最常用的分配技術,即夥伴分配系統和slab分配系統,用於分配核心記憶體。在本文的上述部分中,我們詳細討論了這兩種方法。

更新於:2023年4月4日

3K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告