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

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

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

作成日: 更新日:

読み方

日本語表記

ページング (ページング)

英語表記

paging (ページング)

用語解説

ページングは、オペレーティングシステム(OS)がコンピュータの限られた物理メモリを効率的に管理し、複数のプログラムが協調して動作できるようにするための重要なメモリ管理技術である。これは、仮想記憶と呼ばれる概念を実現する主要な手法の一つであり、各プログラムが物理メモリの実際の容量や配置を意識することなく、あたかも広大な連続した専用メモリを持っているかのように錯覚させる。この技術は、物理メモリの総量が実行中のプログラムが必要とするメモリ量よりも少ない場合でも、プログラムが問題なく動作することを可能にする。物理メモリは、CPUが直接アクセスできる高速な記憶装置であり、RAM(Random Access Memory)がこれに該当する。ページングは、現代のマルチタスクOSにおいて不可欠な機能であり、リソースの有効活用とシステムの安定性向上に貢献している。

詳細に入ると、ページングはまず、プログラムが使用する「仮想アドレス空間」を、固定サイズの小さなブロックに分割することから始まる。このブロックを「ページ」と呼ぶ。一般的に、ページのサイズは4KB(キロバイト)や2MB(メガバイト)などのように、OSとハードウェアによって定められている。同様に、物理メモリも同じ固定サイズのブロックに分割され、これを「ページフレーム」と呼ぶ。プログラムが実行される際には、そのプログラムが必要とするページが、物理メモリ上の空いているページフレームにロードされる。仮想アドレス空間は、プログラムがメモリにアクセスする際に使用する論理的なアドレスであり、物理アドレス空間は、実際の物理メモリ上のアドレスを指す。

仮想アドレス空間と物理アドレス空間の間のマッピング(対応付け)は、「ページテーブル」と呼ばれるデータ構造によって管理される。各プログラム(プロセス)は、それぞれ独自のページテーブルを持つ。このページテーブルは、ある仮想アドレスのページが、物理メモリ上のどのページフレームに対応しているかという情報を格納している。具体的には、仮想ページ番号と、それが格納されている物理ページフレーム番号の対応関係を保持する。ページテーブル自体は、通常は物理メモリ上に、あるいは必要に応じてディスク上に保存されることもある。

CPUがプログラムの命令を実行し、メモリにアクセスしようとすると、そのアクセスは常に仮想アドレスで行われる。この仮想アドレスは、MMU(Memory Management Unit:メモリ管理ユニット)と呼ばれるハードウェアコンポーネントによって、対応する物理アドレスに変換される。MMUはCPUに内蔵されていることが多く、CPUが仮想アドレスを発行すると、ページテーブルを参照して対応する物理アドレスを特定し、その物理アドレスを使って物理メモリにアクセスする。この一連のプロセスを「アドレス変換」と呼ぶ。

ここで重要な概念が「ページフォルト」である。MMUがページテーブルを参照した際に、アクセスしようとした仮想アドレスに対応するページが、現在物理メモリ上に存在しないことが判明する場合がある。これは、そのページがまだ一度も物理メモリに読み込まれていないか、あるいは以前に物理メモリから追い出されてディスク(スワップ領域と呼ばれる特別な領域)に書き出されている状態である。この状況が発生すると、ページフォルトと呼ばれる割り込みがCPUによって発生し、OSに制御が渡る。OSは、ページテーブルからそのページがディスク上のどこに保存されているかを特定し、ディスクから該当ページを読み出して、物理メモリ上の空いているページフレームにロードする(これを「スワップイン」と呼ぶ)。もし物理メモリに空きがない場合は、OSは現在物理メモリ上にあるページの中から、今後使用される可能性の低いページをディスクに書き出して(これを「スワップアウト」と呼ぶ)、空きページフレームを確保する必要がある。このページを追い出す決定には、LRU(Least Recently Used:最近最も使われていない)やFIFO(First In, First Out)などの「ページ置き換えアルゴリズム」が用いられる。ページが物理メモリにロードされた後、OSはページテーブルを更新し、プログラムの実行を再開させる。

ページングの主なメリットはいくつかある。第一に、物理メモリの容量制約から解放される点である。プログラムは物理メモリの実際の容量よりもはるかに大きなメモリ空間を利用できるため、大規模なアプリケーションも実行可能になる。第二に、多重プログラミング、つまり複数のプロセスを同時に実行できることである。各プロセスは独立した仮想アドレス空間を持つため、物理メモリを共有しながらも互いに干渉することなく動作できる。第三に、メモリの効率的な利用が挙げられる。ページ単位で物理メモリを割り当てるため、細かく散らばった空き領域(外部断片化)が発生しにくく、メモリを有効活用できる。また、各プロセスの仮想アドレス空間が他のプロセスから分離されているため、あるプロセスが誤って他のプロセスのメモリ領域にアクセスすることを防ぎ、セキュリティの向上にも寄与する。

一方で、デメリットも存在する。最も顕著なのは、性能オーバーヘッドである。アドレス変換のためにMMUがページテーブルを参照する必要があるため、物理メモリへの直接アクセスに比べて時間がかかる。さらに、ページフォルトが発生すると、ディスクへのアクセス(I/O)が伴うため、プログラムの実行が大幅に遅延する可能性がある。特に、頻繁にページフォルトが発生し、OSがページの入れ替えに多くの時間を費やす状態は「スラッシング」と呼ばれ、システム全体のパフォーマンスを著しく低下させる。ページテーブル自体もメモリを消費するデータ構造であり、これもオーバーヘッドの一つである。

アドレス変換のオーバーヘッドを軽減するために、「TLB(Translation Lookaside Buffer)」と呼ばれるキャッシュメモリがMMU内に搭載されていることが多い。TLBは、最近変換された仮想アドレスと物理アドレスのマッピング情報を一時的に保持する。CPUが仮想アドレスを発行すると、まずTLBを検索し、対応するエントリが見つかれば、ページテーブルを参照することなく高速に物理アドレスに変換できる。TLBに目的のエントリがない場合(TLBミス)にのみ、ページテーブルを参照する。これにより、アドレス変換の平均的な速度が大幅に向上し、ページングによる性能低下を緩和している。

ページングは、現代のオペレーティングシステムにおいて不可欠なメモリ管理技術であり、物理メモリの限界を超えた柔軟なプログラミング環境と、複数のプログラムが安定して動作する基盤を提供している。

関連コンテンツ

関連IT用語