引起掛起狀態的原因有如下幾方面:
(1)終端用戶的請求。當終端用戶在自己的程式運行期間發現有可疑問題時,希望暫停使自己的程式靜止下來。亦即,使正在執行的進程暫停執行;若此時用戶進程正處於就緒狀態而未執行,則該進程暫不接受調度,以便用戶研究其執行情況或對程式進行修改。我們把這種靜止狀態成為“掛起狀態”。
(2)父進程的請求。有時父進程希望掛起自己的某個子進程,以便考察和修改子進程,或者協調各子進程間的活動。
(3)負荷調節的需要。當實時系統中的工作負荷較重,已可能影響到對實時任務的控制時,可由系統把一些不重要的進程掛起,以保證系統能正常運行。
(4)作業系統的需要。作業系統有時希望掛起某些進程,以便檢查運行中的資源使用情況或進行記賬。
(5)對換的需要。為了緩和記憶體緊張的情況,將記憶體中處於阻塞狀態的進程換至外存上。
例如:
程式正在處理一個任務A,
這時候優先權更高的任務B來了,不能同時處理A和B
那么就切換到B,進行處理,同時,掛起A,