一,為什麼需要高階記憶體
答:對於32位機器,linux虛擬記憶體最大為4g,其中3-4g空間是用作核心空間,考慮到如果物理記憶體大於1g,那麼物理記憶體不能得到完全的對映, 因此,linux 規定「核心直接對映空間」 最多對映 896m 物理記憶體,arm體系架構上有高階記憶體的概念,不過不是固定在896m以上的區域~
二,linux核心位址空間
linux虛擬位址3g到4g的空間為核心位址空間,核心空間是由核心負責對映,他並不會跟著程序改變,是固定的。
2,3g+896m---3g+896m+120m為動態記憶體對映區,該區域由核心函式vmalloc來分配,特點是:線性空間連續,但是對應的物理空間不一定連續。vmalloc分配的線性位址所對應的物理頁可能處於低端記憶體,也可能處於高階記憶體。
3,接下來4m為永久記憶體對映區,該區域可訪問高階記憶體。訪問方法是使用alloc_page(_gfp_highmem)分配高階記憶體頁或者使用kmap函式將分配到的高階記憶體對映到該區域。4,最後4m為固定對映區,該區域和4g的頂端只有4k的隔離帶,其每個位址項都服務於特定的用途,如acpi_base等
注:以上的值不是固定的,在各個不同平台上或者各個不同實現上可能都是不同的~
error value(1 page)
vector table(4 k)
fixaddr_start
io map space
vmalloc space
vmalloc_offset
low memory
manager sys buffer
padding
.data .bss
.text
.init data
pgdboot parameters
pkmap_base
*.ko
user space
Linux使用者空間與核心位址空間
linux 作業系統和驅動程式執行在核心空間,應用程式執行在使用者空間,兩者不能簡單地使用指標傳遞資料,因為linux使用的虛擬記憶體機制,使用者空間的資料可能被換出,當核心空間使用使用者空間指標時,對應的資料可能不在記憶體中。linux核心位址對映模型 x86 cpu採用了段頁式位址對映模型。程序...
核心位址空間大冒險4 執行緒切換
sleep系統呼叫 我是乙個執行緒,生活在linux帝國。一直以來辛勤工作,日子過得平平淡淡,可今天早上發生了一件事讓我回想起來都後怕。早上,我還是如往常一樣執行著人類編寫的 指令,不多時走到了乙個冷門的分支,乙個sleep 函式呼叫擺在了我的面前。終於可以去休息了!聽老一輩的執行緒們說,執行了這個...
Linux核心之程序位址空間
程序使用的是虛擬記憶體中的位址,也叫線性位址,由作業系統協助相關硬體 如mmu 對映到實體地址。線性位址是通過頁表 page table 對映到物理記憶體,頁表由作業系統維護並被處理器引用。核心空間在頁表中擁有較高特權級,因此使用者態程式試圖訪問這些頁時會導致乙個頁錯誤。在linux中,核心空間是持...