Linux 記憶體管理 線性空間與物理記憶體

2021-05-22 12:20:06 字數 880 閱讀 2997

linux 記憶體管理 -- 線性空間與物理記憶體 收藏

上圖反映了如下資訊:

1、 程序的4g 線性空間被劃分成三個部分:程序空間(0-3g)、核心直接對映空間(3g – high_memory)、核心動態對映空間(vmalloc_start - vmalloc_end)

2、 三個空間使用同一張頁目錄表,通過 cr3 可找到此頁目錄表。但不同的空間在頁目錄表中頁對應不同的項,因此互相不衝突

3、 核心初始化以後,根據實際物理記憶體的大小,計算出 high_memory、vmalloc_start、vmalloc_end 的值。並為「核心直接對映」空間建立好對映關係,所有的物理記憶體都可以通過此空間進行訪問。

4、 「程序空間」和「核心動態對映空間」的對映關係是動態建立的(通過缺頁異常)

1、 三個位址對應不同的頁表和頁表項

2、 但是頁表項的高 20bit 肯定是1,表示物理頁面的索引號是1

3、 同時,根據高 20 bit,可以從 mem_map 中找到對應的 struct page 結構,struct page 用於管理實際的物理頁面(紅線)

4、 從線性位址,根據頁目錄表,頁表,可以找到實體地址

5、 struct page 和實體地址之間很容易互相轉換

6、 從實體地址,可以很容易的反推出在核心直接對映空間的線性位址(藍線)。要想得到在程序空間或者核心動態對映空間的對應的線性位址,則需要遍歷相應的「虛存區間」鍊錶。

關於頁目錄表:

1、 每個程序有乙個屬於自己的頁目錄表,可通過 cr3 暫存器找到

3、 當程序切換的時候,只需要將新程序的頁目錄把位址載入到 cr3 暫存器中即可

線性空間與物理記憶體

linux 記憶體管理 線性空間與物理記憶體2008 06 26 23 53 zt 上圖反映了如下資訊 1 程序的4g 線性空間被劃分成三個部分 程序空間 0 3g 核心直接對映空間 3g high memory 核心動態對映空間 vmalloc start vmalloc end 2 三個空間使用...

linux記憶體管理 使用者空間和核心空間

關於虛擬記憶體有三點需要注意 上圖展示了整個程序位址空間的分布,其中4g的位址空間分為兩部分,在使用者空間內,對應了記憶體分布的五個段 資料段 段 bss段 堆 棧。在上篇文章中有詳細的介紹。這個圖示核心使用者空間的劃分,圖中最重要的就是高階記憶體的對映 其中kmalloc和vmalloc函式申請的...

linux記憶體管理 使用者空間和核心空間

關於虛擬記憶體有三點需要注意 上圖展示了整個程序位址空間的分布,其中4g的位址空間分為兩部分,在使用者空間內,對應了記憶體分布的五個段 資料段 段 bss段 堆 棧。在上篇文章中有詳細的介紹。這個圖示核心使用者空間的劃分,圖中最重要的就是高階記憶體的對映 其中kmalloc和vmalloc函式申請的...