IPA午前2の学習を進める皆さん、こんにちは!今回は、コンピュータシステムの根幹をなす「仮想記憶とページング」というテーマを取り上げます。この概念は、限られた物理メモリを効率的に使い、複数のプログラムを同時に動かすためのOSの重要な機能であり、IPA午前2試験では頻繁に出題されます。特に、実効アクセス時間に関する計算問題は定番ですので、一緒にしっかりと理解していきましょう。
出題の意図
仮想記憶とページングに関する問題がIPA午前2で問われる背景には、受験者がOSのメモリ管理メカニズムを深く理解しているかを確認したいという意図があります。システムの性能は、メモリへのアクセス速度に大きく左右されます。仮想記憶がどのようにしてアプリケーションに広大なメモリ空間を提供し、ページングがその背後でどのように機能しているのか、そしてそれが実効アクセス時間にどのような影響を与えるのかを把握することは、ITエンジニアとしてシステム設計や性能評価を行う上で不可欠な知識だからです。単に用語を知っているだけでなく、具体的な数値に基づいてシステムの動作を予測・評価できる能力が求められています。
定義と前提知識
まずは、仮想記憶とページングの基本的な概念を押さえておきましょう。
仮想記憶とは
仮想記憶とは、物理メモリ(主記憶)の容量が小さくても、プログラムがより大きな連続したメモリ空間を利用できるように見せかける技術です。プログラムからは、まるで無限に近いような広大なメモリがあるかのように見えます。これにより、物理メモリに収まりきらないサイズのプログラムや、複数のプログラムを同時に実行できるようになります。この広大なメモリ空間を「仮想アドレス空間」、その中に存在するアドレスを「仮想アドレス」と呼びます。
ページングとは
ページングは、仮想記憶を実現するための最も一般的な手法の一つです。メモリ空間を固定長の小さなブロックに分割し、それぞれを「ページ」と呼びます。プログラムは、このページ単位で仮想アドレス空間から物理メモリ、あるいはセカンダリストレージ(補助記憶装置、例:SSDやHDD)へ移動されます。
Note: ページングでは、仮想アドレス空間と物理メモリ空間が同じサイズのブロック(ページ、物理ページフレーム)に分割されます。
ページテーブル (Page Table)
仮想アドレスを物理アドレスに変換するために、OSは「ページテーブル」という特別な表を使用します。ページテーブルには、どの仮想ページが物理メモリのどの物理ページフレームに格納されているかの対応関係(マッピング)が記録されています。CPUがプログラムから仮想アドレスを受け取ると、OSはこのページテーブルを参照して対応する物理アドレスを特定し、実際の物理メモリにアクセスします。ページテーブル自体は、通常、物理メモリ上やキャッシュメモリ(TLB)に格納されます。
TLB (Translation Lookaside Buffer)
ページテーブルへのアクセスは頻繁に行われるため、その都度主記憶にアクセスすると性能が低下します。そこで、ページテーブルのエントリの一部を高速なキャッシュメモリに格納し、アクセス速度を向上させる仕組みが「TLB(Translation Lookaside Buffer)」です。TLBはCPU内部にあり、最近参照された仮想ページと物理ページフレームのマッピング情報を一時的に保持します。CPUが仮想アドレスを参照する際、まずTLBを検索し、目的のエントリが見つかれば(TLBヒット)高速に物理アドレス変換が行われます。見つからなければ(TLBミス)、ページテーブルを主記憶から参照します。
ページフォールト (Page Fault)
CPUが参照しようとした仮想ページが、現在物理メモリ上に存在せず、セカンダリストレージ(例えばSSD)に格納されている場合に発生する例外処理が「ページフォールト」です。ページフォールトが発生すると、OSはセカンダリストレージから該当するページを物理メモリに読み込み、ページテーブルを更新し、TLBも更新した後で、プログラムの実行を再開します。この処理は非常に時間がかかります。
段階的な解法
IPA午前2でよく出題されるのは、TLBとページテーブル、主記憶のアクセス時間を考慮した「実効アクセス時間」を求める問題です。具体的な例題を通して、その解法を見ていきましょう。
例題: あるコンピュータシステムにおいて、TLBの参照時間は10ナノ秒、主記憶へのアクセス時間は100ナノ秒とします。TLBヒット率は90%であり、ページテーブルは主記憶上に格納されています。このときの実効アクセス時間は何ナノ秒でしょうか?
ステップ1: 問題文の読解とキーワードの把握
与えられた情報を正確に把握することが大切です。 * TLB参照時間: 10ナノ秒 (TLBへのアクセスにかかる時間) * 主記憶アクセス時間: 100ナノ秒 (物理メモリへのアクセスにかかる時間) * TLBヒット率: 90% (TLBで目的のマッピングが見つかる確率) * ページテーブルの格納場所: 主記憶上 (TLBミス時、ページテーブル参照のために主記憶アクセスが1回必要)
ステップ2: 概念の図解(Mermaid)
仮想アドレスから物理アドレスへの変換プロセスを視覚的に理解すると、計算式の組み立てが容易になります。
graph TD
A["CPUが仮想アドレス生成"] --> B{"TLBにエントリあり?"};
B -->|"Yes('ヒット率 90%')"| C["TLB参照 (10ns)"]
C --> D["物理アドレス取得"];
B -->|"No('ミス率 10%')"| E["TLB参照 (10ns)"]
E --> F["ページテーブル参照 (主記憶アクセス1回: 100ns)"];
F --> D;
D --> G["主記憶アクセス (データ取得1回: 100ns)"];
G --> H["実効アクセス時間算出"];上記のフローチャートから、TLBヒット時とTLBミス時で、主記憶へのアクセス回数が異なることが分かります。
ステップ3: 計算式の組み立て
実効アクセス時間は、TLBヒット時とTLBミス時のそれぞれの処理時間と、その発生確率を考慮した期待値として算出されます。
TLBヒット時 (確率 90%) の処理時間: TLBを参照し、物理アドレスを取得し、その後主記憶にアクセスしてデータを取得します。
TLB参照時間 + 主記憶アクセス時間= 10ナノ秒 + 100ナノ秒 = 110ナノ秒TLBミス時 (確率 10%) の処理時間: TLBを参照するが見つからず、その後主記憶上のページテーブルを参照し、物理アドレスを取得し、最後に主記憶にアクセスしてデータを取得します。
TLB参照時間 + ページテーブル参照 (主記憶アクセス1回) + 主記憶アクセス時間= 10ナノ秒 + 100ナノ秒 + 100ナノ秒 = 210ナノ秒
これらの時間をそれぞれの発生確率で重み付けして合計します。
実効アクセス時間 = (TLBヒット時の処理時間 × TLBヒット率) + (TLBミス時の処理時間 × TLBミス率)
ステップ4: 数値の代入と計算
先ほど導出した計算式に数値を代入して計算します。
実効アクセス時間 = (110ナノ秒 × 0.9) + (210ナノ秒 × 0.1)
実効アクセス時間 = 99ナノ秒 + 21ナノ秒
実効アクセス時間 = 120ナノ秒
答え
例題の答えは 120ナノ秒 です。
誤答しやすい理由
この手の問題でよくある間違いは以下の通りです。
- 主記憶アクセス回数の数え間違い: TLBミス時、ページテーブルが主記憶にあることを忘れ、「TLB参照時間 + 主記憶アクセス時間」と計算してしまうケース。正しくは「TLB参照時間 + 主記憶アクセス(ページテーブル) + 主記憶アクセス(データ)」と、主記憶へのアクセスが2回発生します。
- TLB参照時間の重複: TLBミス時にもTLB参照は行われるため、計算から省いてしまう間違い。常にTLBは最初に参照されます。
- 確率の計算ミス: ヒット率とミス率を逆にしてしまったり、小数点以下の処理を間違えたりする。
- 単位の不統一: ナノ秒とマイクロ秒など、異なる単位が混在している場合に変換を忘れる。
Note: 「ページテーブルが主記憶上にある」という記述は非常に大切です。これがTLBミス時の主記憶アクセス回数を決定づけます。
学習の指針
仮想記憶とページングは、OSの根幹をなす技術であり、単なる暗記では応用が利きません。
- 概念の深い理解: 各用語が何を意味し、なぜその機能が必要なのかを、システム全体の中で位置づけて理解しましょう。
- 図解の活用: 仮想アドレスから物理アドレスへの変換プロセスや、ページフォールト発生時の処理フローを、自分で図に書いてみることをお勧めします。視覚的に整理することで、複雑な処理もクリアになります。
- 繰り返し演習と計算ミスの防止: 特に実効アクセス時間の問題は、計算ミスが命取りです。様々なパターンの類題を繰り返し解き、計算過程を丁寧に追う練習をしてください。
- 過去問を通して出題パターンを把握: 仮想記憶とページングに関する問題は、毎年何らかの形で出題されます。過去問を解き、どのような形で問われるのか、頻出のキーワードは何かを把握しましょう。
類題と即答テク
この分野の計算問題はパターンが決まっています。即答テクニックを身につけて、時間短縮を図りましょう。
類題1: TLBヒット率と実効アクセス時間
問題: 主記憶への1回のアクセスに150ナノ秒かかるシステムがあります。TLBへのアクセス時間は20ナノ秒で、TLBヒット率は80%です。ページテーブルは主記憶に格納されている場合、このシステムの実効アクセス時間は何ナノ秒でしょうか。
即答テク: 「ヒット時はTLBアクセス1回 + 主記憶アクセス1回。ミス時はTLBアクセス1回 + 主記憶アクセス(ページテーブル)1回 + 主記憶アクセス(データ)1回。」 これを式に当てはめるだけです。 * ヒット時:20ns + 150ns = 170ns * ミス時:20ns + 150ns + 150ns = 320ns * 実効アクセス時間 = (170ns × 0.8) + (320ns × 0.2) = 136ns + 64ns = 200ns
類題2: ページフォールトを考慮した実効アクセス時間
問題: 主記憶アクセス時間は100ナノ秒です。TLBは利用せず、ページテーブルは主記憶にあります。ページフォールト発生率は0.001%で、1回のページフォールト処理には5ミリ秒かかるとします。このときの実効アクセス時間は何ナノ秒でしょうか?(※TLBは考慮せず、ページテーブル参照からスタートするシンプルなケースを考えます)
即答テク: 「TLBなしの場合、まずページテーブル参照で主記憶アクセス1回、次にデータ取得で主記憶アクセス1回。ページフォールト発生時は、これにページフォールト処理時間を加算し、確率で重み付けする。」 * 通常時のアクセス時間(ページフォールトなし):主記憶アクセス(ページテーブル)1回 + 主記憶アクセス(データ)1回 = 100ns + 100ns = 200ns * ページフォールト時のアクセス時間:通常アクセス時間 + ページフォールト処理時間 * ページフォールト処理時間 = 5ミリ秒 = 5,000,000ナノ秒 * ページフォールト時のアクセス時間 = 200ns + 5,000,000ns = 5,000,200ns * ページフォールト発生率 = 0.001% = 0.00001 * ページフォールト非発生率 = 1 – 0.00001 = 0.99999 * 実効アクセス時間 = (200ns × 0.99999) + (5,000,200ns × 0.00001) * = 199.998ns + 50.002ns * = 250ナノ秒
Note: ページフォールト処理時間は非常に大きいため、発生率がわずかでも実効アクセス時間に大きな影響を与えることに注目してください。ミリ秒とナノ秒の単位換算を忘れずに!
仮想記憶とページングは、コンピュータの限られたリソースを最大限に活用するための、まさに知恵の結晶です。その仕組みを理解することは、システムエンジニアとしてコンピュータを深く理解する第一歩となるでしょう。焦らず、一歩ずつ確実に知識を積み重ねていきましょう!

