2

通常,在32位CPU上,每個頁表項都是4個字節長,但是該大小也可以變化。一個32位條目可以指向一個 2^32物理頁面幀。如果幀大小爲4 KB(2^12),則帶有4字節條目的系統 可以尋址2^44字節(或16 TB)的物理內存。我們在這裏應該注意, 分頁內存系統中的物理內存大小與 進程的最大邏輯大小不同。有人可以解釋這個關於操作系統中的分頁嗎?

分頁如何使邏輯內存空間超過物理內存空間? 32位CPU中的幀總數是否等於2 ^(32-12)= 2^20個幀數而不是2^32個幀數?如果是這樣,是不是一個具有4字節條目能夠尋址(2^20)*(2^12)個字節的存儲器的系統?

+0

內存中的幀數是'memory-size \ page-size'。如果你有一個4GB的主內存,那麼你將擁有'2^20'幀。 除此之外,你的問題太廣泛了。 –

回答

2

該文本並不十分清楚。我會盡力清除它。

當翻譯的虛擬地址轉換成物理上的,低位的固定數量沒有得到翻譯:

+---------------------+----------+ 
| 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個幀。
物理地址的下部稱爲頁面偏移量並且它由頁面大小(或幀大小,它們在設計上相等)確定。

相關問題