當程序執行系統呼叫而陷入核心**中執行時,我們就稱程序處於核心狀態。此時處理器處於特權級最高的(0級)核心**。當程序處於核心態時,執行的核心**會使用當前的核心棧。每個程序都有自己的核心棧。
當程序執行使用者自己的**時,則稱其處於使用者態。即此時處理器在特權級最低的使用者**中執行。當正在執行使用者程式而突然中斷時,此時使用者程式也可以象徵性地處於程序的核心態。因為中斷處理程式將使用當前程序的核心態。
核心態與使用者態是作業系統的兩種執行級別,跟intel cpu沒有必然聯絡,intel cpu提供ring0-ring3三種級別執行模式,ring0級別最高,ring3級別最低。linux使用了ring3級別執行使用者態。ring0作為核心態,沒有使用ring1和ring2。ring3不能訪問ring0的位址空間,包括**和數量。linux程序的4gb空間,3g-4g部分大家是共享的,是核心態的位址空間,這裡存放在整個核心**和所有的核心模組,以及核心所維護的資料。使用者執行一程式,該程式所建立的程序開始是執行在使用者態的,如果要執行檔案操作,網路資料傳送等操作,必須通過write,send等系統呼叫,這些系統會呼叫核心中的**來完成操作,這時,必須切換到ring0,然後進入3gb-4gb中的核心位址空間去執行這些**完成操作,完成後,切換ring3,回到使用者態。這樣,使用者態的程式就不能隨意操作1核心位址空間,具有一定的安全保護作用
1.系統呼叫
這是使用者程序主動要求切換到核心態的一種方式,使用者程序通過系統呼叫申請作業系統提供的服務程式完成工作。而系統呼叫的機制其核心還是使用了作業系統為使用者特別開放的乙個中斷來實現
2.異常
當cpu在執行執行在使用者態的程式時,發現了某些事件不可知的異常,這是會觸發由當前執行程序切換到處理此異常的核心相關程式中,也就到了核心態
3.外圍裝置的中斷
當外圍裝置完成使用者請求的操作之後,會向cpu發出相應的中斷訊號,這時cpu會暫停執行下一條將要執行的指令轉而去執行中斷訊號的處理程式,如果先執行的指令是使用者態下的程式,那麼這個轉換的過程自然也就發生了有使用者態到核心態的切換
具體的切換步驟
1.從當前程序的描述符中提取其核心棧的ss0及esp0資訊。
2.使用ss0和esp0指向的核心棧將當前程序的cs,eip,eflags,ss,esp資訊儲存起來,這個過程也完成了由使用者棧找到核心棧的切換過程,同時儲存了被暫停執行的程式的下一條指令。
3.將先前由中斷向量檢索得到的中斷處理程式的cs,eip資訊裝入相應的暫存器,開始執行中斷處理程式,這時就轉到了核心態的程式執行了。
Linux使用者態和核心態
一 unix linux的體系架構 如上圖所示,從巨集觀上來看,linux作業系統的體系架構分為使用者態和核心態 或者使用者空間和核心 核心從本質上看是一種軟體 控制計算機的硬體資源,並提供上層應用程式執行的環境。使用者態即上層應用程式的活動空間,應用程式的執行必須依託於核心提供的資源,包括cpu資...
Linux 核心態和使用者態
1.核心態 當乙個任務 程序 執行系統呼叫而陷入核心 中執行時,我們就稱程序處於核心執行態 或簡稱為核心態 此時處理器處於特權級最高的 0級 核心 中執行。當程序處於核心態時,執行的核心 會使用當前程序的核心棧。每個程序都有自己的核心棧。2.使用者態 當程序在執行使用者自己的 時,則稱其處於使用者執...
Linux 使用者態和核心態
系統呼叫是通向作業系統本身的介面,是面向底層硬體的。通過系統呼叫,可以使得使用者態執行的程序與硬體裝置 如cpu 磁碟 印表機等 進行互動,是作業系統留給應用程式的乙個介面。由作業系統實現 執行時,需要從使用者態切換到核心態 使用者態 當乙個程序在執行使用者自己的 時處於使用者執行態 使用者態 此時...