2011-07-18 148 views
0

我想知道爲什麼我們需要在操作系統中處理每個進程頁表,使用CPU中的PTBR和PTLR寄存器(最終存儲在PCB中)中的分層頁表。
感謝PTLR,我可以檢查當前進程的頁表大小的限制,所以它的頁表將只包含其地址內存空間(不會像系統地址內存空間那麼大)的條目。
如果一個進程的虛擬地址空間不稀疏(其虛擬頁號爲0,1,2,...),我將有一個至多有一些K條目的進程頁表:它的總大小將至多爲一些MB,我認爲使用一個簡單的連續數組會更好。
那麼,爲什麼很多真正的解決方案(即x86和x64)基於多級頁面表(或散列頁表)?

謝謝。Hierachical Per-Process Page Tables:爲什麼我們不使用簡單的線性數組?

回答

0

因爲稀疏的虛擬地址空間是好的。稀疏的地址空間允許操作系統崩潰追蹤(某些)野指針的程序,並且它使預鏈接的共享庫成爲實用的,也許是最有用的,它允許你的堆棧從內存的「最高」端和堆一起增長從「底部」結束。你當然可以將頁表索引定義爲一個,其整數符號爲,這將允許你用一個簡單的數組實現後一個特性。

另外,想一想「內存過量使用」的分配 - 當你使用幾千兆字節時,操作系統可能會說,「當然,很好!」,知道大多數要求幾千兆字節的程序只使用一小部分它們。你可能會遇到問題,用一個簡單的數組來支持這樣的事情,這個數組不是很大。

相關問題