我想知道爲什麼我們需要在操作系統中處理每個進程頁表,使用CPU中的PTBR和PTLR寄存器(最終存儲在PCB中)中的分層頁表。
感謝PTLR,我可以檢查當前進程的頁表大小的限制,所以它的頁表將只包含其地址內存空間(不會像系統地址內存空間那麼大)的條目。
如果一個進程的虛擬地址空間不稀疏(其虛擬頁號爲0,1,2,...),我將有一個至多有一些K條目的進程頁表:它的總大小將至多爲一些MB,我認爲使用一個簡單的連續數組會更好。
那麼,爲什麼很多真正的解決方案(即x86和x64)基於多級頁面表(或散列頁表)?
謝謝。Hierachical Per-Process Page Tables:爲什麼我們不使用簡單的線性數組?
0
A
回答
0
因爲稀疏的虛擬地址空間是好的。稀疏的地址空間允許操作系統崩潰追蹤(某些)野指針的程序,並且它使預鏈接的共享庫成爲實用的,也許是最有用的,它允許你的堆棧從內存的「最高」端和堆一起增長從「底部」結束。你當然可以將頁表索引定義爲一個,其整數符號爲,這將允許你用一個簡單的數組實現後一個特性。
另外,想一想「內存過量使用」的分配 - 當你使用幾千兆字節時,操作系統可能會說,「當然,很好!」,知道大多數要求幾千兆字節的程序只使用一小部分它們。你可能會遇到問題,用一個簡單的數組來支持這樣的事情,這個數組不是很大。
相關問題
- 1. 簡單而簡單地說,我們爲什麼要使用_stdcall?
- 2. 爲什麼人們不簡單地使用「對象數據庫」?
- 3. 爲什麼我們使用指針而不是簡單地創建一個特定大小的數組?
- 4. 爲什麼我們使用線程時不會出現視圖
- 5. 爲什麼這個簡單的NSPredicate過濾我的數組
- 6. 爲什麼我應該使用XMLLIst而不是簡單的XML?
- 7. 爲什麼我的簡單數組無法正常工作?
- 8. 爲什麼我不能遞增簡單constexpr函數的參數?
- 9. 爲什麼我們在一個簡單的文件
- 10. 爲什麼這條簡單的路線不起作用?
- 11. 爲什麼我們使用char數組來創建緩衝區
- 12. 爲什麼我們使用多維數組?
- 13. 爲什麼不能我們使用原單for循環設置
- 14. 爲什麼我們需要爲每個線程使用NSAutoreleasepool?
- 15. 爲什麼Angular 2在路由中使用Observable而不是簡單的數組?
- 16. 爲什麼要使用Page Factory?
- 17. 爲什麼我們不能使用數組名稱的間接運算符?
- 18. 爲什麼我們在SPOJ(ALLIZWELL)中應用BFS/DFS?爲什麼不簡單的蠻力工作?
- 19. 爲什麼我的「Page [0]」不在我的網頁中?
- 20. 裝配需要什麼?爲什麼我們使用它們?
- 21. 爲什麼簡單的兩組減法不起作用?
- 22. Codeigniter:Multiple Methods,Multiple Tables,One Page
- 23. 爲什麼不顯示「SHOW TABLES」
- 24. 爲什麼我的簡單SVG無效?
- 25. 爲什麼我們在Java中使用靜態塊?爲什麼我們不能用簡單的語句取代它?
- 26. 爲什麼我們使用帶多態性的指針?
- 27. Hierachical AJAX
- 28. 爲什麼RewriteRule^page /?$ page.php [L] match site/page//
- 29. 爲什麼我們設置屬性Hibernate.Dialect?
- 30. 爲什麼我們不能在jQuery中使用setAtrribute函數?