ページング方式
フラッシュメモリは消去・書き込み回数が有限であり、一度に消去する範囲が大きく(例えば、Intel X25-M SSD では128KiB)、ページサイズの何倍ということもある。したがって、フラッシュメモリをメモリ容量に余裕がない状況でスワップファイルに使用するとすぐに消耗するかもしれない。しかし、ハードディスクに比べて遅延が極めて小さく、RAMのように揮発性でないという点は魅力的である。ReadyBoost や Intel Turbo Memory といった方式はそういった利点を利用したものである。
Unix系OSの多く(例えば、AIX、Linux、Solaris)は複数のデバイスを並列にスワップスペースとして使用でき、性能を向上させることができる。
キャッシュメモリでのスラッシングを防ぐ、あるいは積極的にキャッシュヒット率を向上させようとする物理ページ管理手法をページカラーリングと呼ぶ。ページカラーリングはまた、仮想インデックスキャッシュのエイリアス問題への回避策としても使われた。
キャッシュは年々巨大化しているが、ページサイズは4Kバイトが一般的でこれはページング方式が一般化してから変わっていない。物理アドレスをインデックスとするキャッシュでは、物理ページと仮想ページのマッピングによってはキャッシュ上で現に使用中のページの対応する位置が衝突してしまい、巨大なキャッシュを生かしきれない事態が発生することがある。例えば、キャッシュサイズが16Kバイトでページサイズが4Kバイトであれば、ページはそのアドレスによってキャッシュ上で4種類の位置に対応することが考えられる。この場合、ページのカラー(色)が4種類存在すると称する。
物理インデックスキャッシュでは同時にアクセスする物理ページ群のカラーがばらばらであればスラッシングが発生せず、キャッシュヒット率が向上する。
ページカラーリングの実装上の問題は、仮想ページと物理ページのマッピングは一度なされると変更されることがなく、マッピング時点でどのようなメモリアクセスパターンとなるかを予測できない点にある。一般的には仮想ページのカラーと物理ページのカラーが一致するようにマッピングを行う。こうすることで、仮想空間上連続な領域へのアクセスでスラッシングが発生するのを防ぐ。
ただし、そのような実装をした場合に新たな問題が発生する。実行ファイルのテキストとデータの領域は仮想空間上きりのよいアドレスに配置されることが多い。そして、そのアドレスはキャッシュのカラーで言えば同じカラーとなる。従ってページカラーリングを行うシステムでは、カラーによって物理ページの使用率に偏りが発生することがある。するとシステム全体としては未使用メモリが十分であるにもかかわらず、特定のカラーの空きページがないためにページ置換アルゴリズムが起動してしまい性能低下するといった問題が発生する。これに対処する方法は様々である。
仮想インデックスキャッシュでは、ある物理ページが複数のプロセスに共有されているとき、そのマッピング先の仮想ページのカラーが異なっていると困った状態となる。同じ物理ページでありながら、キャッシュ上の複数個所に内容が置かれてしまうのである。
ページ置換アルゴリズムに関わるメモリ管理は複雑化しつつある。
LinuxのようなUNIX系システムでは、mmap() システムコールもデマンドページングによって実装されている。それは新たなプログラムを実行する際にも適用される。OSは実行ファイル(とそれが依存するライブラリ群)をマッピングするが、そのときにファイルの中身を物理メモリ上に実際にロードすることはない。マッピングがリードオンリーで共有可能であれば、物理メモリに残っている内容をそのまま使って実行することもある。これをページキャッシュと呼ぶ。
使われていない物理ページには、スワップ領域以外のファイルに対応するページキャッシュと何とも対応していない完全な未使用ページがある。一般にページング方式では、新たに必要となったページがページキャッシュにあればそれを再利用し、なければ完全に未使用のページを使用する。使い終わったページは、その内容がスワップ領域以外に対応していればページキャッシュとしてそのまま内容が保持され、スワップ領域に対応していた匿名 (Anonymous) ページは完全な未使用ページに戻される。もちろん、完全な未使用ページを使い切った上でさらにメモリを使用しなければならないときにはページキャッシュが他の用途に利用される。このようにして、現に使用中でない物理メモリを有効活用してなるべくディスクアクセスを減らすように工夫している。ちなみに、ページキャッシュとして存在する領域をmmap() でマッピングするとページキャッシュがそのまま使われるが、read() システムコールで読む場合にはユーザーバッファへのコピーが発生する。
多くのプログラムは、ある程度動作すると参照の局所性によって命令フェッチでもデータアクセスでもページフォールトが発生しない安定状態になる。この安定状態で使用しているメモリ量は、そのプログラムが必要とする全メモリ量よりも少ないのが一般的である。この安定状態をワーキングセットなどと呼び、そのプログラムが最も頻繁にアクセスするメモリページ群を意味する。
仮想記憶システムは、物理メモリの総ページ数に対してワーキングセットとして必要とされるページ数が小さいほど効率的であり、ページフォールト処理にかかる時間は性能の支配的要因ではなくなる。非常に巨大なデータ構造を必要とするプログラムはワーキングセットも巨大となる傾向にあり、ページフォールトがコンスタントに発生するためシステム性能が劇的に低下することがある。そのような状況をスラッシングという。