コピーオンライト

androidの親玉VMであるZygoteが利用しているLinuxの仕組み。

・コピーオンライトの意味
http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%94%E3%83%BC%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%88
http://itpro.nikkeibp.co.jp/article/Keyword/20070207/261228/

親プロセスのメモリデータをコピーせずに「メモリ空間」を共有することで
・無駄なメモリの確保
・子プロセス生成時間の短縮
を実現している

・共有しているメモリー空間は書き込み禁止が指定されている
・一方のプロセスがそのメモリーの内容を書き換えようとすると,例外が発生する
・この例外処理により,新しいメモリー空間が割り当てられ,そのメモリー空間にデータがコピーされる
・コピーが完了したらメモリー空間の共有が外される
・メモリー空間はページという小さい単位で分割されているため,ページ単位で処理が実行される

・例外を発生させるのはMMU
(コピーオンライトは、MMUに対してプロセスのアドレス空間のある領域がリードオンリーであると通知することで実現する。
その領域にデータを書き込もうとしたとき、MMUは例外を発生し、それをカーネルが処理する。

MMU
1、TLBにヒットするかどうか
2、アクセス違反があるかどうか
この2つのチェックを行う
今回は2番目のほう。

・メモリ保護機能(MMU
http://ja.wikipedia.org/wiki/%E3%83%A1%E3%83%A2%E3%83%AA%E4%BF%9D%E8%AD%B7%E6%A9%9F%E8%83%BD
カーネルは新たな物理ページを確保して、書き込みが行われた領域のマッピングを変更して、
その新たな物理ページに対応させる。

・アクセス権は
ページテーブルエントリ (Page Table Entry ; PTE)
というページの先頭?の数bitの中に設定される

ページテーブルエントリ
http://ja.wikipedia.org/wiki/%E3%83%9A%E3%83%BC%E3%82%B8%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB

ここは勉強する↓
http://www.nminoru.jp/~nminoru/programming/arch/virtual_memory.html#3-2

ページテーブルエントリとは、ページテーブルに格納されている一つ一つのレコードのようなもの