2015-04-26 50 views
1

爲了排除有效,髒和參考位,僅考慮從虛擬地址空間到物理地址空間的實際「映射」,爲什麼說頁表項的大小是由引用頁面所需的位數決定的從主內存(像這裏:https://stackoverflow.com/a/14770650/3684931爲什麼只有主內存大小才能確定頁表項的大小?

我的論點是,因爲一個物理地址也可以在輔助存儲(這是使用虛擬內存的點),一個頁表項的大小應該簡單地相等到虛擬存儲器中所有頁面中引用任何頁面所需的位數。

舉個例子,如果虛擬地址空間是可尋址的由64位,主存儲器是可尋址的48位和頁大小是16KB(14個比特尋址),頁表應該映射(64 - 14) 50位地址到(64 - 14)50位地址,而不是(48 - 14)34位地址。

可能如果頁面存在於主存儲器中則映射到34位地址,否則,上邊界應該是50位,這應當在計算頁表的大小時考慮。

我在這裏錯過了什麼嗎?

回答

1

頁表項的大小可以支持虛擬地址大小和支持的最大物理內存量。他們是而不是大小根據二級存儲的任何方面。

在您的示例中,頁面表必須支持將2^50虛擬頁面映射到可能的2^34物理頁面。因此,頁表項將使用34位來保存物理頁碼。

如果頁面不在內存中,並且先前已經將頁面分頁到輔助存儲中,那麼可以使用數據結構(如散列表)來定位頁面所在頁面文件的位置。您不需要使用頁表結構來完成此操作。

+0

謝謝。那麼編寫的程序是否假設他們會自己使用'2^64'字節(虛擬內存)或'2^48'字節(主內存大小)?在前一種情況下,我不明白爲什麼頁表項不應該映射到輔助存儲(爲什麼要委託給單獨的散列表?)。在後一種情況下,當程序可能僅尋址'2^34'頁面時,爲什麼在頁面表中應該有'2^50'條目。 –

+0

程序的編寫假定它們使用2^64字節(假設編譯器,操作系統和CPU都支持64位位地址)。您希望保持較小的PTE大小,以便PTE緩存(TLB)可以很小。在PTE中提供足夠的信息以便您可以在支持存儲中找到頁面,這可以使PTE更大,從而不會增加性能。 –

+0

@SachinHosmani - 如果我的答案適合您,請批准它。如果沒有,請讓我知道爲什麼它不令人滿意。 –

0

頁表的大小必須考慮: 1.控制位 2.訪問限制位 3.頁面大小 4位的數量需要訪問所需的頁數。

頁表條目對應於虛擬內存。頁面大小乘以的條目數是虛擬地址大小。

條目本身只需要尋址物理內存。

+0

0123對於我的例子來說,頁表中每個條目的大小是多少**只考慮引用頁面所需的**位?我的50位上限是否正確? –