使用者態和核心態

2021-09-24 10:25:48 字數 1801 閱讀 8859

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

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

1.使用者態(或使用者空間):存放的是使用者程式的**和資料,處於虛擬空間,可以理解為存放應用程式、底層函式庫、shell指令碼的地方。當程序在執行使用者自己的**(非系統呼叫之類的函式)時,則稱其處於使用者態,cpu在特權級最低的3級使用者**中執行,當正在執行使用者程式而突然被中斷程式中斷時,此時使用者程式也可以象徵性地稱為處於程序的核心態,因為中斷處理程式將使用當前程序的核心棧;這裡要說明一點底層函式庫,他不是系統呼叫,我們可以理解為他是對系統呼叫的一層封裝,更好的方便程式設計師來開發。只能受限的訪問記憶體,且不允許訪問外圍裝置,占用cpu的能力被剝奪,cpu資源可以被其他程式獲取;

2.核心態(或核心空間):可以理解為存放核心的地方。核心從本質上看是一種軟體——控制計算機的硬體資源(包括cpu資源、儲存資源、i/o資源等),並提供上層應用程式執行的環境。cpu可以訪問記憶體所有資料,包括外圍裝置(硬碟、網絡卡),cpu也可以將自己從乙個程式切換到另乙個程式;核心空間:存放的是核心**和資料,處於虛擬空間;

3.系統呼叫:那麼使用者態和核心態的資料是如何傳遞的呢?那就是通過系統呼叫。其實系統呼叫就是使用者態和核心態定義好的介面。就好比rpc框架中乙個服務呼叫另乙個服務,我們先要定義好兩邊介面才能調通。常見的系統呼叫,比如操作檔案的read、write操作;操作程序的fork操作;分配記憶體的sbrk操作。程序執行系統呼叫進入核心態,此時cpu處於特權級最高的0級核心**中執行,當程序處於核心態時,執行的核心**會使用當前程序的核心棧,每個程序都有自己的核心棧;

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

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

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

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

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

1)系統呼叫

2)庫函式

3)shell指令碼

**:

核心態和使用者態

在核心態下,cpu可執行任何指令,在使用者態下cpu只能執行非特權指令。當cpu處於核心態,可以隨意進入使用者態 而當cpu處於使用者態,只能通過中斷的方式進入核心態。一般程式一開始都是執行於使用者態,當程式需要使用系統資源時,就必須通過呼叫軟中斷進入核心態。當乙個任務 程序 執行系統呼叫而陷入核心...

核心態和使用者態

複習的時候發現 作業系統 書上竟然沒有找到使用者態和核心態的概念,還納悶了半天以為是自己上課的時候沒有認真聽講.核心態 cpu可以訪問記憶體所有資料,包括外圍裝置,例如硬碟,網絡卡.cpu也可以將自己從乙個程式切換到另乙個程式 使用者態 只能受限的訪問記憶體,且不允許訪問外圍裝置.占用cpu的能力被...

使用者態和核心態

從巨集觀上來看,linux作業系統的體系架構分為使用者態和核心態。核心從本質上看是一種軟體 控制計算機的硬體資源,並提供上層應用程式執行的環境。使用者態即上層應用程式的活動空間,應用程式的執行必須依託於核心提供的資源,包括cpu資源 儲存資源 i o資源等。為了使上層應用能夠訪問到這些資源,核心必須...