線性空間與物理記憶體

2021-05-23 19:58:33 字數 960 閱讀 8671

** linux 記憶體管理 -- 線性空間與物理記憶體2008-06-26 23:53(zt)

上圖反映了如下資訊:

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 記憶體管理 線性空間與物理記憶體

linux 記憶體管理 線性空間與物理記憶體 收藏 上圖反映了如下資訊 1 程序的4g 線性空間被劃分成三個部分 程序空間 0 3g 核心直接對映空間 3g high memory 核心動態對映空間 vmalloc start vmalloc end 2 三個空間使用同一張頁目錄表,通過 cr3 可...

虛擬記憶體與物理記憶體

作業系統有虛擬記憶體與物理記憶體的概念。問題 32位的作業系統中,每個程序有4gb 不是一定 的記憶體是真實存在的嗎?答 不是,是虛擬記憶體 問題 32位的作業系統中,每個程序有4gb 不是一定 的記憶體是物理記憶體嗎?答 不是,如果每個程序都存在4gb的話,作業系統根本處理不過來 問題 虛擬記憶體...

線性空間與線性變換

1.1線性空間 廣義的概念 如何證明乙個向量集合是線性空間?1.首先問下什麼是線性空間?2.如何表示該集合中的全部向量?知識點1 首先我們需要知道什麼是空間?空間其實就是向量的集合,而什麼是線性空間呢?定義了線性運算的非空集合。線性運算指的是加法和數乘在非空集合v封閉。定義1.1 數域 乙個對和 差...