固定對映的線性位址

2021-08-10 12:59:06 字數 666 閱讀 6236

核心位址空間

核心線性位址空間[3gb,3gb+896mb]-----(線性對映)----------實體地址空間[0,896m]

核心線性位址空間[3gb+896mb,4gb]用來實現「非連續記憶體分配」和「固定對映」

固定對映

固定對映的線性位址以「任意方式」(與前896mb線性對映方式相比)對映任何實體地址空間

固定對映使用的線性位址位於線性位址第4個gb末端

每個固定對映的線性位址都由定義在enum fixed_addresses資料結構中的整型索引來表示

enum fixed_addresses ;

fix_to_virt()函式

static __always_inline unsigned long fix_to_virt(const unsigned int idx)

set_fixmap(idx,phys)函式

功能:將fix_to_virt(idx)返回的線性位址對應的乙個頁表項初始化為實體地址phys

set_fixmap(idx,phys)函式

功能:同上,並且將頁表項的pcd標誌置位,表示當訪問這個頁框中的資料時禁用硬體快取記憶體

clear_fixmap(idx)函式

線性位址 2

linux核心對整個系統的物理記憶體是通過型別為struct page的陣列mem map來管理的。系統中的夥伴系統分配演算法最終是通過操作這個陣列來記錄物理記憶體的分配 等操作。在這裡不要被系統的高階記憶體 低端記憶體等概念搞混淆了,高 低端記憶體的分類主要在於區分物理記憶體位址是否可以直接對映到...

線性位址的管理

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

線性位址和實體地址

在保護模式下32位 還是採用段機制訪問記憶體 初始化臨時的要進入到ia 32e模式的gdt資料結構 label gdt64 dq 0x0000000000000000 label desc code64 dq 0x0020980000000000 label desc data64 dq 0x000...