linux 特權級 使用者態 核心態

2021-07-15 20:17:18 字數 2105 閱讀 1868

intel x86架構的cpu一共有0~4四個特權級,0級最高,3級最低,硬體上在執行每條指令時都會對指令所具有的特權級做相應的檢查。硬體已經提供了一套特權級使用的相關機制,軟體自然要好好利用,這屬於作業系統要做的事情,對於unix/linux來說,只使用了0級特權級別和3級特權級。也就是說在unix/linux系統中,一條工作在0級特權級的指令具有了cpu能提供的最高權力,而一條工作在3級特權的指令具有cpu提供的最低或者說最基本權力
核心棧:linux中每個程序有兩個棧,分別用於使用者態和核心態的程序執行,其中的核心棧就是用於核心態的堆疊,它和程序的task_struct結構,更具體的是thread_info結構一起放在兩個連續的頁框大小的空間內。

現在我們從特權級的排程來理解使用者態和核心態就比較好理解了,當程式執行在3級特權級上時,就可以稱之為執行在使用者態,因為這是最低特權級,是普通的使用者程序執行的特權級,大部分使用者直接面對的程式都是執行在使用者態;反之,當程式執行在0級特權級上時,就可以稱之為執行在核心態。

雖然使用者態下和核心態下工作的程式有很多差別,但最重要的差別就在於特權級的不同,即權力的不同。執行在使用者態的程式不能訪問作業系統核心資料結構合程式。 當我們在系統中執行乙個程式時,大部分時間是執行在使用者態下的。在其需要作業系統幫助完成某些它沒有權力和能力完成的工作時就會切換到核心態。

linux程序的4gb位址空間,3g-4g部分大家是共享的,是核心態的位址空間,這裡存放在整個核心的**和所有的核心模組,以及核心所維護的資料。使用者執行乙個程式,該程式所建立的程序開始是執行在使用者態的,如果要執行檔案操作,網路資料傳送等操作,必須通過write,send等系統呼叫,這些系統呼叫會呼叫核心中的**來完成操作,這時,必須切換到ring0,然後進入3gb-4gb中的核心位址空間去執行這些**完成操作,完成後,切換回ring3,回到使用者態。這樣,使用者態的程式就不能隨意操作核心位址空間,具有一定的安全保護作用。保護模式,通過記憶體頁表操作等機制,保證程序間的位址空間不會互相衝突,乙個程序的操作不會修改另乙個程序的位址空間中的資料。在核心態下,cpu可執行任何指令,在使用者態下cpu只能執行非特權指令。當cpu處於核心態,可以隨意進入使用者態;而當cpu處於使用者態,只能通過中斷的方式進入核心態。一般程式一開始都是執行於使用者態,當程式需要使用系統資源時,就必須通過呼叫軟中斷進入核心態.

1)使用者態切換到核心態的3種方式

a. 系統呼叫               

這是使用者態程序主動要求切換到核心態的一種方式,使用者態程序通過系統呼叫申請使用作業系統提供的服務程式完成工作。而系統呼叫的機制,其核心還是使用了作業系統為使用者特別開放的乙個中斷來實現,例如lx86的int 80h, powerpc的sc

b. 異常

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

c. 外圍裝置的中斷

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

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

從觸發方式上看,可以認為純在前述3種不同的型別,但是從最終實際完成由使用者態到核心態的切換操作上來說,涉及的關鍵步驟是完全一致的,沒有任何區別,都相當於執行了乙個中斷響應的過程,因為系統呼叫實際上最終是中斷機制實現的,而異常和中斷的處理機制基本上也是一致的。關於中斷處理機制的細節合步驟這裡不做過多分析,涉及到有使用者態切換到核心態的步驟主要包括:
從當前程序的描述符中提取其核心棧的ss0及esp0資訊

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

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

linux核心態使用者態

概述 linux系統使用者態和核心態相關知識,linux核心版本為3.10.79。使用者態和核心態定義 核心態 cpu可以訪問記憶體所有資源,包括外圍裝置.可以進行處理器工作模式切換,程式的切換。使用者態 只能受限的訪問記憶體,且不允許訪問外圍裝置,不可以進行處理器模式切換。為什麼分使用者態和核心態...

使用者態 核心態

前戲 我們知道計算機主要分為三部分,硬體,作業系統和應用程式,然後硬體的頭腦cpu才是控制核心態和使用者態的大佬 作業系統 作業系統是直接和硬體打交道的,作業系統在核心態下執行,從而可以訪問整個硬體 應用程式 應用程式直接和使用者互動,但是應用程式不能直接操作硬體,應用程式在使用者態下執行,但是有時...

Linux 核心態與使用者態

使用者態 ring3 執行於使用者態的 則要受到處理器的諸多檢查,它們只能訪問對映其位址空間的頁表項中規定的在使用者態下可訪問頁面的虛擬位址,且只能對任務狀態段 tss 中i o 許可位圖 i o permission bitmap 中規定的可訪問埠進行直接訪問 核心態 ring0 在處理器的儲存保...