【ぺーじんぐ】

ページング とは?

💡 メモリを「ページ単位」で管理する仮想メモリの仕組み、物理メモリ不足をディスクで補う
📌 このページのポイント
ページングの仕組み 仮想ページ Page 0 Page 1 Page 2 Page 3 ページテーブル 0 → Frame 2 1 → Frame 0 2 → Frame 3 3 → Disk 物理メモリ(RAM) Frame 0 Frame 1(空) Frame 2 Frame 3 ディスク (スワップ) Page 3 アクセス時 → ページフォルト発生 ディスクからRAMへ読み込みが必要
ページングの仕組み
ひよこ ひよこ

ページングって何をするの?

ペンギン先生 ペンギン先生

メモリを「ページ」という固定サイズ(通常4KB)に分割して管理する仕組みだよ。物理メモリが不足したら、使っていないページをディスクのスワップ領域に退避させて空きを作る。仮想メモリの基本技術。

ひよこ ひよこ

スラッシングって何?

ペンギン先生 ペンギン先生

ページングが頻繁に起きすぎてPCが超遅くなる状態。メモリが足りないのにアプリを大量に開くと、常に「ディスクに退避→読み込み→また退避」を繰り返してHDD/SSDのアクセスが爆発的に増えてまともに動かなくなる。

ひよこ ひよこ

ページネーション」(画面の次へ)と何か関係あるの?

ペンギン先生 ペンギン先生

名前は同じ「ページ」から来てるけど別概念。Webのページネーションは「大量の表示データを複数のページに分割して表示する」UIの仕組み。メモリ管理のページングとは無関係だよ。

ひよこ ひよこ

メモリが足りなくなったらどうなるの?

ペンギン先生 ペンギン先生

まずOSがスワップ領域を使って「使っていないページを退避→必要なページを読み込み」を繰り返す。それでも足りなくなるとOOM Killer(Out of Memory Killer)がプロセスを強制終了させる。Linuxではメモリを食っているプロセスが予告なく殺されることがあるんだ。

ひよこ ひよこ

怖い!OOM Killerって防げないの?

ペンギン先生 ペンギン先生

完全には防げないけど対策はあるよ。重要なプロセスにoom_score_adjを-1000に設定すれば殺されにくくなる。そもそもスワップが大量に使われている時点で性能は大幅に低下しているから、メモリを十分に確保するか、メモリリークを修正するのが根本対策だね。Docker環境ではメモリの上限を設定して、1つのコンテナが全メモリを食い潰さないようにするのが定石だよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
ページングって出てきたら「メモリをページ単位で管理して仮想メモリを実現するOS技術」と思えばOK!
📖 おまけ:英語の意味
「Paging」 = ページ分割・ページ管理
💬 本のページのように一定サイズの単位でメモリを管理することから。ページの「退避(page out)」と「読み込み(page in)」で仮想メモリを実現する
← 用語集にもどる