2011-08-21 60 views
1

昨天我在高級操作系統類中瞭解到,可以允許放置在就緒隊列中的進程數量是有限制的。我想知道不同操作系統的數量。並且會發生什麼情況當超過這個數字?含義:如果創建的進程數量超過這個數量會怎樣?Linux中Ready Queue的大小是多少?

我想看看通過運行一個小程序,它是

int main() 
{ 
    while(1) 
    system(fork()); 
    return 0; 
} 

系統會立即hung.Can誰能解釋爲什麼我的系統掛起會發生什麼?

回答

1

有些系統沒有限制,只會根據需要繼續附加到正在運行的隊列。有一些選項可以限制系統可以使用的最大進程數,但默認情況下沒有限制(在某些系統上)。在Linux上,您可以更改每個用戶進程的ulimit,如果將其設置爲500或更低,您將會看到該程序不會掛起系統,只會運行並耗費CPU週期來執行不斷的上下文切換。

順便說一下,你在那裏做的事情叫做Fork Bomb,它是一個小的拒絕攻擊,用來在計算機上發起拒絕服務攻擊,這個攻擊對每個用戶的進程沒有限制。

+0

感謝您的解釋。按照Fork Bomb的說法,操作系統是如何知道它是在Form Bomb攻擊下並拒絕服務的?當一個Form Bomb被拋出時,內存會發生什麼? – Ram

+0

有沒有一種簡單的方法來檢查,通常人們做什麼來防止這種情況是對每個用戶的流程設置限制,如上所述。叉式炸彈最終會消耗所有內存,但是系統會掛起,因爲它只是在不做任何處理之間來回切換,而這些處理只是產生更多的進程,因此它在內核模式下花費的時間比在用戶模式下花費的時間多,因此係統有效掛起。 –

相關問題