原文:https://blog.csdn.net/xpy870663266/article/details/78164506
阻塞 VS 掛起
阻塞與掛起都是進(jìn)程的狀態(tài),但他們有一些相似之處,也有一些區(qū)別,下面先對他們進(jìn)行概述,再進(jìn)行比較
阻塞:正在執(zhí)行的進(jìn)程由于發(fā)生某時(shí)間(如I/O請求、申請緩沖區(qū)失敗等)暫時(shí)無法繼續(xù)執(zhí)行。此時(shí)引起進(jìn)程調(diào)度,OS把處理機(jī)分配給另一個(gè)就緒進(jìn)程,而讓受阻進(jìn)程處于暫停狀態(tài),一般將這種狀態(tài)稱為阻塞狀態(tài)。
掛起:由于系統(tǒng)和用戶的需要引入了掛起的操作,進(jìn)程被掛起意味著該進(jìn)程處于靜止?fàn)顟B(tài)。如果進(jìn)程正在執(zhí)行,它將暫停執(zhí)行,若原本處于就緒狀態(tài),則該進(jìn)程此時(shí)暫不接受調(diào)度。
共同點(diǎn):
- 進(jìn)程都暫停執(zhí)行
- 進(jìn)程都釋放CPU,即兩個(gè)過程都會涉及上下文切換
不同點(diǎn):
- 對系統(tǒng)資源占用不同:雖然都釋放了CPU,但阻塞的進(jìn)程仍處于內(nèi)存中,而掛起的進(jìn)程通過“對換”技術(shù)被換出到外存(磁盤)中。
- 發(fā)生時(shí)機(jī)不同:阻塞一般在進(jìn)程等待資源(IO資源、信號量等)時(shí)發(fā)生;而掛起是由于用戶和系統(tǒng)的需要,例如,終端用戶需要暫停程序研究其執(zhí)行情況或?qū)ζ溥M(jìn)行修改、OS為了提高內(nèi)存利用率需要將暫時(shí)不能運(yùn)行的進(jìn)程(處于就緒或阻塞隊(duì)列的進(jìn)程)調(diào)出到磁盤
- 恢復(fù)時(shí)機(jī)不同:阻塞要在等待的資源得到滿足(例如獲得了鎖)后,才會進(jìn)入就緒狀態(tài),等待被調(diào)度而執(zhí)行;被掛起的進(jìn)程由將其掛起的對象(如用戶、系統(tǒng))在時(shí)機(jī)符合時(shí)(調(diào)試結(jié)束、被調(diào)度進(jìn)程選中需要重新執(zhí)行)將其主動激活