核心態與使用者態

2021-09-14 06:29:56 字數 993 閱讀 1327

linux的設計哲學之一就是:對不同的操作賦予不同的執行等級,就是所謂特權的概念,即與系統相關的一些特別關鍵的操作必須由最高特權的程式來完成。

intel的x86架構的cpu提供了0到3四個特權級,數字越小,特權越高,linux作業系統中主要採用了0和3兩個特權級,分別對應的就是核心態(kernel mode)使用者態(user mode)

linux中任何乙個使用者程序被建立時都包含2個棧:核心棧,使用者棧,並且是程序私有的,從使用者態開始執行。核心態和使用者態分別對應核心空間與使用者空間,核心空間中存放的是核心**和資料,而程序的使用者空間中存放的是使用者程式的**和資料。不管是核心空間還是使用者空間,它們都處於虛擬空間中。

所有使用者程式都是執行在使用者態的,但是有時候程式確實需要做一些核心態的事情,例如從硬碟讀取資料等。而唯一可以做這些事情的就是作業系統,所以此時程式就需要先作業系統請求以程式的名義來執行這些操作。這時需要乙個這樣的機制:使用者態程式切換到核心態,但是不能控制在核心態中執行的指令。這種機制叫系統呼叫,在cpu中的實現稱之為陷阱指令(trap instruction)。

當cpu正在執行執行在使用者態的程式時,突然發生某些預先不可知的異常事件,這個時候就會觸發從當前使用者態執行的程序轉向核心態執行相關的異常事件,典型的如缺頁異常。

當外圍裝置完成使用者的請求操作後,會像cpu發出中斷訊號,此時,cpu就會暫停執行下一條即將要執行的指令,轉而去執行中斷訊號對應的處理程式,如果先前執行的指令是在使用者態下,則自然就發生從使用者態到核心態的轉換。

注意:系統呼叫的本質其實也是中斷,相對於外圍裝置的硬中斷,這種中斷稱為軟中斷,這是作業系統為使用者特別開放的一種中斷,如linux int 80h中斷。所以從觸發方式和效果上來看,這三種切換方式是完全一樣的,都相當於是執行了乙個中斷響應的過程。但是從觸發的物件來看,系統呼叫是程序主動請求切換的,而異常和硬中斷則是被動的。

核心態與使用者態

核心態與使用者態是作業系統的兩種執行級別,intel cpu提供ring0 ring3三種級別的執行模式。ring0級別最高,ring3最低。其中特權級0 ring0 是留給作業系統 裝置驅動程式 使用的,它們工作於系統核心態 而特權極3 ring3 則給普通的使用者程式使用,它們工作在使用者態。執...

核心態與使用者態

一 unix linux的體系架構 如上圖所示,從巨集觀上來看,linux作業系統的體系架構分為使用者態和核心態 或者使用者空間和核心 核心從本質上看是一種軟體 控制計算機的硬體資源,並提供上層應用程式執行的環境。使用者態即上層應用程式的活動空間,應用程式的執行必須依託於核心提供的資源,包括cpu資...

核心態與使用者態

核心態 cpu可以訪問記憶體的所有資料,包括外圍裝置,例如硬碟,網絡卡,cpu也可以將自己從乙個程式切換到另乙個程式。使用者態 只能受限的訪問記憶體,且不允許訪問外圍裝置,占用cpu的能力被剝奪,cpu資源可以被其他程式獲取。為什麼要有使用者態和核心態?由於需要限制不同的程式之間的訪問能力,防止他們...