1. 程式人生 > 其它 >OS篇:OS中程序的阻塞與掛起的區別

OS篇:OS中程序的阻塞與掛起的區別

一、阻塞 VS 掛起

  阻塞與掛起都是程序的狀態,但他們有一些相似之處,也有一些區別,下面先對他們進行概述,再進行比較

  阻塞:正在執行的程序由於發生某時間(如I/O請求、申請緩衝區失敗等)暫時無法繼續執行。此時引起程序排程,OS把處理機分配給另一個就緒程序,而讓受阻程序處於暫停狀態,一般將這種狀態稱為阻塞狀態。

  掛起:由於系統和使用者的需要引入了掛起的操作,程序被掛起意味著該程序處於靜止狀態。如果程序正在執行,它將暫停執行,若原本處於就緒狀態,則該程序此時暫不接受排程。

共同點:

  1. 程序都暫停執行
  2. 程序都釋放CPU,即兩個過程都會涉及上下文切換

不同點:

  1. 對系統資源佔用不同:雖然都釋放了CPU,但阻塞的程序仍處於記憶體中,而掛起的程序通過“對換”技術被換出到外存(磁碟)中
  2. 發生的時機不同:阻塞一般在程序等待資源(IO資源、訊號量等)時發生;而掛起是由於使用者和系統的需要,例如,終端使用者需要暫停程式研究其執行情況或對其進行修改、OS為了提高記憶體利用率需要將暫時不能執行的程序(處於就緒或阻塞佇列的程序)調出到磁碟
  3. 恢復的時機不同:阻塞要在等待的資源得到滿足(例如獲得了鎖)後,才會進入就緒狀態,等待被排程而執行;被掛起的程序由將其掛起的物件(如使用者、系統)在時機符合時(除錯結束、被排程程序選中需要重新執行)將其主動啟用。

二、轉載與

https://www.jianshu.com/p/5c73bef4565b

本文來自部落格園,作者:Mr-xxx,轉載請註明原文連結:

https://www.cnblogs.com/MrLiuZF/p/15244462.html