Mac OS Xのカーネル Xnuのメモ書き

アドレス空間の複製


Rev.6を表示中。最新版はこちら

作成中

fork()でプロセスを生成する場合、vm_map_fork()でアドレス空間をコピーする。

この時、アドレス空間は複製するが物理ページは複製されずfork()元のプロセスと共有し、ページへ書込みを行なった時点で複製される(Copy On Write)。

物理ページはCopy On Writeで共有するが、vm_map_fork()ですぐにはShadow Objectを作成はしない。vm_map_fork()直後ではvm_map_entryのみ複製させてvm_objectは直接共有している(図1)。ただし、Shadow Objectを作成すべきvm_map_entryにはneeds_copy


図1 vm_map_fork()直後



図2 プロセスAのShadow Objectが作成された状態


図3 プロセスBのShadow Objectが作成された状態



図4 Page AにWriteして Copy On Wirteされた状態

[関連ページ]
vmmap
VM Object


最終更新 2006/06/11 23:57:59 - kztomita
(2006/06/11 17:50:38 作成)
添付ファイル
vmmapfork1.png - kztomita
vmmapfork2.png - kztomita
vmmapfork3.png - kztomita


最近更新したページ