ページングアルゴリズムとは

ページングアルゴリズム(Paging Algorithm)とは、オペレーティングシステムの仮想記憶管理機構において、プログラムがアクセスしようとしている仮想ページが物理メモリ(RAM)上に存在しない場合(ページフォールトが発生した場合)、物理メモリの空き領域が不足している際に、どの物理ページフレームに格納されている仮想ページをディスク上のスワップ領域に退避(スワップアウト)させるかを決定するための戦略です。

効率的なページングアルゴリズムは、ページフォールトの発生頻度を最小限に抑え、システムの性能を維持するために重要となります。

ページングアルゴリズム の基本概念

仮想記憶システムでは、プログラムが使用する仮想アドレス空間を固定長の単位(ページ)に分割し、物理メモリも同様のサイズの単位(ページフレーム)に分割して管理します。プログラムの実行に必要なページは物理メモリにロードされますが、全てのページが常に物理メモリに存在する必要はありません。物理メモリが満杯になった状態で新たなページをロードする必要が生じた場合、現在物理メモリにあるいずれかのページをディスクに退避させて空き領域を作る必要があります。この退避させるページを選択するルールがページングアルゴリズムです。

理想的なページングアルゴリズムは、将来再びアクセスされる可能性の低いページをスワップアウトすることですが、将来のアクセスパターンを完全に予測することは不可能であるため、様々な近似的なアルゴリズムが用いられます。

代表的なページングアルゴリズム

  1. 最適ページングアルゴリズム(Optimal Paging Algorithm, OPT): 将来最も長くアクセスされないページをスワップアウトするアルゴリズムです。理論的には最もページフォールトの発生を抑えることができますが、将来のページ参照順序を事前に知る必要があるため、現実のオペレーティングシステムでは実装不可能であり、他のアルゴリズムの性能評価の基準として用いられます。
  2. 最近最長未使用アルゴリズム(Least Recently Used, LRU): 過去最も長くアクセスされていないページをスワップアウトするアルゴリズムです。「最近アクセスされたページは近く再びアクセスされる可能性が高い」という局所性の原理に基づいています。過去のアクセス履歴を記録する必要があり、実装コストはやや高くなりますが、多くの状況でOPTに近い性能を発揮します。
  3. FIFO(First-In, First-Out): 最も早く物理メモリにロードされたページをスワップアウトするアルゴリズムです。実装は非常に簡単ですが、アクセス頻度に関わらず古いページから追い出されるため、性能はLRUに劣る場合があります。バリアン異常(Belady’s anomaly)と呼ばれる、物理ページフレーム数を増やしたにもかかわらずページフォールトが増加する現象が発生する可能性があります。
  4. LRU近似アルゴリズム: LRUを効率的に実装するための様々な近似アルゴリズムが存在します。
    • 追加参照ビットアルゴリズム(Additional-Reference-Bits Algorithm): 各ページフレームに参照ビットを設け、ページがアクセスされるたびにセットします。定期的に参照ビットを右シフトし、カウンタとして保持することで、過去の参照頻度を近似的に追跡します。
    • 二次チャンスアルゴリズム(Second-Chance Algorithm): FIFOを基本としつつ、スワップアウト候補のページが最近アクセスされた(参照ビットがセットされている)場合、参照ビットをクリアしてFIFOリストの末尾に移動させ、もう一度スワップアウトの機会を与えます。
    • 時計アルゴリズム(Clock Algorithm): ページフレームを円状のリストで管理し、ポインタを用いてスワップアウト候補を探します。参照ビットがセットされているページはスキップし、参照ビットがクリアされている最初のページをスワップアウトします。
  5. 頻度に基づいたアルゴリズム(Frequency-Based Algorithms): ページのアクセス頻度に基づいてスワップアウトするページを選択します。
    • 最少頻度使用アルゴリズム(Least Frequently Used, LFU): 過去最もアクセス頻度の低いページをスワップアウトします。頻度の低いページが今後もアクセスされないとは限らないため、必ずしも高性能とは限りません。
    • 最頻度使用アルゴリズム(Most Frequently Used, MFU): 最もアクセス頻度の高いページをスワップアウトします。頻繁にアクセスされるページが初期化直後など一時的なものである場合に有効な場合があります。

ページングアルゴリズム の評価基準

ページングアルゴリズムの性能は、主に以下の指標を用いて評価されます。

  • ページフォールト率(Page Fault Rate): 単位時間あたりまたはプログラム実行全体におけるページフォールトの発生回数。これが低いほど性能が高いとされます。
  • メモリ参照時間(Memory Access Time): ページフォールトが発生した場合の処理時間を含めた、平均的なメモリ参照にかかる時間。

ページングアルゴリズム の選択

オペレーティングシステムがどのページングアルゴリズムを採用するかは、システムの設計目標や想定されるワークロードによって異なります。一般的には、実装の複雑さと性能のバランスを考慮して、LRUまたはその近似アルゴリズムが広く用いられています。

ページングアルゴリズムは、仮想記憶システムにおいて、物理メモリが不足した際にどの仮想ページをスワップアウトさせるかを決定する重要な戦略です。最適アルゴリズムは理想的ですが実現不可能であり、LRUやその近似アルゴリズムが現実的な選択肢として広く用いられています。アルゴリズムの選択は、システムの性能に大きな影響を与えるため、適切なアルゴリズムの理解と選択が重要となります。

関連用語

性能テスト | 今更聞けないIT用語集
最適化アルゴリズム | 今更聞けないIT用語集
AIソリューション

お問い合わせ

システム開発・アプリ開発に関するご相談がございましたら、APPSWINGBYまでお気軽にご連絡ください。

APPSWINGBYの

ソリューション

APPSWINGBYのセキュリティサービスについて、詳しくは以下のメニューからお進みください。

システム開発

既存事業のDXによる新規開発、既存業務システムの引継ぎ・機能追加、表計算ソフトによる管理からの卒業等々、様々なWebシステムの開発を行っています。

iOS/Androidアプリ開発

既存事業のDXによるアプリの新規開発から既存アプリの改修・機能追加まで様々なアプリ開発における様々な課題・問題を解決しています。


リファクタリング

他のベンダーが開発したウェブサービスやアプリの不具合改修やソースコードの最適化、また、クラウド移行によってランニングコストが大幅にあがってしまったシステムのリアーキテクチャなどの行っています。