作業系統中使用者態和核心態(系統態)是什麼?使用者態如何變成核心態?

tuonas發表於2020-09-29

使用者態:當程式在執行使用者自己的程式碼時,則稱其處於使用者態,這時cpu 訪問資源有限,執行在使用者態下的程式不能直接訪問作業系統核心資料結構和程式。

核心態:當一個任務(程式)執行系統呼叫而陷入核心程式碼中執行時,我們就稱程式處於核心狀態,這時cpu可以訪問計算機的任何資源。

使用者態變為核心態:

a. 系統呼叫

這是使用者態程式主動要求切換到核心態的一種方式,使用者態程式通過系統呼叫申請使用作業系統提供的服務程式完成工作,比如前例中fork()實際上就是執行了一個建立新程式的系統呼叫。而系統呼叫的機制其核心還是使用了作業系統為使用者特別開放的一箇中斷來實現,例如Linux的int 80h中斷。

b. 異常

當CPU在執行執行在使用者態下的程式時,發生了某些事先不可知的異常,這時會觸發由當前執行程式切換到處理此異常的核心相關程式中,也就轉到了核心態,比如缺頁異常。

c. 外圍裝置的中斷

當外圍裝置完成使用者請求的操作後,會向CPU發出相應的中斷訊號,這時CPU會暫停執行下一條即將要執行的指令轉而去執行與中斷訊號對應的處理程式,如果先前執行的指令是使用者態下的程式,那麼這個轉換的過程自然也就發生了由使用者態到核心態的切換。比如硬碟讀寫操作完成,系統會切換到硬碟讀寫的中斷處理程式中執行後續操作等。

相關文章