Linux2 6 4G的線性位址空間的分配與使用

2021-06-06 15:14:05 字數 990 閱讀 8337

一、4g線性空間的使用

1.0-3g屬於使用者空間,無論是使用者態還是核心態都可以定址,但是核心一般不訪問這裡的資料

3-4g屬於系統空間,只有核心態的程序才可以訪問。

二、系統空間

1.3g-4g的系統空間的使用

(2)high_memory ----- pkmap_base:非連續記憶體區。兩個區間之間有4kb或8kb的空隔,是為了捕獲對記憶體的越界訪問

(3)pkmap_base ----- fixaddr_start:永久核心對映

2.高階記憶體的頁框的核心對映 ----- 實體地址中的zone_highmem怎麼與系統空間中的128mb建立對映?

(1)永久核心對映

原理:使主核心頁表中的乙個專門的頁表來建立對映,最多可對映2mb或4mb(開啟pae)

缺點:如果頁表是沒有空閒的項來建立這種對映,就會阻塞當前程序,因此不能用於中斷處理程式或可延遲函式

(2)臨時核心對映

原理:每個cpu包含13個視窗,高階記憶體的任意一頁頁框可以通過乙個視窗來建立對映。

這13個視窗僅限於當前核心控制路徑使用,因此在使用過程中不能被阻塞

優點:從不阻塞當前程序

缺點:同時只能建立13個,數量比較少。且使用它的核心控制路徑不能阻塞

(3)非連續記憶體分配

每個非連續記憶體區用乙個vm_struct來描述符,

分配時,先申請乙個vm_struct,並為其分配頁框,最後修改頁核心使用的頁表

四、只要處於核心態的乙個程序為「高階」線性位址修改了頁表項,就相應地更新系統中所有程序頁表集合中相應的表項

每乙個高階位址必須被重新對映時,核心就更新主核心頁全域性目錄中的常規頁表集合

三、使用者空間

1.0 - 3g的使用者空間的分配

從0g開始依次是**段、資料段、bss段,從3g往下是堆疊

通過mm_struct來管理其線性空間,每乙個區間用vma_struct來表示。vma_struct構成一棵紅黑樹

程序所擁有的線性位址不重疊

線性位址的管理

eprocess中 為什麼採用二叉樹的方式管理線性位址空間呢?最主要的原因是使用二叉樹查詢的效能會更好 涉及資料結構 這個startin pn和這個endin pn是以頁為單位也就是 4kb 0x1000 在startin pn這個位址後新增3個0,也就是這個結點描述的線性位址的起始位址 endin...

固定對映的線性位址

核心位址空間 核心線性位址空間 3gb,3gb 896mb 線性對映 實體地址空間 0,896m 核心線性位址空間 3gb 896mb,4gb 用來實現 非連續記憶體分配 和 固定對映 固定對映 固定對映的線性位址以 任意方式 與前896mb線性對映方式相比 對映任何實體地址空間 固定對映使用的線性...

Linux中的邏輯位址,線性位址和實體地址轉換關係

一 邏輯位址轉線性位址 機器語言指令中出現的記憶體位址,都是邏輯位址,需要轉換成線性位址,再經過 mmu cpu 中的記憶體管理單元 轉換成實體地址才能夠被訪問到。我們寫個最簡單的 hello world 程式,用 gcc編譯,再反彙編後會看到以下指令 mov 0x80495b0,eax 這裡的記憶...