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函式申請的...