FIG-068

仮想メモリ — 机が足りなければ床に下ろす

OS 2026.08.25 公開 読了 約11分

机の上に置ける書類は4冊まで。でも仕事で使う資料は8冊ある――そんなとき人は、いま使わない資料を床(や棚)に下ろして、必要になったら机に戻します。OSがやっている仮想メモリも、まったく同じ片付けです。机が物理メモリ(RAM)、床がスワップ領域(ディスク)にあたります。

プログラムから見えるアドレスは仮想アドレスで、実際にRAMのどこにあるかは知りません。その対応表がページテーブルです。下の図1で仮想ページをクリックして「アクセス」してみてください。机に載っていれば一瞬、載っていなければページフォルトが起きて、古い1枚を床に下ろしてから読み込みます。

VIRTUAL MEMORY — 机は4枠、資料は8冊
仮想ページ プロセスから見えるアドレス
クリックでアクセス
ページテーブル 仮想 → 物理の対応表
pageframevalid
P0 — 0
P1 — 0
P2 — 0
P3 — 0
P4 — 0
P5 — 0
P6 — 0
P7 — 0
物理メモリ (RAM) 机の上 — 4枠だけ
F0 空き
F1 空き
F2 空き
F3 空き
スワップ領域 床 — 遅いが広い
アクセス 0 ヒット 0 ページフォルト 0 スワップアウト 0
READY
仮想ページをクリックしてアクセスする
最初は物理メモリが空っぽで、8枚の仮想ページはすべてディスク上にあります。どれかを押すとページフォルトが起き、空きフレームへ読み込まれます。4枠が埋まったあとも押し続けると、いちばん長く使っていないページが床(スワップ)へ追い出されます。
図1 — 仮想ページはページテーブル経由で物理フレームに結びつく。枠が足りなければ古い1枚がスワップへ下がる

ページフォルトは「エラー」ではない

触ろうとしたページがRAMにない状態をページフォルトと呼びます。名前は物騒ですが異常ではなく、OSに「持ってきて」と頼む正規の合図です。CPUはページテーブルのvalidビットが0なのを見て処理を中断し、OSがディスクから該当ページをフレームへ読み込み、対応表を書き換えてから、何事もなかったように続きを実行します。プログラムは中断に気づきません。

ただしディスクはRAMより桁違いに遅い。だからフレームが満杯のときにどのページを追い出すか(ページ置換)が効いてきます。図1では「いちばん長く使っていないものを追い出す」LRU方式で動かしています。ここで選択を誤り、追い出した直後にまたそのページを触る――が延々と続くと、実処理よりスワップ入れ替えに時間を使うスラッシングに陥ります。メモリ不足のサーバーが「CPUは暇なのに異常に遅い」状態になるのは、たいていこれです。

用語ミニ辞書
ページ / フレーム
仮想メモリを固定長(よく4KB)に区切った単位がページ。RAM側の受け皿がフレーム。
ページテーブル
仮想ページ→物理フレームの対応表。プロセスごとに持つ。valid=0ならRAMにない。
ページフォルト
アクセスしたページがRAMにないこと。OSがディスクから読み込んで処理を再開する。
スワップ
RAMに載りきらないページをディスクへ退避すること。広いが非常に遅い。
スラッシング
スワップの出し入ればかりが起き、処理がほとんど進まなくなる状態。

まとめ

仮想メモリは「アドレスの見え方」と「実際の置き場所」を切り離す仕組みです。プログラムは連続した仮想アドレスを使い、ページテーブルがそれを実際のフレームへ翻訳する。RAMが足りなければ、使っていないページをスワップへ下ろして枠を空ける――だから物理メモリより大きなプログラムも動きます。代償はページフォルト時のディスクアクセスで、これが多発するとスラッシングになる。「速いRAMを、賢い片付けで広く見せている」と捉えるのがいちばん近い理解です。