---
# System prepended metadata

title: Process Creation
tags: [OS]

---

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`