函式mem_init中,有這樣一行:
high_memory = (void *) __va(max_low_pfn * page_size);
其中,max_low_pfn為物理記憶體的最大頁數。
所以在圖中,page_offset到high_memory 之間就是所謂的物理記憶體對映。只有這一段之間,實體地址與虛位址之間是簡單的線性關係。
還要說明的是,要在這段記憶體分配記憶體,則呼叫kmalloc()函式。反過來說,通過kmalloc()分配的記憶體,其物理頁是連續的。
vmalloc_start:
非連續區的的起始位址。
linux驅動中位址空間轉換
在linux kernel 中,實體地址是不能直接使用的,必須通過轉換才可以。轉換分為兩種,靜態和動態。靜態就是下面那種,不過,靜態的位址轉換,還需要在kernel 初始化的時候作對映。動態對映是使用 ioremap 函式 cpp view plain copy define sl2312 gpio...
linux 程序位址空間
乙個linux程序的虛擬位址空間分布如下圖所示,分為使用者空間和核心空間,對於乙個32位作業系統來說,4gb的空間分成兩部分,低位址的0 3g給使用者空間,高位址的3g 4g給核心空間 2.1 唯讀資料段 rodata,又叫做常量資料段 存放唯讀資料 字串常量和const修飾的全域性變數 const...
Linux 程式位址空間
我們所說的位址是乙個虛擬的位址空間,只是一堆位址編號的描述,非物理記憶體位址 虛擬位址不具備儲存能力,資料儲存依然放到物理記憶體中 程序中訪問的位址都是虛擬位址,非物理記憶體位址 程式位址空間也是乙個虛擬位址空間,是作業系統為程序通過乙個mm struct 結構體所描述的乙個假的位址空間 mm st...