一、阻塞 VS 掛起
阻塞與掛起都是進程的狀態,但他們有一些相似之處,也有一些區別,下面先對他們進行概述,再進行比較
阻塞:正在執行的進程由於發生某時間(如I/O請求、申請緩沖區失敗等)暫時無法繼續執行。此時引起進程調度,OS把處理機分配給另一個就緒進程,而讓受阻進程處於暫停狀態,一般將這種狀態稱為阻塞狀態。
掛起:由於系統和用戶的需要引入了掛起的操作,進程被掛起意味着該進程處於靜止狀態。如果進程正在執行,它將暫停執行,若原本處於就緒狀態,則該進程此時暫不接受調度。
共同點:
- 進程都暫停執行
- 進程都釋放CPU,即兩個過程都會涉及上下文切換
不同點:
- 對系統資源占用不同:雖然都釋放了CPU,但阻塞的進程仍處於內存中,而掛起的進程通過“對換”技術被換出到外存(磁盤)中。
- 發生的時機不同:阻塞一般在進程等待資源(IO資源、信號量等)時發生;而掛起是由於用戶和系統的需要,例如,終端用戶需要暫停程序研究其執行情況或對其進行修改、OS為了提高內存利用率需要將暫時不能運行的進程(處於就緒或阻塞隊列的進程)調出到磁盤
- 恢復的時機不同:阻塞要在等待的資源得到滿足(例如獲得了鎖)后,才會進入就緒狀態,等待被調度而執行;被掛起的進程由將其掛起的對象(如用戶、系統)在時機符合時(調試結束、被調度進程選中需要重新執行)將其主動激活。
二、轉載與
https://www.jianshu.com/p/5c73bef4565b