ワーキングセット (Working set) とは、プロセスがある時点で使用中の仮想メモリページの集合である。

ワーキングセットは大きすぎても小さすぎても問題を生じるので、そのサイズの及ぼす効果は重要である。ワーキングセットが大きすぎると同時に実行可能なプロセス数が少なくなる。小さすぎるとページフォールトが発生しやすくなる。

ページ置換アルゴリズムとワーキングセット 編集

ページ置換アルゴリズムは従来、システムの全物理ページを対象としていた。しかし、メモリ容量の増大に伴ってそのようなアルゴリズムは効率が悪くなってきた。例えば、NRU(Not Recently Used)アルゴリズムをシステム全体で行う場合、二針時計アルゴリズムなどが使われていた。これはページの参照フラグをクリアする針と参照があったかどうかを確認する針が円形に並んだ物理ページを順次チェックしていくアルゴリズムである。二つの針を進める実装方法としては、一定間隔(例えば1秒に1回)で所定のページ数だけクリア/チェックを行うのが一般的である。しかし、メモリ容量が大きくなるにつれて、全物理ページをチェックするのに非常に長い時間がかかるようになってきた。針を進める速度を速めるとカーネルが長時間連続動作することになるため、システムの応答性が悪くなる。また、二つの針の間隔を広げると参照フラグがクリアされたままの物理ページが少なくなってしまい、これも効率が悪い。

以上のような経緯で、システム全体ではなく何らかの分割をした形でページ置換を行う必要が生じたのである。このためにワーキングセットに基づいたプロセス単位のページ置換が一般化するようになった。ワーキングセットを確定する手法としてはページ置換アルゴリズムにある各種アルゴリズムが使われている。いずれにしてもワーキングセットに基づいたページ置換は参照の局所性を根拠とするものである。

ワーキングセットモデル 編集

ワーキングセットモデルとは、ワーキングセットを物理メモリ上に維持できているプロセスのみを実行する方式である。全プロセスのワーキングセットの合計が物理メモリ量を超えるとスラッシングが発生し、性能が低下する。これを回避するため、一部のプロセスを優先してワーキングセットを維持しつつ実行する。ワーキングセットを維持できないプロセスは、その使用中物理メモリを全て解放し、他のプロセスが利用できるようにする。ワーキングセットモデルを採用する場合、優先度の高いプロセスのワーキングセットを維持するように設定するのが一般的である。