我有興趣瞭解虛擬內存和頁面機制,特別是Windows x86系統。從我從各種在線資源中收集到的信息(包括SO上發佈的其他問題),進程頁表
1)每個進程的單獨頁表位於同一進程的內核地址空間內。
2)每個進程只有一個頁面表,其中包含虛擬頁面到物理頁面(或幀)的映射。 3)對應於給定虛擬地址的物理地址由存儲器管理單元(MMU)基本上通過使用所提供的虛擬地址的前20位作爲頁表的索引來計算,使用該索引來檢索物理幀的起始地址,然後根據虛擬地址的剩餘12位向該地址施加一些偏移量。
這三個陳述是否正確?或者我誤解了這些信息?
如您所說,分頁方案與操作系統無關。例如,Linux與vanilla unix相比以不同的方式處理分頁,而不是10:10:12模式。 – i0exception
非常感謝這個見解。虛擬地址是32位,是否正確?不像第三段(最後一段)所述的32個字節。還是隻是一個錯字? – Jimmy
我想說的是操作系統使用的分頁模型和硬件使用的模型通常是不同的概念。 Linux在內部使用統一的分頁模型,但是這是分層的硬件分頁模型,需要體系結構特定的黑客才能使其工作。硬件的模型決定了地址翻譯如何實際發生(因爲MMU是這樣做的)。 Linux只是在頂層添加一個間接層。在它的深處它仍然使用10:10:12模型。 –