Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

プリページング(プリページング)とは | 意味や読み方など丁寧でわかりやすい用語解説

プリページング(プリページング)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。

作成日: 更新日:

読み方

日本語表記

プリページング (プリページング)

英語表記

prepaging (プレページング)

用語解説

プリページングとは、コンピューターの仮想記憶システムにおいて、プログラムやデータが実際に必要とされるより前に、あらかじめ予測して主記憶(RAM)に読み込んでおく技術である。これは、主に補助記憶装置(HDDやSSDなど)から主記憶へのデータ転送にかかる時間を最小限に抑え、プログラムの実行速度やシステムの応答性を向上させることを目的としている。コンピューターの記憶装置は、CPUに近い高速なものから遠い低速なものへと階層化されており、特に主記憶と補助記憶装置の間でのデータのやり取りは、CPUの処理速度に比べて非常に時間がかかる。このI/O(入出力)待ち時間をいかに減らすかは、システムの全体的な性能を決定する上で重要な課題であり、プリページングはこの課題を解決するための効果的な手法の一つとして用いられる。

コンピューターが実行するプログラムやデータは、通常、補助記憶装置に格納されている。プログラムが実行される際、必要となる命令やデータは「ページ」と呼ばれる固定サイズのブロック単位で、補助記憶装置から主記憶へと読み込まれる。このページの読み込みを管理する仕組みが「ページング」であり、物理的な主記憶の容量を超えても、あたかも広大なメモリがあるかのように見せる「仮想記憶」の基盤となっている。仮想記憶システムにおける基本的なページの読み込み方法は、「デマンドページング(要求ページング)」と呼ばれる。これは、プログラムが特定のページを要求し、そのページが主記憶上に存在しない場合(この状態を「ページフォルト」と呼ぶ)、その都度補助記憶装置から該当するページを読み込む方式である。デマンドページングは、必要なページだけを読み込むため、主記憶の利用効率が高いという利点を持つ。しかし、プログラムが連続して多くのページを必要とする場合、ページフォルトが頻繁に発生し、そのたびに補助記憶装置へのアクセスが発生するため、I/O待ち時間による性能の低下が顕著になる可能性がある。

プリページングは、このデマンドページングの弱点を補うために導入される技術である。システムは、プログラムの挙動やデータのアクセスパターンを分析し、次に必要となるであろう複数のページを予測する。そして、これらの予測されたページを、実際に要求が発生する前に、一度のI/O操作でまとめて補助記憶装置から主記憶へと読み込む。例えば、プログラムの実行コードはアドレス空間上で連続していることが多いため、あるページが読み込まれたら、その次のページもすぐに必要になる可能性が高いと予測できる。また、ファイルシステムにおいて連続したブロックに格納されているデータも同様に、順次アクセスされることが予想される。

プリページングの最大の利点は、ディスクI/Oの回数を大幅に削減できる点にある。補助記憶装置へのアクセスは、ディスクヘッドの移動(シーク)やディスクの回転待ち(レイテンシ)など、初期オーバーヘッドが大きく、これに時間がかかる。複数のページをまとめて読み込むことで、これらの初期オーバーヘッドを一度で済ませ、その後の連続したデータの転送を効率的に行える。これにより、ページフォルトの発生頻度が低下し、プログラムの起動時間短縮や、データ処理の高速化、全体的なシステムのスループット向上に貢献する。特に、大規模なプログラムのロード時や、大きなファイルを順次読み込むアプリケーションにおいて、その効果は顕著である。

しかし、プリページングには潜在的なデメリットも存在する。最も大きな課題は、予測が外れた場合のリスクである。もしシステムが予測したページが実際には使われなかった場合、不要なページが主記憶を占有することになり、本当に必要な他のページのためのスペースが減少する。これは主記憶の利用効率を低下させ、最悪の場合、必要なページが補助記憶装置に追い出されてしまう「ページアウト」を引き起こし、結果としてシステムの性能を損なう「キャッシュ汚染」につながる可能性もある。また、不要なページを読み込むためのディスクI/O自体も、無駄な処理となる。そのため、プリページングの効果は、その予測アルゴリズムの精度に大きく依存する。オペレーティングシステムやデータベース管理システムなどでは、さまざまなヒューリスティック(経験則)や統計的手法を用いて、より正確な予測を行うためのアルゴリズムが開発されている。例えば、プログラムが起動されるときに実行されるコードの初期部分や、ライブラリファイル全体をまとめて読み込む、またはファイルシステムにおいて、あるブロックが読み込まれたらその次のブロックも同時に読み込むといった戦略が一般的に用いられる。プリページングは、デマンドページングと組み合わせて利用されることが多く、システムの特性やワークロードに応じて、その振る舞いが最適化されることで、最大の効果を発揮するように設計されている。

関連コンテンツ