一、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 這裡的記憶...