進程的狀態有:運行態,就緒台,阻塞態。如下圖示:
注意區別就緒狀態和等待狀態:就緒狀態是指進程僅缺少cpu,只要獲得cpu資源就立即執行;而等待狀態是指進程需要其他資源(除了cpu)或等待某一事件。
用戶態和核心態的區別。
當一個任務(進程)執行系統調用而陷入內核代碼中執行時,我們就稱進程處於內核運行態(或簡稱為內核態)。此時處理器處於特權級最高的(0級)內核代碼中執行。當進程處於內核態時,執行的內核代碼會使用當前進程的內核棧。每個進程都有自己的內核棧。
當進程在執行用戶自己的代碼時,則稱其處於用戶運行態(用戶態)。即此時處理器在特權級最低的(3級)用戶代碼中運行。當正在執行用戶程序而突然被中斷程序中斷時,此時用戶程序也可以象征性地稱為處於進程的內核態。因為中斷處理程序將使用當前進程的內核棧。這與處於內核態的進程的狀態有些類似。
用戶態切換到內核態的3種方式:系統調用、異常、外圍設備中斷。