Linux

虛擬地址空間中的頁面大小如何確定?

  • October 21, 2016

Linux 使用虛擬記憶體系統,其中所有地址都是虛擬地址而不是物理地址。這些虛擬地址被處理器轉換為物理地址。

為了使這種翻譯更容易,虛擬和物理記憶體被分成頁面。這些頁面中的每一頁都有一個唯一的編號;頁框號。

一些頁面大小可以是 2 KB、4 KB 等。但是這個頁面大小數字是如何確定的呢?它受架構大小的影響嗎?例如,32 位匯流排將有 4 GB 地址空間。

getconf您可以通過以下命令查詢其配置來找出系統的預設頁面大小:

$ getconf PAGE_SIZE
4096

或者

$ getconf PAGESIZE
4096

**注意:**上述單位通常以字節為單位,因此 4096 等於 4096 字節或 4kB。

這在 Linux 核心的原始碼中是硬連線的:

例子

$ more /usr/src/kernels/3.13.9-100.fc19.x86_64/include/asm-generic/page.h
...
...
/* PAGE_SHIFT determines the page size */

#define PAGE_SHIFT  12
#ifdef __ASSEMBLY__
#define PAGE_SIZE   (1 << PAGE_SHIFT)
#else
#define PAGE_SIZE   (1UL << PAGE_SHIFT)
#endif
#define PAGE_MASK   (~(PAGE_SIZE-1))

移位如何給您 4096?

當您移動位時,您正在執行二進制乘法 2。因此,實際上位向左移動 ( 1 << PAGE_SHIFT) 正在執行 2^12 = 4096 的乘法。

$ echo "2^12" | bc
4096

引用自:https://unix.stackexchange.com/questions/128213