Process Creation === ## Copy-on-Write(Implicity Sharing or Shadowing) **Parent & Child Processes 一開始 Share 一樣的 pages, 當某方要更改其中一個 Page 時, 才把此 Page 複製出來改** 執行 fork() 時, 通常 Child Process 不會一創出來就改動 Memory, 或直接執行其他 Process 導致整個 memory 被 replace, 所以 Copy 整個 Parent Process Memory 其實是很浪費的, 所以 COW 機制才會被用 ## fork() vs vfork() - fork() - 用了 COW 機制, Parent/Child 其中一方要更改 Page 之前, 會先複製一個新的, 避免引響到另一方的記憶體被更動 - 雙方如要溝通, 則需要用其他機制如 Pipe, IPC - vfork() - Child Page Table 與 Parent 一樣, Parent 會被暫停執行直到 Child 呼叫 exec 或 exit, 當 Child Page Table 執行 exec 時, 他的 Memory 就會完全被賦予一個新的空間而不再跟 Parent 有牽連 - Child 還未執行 exec, exit 前, 更改記憶體是不會套用 COW 機制的, 所以使用 vfork() 要注意 Child 改到記憶體是會影響到 Parent 的 # ###### tags: `OS`