ページのもっとも基本的な定義はデータのバイトサイズです。
バイト、ワードというようにデータサイズがありますが、MMU(メモリー管理ユニット)が管理できる最少のアドレス単位がページです。
ページは 32 ビットで 4KB です。というより 4KB が普通ですかね。
そして 64 ビットだと 8KB というケースもあります。
システムによっては複数のページサイズを設定できるので、システム依存を減らしたいのであればページサイズはランタイム(実行時)に取得するのが決めごとですかね。
64 ビットのシステムでは特にそうですがアドレス可能なサイズは巨大なためアドレス空間には、データが存在する有効なアドレスもあれば無効なアドレスもあります。
それでページと関連するデータの置き場所はいくつかあるので、以下に列挙しときます。
この中にデータがあれば有効なページってことですね。
そして有効であってもデータが二次記憶装置にあり、アクセスした際にまだ物理メモリーにロードされてないなら CPU の MMU (メモリー管理ユニット) によってページフォルト(Page fault)例外が生成されます。
このページフォルト例外を OS のカーネルのハンドラー(handler)が検知すると、ページング・イン(Paging in)という二次記憶装置から物理メモリーにデータをコピーを行います。
またページング・イン(Paging in)したいデータのために容量がたりない場合は、OS が使う見込みがないもの(優先度が低いデータ)を選んで物理メモリーから削除(ページング・アウト、Paging out)します。
ただデータを前もって多めにロードをするようなプリフェッチが行われるかもしれませんし、詳細は OS の実装に依存します。
まあページ単位で二次記憶装置から取り込むので、それなりの遅延は発生しますかね。
スワップでもスワップ・イン( swap in )、スワップ・アウト ( swap out ) のアルゴリズムがありますが、アルゴリズムの基本的な概念は同じです。
Copyright 2018-2019, by Masaki Komatsu