用戶態和核心態的區別

1.操作系統需要兩種CPU狀態:

內核態(Kernel Mode):運行操作系統程序

用戶態(User Mode):運行用戶程序

2.指令劃分:

特權指令:只能由操作系統使用、用戶程序不能使用的指令。  舉例:啓動I/O   內存清零  修改程序狀態字  設置時鐘    允許/禁止終端   停機

非特權指令:用戶程序可以使用的指令。  舉例:控制轉移  算數運算  取數指令   訪管指令(使用戶程序從用戶態陷入內核態)

3.特權級別:

特權環:R0、R1、R2和R3

R0相當於內核態,R3相當於用戶態;

不同級別能夠運行不同的指令集合;

4.CPU狀態之間的轉換:

用戶態--->內核態:唯一途徑是通過中斷、異常、陷入機制(訪管指令)

內核態--->用戶態:設置程序狀態字PSW

5.內核態與用戶態的區別:

1)內核態與用戶態是操作系統的兩種運行級別,當程序運行在3級特權級上時,就可以稱之爲運行在用戶態。因爲這是最低特權級,是普通的用戶進程運行的特權級,大部分用戶直接面對的程序都是運行在用戶態;

2)當程序運行在0級特權級上時,就可以稱之爲運行在內核態。

3)運行在用戶態下的程序不能直接訪問操作系統內核數據結構和程序。當我們在系統中執行一個程序時,大部分時間是運行在用戶態下的,在其需要操作系統幫助完成某些它沒有權力和能力完成的工作時就會切換到內核態。

4)這兩種狀態的主要差別是

處於用戶態執行時,進程所能訪問的內存空間和對象受到限制,其所處於佔有的處理機是可被搶佔的 ;

而處於核心態執行中的進程,則能訪問所有的內存空間和對象,且所佔有的處理機是不允許被搶佔的。

6. 通常來說,以下三種情況會導致用戶態到內核態的切換:

1)系統調用

這是用戶態進程主動要求切換到內核態的一種方式用戶態進程通過系統調用申請使用操作系統提供的服務程序完成工作。比如前例中fork()實際上就是執行了一個創建新進程的系統調用。

而系統調用的機制其核心還是使用了操作系統爲用戶特別開放的一箇中斷來實現,例如Linux的int 80h中斷。

2)異常

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

3)外圍設備的中斷

當外圍設備完成用戶請求的操作後,會向CPU發出相應的中斷信號,這時CPU會暫停執行下一條即將要執行的指令轉而去執行與中斷信號對應的處理程序,

如果先前執行的指令是用戶態下的程序,那麼這個轉換的過程自然也就發生了由用戶態到內核態的切換。比如硬盤讀寫操作完成,系統會切換到硬盤讀寫的中斷處理程序中執行後續操作等。

這3種方式是系統在運行時由用戶態轉到內核態的最主要方式,其中系統調用可以認爲是用戶進程主動發起的,異常和外圍設備中斷則是被動的。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章