ページング方式
マルチタスクまたはマルチユーザー環境では、複数のユーザーが同じプログラムを実行するということがよくある。そのプログラムのコピーを各ユーザー用に作成するのはメモリの無駄遣いとなる。解決策としては、それらページ群をプロセス間で共有すればよい。
共有する場合、あるプロセスがデータを更新した際に別のプログラムがその更新されたデータにアクセスしないよう注意深く制御しなければならない。これをコピーオンライトと呼ぶ。
仮想アドレス空間より主記憶容量が大きいコンピュータも少数ながら存在する。例えば、Magic-1、PDP-11シリーズの一部機種、物理アドレス拡張付きの32ビットプロセッサなどである。
この場合、あるプロセスは仮想アドレス空間以上の主記憶を使うことができないため、仮想記憶の主たる利点が無効となる。したがってそのようなシステムでは、次のような別の利点を求めてページングを採用する。
余分なメモリをよく使用するファイルやメタデータ(ディレクトリ情報など)のキャッシュ、すなわちページキャッシュとして使用する。
複数の仮想アドレス空間をサポートし(一般に「プロセスID」をページテーブルに持たせる)、大きな主記憶容量をより多くのプロセスを動作させるのに使う。
複数の仮想アドレス空間の総和は、ページテーブルがサポートするプロセスID(または仮想空間ID)のビット数、または使用可能な二次記憶装置の総量で制限される。
ページング方式 (Paging) とは、コンピュータのオペレーティングシステムにおいて記憶装置をページと呼ばれる小さな単位に分割して割り当てを行うアルゴリズム群である。仮想記憶のベースとなる設計の一つ。
物理メモリ空間および論理メモリ空間を、基本的に一定サイズのページと呼ばれる単位に分割して管理を行う。論理メモリから物理メモリ空間への対応づけはページテーブルと呼ばれる構造体で実現され、この構造体はオペレーティングシステム (OS) によって管理される。物理メモリ空間に対応づけられていない論理メモリを参照した時にはページフォルトという例外によってOS側の例外処理ルーチンに制御が移行し、OS側の管理によって適宜対応したページを二次記憶等から読み込み、テーブルを更新してその参照した命令の実行に戻る。
これを実現するハードウエアであるメモリ管理ユニット (MMU) の中にはトランスレーション・ルックアサイド・バッファ (Translation Lookaside Buffer:TLB) と呼ばれる一種のキャッシュがあり、ユニット内部ではこの対応表に基づいてメモリアドレスの対応づけを行っている。このテーブルから参照出来なかったときをTLBミスと呼ぶ。このときの処理はMMUの設計によって異なり、MMU内にはTLBのみを持ちTLBミスが即例外を起こし、OSがページテーブルを引いてTLBに追加することによってTLBミスを解決するアーキテクチャや、ページテーブル自体のフォーマットがOSが使えるビットを含めた形でMMUによって定義されていて、TLBミス時にMMU自身が与えられた物理アドレスにあるページテーブルを参照するアーキテクチャもある。