ページング方式
他の動的メモリアロケーションに比較して、ページング方式ではプログラムに割り当てるメモリが連続である必要がなく、大きなフラグメンテーション(外部断片化)がほとんど発生しないため、メモリを無駄にしない。
プログラムは、ある時点でそのコードとデータを全て使用するわけではない(参照の局所性)。そのため、必要に応じてページをディスクに書き込んだり、ページの内容をディスクから読み込んだりすることで仮想記憶のコンセプトを実装できる。この点もページング方式が他のメモリアロケーション手法よりも優れている点である。
つまり、ページサイズが小さければページ数が多くなる。
従って、このメモリアクセス要求がなされると、MMUはそのプログラムのページテーブルを参照してマッピングされているOSのページ番号を得る。この例の場合、プログラムAの2番目のページはOSの2番目のページにマップされている。次いで、OSページ番号に対応する物理マッピングを得る。2番目のOSページは物理メモリアドレス 1000:2000 に対応しており、プログラムが参照しようとしているアドレスのページ内相対アドレスは 00FE なので、MMU は物理アドレス 1000:20FE の位置のメモリにアクセスする。
以上はあくまでも概略である。最近のコンピュータ・アーキテクチャでは様々な手段でページングを高速化している。例えば、i386 系アーキテクチャのプロセッサも他のプロセッサと同様にTLBと呼ばれる特殊なキャッシュを持っていて、過去にアクセスした仮想アドレスと物理アドレスのマッピングを保持する。従って一度ページテーブルを参照してマッピング情報を得たら、スワップアウトされたりTLBのエントリが他のマッピングに転用されるまで、時間のかかるページテーブル参照をせずにマッピング情報が得られる。
スラッシングの興味深い特性として、ワーキングセットが大きくなってもページフォールト回数はある臨界点まではあまり増えない。その臨界点を越えるとページフォールト回数が劇的に増え、システム性能がそれに支配されるようになる。
その種の極端な例として、IBMの System/360 Model 67 と System/370 で、データ転送命令の機械語がページ境界をまたぎ、データ転送元もページ境界をまたぎ、データ転送先もページ境界をまたいだ場合がある。そのとき、その命令を実行するには8ページがメモリ上になければならない。したがって、最大8回のページフォールトが連続的に発生する可能性があり、スラッシングが発生するといつまでたっても8ページが揃わないという状態になる。
スラッシングを解決する手段として、次のような対策が考えられる。
RAMを増設する(長期的解決策)
同時に実行するプログラムの数を減らす。