Linux
虛擬地址空間中的頁面大小如何確定?
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