使用者態與核心態(使用者空間與核心)

2021-09-25 17:01:05 字數 1698 閱讀 5442

unix和linux的體系架構.png

三者之間的關係如下:

核心態:cpu可以訪問記憶體的所有資料,包括外圍裝置,例如硬碟,網絡卡,cpu也可以將自己從乙個程式切換到另乙個程式。

使用者態:只能受限的訪問記憶體,且不允許訪問外圍裝置,占用cpu的能力被剝奪,cpu資源可以被其他程式獲取。

為什麼要有使用者態和核心態?

由於需要限制不同的程式之間的訪問能力, 防止他們獲取別的程式的記憶體資料, 或者獲取外圍裝置的資料, 併發送到網路, cpu劃分出兩個許可權等級 -- 使用者態和核心態。

所有使用者程式都是執行在使用者態的, 但是有時候程式確實需要做一些核心態的事情, 例如從硬碟讀取資料, 或者從鍵盤獲取輸入等. 而唯一可以做這些事情的就是作業系統, 所以此時程式就需要先作業系統請求以程式的名義來執行這些操作.

這時需要乙個這樣的機制: 使用者態程式切換到核心態, 但是不能控制在核心態中執行的指令

他們的工作流程如下:

使用者態程式將一些資料值放在暫存器中, 或者使用引數建立乙個堆疊(stack frame), 以此表明需要作業系統提供的服務.

使用者態程式執行陷阱指令

cpu切換到核心態, 並跳到位於記憶體指定位置的指令, 這些指令是作業系統的一部分, 他們具有記憶體保護, 不可被使用者態程式訪問

這些指令稱之為陷阱(trap)或者系統呼叫處理器(system call handler). 他們會讀取程式放入記憶體的資料引數, 並執行程式請求的服務

系統呼叫完成後, 作業系統會重置cpu為使用者態並返回系統呼叫的結果

當乙個任務(程序)執行系統呼叫而陷入核心**中執行時,我們就稱程序處於核心執行態(或簡稱為核心態)。此時處理器處於特權級最高的(0級)核心**中執行。當程序處於核心態時,執行的核心**會使用當前程序的核心棧。每個程序都有自己的核心棧。當程序在執行使用者自己的**時,則稱其處於使用者執行態(使用者態)。即此時處理器在特權級最低的(3級)使用者**中執行。當正在執行使用者程式而突然被中斷程式中斷時,此時使用者程式也可以象徵性地稱為處於程序的核心態。因為中斷處理程式將使用當前程序的核心棧。這與處於核心態的程序的狀態有些類似。 

核心態與使用者態是作業系統的兩種執行級別,跟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,回到使用者態。這樣,使用者態的程式就不能 隨意操作核心位址空間,具有一定的安全保護作用。

至於說保護模式,是說通過記憶體頁表操作等機制,保證程序間的位址空間不會互相衝突,乙個程序的操作不會修改另乙個程序的位址空間中的資料。

核心態與使用者態

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

核心態與使用者態

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

核心態與使用者態

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