工作集

進程的工作集是目前位於實體記憶體中的進程虛擬位址空間中的一組頁面。 工作集只包含可分頁的記憶體配置;工作集中不包含無法分頁的記憶體配置,例如 位址視窗延伸 模組 (AWE) 或 大型頁面配置

當進程參考目前不在其工作集中的可分頁記憶體時,就會發生 分頁錯誤 。 系統分頁錯誤處理常式會嘗試解決分頁錯誤,如果成功,則會將頁面新增至工作集。 (存取 AWE 或大型頁面配置永遠不會造成分頁錯誤,因為這些配置無法分頁。)

必須藉由從頁面支援存放區讀取頁面內容來解決硬式分頁錯誤,也就是系統分頁檔案或進程所建立的記憶體對應檔案。 您可以解決 軟分頁錯誤 ,而不需要存取備份存放區。 發生軟分頁錯誤時:

  • 頁面位於一些其他進程的工作集中,因此它已經存在於記憶體中。
  • 頁面正在轉換,因為它已從使用頁面且尚未重新用途的所有進程的工作集中移除,或因為記憶體管理員預先擷取作業而已存在。
  • 程式會第一次參考已配置的虛擬頁面, (有時稱為 需求零錯誤) 。

頁面可以從進程工作集移除,因為下列動作:

  • 進程會藉由呼叫SetProcessWorkingSetSize、SetProcessWorkingSetSizeExEmptyWorkingSet 函式來減少或清空工作集。
  • 進程會在未鎖定的記憶體範圍上呼叫 VirtualUnlock 函式。
  • 此程式會使用 UnmapViewOfFile 函式取消對應檔案的對應檢視。
  • 記憶體管理員會修剪工作集中的頁面,以建立更多可用的記憶體。
  • 例如,記憶體管理員必須從工作集中移除頁面,以讓新頁面的空間 (,因為工作集的大小上限為) 。

如果數個進程共用頁面,從一個進程的工作集中移除頁面並不會影響其他進程。 從使用頁面的所有進程的工作集中移除頁面之後,頁面就會變成 轉換頁面。 轉換頁面會保留在 RAM 中快取,直到某些進程再次參考頁面,或重新規劃 (,例如填滿零並提供給另一個進程) 。 如果在上次寫入磁片 (之後修改轉換頁面,也就是說,如果頁面為「已變更」) ,則必須將頁面寫入其備份存放區,才能重新規劃該頁面。 系統可能會在這類頁面可用時,立即開始將已變更的轉換頁面寫入其備份存放區。

每個進程都有影響進程虛擬記憶體分頁行為的最小和最大工作集大小。 若要取得指定進程的目前工作集大小,請使用 GetProcessMemoryInfo 函 式。 若要取得或變更工作集大小下限和最大值,請使用 GetProcessWorkingSetSizeExSetProcessWorkingSetSizeEx 函 式。

程式狀態應用程式開發介面 (PSAPI) 提供數個函式,可傳回進程工作集的詳細資訊。 如需詳細資訊,請參閱 工作集資訊