今天我參加了一個關於linux進程的講座。老師說:在fork-exec中如何防止不必要的複製?
- 叉()返回之後,叉EXEC序列是保證防止父進程的內存
通過叉高管序列我的意思是類似的東西:
if(!fork())
{
exec(...);
}
i = 0;
其中,據我所知轉換成這(寫在僞ASM):
call fork
jz next
call exec(...)
next:
load 0
store i
讓我們假設父節點已經被授予了足夠的CPU時間來執行一次運行中的上述所有行。
- 叉返回0,所以第3行被跳過 當0被存儲在「i」的子
- 尚未exec'ed,在 複製(不必要的)親本的存儲器,以便COW踢腿。
那麼在這種情況下如何防止不必要的複製? 它看起來是沒有,但我認爲Linux的開發者足夠聰明來做到這一點;)
可能的答案:孩子總是先運行(父調用fork後preemted()) 1.是真的? 2.如果是,是否確保在所有情況下防止不必要的複製?
我不認爲牛是什麼在這裏扮演的角色。 –