2015-10-28 151 views
1

n分叉之後是否有一個封閉的表格來計算進程總數?例如,對於類似的東西:分叉公式?

int main() 
{ 
fork(); 
fork(); 
fork(); 
} 

我想出了公式n(n+1)/2 + n-1。如上所述,當n = 3時,正確答案爲8。這個公式是否正確?

+2

...但顯然對於n = 1 –

+0

事實上不正確,一個相當簡單的問題,我被混淆了! –

回答

1

對不起,如果操作系統術語在這裏被濫用,我會用'直觀'的話來說明這個案例。

每個叉子都創建兩個過程。因此可以認爲單個fork+2 -1

思考它,我們會得出結論的其他方式,經過nforks已經在所有進程已經完成(根據程序流),以及每次得到的進程調用系統調用exit權利之前有完全二叉樹n每個葉代表一個過程。因此,進程計數將等於2^n

下面是一個簡單的例子(空白rects ---老工藝,綠色rects ---過程調用之前有權_exit): enter image description here