詳解Linux核心記憶體管理架構

2022-09-26 14:36:14 字數 1542 閱讀 1232

記憶體管理子系統可能是linux核心中最為複雜的乙個子系統,其支援的功能需求眾多,如頁面對映、頁面分配、頁面**、頁面交換、冷熱頁面、緊急頁面、頁面碎片管理、頁面快取、頁面統計等,而且對效能也有很高的要求。本文從記憶體管理硬體架構、位址空間劃分和記憶體管理軟體架構三個方面入手,嘗試對記憶體管理的軟硬體架構做一些巨集觀上的分析總結。

記憶體管理硬體架構

因為記憶體管理是核心最為核心的乙個功能,針對記憶體管理效能優化,除了軟體優化,硬體架構也做了很多的優化設計。下圖是乙個目前主流處理器上的儲存器層次結構設計方案。

從圖中可以看出,對於讀寫記憶體,硬體設計了3條優化路徑。

1)首先l1 cache支援虛擬位址定址,保證cpu出來的虛擬位址(va)不需要轉換成實體地址(pa)就可以用來直接查詢l1 cache,提高cache查詢效率。當然用va查詢cache,有安全等缺陷,這需要cpu做一些特別的設計來進行彌補,具體可以閱讀《計算機體系結構:量化研究方法》了解相關細節。

2)如果l1 cache沒有命中,這就需要進行位址轉換,把va轉換成pa。linux的記憶體對映管理是通過頁表來實現的,但是頁表是放在記憶體中的,如果每次位址轉換過程都需要訪問一次記憶體,其效率是十分低下的。這裡cpu通過tlb硬體單元來加速位址轉換。

3)獲得pa後,在l2 cache中再查詢快取資料。l2 cache一般比l1 cache大乙個數量級,其查詢命中率也更高。如果命中獲得數www.cppcns.com據,則可避免去訪問記憶體,提高訪問效率。

可見,為了優化記憶體訪問效率,現代處理器引入多級cache、tlb等硬體模組(如下圖是一款8核mips處理器硬體框圖)。每個硬體模組內部還有大量的設計細節,這裡不再深入,如有興趣可以閱讀《計算機體系結構:量化研究方法》等書籍進一步了解。

記憶體對映空間劃分

根據不同的記憶體使用方式和使用場景需要,核心把記憶體對映位址空間劃分成多個部分,每個劃分空間都有自己的起止位址、分配介面和使用場景。下圖是乙個常見的32位位址空間劃www.cppcns.com分結構。

不同的cpu體系架構在位址空間劃分上不盡相同,但為了保證cpu體系差異對外部模組不可見,記憶體位址空間的分配介面的語義是一致的。

因為64位cpu一般都不需要高階記憶體(當然也可以支援),在位址空間劃分上與32位cpu的差異較大,下圖是乙個mips64 cpu的核心位址空間劃分圖。

記憶體管理軟體架構

核心記憶體管理的核心工作就是記憶體的分配**管理,其內部分為2個體系:頁管理和物件管理。頁管理體系是乙個兩級的層次結構,物件管理體系是乙個**的層次結構,分配成本和操作對cpu cache和tlb的負面影響,從上而下逐漸公升高。

頁管理層次結構:由冷熱快取、夥伴系統組成的兩級結構。負責記憶體頁的快取、分配、**。

物件管理層次結構:由per-cpu快取記憶體、slab快取、夥伴系統組成的**結構。負責物件的快取、分配、**。這裡的物件指小於一頁大小的記憶體塊。

除了記憶體分配,記憶體釋放也是按照此層次結構操作。如釋放物件,先釋放到per-cpu快取,再釋放到slab快取,最後再釋放到夥伴系統。

框圖中有三個主要模組,即夥伴系統、slab分配器和per-cpu(冷熱)快取。他們的對比分析如下。

本文標題: 詳解linux核心記憶體管理架構

本文位址:

linux核心記憶體管理

整個linux虛擬記憶體發布如下 3g以上是核心位址,0 3g是程序位址空間。在x86結構中,核心位址分為三種,這三種型別的區域如下 zone dma 記憶體開始的16mb zone normal 16mb 896mb zone highmem 896mb 結束 程序位址空間的3g,通過mmu,隨機...

linux核心記憶體管理

1.每個程序都有自己的頁面目錄,都是虛擬位址,便於mmu將虛擬位址轉換為實體地址 2.task struct mm struct pgd 3.struct page用來表示乙個物理頁面,在核心中有乙個page的陣列,用來表示當前系統中所有的物理頁面 4.頁面目錄 頁面表 物理頁面起始位址1.物理頁面...

Linux核心 記憶體管理

在棧上靜態分配 高階記憶體的對映 分配函式的選擇 1.32位體系結構支援4kb的頁,如果1gb的物理記憶體,物理記憶體被劃分為262144個頁 2.系統中每乙個物理頁都有乙個struct page結構體 linux核心主要使用四種區 zone highem叫做高階記憶體,其餘的叫做低端記憶體 記憶體...