使用者態與核心態的區別與理解

2021-10-22 15:26:42 字數 1647 閱讀 6863

先給大家看看linux程序的位址空間,如下:

1、為什麼需要區分核心空間和使用者空間

在cpu的左右指令中,有些指令是非常危險的,如果錯用,將導致系統崩潰,比如清記憶體、設定時鐘等,如果允許所有的程式都可以使用這些指令,那麼系統崩潰的概率將大大增加。所以,cpu將指令分為特權指令和非特權指令,對於那些危險的指令,只允許作業系統及其相關模組使用,普通應用程式只能使用那些不會造成災難的指令。

2、核心態與使用者態的概念

核心態:系統中既有作業系統的程式,也有普通使用者的程式,為了安全和穩定性作業系統的程式不能隨便訪問。從本質上看是一種軟體,控制計算機的硬體資源,並提供上層應用程式執行的環境。

使用者態:不能直接使用系統資源,也不能改變cpu的工作狀態,並且只能訪問這個使用者程式自己的儲存空間。應用程式的執行必須依託於核心提供的資源,包括cpu資源、儲存資源、i/o資源等。

3、特權級的概念

linux使用了ring3級別執行使用者態,ring0標識核心態。ring0作為核心態,沒有使用ring1和ring2。ring3狀態不能訪問ring0 的位址空間,包括**和資料。0-3級別中,0級特權級最高,3級特權級最低。對於任何作業系統來說,建立乙個程序是核心功能。建立程序要做很多任務作,會消耗很多物理資源,比如分配物理記憶體、父子程序拷貝資訊、拷貝設定頁目錄頁等,這些都是由特定的程序去做,所有就有了上述的特權級別的概念。

4、使用者態和核心態的切換

執行於使用者態的程序可以執行的操作和訪問的資源都會受到極大的限制,而執行在核心態的程序則可以執行任何操作並且在資源的使用上沒有限制。當在系統中執行乙個程式時,大部分時間是執行在使用者態下的,在其需要作業系統幫助完成一些使用者態自己沒有特權和能力完成的操作時就會切換到核心態。以下是使用者態轉換成核心態的幾種方式:

以上三種方式是系統在執行時由使用者態切換到核心態最主要的方式,其中系統呼叫可以認為是使用者程序主動發起的,異常和外圍裝置中斷則是被動的。

5、具體的切換操作

從觸發方式上看,可以認為存在前述3種不同的型別,但是從最終實際完成由使用者態到核心態的切換操作上來說,設計的關鍵步驟是完全一致的,沒有任何區別,都相當於執行了乙個中斷響應的過程,因為系統呼叫實際上最終是中斷機制實現的,而異常和中斷的處理機制基本上也是一致的。使用者態切換到核心態的步驟主要包括:

從當前程序的描述符中提取其核心棧的ss0及esp0資訊。

使用ss0和esp0指向的核心棧將當前程序的cs,eip,eflags,ss,esp資訊儲存起來,這個過程也完成了由使用者棧到核心棧的切換過程,同時儲存了被暫停執行的程式的下一條指令。

將先前由中斷向量檢索得到的中斷處理程式的cs,eip資訊裝入相應的暫存器,開始執行中斷處理程式,這時就轉到了核心態的程式執行了。

6、總結

現代的作業系統大都通過核心空間和使用者空間的設計來保護作業系統自身的安全性和穩定性,本文只是從巨集觀的角度去理解linux使用者態和核心態的設計,並沒有去深究他們的具體實現方式。因為使用者態和核心態之間的切換會消耗大量資源,所有其實現必須考慮的一點就是效能問題。奈何本人才疏學淺,在此處就先不加以贅述,以後肯定會再做詳細講解!

核心態與使用者態的區別

當乙個任務 程序 執行系統呼叫而陷入核心 中執行時,我們就稱程序處於核心執行態 或簡稱為核心態 此時處理器處於特權級最高的 0級 核心 中執行。當程序處於核心態時,執行的核心 會使用當前程序的核心棧。每個程序都有自己的核心棧。當程序在執行使用者自己的 時,則稱其處於使用者執行 態 使用者態 即此時處...

如何理解使用者態與核心態

在cpu的所有指令中,有一些指令是非常危險的,如果錯用,將導致整個系統崩潰。比如 清記憶體 設定時鐘等。如果所有的程式都能使用這些指令,那麼你的系統一天宕機n回就不足為奇了。所以,cpu將指令分為特權指令和非特權指令,對於那些危險的指令,只允許作業系統及其相關模組使用,普通的應用程式只能使用那些不會...

輕鬆理解核心態與使用者態

首先強調一下 核心態與使用者態指的是cpu的狀態 使用者態 只能受限的訪問記憶體 執行操作,是作業系統為了安全的管理計算機系統正常執行。核心態 可以訪問所有的系統資源 磁碟,印表機等 不受任何限制。cpu為什麼要在二者狀態之間切換呢?cpu正在執行應用程序的指令,此時如果應用程序需要進行自身並不具備...