2017-05-14 42 views
0

我們假設我們有4 GiB的RAM,並且我們使用4 kiB的頁表大小和32位地址。頁表的大小和可用的物理地址

我的計算後,我得到了:

  • 我們只能解決2^32個地址的最大;
  • 每頁表共有2^20個條目;
  • 總共有4 GiB/4 kiB = 1048576頁。

但我不明白的是,如果一個頁表有2^20個條目,我們已經用這個頁表覆蓋了所有可能的地址。 如果每個進程都有自己的頁面表,可能性如何?那麼應該可以在多個頁面表上使用相同的物理地址,這可能導致嚴重問題,或者我錯過了什麼?

非常感謝您的幫助。

回答

0

每個進程在理論上可以映射所有內存,但實際上,進程地址空間中的大部分頁面都沒有映射,爲其他進程留下了大量內存。

此外,將同一頁映射到兩個不同的地址空間並不一定會導致問題。它用於進程間通信的共享庫,內核頁面和內存之間共享。

(內核頁面可以被映射到每一道工序,這樣內核可以從任何過程的系統調用期間訪問自己的頁面,這些頁面已經被保護,使他們無法通過應用程序代碼進行訪問。)