解惑 Linux中的位址空間

2021-05-12 19:28:39 字數 316 閱讀 9700

函式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...