仮想記憶とは(全体像)
仮想記憶は、実際に積んでいるメモリより大きなプログラムを動かせるようにするしくみ。足りない分はディスク(スワップ領域)を一時的なメモリ代わりに使う。
身近な例が図書館。手元の机(実際のメモリ)に置ける本は限られるが、書庫(ディスク)に大量の本がある。必要な本を机に運び、使い終わったら書庫に戻す——こうして机より多くの本を扱える。
ここで大事なのは、仮想記憶は「ただディスクに逃がすだけ(スワップ)」ではないこと。本質は、プログラムから見える住所と本当の住所を分けて対応づける(アドレス変換)ことと、プロセスごとに住所空間を分ける(プロセス分離)ことにある。
詳しく:ページング・TLB・スラッシングだけ覚えれば戦える
ここが記事の心臓部。まず住所を変換するしくみから。
仮想記憶のしくみ(ページング)
| 用語 | 役割 | 図書館のたとえ |
|---|---|---|
| ページ | メモリを区切る固定サイズの単位(典型4KB) | 本1冊 |
| ページテーブル | 論理アドレス→物理アドレスの変換表 | 本の置き場所リスト |
| MMU | 変換を行うCPU内のしくみ | 場所を調べる図書館員 |
毎回この変換表をたどると遅い。そこで活躍するのがTLBだ。
TLBとページフォルト
| 用語 | 内容 |
|---|---|
| TLB | 最近の変換結果を覚えておく小さく速いメモリ(変換のキャッシュ) |
| ページフォルト | 必要なページがメモリになく、ディスクから運ぶときに起きる(重い) |
TLBは「よく使う本の置き場所をメモに控えておく」ようなもの。メモにあれば一瞬で分かり、なければ置き場所リスト(ページテーブル)を調べる。TLBに当たる割合(ヒット率)が高いほど速い。
問題が起きるのは、メモリが足りないとき。
スラッシング
| 用語 | 内容 |
|---|---|
| スラッシング | メモリ不足でページフォルトが頻発し、ディスクの出し入ればかりで処理が進まない状態 |
| 対策 | メモリを増やす・不要なプログラムを終える |
つまり、机(メモリ)が小さすぎると、本の出し入れに追われて作業が進まない。これがスラッシングだ。バグではなく、メモリ不足による性能の落ち込みという点が頻出、というわけだね。
わかりやすく言い換えると
要するに、仮想記憶は「机に乗らない量の本も、書庫を使って扱えるようにする」しくみだ。
①アドレス変換 … 見える住所と本当の住所を分けて対応づける(図書館員=MMU)
②TLB … よく使う変換をメモに控えて速くする(変換のキャッシュ)
③スラッシング … 机が小さすぎて出し入れに追われ、進まなくなる現象(メモリ不足)
「仮想記憶はただのスワップではない」「スラッシングはバグではない」だけは取り違えやすい。
試験のツボ
🔴 一番出る:仮想記憶の本質
①実メモリを超えてプログラムを動かせる
②本質はアドレス変換+プロセス分離(単なるスワップではない)
🔴 次に出る:TLBの役割
①ページテーブルの変換結果を覚える速いメモリ(キャッシュ)
②ヒット率が高いほど速い
🟡 押さえると安定:スラッシング
①メモリ不足でページフォルトが頻発し処理が進まない
②バグではなく性能劣化の現象。対策はメモリを増やすなど
よくある間違い
①「仮想記憶はただのスワップと同じ」→ ✗ スワップは一機能。本質はアドレス変換とプロセス分離。
②「スラッシングはプログラムのバグ」→ ✗ メモリ不足で起きる性能の落ち込み。バグではない。
③「TLBはディスクのこと」→ ✗ TLBは変換結果を覚えるCPU近くの速いメモリ。ディスクではない。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(仮想記憶の本質)
仮想記憶に関する次の記述のうち、正しいものはどれか。
- 仮想記憶はメモリを使わず、すべての処理をディスクだけで行うしくみとされている
- 仮想記憶は実メモリを超えて動かすしくみで、本質はアドレス変換とプロセス分離だ
- 仮想記憶はプログラムの住所をいっさい変換せず、物理アドレスだけを使うものだ
- 仮想記憶は実メモリより小さなプログラムしか動かせないものと決められている
解答は 2 である。
仮想記憶は実メモリを超えて動かすしくみで、本質はアドレス変換とプロセス分離なのだ。ただのスワップではないことが大事なるぞ。
選択肢1の「ディスクだけ」、選択肢3の「変換しない」、選択肢4の「小さいものだけ」はどれも誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | メモリも使う |
| 2 | ✓ | 容量超え+アドレス変換+分離 |
| 3 | ✗ | 住所を変換する |
| 4 | ✗ | 実メモリを超えて動かせる |
オリジナル問題2(TLBの役割)
TLBに関する次の記述のうち、正しいものはどれか。
- TLBはディスクそのものを指す言葉で、変換とはなんの関係もないものとされている
- TLBは変換をかえって遅くするための部品で、ない方が速くなるものとされている
- TLBはページテーブルの変換結果を覚える速いメモリで、ヒット率が高いほど速い
- TLBはプログラムの命令を保存する装置で、アドレス変換にはいっさい関わらない
解答は 3 である。
TLBはページテーブルの変換結果を覚える速いメモリ(変換のキャッシュ)で、ヒット率が高いほど速いのだ。よく使う変換をメモに控える図書館員のようなものなるぞ。
選択肢1の「ディスク」、選択肢2の「遅くする」、選択肢4の「命令を保存」はどれも誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 変換のキャッシュ |
| 2 | ✗ | 変換を速くする |
| 3 | ✓ | 変換結果を覚える速いメモリ |
| 4 | ✗ | アドレス変換に関わる |
オリジナル問題3(スラッシング)
スラッシングに関する次の記述のうち、正しいものはどれか。
- スラッシングはメモリ不足でページフォルトが頻発し、処理が進まなくなる現象だ
- スラッシングはプログラムのバグの一種で、コードを直せば必ずなくせるものとされる
- スラッシングはメモリが十分なときにだけ起こる、性能が上がる現象のことである
- スラッシングはディスクとは無関係で、メモリを増やしても直らないものとされている
解答は 1 である。
スラッシングはメモリ不足でページフォルトが頻発し、処理が進まなくなる現象なのだ。机が小さすぎて出し入れに追われる状態なるぞ。
選択肢2の「バグ」、選択肢3の「メモリ十分で性能向上」、選択肢4の「メモリを増やしても直らない」はどれも誤りである。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | メモリ不足での性能劣化 |
| 2 | ✗ | バグではない |
| 3 | ✗ | メモリ不足で起き性能は落ちる |
| 4 | ✗ | メモリ増設が対策になる |
まとめ
押さえどころ
- 🔴 本質 = 実メモリを超えて動かす。アドレス変換+プロセス分離(ただのスワップではない)。
- 🔴 TLB = 変換結果を覚える速いメモリ(キャッシュ)。ヒット率が高いほど速い。
- 🟡 スラッシング = メモリ不足でページフォルトが頻発し処理が進まない現象。バグではない。
次に学ぶ
- キャッシュメモリ ── TLBと同じ「よく使うものを近くに置いて速くする」考え方の代表。
- CPUアーキテクチャ ── 仮想記憶の変換を行うMMUを含む、CPUの全体構成がつかめる。
執筆: SikakuQuest編集部