Working Set

プロセスのワーキング セットとは、現在は物理メモリに常駐しているプロセスの仮想アドレス空間内の一連のページです ワーキング セットには、ページング可能なメモリ割り当てのみが含まれています。 アドレス ウィンドウ拡張機能 (AWE) や 大きなページ割り当て などの非ページング可能なメモリ割り当ては、ワーキング セットには含まれません。

プロセスが現在作業セットにないページング可能なメモリを参照すると、 ページ エラー が発生します。 システム ページのエラー ハンドラーは、ページ エラーの解決を試み、成功した場合は、作業セットにページが追加されます。 (AWE または大きなページ割り当てにアクセスしても、ページエラーは発生しません。これらの割り当てはページングできないためです)。

ハード ページ エラーは、ページのバッキング ストアからページの内容を読み取ることによって解決する必要があります。これは、システム ページング ファイルまたはプロセスによって作成されたメモリ マップ ファイルのいずれかです。 バッキング ストアにアクセスせずに 、ソフト ページエラー を解決できます。 ソフト ページ エラーは、次の場合に発生します。

  • ページは他のプロセスのワーキング セットに含まれているため、既にメモリに常駐しています。
  • ページは、ページを使用していたすべてのプロセスの作業セットから削除され、まだ再利用されていないか、メモリ マネージャーのプリフェッチ操作の結果として既に常駐しているため、移行中です。
  • プロセスは、割り当てられた仮想ページを初めて参照します ( demand-zero エラーと呼ばれることもあります)。

次のアクションの結果として、プロセス作業セットからページを削除できます。

  • このプロセスは、SetProcessWorkingSetSize、SetProcessWorkingSetSizeEx、または EmptyWorkingSet 関数を呼び出すことによって、ワーキング セット削減または空にします。
  • このプロセスは、ロックされていないメモリ範囲で VirtualUnlock 関数を呼び出します。
  • このプロセスでは、 UnmapViewOfFile 関数を使用して、ファイルのマップされたビューのマップを解除します。
  • メモリ マネージャーは、ワーキング セットからページをトリミングして、使用可能なメモリを増やします。
  • メモリ マネージャーは、作業セットからページを削除して、新しいページのスペースを作成する必要があります (たとえば、ワーキング セットのサイズが最大であるため)。

複数のプロセスがページを共有している場合、1 つのプロセスのワーキング セットからページを削除しても、他のプロセスには影響しません。 ページを使用していたすべてのプロセスのワーキング セットからページが削除されると、ページは 切り替えページになります。 切り替えページは、ページが何らかのプロセスによって再び参照されるか、または再利用されるまで RAM にキャッシュされたままです (たとえば、ゼロで満たされ、別のプロセスに渡されます)。 切り替えページが最後にディスクに書き込まれた後に変更された場合 (つまり、ページが "ダーティ" の場合)、そのページを再利用するには、そのバッキング ストアに書き込む必要があります。 システムは、そのようなページが利用可能になるとすぐに、バッキング ストアにダーティ遷移ページの書き込みを開始する可能性があります。

各プロセスには、プロセスの仮想メモリ ページング動作に影響する最小および最大ワーキング セット サイズがあります。 指定したプロセスのワーキング セットの現在のサイズを取得するには、 GetProcessMemoryInfo 関数を 使用します。 ワーキング セットの最小サイズと最大サイズを取得または変更するには、 GetProcessWorkingSetSizeEx 関数と SetProcessWorkingSetSizeEx 関数を 使用します。

プロセス状態アプリケーション プログラミング インターフェイス (PSAPI) には、プロセスのワーキング セットに関する詳細情報を返す関数が多数用意されています。 詳細については、「 ワーキング セット情報」を参照してください。