Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學

Windows 2000/XP 進程工作集深度解析:MMSUPPORT 結構、MMWSL 哈希表與 WinDbg 除錯實戰

編輯:Windows Server 教學

工作集核心概念

Windows 為多任務作業系統,實體記憶體屬稀缺資源。為防止單一進程耗盡記憶體,引入「工作集」機制追蹤各進程與系統的實體記憶體使用情況。主要分為:進程工作集、系統工作集、會話工作集(終端服務引入)。本文聚焦進程工作集內部組織與管理。

EPROCESS 與 MMSUPPORT 關鍵結構

EPROCESS 描述進程,其子結構 MMSUPPORT 包含進程與記憶體子系統關鍵資訊。以下為 Windows XP Build 2600 SP0 版本定義:

typedef struct _MMSUPPORT {
    LARGE_INTEGER  LastTrimTime;
    MMSUPPORT_FLAGS Flags;
    ULONG          PageFaultCount;
    ULONG          PeakWorkingSetSize;
    ULONG          WorkingSetSize;
    ULONG          MinimumWorkingSetSize;
    ULONG          MaximumWorkingSetSize;
    PMMWSL         VmWorkingSetList;
    LIST_ENTRY     WorkingSetExpansionLinks;
    ULONG          Claim;
    ULONG          NextEstimationSlot;
    ULONG          NextAgingSlot;
    ULONG          EstimatedAvailable;
    ULONG          GrowthSinceLastEstimate;
} MMSUPPORT, *PMMSUPPORT;

關鍵欄位說明

  • PeakWorkingSetSize:工作集峰值
  • WorkingSetSize:目前工作集大小
  • MinimumWorkingSetSize / MaximumWorkingSetSize:允許範圍
  • 可透過效能監視器、工作管理員監控;Win32 API Get/SetProcessWorkingSetSize(Ex) 可查詢/設定

MMWSL:工作集列表核心結構

進程建立時工作集為空,MiInitializeWorkingSetList 初始化 MMSUPPORT.VmWorkingSetList(指向 MMWSL 結構)。關鍵欄位:

+0x000 Quota
+0x004 FirstFree
+0x008 FirstDynamic
+0x00c LastEntry
+0x010 NextSlot
+0x014 Wsle (Pointer to _MMWSLE array)
+0x018 LastInitializedWsle
+0x01c NonDirectCount
+0x020 HashTable (Pointer to _MMWSLE_HASH)
+0x024 HashTableSize
... (其他頁表管理欄位)

固定虛擬位址映射機制

為效率考量,MMWSL 映射至固定核心虛擬位址(由 MmWorkingSetList 變數指定,XP 中為 0xc0503000)。核心區域雖為所有進程共享,但此位址對每個進程映射不同內容,類似頁目錄/頁表機制。

哈希表組織與查找機制

工作集頁面皆駐留實體記憶體(未分頁至 pagefile.sys),存取不會觸發 Page Fault。系統使用哈希表(HashTable)組織頁面,利用其快速檢索特性應對頻繁存取需求。VirtualLock 可強制將頁面置入工作集。

WinDbg 實戰:!wsle 指令觀察工作集

kd> !wsle 7
Working Set @ c0503000
    FirstFree:  469  FirstDynamic:  7
    LastEntry:  46c  NextSlot:      4  LastInitialized: 658
    NonDirect:  145  HashTable: c06f4000  HashTableSize: 400

Virtual Address    Age  Locked  ReferenceCount
c0300203            0     1         1
c0301203            0     1         1
c0502203            0     1         1
... (更多條目)

此指令可傾印指定進程(參數 7 為進程索引)的工作集詳細內容,包含虛擬位址、老化計數、鎖定狀態與參考計數,是記憶體除錯分析的利器。

Copyright © Windows教程網 All Rights Reserved