OS篇:OS中程序的阻塞與掛起的區別
阿新 • • 發佈:2021-09-08
一、阻塞 VS 掛起
阻塞與掛起都是程序的狀態,但他們有一些相似之處,也有一些區別,下面先對他們進行概述,再進行比較
阻塞:正在執行的程序由於發生某時間(如I/O請求、申請緩衝區失敗等)暫時無法繼續執行。此時引起程序排程,OS把處理機分配給另一個就緒程序,而讓受阻程序處於暫停狀態,一般將這種狀態稱為阻塞狀態。
掛起:由於系統和使用者的需要引入了掛起的操作,程序被掛起意味著該程序處於靜止狀態。如果程序正在執行,它將暫停執行,若原本處於就緒狀態,則該程序此時暫不接受排程。
共同點:
- 程序都暫停執行
- 程序都釋放CPU,即兩個過程都會涉及上下文切換
不同點:
- 對系統資源佔用不同:雖然都釋放了CPU,但阻塞的程序仍處於記憶體中,而掛起的程序通過“對換”技術被換出到外存(磁碟)中
- 發生的時機不同:阻塞一般在程序等待資源(IO資源、訊號量等)時發生;而掛起是由於使用者和系統的需要,例如,終端使用者需要暫停程式研究其執行情況或對其進行修改、OS為了提高記憶體利用率需要將暫時不能執行的程序(處於就緒或阻塞佇列的程序)調出到磁碟
- 恢復的時機不同:阻塞要在等待的資源得到滿足(例如獲得了鎖)後,才會進入就緒狀態,等待被排程而執行;被掛起的程序由將其掛起的物件(如使用者、系統)在時機符合時(除錯結束、被排程程序選中需要重新執行)將其主動啟用。
二、轉載與
https://www.jianshu.com/p/5c73bef4565b
本文來自部落格園,作者:Mr-xxx,轉載請註明原文連結: https://www.cnblogs.com/MrLiuZF/p/15244462.html