該文本並不十分清楚。我會盡力清除它。
當翻譯的虛擬地址轉換成物理上的,低位的固定數量沒有得到翻譯:
+---------------------+----------+
| High bits | Low bits |
+---------------------+----------+
| |
| |
V |
[Page tables] |
| |
| |
V V
+---------------------+----------+
| Physical address |
+---------------------+----------+
低位數是聯繫在一起的頁面大小:如果我們假設4KiB頁面,然後較低的12位是固定的並且不被翻譯。我們還假設虛擬地址空間是32位。
如果一個頁表項是32位長,它可以給32位用作物理地址的高位部分。
因此,當查看頁表時,我們有20(32 - 12)位輸入和32位輸出。
由於固定部分有額外的12位,這給出了32 + 12 = 44位的物理地址。
更新的圖:
<---------- 32 bits ----------->
<---- 20 bit -------> <- 12 b ->
+---------------------+----------+
| High bits | Low bits |
+---------------------+----------+
| |
| 20 bit |
V |
[Page tables] |
| |
| 32 bit |
V V
+----------------------------+----------+
| Physical address |
+----------------------------+----------+
<-------- 32 bits ---------> <- 12 b ->
<------------- 44 bits --------------->
這不是一個真正的44位尋址然而,指針仍然是32位。
應用程序只能直接訪問4GiB內存,但操作系統可以將 應用程序映射到第一個4GiB,另一個映射到第二個4GiB等等。
這與PAE在x86上的工作方式類似。
假設所有的頁表項都用來給物理地址的高位是不真實的。
一些位用於設置幀的屬性:緩存能力,訪問權限,映射狀態等。
物理地址的高位稱爲頁框。
頁框的數量由頁表項的結構決定,而不是由虛擬地址空間的大小(或物理地址空間的大小)決定。
如果一個頁表項有50位的幀號,那麼有2個幀。
物理地址的下部稱爲頁面偏移量並且它由頁面大小(或幀大小,它們在設計上相等)確定。
內存中的幀數是'memory-size \ page-size'。如果你有一個4GB的主內存,那麼你將擁有'2^20'幀。 除此之外,你的問題太廣泛了。 –