忍者ブログ
情報処理技術者試験の合格を目指す全受験者のための、1問1問「徹底解説」ブログです。単なる過去問の暗記ではなく、なぜその答えになるのかを本質的に理解できるよう解説します。書籍などでは学べない最新用語やトレンドを踏まえてご紹介します。

【システム構成】書き換えるまでコピーを後回し!「Copy on Write(CoW)」|情報処理問題1000本ノック

OSが新しいプロセスを作る際、メモリを丸ごとコピーするのは非常に重い処理になります。その無駄を極限まで削る、省エネかつ高速なメモリ管理技術を攻略しましょう。

1. 【 問題 】:OSのメモリ管理とプロセス生成

【 問題 】 Linuxなどのオペレーティングシステム(OS)において、あるプロセスから新しい子プロセスを生成(fork)する際、最初は親プロセスのメモリ空間(データ)を新しいメモリ領域にコピーせず、同じ領域への参照(リンク)のみを共有させ、その後、いずれかのプロセスがデータを「書き換えた(変更した)時点」で初めて、その変更されたメモリページのみを別領域にコピーする方式はどれでしょうか?

① ページイン (Page-in)
② メモリマップド I/O (Memory-Mapped I/O)
③ コピーオンライト (Copy on Write / CoW)
④ スワッピング (Swapping)

2. 正解:

正解: ③ コピーオンライト(Copy on Write / CoW)

3. 解説:「必要になるまで仕事をサボる」賢いアルゴリズム

新しいプロセスを作る時、親が持っている膨大なメモリデータをすべて複製(コピー)しようとすると、メモリが大量に消費され、CPUの処理時間も奪われてしまいます。これを「遅延評価(あと回し)」で解決するのがコピーオンライト(CoW)です。

【コピーオンライト(CoW)の劇的なメリット】

・子プロセスを作った直後は、親も子も「全く同じデータ(読み取り専用)」を見ているため、メモリ空間にリンクを貼る(参照を共有する)だけで済ませ、コピーは一切行いません
・多くのケースでは、子プロセスは生成された後、すぐに別のプログラムを実行(exec)して自分のメモリを上書きするため、実は「親のデータのコピー」は無駄になることが多いのです。
・もし、親子どちらかのプロセスがデータを「書き換えよう(Writeしよう)」としたら、OSがそれを検知して、その書き換える部分(ページ)だけを急いで別メモリに複製(Copy)し、お互いのデータを独立させます。← ココが問題の核心!
[ 選択肢のひっかけポイント(すべてOS・メモリ関連用語) ]
★ ① ページイン:仮想記憶において、必要になったプログラムやデータを磁気ディスクから主記憶(メインメモリ)に読み込む動作のことです。
★ ② メモリマップド I/O:CPUが外部の周辺機器(I/O装置)にアクセスする際、特定のメモリ番地(アドレス)に機器を割り当て、通常のメモリ読み書きと同じ命令で制御する方式です。
★ ④ スワッピング:主記憶の空き容量が不足した際、プロセス丸ごと単位で一時的に磁気ディスク(退避領域)へと追い出したり(スワップアウト)、戻したり(スワップイン)するメモリ管理の手法です。

1. 理解のコツ: 「書類の共有」に例えてみましょう。部下に「この資料を参考に仕事をして」と渡すとき、最初から何百ページもある資料をコピーして配るのは紙の無駄(メモリの無駄)ですよね。だから最初は「オフィスの共有サーバーにある同じファイルを読んで(リンク)」と指示します。そして、部下が「自分の担当部分だけ数値を書き換えたいです」と言ったその時に初めて、そのページだけを複製して編集させる。この「書き換えるタイミング(On Write)でコピー(Copy)する」という仕組みがコピーオンライトです。
2. 試験対策の視点: 「子プロセスの生成時」「最初はコピーせずにリンク(共有)」「変更があった時にメモリのコピーを行う」という記述があればコピーオンライトが一択です。基本情報や応用情報の午前試験だけでなく、近年の仮想化技術(Dockerなどのコンテナや、仮想マシンのスナップショット機能)の裏側で動いている基本原理としても非常によく狙われる重要トレンドキーワードです。


4. まとめ

「プロセスの生成を高速化するため、メモリの複製を極限まで後回しにし、データの書き換えが発生した瞬間に対象部分だけをコピーする合理的なメモリ管理技術」。これがコピーオンライト(CoW)です。この仕組みのおかげで、現代のOSはマルチタスク(大量のプロセス起動)を驚くほど軽量かつ一瞬で行うことができています。


PR