問題#
仮想記憶方式において、論理アドレスから物理アドレスへの変換を行うのはいつか。
選択肢
- ページを補助記憶にページアウトするとき
- ページフォールトが発生したとき
- 主記憶に存在するページをアクセスするとき
- ページを主記憶にページインするとき
正解:主記憶に存在するページをアクセスするとき#
基本的な仕組み#
論理アドレスから物理アドレスへの変換は、CPUがメモリアクセスを行うたびに実行されます。
- 担当ハードウェア: MMU(メモリ管理ユニット)
- 使用する対応表: ページテーブル
- 実行タイミング: 主記憶上のページへアクセスするとき(毎回)
- 処理速度: 高速(ハードウェア処理)
他の選択肢が不正解な理由#
ページアウト#
- 主記憶の空き容量確保のため、使用頻度の低いページを補助記憶に退避する処理
- OSによるメモリ管理動作であり、アドレス変換処理そのものではない
ページフォールト#
- アドレス変換を試みた結果、失敗したときに発生する例外(割り込み)
- 変換が行われるタイミングではなく、変換失敗の結果発生する事象
ページイン#
- ページフォールト発生後、補助記憶から主記憶にページを読み込む処理
- ページイン完了後に、改めてアドレス変換が行われる
Q&A:よくある誤解#
Q1. ページイン・ページアウトでも変換が発生する?#
A. いいえ、厳密には異なります。
アドレス変換はCPUの命令実行に伴う処理であり、ページイン・ページアウトの最中に行われるわけではありません。
Q2. アドレス変換失敗時の処理フロー#
A. はい、以下の流れで処理されます。
アドレス変換失敗
↓
ページフォールト発生
↓
OS介入(ページイン処理)
↓
変換成功(メモリアクセス実行)
詳細:各処理とアドレス変換の関係#
アドレス変換が行われるタイミング#
CPUがプログラムを実行し、メモリアクセスするたびにMMUが論理アドレスを物理アドレスに変換します。これは主記憶上のページが存在する場合に毎回実行される高速処理です。
ページインとアドレス変換#
ページインはアドレス変換の失敗がきっかけで発生します。
- CPUが論理アドレスにアクセス → MMUがアドレス変換を試行
- ページが主記憶に存在しない → 変換失敗 → ページフォールト発生
- OSが補助記憶装置から必要なページを主記憶に読み込む(ページイン)
- ページテーブル更新
- 中断していた命令を再開 → MMUが再度アドレス変換を試行 → 成功
ページアウトとアドレス変換#
ページアウトは、ページインのための空き領域確保を目的としたOSのメモリ管理動作です。
- ページフォールト発生 → ページイン必要 → 主記憶に空きがない
- OSがページの置き換え対象を決定
- 選ばれたページを補助記憶装置に書き出す(ページアウト)
CPUによるアドレス変換処理そのものではありません。
まとめ#
| 処理 | 役割 | アドレス変換との関係 |
|---|---|---|
| アドレス変換 | MMUによる論理→物理アドレス変換 | 主記憶アクセス時に毎回実行 |
| ページフォールト | アドレス変換失敗時の例外 | 変換失敗の結果 |
| ページイン | 補助記憶→主記憶へのページ読み込み | 完了後に変換が再実行される |
| ページアウト | 主記憶→補助記憶へのページ退避 | 変換処理ではない(メモリ管理) |
仮想記憶の処理フロー#
1. アドレス変換の試行
├─ 成功 → メモリアクセス実行
└─ 失敗 → 2へ
2. ページフォールト発生(例外割り込み)
└─ OSに制御移行
3. OS処理
├─ ページ検索(補助記憶装置)
├─ 空き領域確保(必要なら4へ)
└─ ページイン実行
4. ページアウト(空き容量不足時)
├─ 置き換え対象選択
└─ 補助記憶へ退避
5. ページテーブル更新
6. 処理再開 → 1へ戻る(今度は成功)
重要ポイント: ページイン・ページアウトは、アドレス変換を円滑に動かすためのOSによる裏方の管理作業です。