TL

コピーオンライト(CoW)

コピーオンライトは、コピーを要求された時点では実体を共有し、書き込みが起きた瞬間に初めて複製する遅延戦略です。fork やスナップショットを高速・省メモリにします。

中級コピーオンライトメモリ管理forkOS最終更新: 2026-06-06
TL;DR要点だけ先に
  • 1.コピーオンライト(CoW)は、複製要求時はデータを共有し、書き込み時に初めてコピーする仕組みです。
  • 2.読むだけなら共有のままなので、複製のコストとメモリを大きく節約できます。
  • 3.fork によるプロセス生成、ファイルシステムやVMのスナップショットなどで広く使われます。

コピーオンライトとは

コピーオンライト(Copy-on-Write、CoW) は、「コピーして」と頼まれても すぐには複製せず、実体を共有したままにしておく 戦略です。そして、どちらかが書き込もうとした瞬間 に初めて、その部分を本物にコピーします。

発想の出発点は、「多くのコピーは 作られるだけで、結局書き換えられない」という観察です。読むだけなら全員が同じ実体を見ても問題ありません。だったら 書き込みが実際に起きるまでコピーを遅らせれば、無駄な複製を丸ごと省けます。

“書くまでコピーしない”が肝

CoW は複製のコストを「コピーした瞬間」ではなく「初めて書き込んだ瞬間」へ後ろ倒しします。読み取りしかしない利用者にとっては、複製コストが実質ゼロになります。

仕組み:共有と書き込み時の分岐

メモリにおける CoW は、仮想記憶のページ単位 で動きます(前提は 仮想記憶(ページング))。

  1. コピー時、新旧どちらも 同じ物理ページ を指すようにする
  2. そのページを 読み取り専用 に設定する
  3. どちらかが書き込もうとすると、ハードウェアが ページフォルト を起こす
  4. OS が割り込み、そのページだけを複製 して書き込み側に専用ページを与える
  5. 以後、両者は別々の実体を持つ
複製直後(共有・読み取り専用):
  プロセスA ─┐
             ├─▶ [物理ページ X](read-only)
  プロセスB ─┘

Bが書き込んだ瞬間:
  プロセスA ───▶ [物理ページ X]
  プロセスB ───▶ [物理ページ X' のコピー](書き換え可)

ポイントは、書き込まれたページだけ が複製されること。触られなかったページは最後まで共有されたままで、メモリを節約できます。

代表的な使われ方

CoW は OS のあちこちで使われています。

用途何を共有するか効果
fork(プロセス生成)親子のメモリ空間巨大プロセスでも一瞬で複製
FS スナップショットディスク上のブロック瞬時に断面を保存できる
VM/コンテナイメージベースイメージ多数のインスタンスで土台を共有

とりわけ有名なのが fork です。fork はプロセスを丸ごと複製しますが、メモリ全体を即コピーすると非常に重い。そこで CoW により親子はページを共有し、どちらかが書き換えた部分だけを後から分けます。

pid_t pid = fork();   /* この時点ではメモリは共有(CoW)*/
if (pid == 0) {
    /* 子が変数に書き込むと、そのページだけ複製される */
}

ファイルシステム(ZFS、Btrfs など)の スナップショット も同じ発想です。断面を取る瞬間はブロックを共有し、その後変更されたブロックだけを新しく書くので、スナップショット作成が一瞬で済みます。

メリットと注意点

利点は明確です。

  • 複製が速い:実体をコピーしないので、サイズに関係なく一瞬
  • メモリ/容量を節約:書き換えられない部分は共有のまま

一方で、コストが消えるわけではなく 後ろにずれる だけです。

書き込み時にコストとメモリ増が発生する

共有していたデータへ初めて書き込む瞬間に、ページフォルトと複製の処理が走ります。複製した分メモリ使用量も増えるため、「fork 直後は軽いのに、子が書き込みを始めた途端にメモリが膨らむ」といった挙動が起こり得ます。CoW は万能ではなく、コストの先送りだと理解しておきましょう。

まとめ

  • CoW は、複製要求時は 実体を共有 し、書き込み時に初めてコピー する遅延戦略。
  • メモリでは ページ単位 で動き、書き込みを ページフォルト で検知して該当ページだけ複製する。
  • fork・スナップショット・VM イメージ など、複製を高速・省メモリにしたい場面で活躍する。
  • コストは消えず 書き込み時へ先送り される点に注意。

前提知識は 仮想記憶(ページング)、プロセス生成は プロセスとスレッド も参照してください。

OS Article

コピーオンライト(CoW)を実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

コピーオンライト

比較で見る軸

難易度: intermediate / カテゴリ: OS / タグ数: 4

導入後に効く点

読むだけなら共有のままなので、複製のコストとメモリを大きく節約できます。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
intermediate
カテゴリ
OS
タグ数
4

判断チェックリスト

  • 自社の用途が「コピーオンライト / メモリ管理」に近いか確認する。
  • 強みである「コピーオンライト(CoW)は、複製要求時はデータを共有し、書き込み時に初めてコピーする仕組みです。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

コピーオンライトメモリ管理forkOSコピーオンライトメモリ管理forkOS
参考: 公式情報