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


一、阻塞 VS 掛起

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

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

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

共同點:

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

不同點:

  1. 對系統資源占用不同:雖然都釋放了CPU,但阻塞的進程仍處於內存中,而掛起的進程通過“對換”技術被換出到外存(磁盤)中
  2. 發生的時機不同:阻塞一般在進程等待資源(IO資源、信號量等)時發生;而掛起是由於用戶和系統的需要,例如,終端用戶需要暫停程序研究其執行情況或對其進行修改、OS為了提高內存利用率需要將暫時不能運行的進程(處於就緒或阻塞隊列的進程)調出到磁盤
  3. 恢復的時機不同:阻塞要在等待的資源得到滿足(例如獲得了鎖)后,才會進入就緒狀態,等待被調度而執行;被掛起的進程由將其掛起的對象(如用戶、系統)在時機符合時(調試結束、被調度進程選中需要重新執行)將其主動激活。

二、轉載與

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM