物理地址擴展 - 虛擬地址如何工作?
我正在執行 Debian Linux。
uname -m
說這意味著啟用標誌的i686
32 位架構機器。 是。安裝的 RAM 容量為 6GB。pae``getconf LONG_BIT``32
我
/proc/cpuinfo
有一個條目address sizes : 40 bits physical, 48 bits virtual
。但是,我的程序只生成 32 位地址。(Address of x is 0xbfbaf5cc
)我不明白顯示的48位虛擬地址
cat /proc/cpuinfo
和C程序生成的虛擬地址之間的關係。完整的 CPU 資訊可以在這裡找到。有人可以解釋一下嗎?
PAE不會更改有關虛擬地址的任何內容。顧名思義,它僅與物理地址有關。作為應用程序程序員,PAE 不會為您改變任何事情。你的程序仍然有一個 32 位的地址空間,核心佔用大約 1 位(Linux 根據編譯選項授予使用者空間 1GB、2GB 或 3GB)。如果想要更大的地址空間,則需要 64 位系統。
PAE 的重點是允許核心定址超過 4GB 的物理 RAM。為了利用所有這些 RAM,您需要多個程序,每個程序最多可以映射 2GB(或 1GB 或 3GB)。
在 PAE 模式下,MMU 表將 32 位虛擬地址映射到 40 位物理地址,使用三級表(與非 PAE 模式不同,在非 PAE 模式下,MMU 表將 32 位虛擬地址映射到 32 位物理地址,使用兩級表)級表)。
“48 位虛擬”指示是指 CPU 的能力。我認為這意味著 CPU 是 64 位的(即支持amd64 aka x86-64的)。為了使用 48 位虛擬地址,您需要執行 64 位作業系統。這裡的 48 位對應用程序員來說有點混亂:CPU 只翻譯地址的 48 位,但地址是用 64 位編碼的——指針佔用 8 個字節,而不是 6 個。高 16 位可以包含額外的標籤作業系統。