使用者態和核心態的區別
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種方式是系統在執行時由使用者態轉到核心態的最主要方式,其中
系統呼叫可以認為是使用者程序主動發起的,異常和外圍裝置中斷則是被動的。
2)具體的切換操作
從觸發方式上看,可以認為存在前述3種不同的型別,但是從最終實際完成由使用者態到核心態的切換操作上來說,涉及的關鍵步驟是完全一致的,沒有任何區別,都相當於執行了乙個中斷響應的過程,因為系統呼叫實際上最終是中斷機制實現的,而異常和中斷的處理機制基本上也是一致的,關於它們的具體區別這裡不再贅述。關於中斷處理機制的細節和步驟這裡也不做過多分析,涉及到由使用者態切換到核心態的步驟主要包括:
[1] 從當前程序的描述符中提取其核心棧的ss0及esp0資訊。
[2] 使用ss0和esp0指向的核心棧將當前程序的cs,eip,eflags,ss,esp資訊儲存起來,這個
過程也完成了由使用者棧到核心棧的切換過程,同時儲存了被暫停執行的程式的下一
條指令。
[3] 將先前由中斷向量檢索得到的中斷處理程式的cs,eip資訊裝入相應的暫存器,開始
執行中斷處理程式,這時就轉到了核心態的程式執行了。
核心態和使用者態的區別
核心態與使用者態是作業系統的兩種執行級別,intelcpu提供ring0 ring3三種級別的執行模式。ring0級別最高,ring3最低。當乙個任務 程序 執行系統呼叫而陷入核心 中執行時,我們就稱程序處於核心執行態 或簡稱為核心態 此時處理器處於特權級最高的 0級 核心 中執行。當程序處於核心態...
使用者態和核心態的區別
在cpu的所有指令中,有一些指令是非常危險的,如果錯用,將導致整個系統崩潰。比如 清記憶體 設定時鐘等。如果所有的程式都能使用這些指令,那麼你的系統一天宕機n回就不足為奇了。所以,cpu將指令分為特權指令和非特權指令,對於那些危險的指令,只允許作業系統及其相關模組使用,普通的應用程式只能使用那些不會...
使用者態和核心態的區別
在cpu的所有指令中,有一些指令是非常危險的,如果錯用,將導致整個系統崩潰。比如 清記憶體 設定時鐘等。如果所有的程式都能使用這些指令,那麼你的系統一天宕機n回就不足為奇了。所以,cpu將指令分為特權指令和非特權指令,對於那些危險的指令,只允許作業系統及其相關模組使用,普通的應用程式只能使用那些不會...