2011-09-07 38 views
0

我想了解以下內容:Windows內存工作原理 - 頁表和數據

  • 我知道頁表是專爲在某一時刻的虛擬內存和物理內存之間的翻譯虛擬內存管理器。由於在系統上運行的進程很多,即使一次只激活一個進程,我也想知道處於非活動狀態的進程的頁表是否會在任何時間點都移動到頁面文件中?鑑於較低的2 GB區域是爲Windows保留的,因此Windows將爲系統上的所有進程保留頁表是有意義的。雖然如果當前進程被切換,它們會移動到頁面文件也是有意義的。

  • 同樣適用於可寫入(數據)頁面。 Windows會將所有進程的所有數據頁保留在內存中,或將它們移到頁面文件的某個位置。在我的機器上,任務管理器表示1.5 GB RAM正在使用3 GB之外,1.5是性能選項卡中的系統緩存,因此我的理解是數據保留在所有應用程序的物理內存中。但是有沒有時間需要轉移到分頁文件?

回答

1

我在想,是否不活動的進程頁表在任何時間點移動到頁面文件?

是的,頁表是可分頁的。

窗口會保存內存中所有進程的所有數據頁面,或將它們移到頁面文件的某個位置。

就Windows分頁策略而言,有兩種內存:可分頁和不可分頁。它屬於哪個進程並不重要,即使它屬於O/S本身,如果它是可分頁的,那麼它可能被分頁出去。所以,是的,Windows會根據需要分頁處理數據頁面。

我建議閱讀Windows Internals書中的內存管理章節,它應該涵蓋所有這些內容。

-scott

0

你實際上在這裏提出兩個問題。

  1. 什麼是關於頁表的分頁策略。
  2. 什麼是「可寫數據」頁面(即具有讀/寫權限的虛擬內存)的分頁策略。

首先我會糾正你一點。

鑑於較低的2 GB保留給窗口,它會 有意義的Windows將保持頁表對所有進程上 系統

確切的說是在 2GB保留給windows,更正確 - 只能通過Windows內核和驅動程序在內核模式下訪問。

現在,這可能會讓你感到驚訝,但內核內存也可能是可調整的!因此從技術上講,在用戶/內核模式下,32位地址空間的哪一部分是可見的並不重要。這與分頁無關。

另一個更正:虛擬內存可能在物理內存保存到頁面文件。人們普遍認爲,操作系統通過按需將頁面保存到頁面文件來釋放物理存儲空間。錯誤。

實際上Windows會將內存頁面保存到頁面文件之前需要釋放它們。實際上,它將所有內存頁面轉儲到頁面文件(除了與其他文件相關的頁面文件(如映射部分)之外)。有兩個原因:

  • 在高負載操作系統將空閒內存頁快(因爲他們已經保存)
  • 在內核模式分頁並不總是可能。以高IRQL運行的驅動程序(即服務於最緊急事件)可能無法訪問物理存儲驅動程序,因此無法進行分頁。

因此,問題的答案是:

  1. 不知道是肯定的,但它依賴於操作系統實現細節。我沒有看到爲什麼per-process頁面表不能被換出的原因。在上下文切換和修改過程虛擬內存期間需要它。這兩種情況都不屬於時間關鍵事件。
  2. 絕對「可寫數據」內存頁面保存到頁面文件。他們是否從物理內存中刪除?只在系統負載期間按需使用最近最少使用的順序。