ページングとスワップ
仮想メモリをページという固定長の単位で物理メモリに割り当てる方式がページングです。物理に無いページはページフォルトを契機に、足りなければスワップで補います。
- 1.ページングは、メモリをページ(例: 4KB)単位で区切り、仮想ページを物理フレームに対応づける方式です。
- 2.物理メモリに無いページへ触るとページフォルトが起き、OS がディスクから読み込みます。
- 3.物理メモリが足りないときは、使われていないページをディスク(スワップ)へ退避して空けます。
ページングとは
ページングは、メモリを ページ と呼ぶ 固定長のブロック(典型的には 4KB)に区切って管理する方式です。仮想アドレス空間の各ページを、物理メモリ側の同じ大きさの枠 ページフレーム に対応づけます。
「どの仮想ページがどの物理フレームに置かれているか」の対応表が ページテーブル です。アドレスの変換はこう進みます。
仮想アドレス = [ ページ番号 | ページ内オフセット ]
│
▼ ページテーブルを引く(MMU が実行)
物理フレーム番号
│
▼
物理アドレス = [ フレーム番号 | ページ内オフセット ]
オフセット(ページ内の位置)はそのまま使い、上位のページ番号だけを変換 します。固定長で扱うため、空き領域を柔軟に割り当てやすいのが利点です。
なぜページ単位なのか
メモリをプロセスの要求する大きさのまま連続で割り当てると、確保と解放を繰り返すうちに すき間(断片化) が増え、合計は足りても連続した空きが取れなくなります。
ページングは 固定長の枠 に切り分けることで、これを避けます。
- 物理メモリのどの空きフレームにも置ける(連続している必要がない)
- プロセスが見るアドレスは連続でも、物理配置は バラバラでよい
- 使う部分だけ物理に置けばよい
ページ番号からフレーム番号への変換は、メモリアクセスのたびに発生するため、CPU 内蔵の MMU がハードウェアで行い、最近の変換結果を TLB という小さなキャッシュに保持して高速化します。
ページフォルト:物理に無いページへ触ったとき
すべてのページを最初から物理メモリに載せておく必要はありません。プロセスが 物理メモリ上に存在しないページ に触ると、MMU は ページフォルト という例外を発生させ、処理を OS に委ねます。
1. プロセスがページ X にアクセス
2. ページテーブルに「物理に無い」印 → ページフォルト発生
3. OS が割り込んで、空きフレームを確保
(空きが無ければ既存ページを1つ追い出す=ページ置換)
4. 必要ならディスクからページ X を読み込む
5. ページテーブルを更新し、止めた命令を再実行 → 何事もなく続行
追い出すページの選び方を ページ置換アルゴリズム と呼び、最近最も使われていないものを優先する LRU などが基本です。
名前に fault と付きますが、ページフォルトは正常な仕組みの一部です。スワップからの読み戻しのほか、まだ割り当てていないメモリへの初回アクセス(デマンドページング)でも起きます。本当に不正な番地に触れた場合は、別物の セグメンテーション違反 となりプログラムが落ちます。
スワップ:物理が足りないとき
物理メモリに載り切らないページは、OS が ディスク上の領域(スワップ領域 / ページファイル) に退避します。これが スワップ です。当面使われないページをディスクへ逃がして物理メモリを空け、必要になったら読み戻します。
これにより「物理メモリより大きく使えているように見せる」ことができますが、ディスクは主記憶より桁違いに遅いため、スワップが頻発すると一気に重くなります。
| 観点 | ページフォルト | スワップ |
|---|---|---|
| 何を指すか | 物理に無いページへの参照例外 | ページをディスクへ退避する操作 |
| 必ず遅いか | 速い場合もある(メモリ上で完結) | ディスク I/O を伴い遅い |
| 発生契機 | 未割り当て・退避済みページの参照 | 物理メモリの不足 |
物理メモリが足りず「追い出した直後にまた要る」を繰り返す状態を スラッシング と呼びます。CPU が処理よりページの出し入れに忙殺され、システム全体が激しく遅くなります。対策はメモリ増設や、同時に動かす量を減らすことです。
まとめ
- ページングは 仮想ページを物理フレームに対応づける 方式で、断片化を避けつつ柔軟に割り当てられる。
- 物理に無いページへ触ると ページフォルト が起き、OS が読み込む。
- 物理が足りなければ スワップ でディスクへ退避し、物理より大きく見せる(ただし遅い)。
アドレス変換の全体像は 仮想記憶(ページング)、確保・解放の方針は メモリ管理 も合わせてどうぞ。
OS Article
ページングとスワップを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
ページング
比較で見る軸
難易度: intermediate / カテゴリ: OS / タグ数: 4
導入後に効く点
物理メモリに無いページへ触るとページフォルトが起き、OS がディスクから読み込みます。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- intermediate
- カテゴリ
- OS
- タグ数
- 4
判断チェックリスト
- 自社の用途が「ページング / スワップ」に近いか確認する。
- 強みである「ページングは、メモリをページ(例: 4KB)単位で区切り、仮想ページを物理フレームに対応づける方式です。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。