アドレス空間の複製
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