linux核心態使用者態

2021-09-27 10:12:14 字數 1974 閱讀 6092

概述

linux系統使用者態和核心態相關知識,linux核心版本為3.10.79。

使用者態和核心態定義

核心態: cpu可以訪問記憶體所有資源, 包括外圍裝置. 可以進行處理器工作模式切換,程式的切換。

使用者態: 只能受限的訪問記憶體, 且不允許訪問外圍裝置,不可以進行處理器模式切換。

為什麼分使用者態和核心態

cpu工作分為不同的工作模式或特權級別,例如,arm包含7種工作模式,除使用者模式以外,都是特權模式,armv8包含4種異常級別el0-el3。每種工作模式或異常級別可以執行的指令不同,允許訪問的硬體資源也不同,如果cpu不進行工作模式區分,都在一種模式下,那訪問的資源都是相同的,那麼執行的所有程式也可以訪問任何的資源,這就容易產生訪問資源衝突,使系統奔潰,也出現一些安全問題。如果一些程式執行在特權模式,可以訪問所有資源,這些程式統一來管理資源,其它程式執行在非特權模式,訪問資源時通過呼叫資源管理程式,那就可以避免衝突,限制一些程式的訪問許可權,保證整個系統的安全。

我們可以把執行在特權級別的程式成為核心程式,就行linux 核心一樣,也可以稱為核心態,cpu執行在核心態時,可以訪問記憶體所有資料, 包括外圍裝置。執行在非特權級別的程式稱為使用者空間程式,也可以稱為使用者態。

使用者空間的程式無法直接執行核心**。它們不能直接呼叫核心空間中的函式,因為核心駐留在受保護的位址空間上。如果程序可以直接在核心的位址空間上讀寫的話,系統安全就會失去控制。

使用者態程式想訪問受保護的資源,必須先切換到核心態,也就是使用者程式向核心發起請求,核心執行**區訪問資源。

使用者態和核心態切換

armv7

arm 中linux使用者程式執行在使用者模式(非特權模式),linux核心執行在特權模式(包含svc,abt,und,fiq,iqr,sys)。

首先,arm開發板在剛上電或復位後都會首先進入svc模式,此時、程式計數器r15-pc值會被賦為0x0000 0000;bootloader就是在此模式下,位於0x0000 0000的nor flash或sram中裝載的,因此、開機或重啟後bootloader會被首先執行。接著,bootloader引導linux核心,此時、linux核心一樣執行在arm的svc模式下;當核心啟動完畢、準備進入使用者態init程序時,核心將arm的當前程式狀態cpsr暫存器m[4:0]設定為10000、進而使用者態程式只能執行在arm的使用者模式。

由於arm使用者模式下對資源的訪問受限,因此可以達到保護linux作業系統核心的目的。

需要強調的是:linux核心態是從arm的svc模式下啟動的,但在某些情況下如:硬體中斷、程式異常(被動)等情況下進入arm的其他特權模式,這時仍然可以進入核心態(因為就是可以操作核心了);同樣,linux使用者態是從arm使用者模式啟動的,但當進入arm系統模式時仍然可以操作linux使用者態程式(進入使用者態,如init程序的啟動過程)。

即:linux核心從arm的svc模式下啟動,但核心態不僅僅指arm的svc模式(還包括可以訪問核心空間的所有arm模式);linux使用者程式從arm的使用者模式啟動,但使用者態不僅僅指arm的使用者模式,就是非使用者模式下也可以執行應用程式,但一般不這樣做。這一點不進行明確關注。

armv8

armv8中linux使用者程式執行在el0級別,linux核心el1級別。

切換

觸發方式包括三種:

系統呼叫:使用者程式通過系統呼叫進入核心程式,使用核心提供的服務。實際上是在庫函式中執行中斷指令,如armv7:swi指令,armv8 svc指令,cpu響應中斷,跳轉到中斷向量表執行核心**。

中斷:這裡中斷是指硬體中斷,如gpio等,如果當前cpu在執行使用者程式,中斷產生後,cpu會暫停當前程式執行,跳轉到核心中斷處理程式。

異常:如果當前cpu在執行使用者程式,發生了不可預知錯誤,如指令未定義,除數為0,指標為空,會發生abort,undefined等,cpu跳轉到核心中斷處理程式。

使用者態 核心態

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

Linux 核心態與使用者態

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

Linux核心態與使用者態

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