ページング方式とは
ページング方式は、
コンピュータの
オペレーティングシステム(OS)がメモリを管理する上で重要な役割を果たす技術です。この方式では、物理メモリと論理メモリ(プログラムから見たメモリ)を「ページ」と呼ばれる固定サイズの小さな単位に分割し、それらを効率的に割り当て、管理します。ページングは、
仮想記憶を実現するための基盤となる技術の一つです。
ページングの基本
ページング方式では、物理メモリと論理メモリの両方が同じサイズのページに分割されます。プログラムがメモリにアクセスする際、論理アドレスが物理アドレスに変換されます。この変換は、ページテーブルと呼ばれるデータ構造を用いて行われ、OSによって管理されます。
プログラムが、物理メモリに対応づけられていない論理メモリにアクセスしようとすると、ページフォールトという例外が発生します。この時、OSは例外処理
ルーチンを起動し、二次
記憶装置(ハードディスクなど)から必要なページを読み込み、ページテーブルを更新します。その後、プログラムは中断した箇所から処理を再開します。
この一連の処理を効率化するため、MMU(メモリ管理ユニット)にはTLB(Translation Lookaside Buffer)と呼ばれるキャッシュが搭載されています。TLBは、最近アクセスされた論理アドレスと物理アドレスの対応を記憶しており、アドレス変換を高速化します。TLBにアドレス情報がない場合(TLBミス)、MMUはページテーブルを参照して対応する物理アドレスを取得します。TLBミスの処理はMMUの設計によって異なり、OSがページテーブルを操作してTLBを更新する場合や、MMUが直接ページテーブルを参照する場合などがあります。
ページングの利点
ページング方式は、従来のメモリ管理方式に比べていくつかの利点があります。
メモリの有効活用: プログラムに割り当てるメモリが連続している必要がないため、外部断片化がほとんど発生せず、メモリを無駄なく利用できます。
仮想記憶の実現: プログラムは必要なページだけをメモリにロードし、使用しないページはディスクに退避させることができます。これにより、物理メモリの容量を超える大きなプログラムを実行することができます。
ページングの欠点
一方で、ページング方式にはいくつかの欠点も存在します。
実装の複雑さ: ページングを実装するコードは比較的複雑で、特に仮想記憶においては多数のページを効率的に管理する必要があります。
MMUの必要性: ページングにはMMUが必須となるため、MMUを搭載していないプロセッサではページングを実現することができません。
内部断片化: ページ単位でしかメモリを割り当てられないため、ページサイズよりも小さいメモリ要求に対しては、未使用の領域が生じる内部断片化が発生します。
ページングの動作原理
ページング方式では、プログラムがメモリにアクセスする際、MMUがハードウェアレベルでページテーブルを参照し、アドレス変換を行います。具体的な手順は以下の通りです。
1. プログラムがメモリにアクセスしようとすると、MMUは論理アドレスをページ番号とページ内オフセットに分割します。
2. MMUは、プログラムのページテーブルを参照し、対応する物理ページの番号を取得します。
3. MMUは、物理ページの番号とページ内オフセットを組み合わせて物理アドレスを生成します。
4. MMUは、生成された物理アドレスに基づいてメモリにアクセスします。
ページテーブルには、論理ページの番号と物理ページの番号の対応関係が記録されています。ページテーブルはOSによって管理されており、プログラムが新しいページを要求するたびに更新されます。
ページングの最も重要な機能の一つは、仮想記憶の実現です。プログラムが、物理メモリにロードされていないページにアクセスしようとした場合、ページフォールトが発生します。OSはページフォールトを検知すると、以下の処理を行います。
1. 二次記憶装置から必要なページを特定します。
2. RAM上の空きページフレームを取得します。
3. 必要なデータをページフレームにロードします。
4. ページテーブルを更新して、ページフレームとの対応関係を記録します。
5. 中断したプログラムの実行を再開します。
この一連の処理をページインと呼びます。RAM上に空きページフレームがない場合は、使用中のページフレームを選択し、ディスクに退避させるページアウトが必要となります。ページアウトの際に変更されたページは、二次記憶装置に書き戻す必要があります。
ページアウトを行う際に、どのページを置き換えるかを決定するアルゴリズムをページ置換アルゴリズムといいます。効率的なページ置換アルゴリズムは、システム全体のパフォーマンスに大きく影響します。一般的なページ置換アルゴリズムとしては、LRU(Least Recently Used)アルゴリズムやワーキングセットベースのアルゴリズムなどがあります。
デマンドページング: プログラムが実際にアクセスしたときに初めてページをロードする方式です。
プリページング: 参照の局所性を利用し、近い将来アクセスされる可能性のあるページを事前にロードしておく方式です。
ページングの最適化
ページングの効率を高めるために、さまざまな最適化技術が用いられます。
フリーページのキュー: ページフォールト時に利用可能なページフレームのリストです。ページが再利用される場合、ページイン処理を省略できます。
ページの事前解放: 定期的に最近使われていないページを解放し、ページフォールト発生時にページアウトの必要性を減らします。
事前クリーニング: 定期的にダーティページ(変更されたページ)を書き戻し、ページアウトの効率を向上させます。
スラッシング
スラッシングとは、ページフォールトが頻繁に発生し、システム全体のパフォーマンスが著しく低下する状態のことです。スラッシングは、プログラムが必要とするワーキングセット(頻繁にアクセスするページの集合)が物理メモリの容量を超えている場合に発生します。
スラッシングを解決するためには、RAMの増設や、同時に実行するプログラムの数を減らすなどの対策が必要です。
ページカラーリング
ページカラーリングとは、
キャッシュメモリでのスラッシングを防止するための物理ページ管理手法です。
キャッシュメモリは高速なメモリですが、物理アドレスとキャッシュの位置が衝突すると、スラッシングが発生する可能性があります。ページカラーリングでは、キャッシュ上での衝突を避けるようにページを割り当てることで、キャッシュヒット率を向上させます。
可変ページサイズ
一部のMMUでは、標準のページサイズよりも大きいページサイズ(スーパーページ)をサポートしています。可変ページサイズを用いることで、TLBミスの発生を減らし、システム全体のパフォーマンスを向上させることができます。
共有
ページング方式では、複数のプログラムが同じページを共有することができます。これにより、メモリの使用量を削減し、システムの効率を高めることができます。共有ページは、
コピーオンライトと呼ばれる技術によって、データが変更されるまでは複数のプログラムで共有されます。
用語
スワッピング: メモリ上のページを二次記憶装置に移動させることです。近年ではページングと同義で使われることもあります。
スワップ領域: 二次
記憶装置上の、ページを一時的に保存する領域です。
性能
ページングの性能は、ページイン/ページアウトの回数や、ページ置換
アルゴリズムの効率などに左右されます。スワッピングはRAMに比べて非常に遅いため、できる限り発生させないようにする必要があります。また、SSDなどの
フラッシュメモリは高速ですが、書き込み回数に制限があるため、スワップファイルとして使用する際には注意が必要です。
32ビットハードウェアでのアドレッシングの限界
ページングは、
プロセスが使用するアドレス範囲を
コンピュータに実際に搭載されている物理メモリとは異なる大きさにできる手段です。32
ビットの
コンピュータでは、仮想
アドレス空間は4GBに制限されますが、ページングにより、この制限を超えてメモリを使用することができます。
まとめ
ページング方式は、現代の
コンピュータシステムにおいて不可欠なメモリ管理技術です。効率的なメモリ利用、
仮想記憶の実現、そして
マルチタスク処理を可能にする基盤となっています。ページングの仕組みを理解することは、
コンピュータシステムの動作を理解する上で非常に重要です。