最近在學習linux核心,對於使用者空間和核心空間、程序上下文與中斷上下文有點混淆,在此好好整理一番。
一、cpu特權級別
cpu的所有指令中,有些指令是非常危險的,如果錯用就會導致系統崩潰。所以,cpu將指令分為特權指令和非特權指令,不同的指令有不同的操作許可權。於是便有了cpu的4個特權級別,ring0~ring3。ring0最高,ring3最低。linux系統僅僅使用了ring0和ring3兩個指令級別。
二、使用者空間和核心空間
對於32位的作業系統而言,採用虛擬記憶體技術可以使定址空間為4g(2^32),linux作業系統將虛擬記憶體低3g的空間作為使用者空間, 高1g的空間作為核心空間。也就是說只有在核心空間內,才會使用ring0級別的cpu指令。除此之外,作業系統的核心還可以完成程序排程 、記憶體管理等功能。每個程序可以通過系統呼叫(軟中斷)進入核心,因此,linux核心由系統內的所有程序共享。從具體程序的角度來看,每個程序可以擁有4g位元組的虛擬空間。空間分配如下圖所示:
核心態與使用者態:
(1)當乙個任務(程序)執行系統呼叫而陷入核心**中執行時,稱程序處於核心執行態(核心態)。執行空間為核心空間。
此時處理器處於特權級最高的(0級)核心**中執行。當程序處於核心態時,執行的核心**會使用當前程序的核心棧。每個程序都有自己的核心棧。
(2)當程序在執行使用者自己的**時,則稱其處於使用者執行態(使用者態)
。此時處理器在特權級最低的(3級)使用者**中執行。執行空間為使用者空間。當正在執行使用者程式而突然被中斷程式中斷時,此時使用者程式也可以象徵性地稱為處於程序的核心態。因為中斷處理程式將使用當前程序的核心棧。
三、程序上下文和中斷上下文
所謂的上下文,簡單來說就是暫存器值,各種引數變數和當時的環境(data 段位址,stack段位址等等);
程式在執行過程中通常有使用者態和核心態兩種狀態,cpu對處於核心態根據上下文環境進一步細分,因此有了下面三種狀態:
(1)核心態,核心執行於程序上下文狀態,核心非中斷服務程式程序執行於核心空間。
(2)核心態,核心執行於中斷上下文狀態,核心中斷服務程式執行於核心空間。
(3)使用者態,執行於使用者空間。
前面我們講過,使用者空間的程序通過系統呼叫進入核心空間。實際上也是通過中斷產生的。例如linux的int 80h中斷。當執行中斷指令後,cpu內部機制將程式特權級別轉到ring0層的特權級別。所以說,核心程序上下文是指使用者空間通過系統呼叫進入核心空間,使用的核心棧、暫存器等資源。中斷上下文則是指通過硬體中斷呼叫核心中斷處理程式,使用的核心棧、暫存器等資源。
linux完全注釋中的一段話:
當乙個程序在執行時,cpu的所有暫存器中的值、程序的狀態以及堆疊中的內容被稱為該程序的上下文。當核心需要切換到另乙個程序時,它需要儲存當前程序的所有狀態,即儲存當前程序的上下文,以便在再次執行該程序時,能夠必得到切換時的狀態執行下去。在linux中,當前程序上下文均儲存在程序的任務資料結構中。在發生中斷時,核心就在被中斷程序的上下文中,在核心態下執行中斷服務例程。但同時會保留所有需要用到的資源,以便中繼服務結束時能恢復被中斷程序的執行。
使用者空間與核心空間,程序上下文與中斷上下文 總結
最近有研究到zabbix監控,就得清楚cpu各個指標的含義,1,簡單回顧下cpu及計算機組成 計算機五大部件 運算器 控制器 儲存器 輸入 輸出裝置.2,cpu 程序的核心態和使用者態 我們知道現在作業系統都是採用虛擬儲存器,那麼對32位作業系統而言,它的定址空間 虛擬儲存空間 為4g 2的32次方...
程序上下文與中斷上下文
處理器總處於以下狀態中的一種 核心態,執行於程序上下文,核心代表程序執行於核心空間。核心態,執行於中斷上下文,核心代表硬體執行於核心空間。使用者態,執行於使用者空間。程序上下文 在linux中,使用者程式裝入系統形成乙個程序的實質是系統為使用者程式提供乙個完整的執行環境。程序的執行環境是由它的程式 ...
程序上下文與中斷上下文
處理器總處於以下狀態中的一種 核心態,執行於程序上下文,核心代表程序執行於核心空間。核心態,執行於中斷上下文,核心代表硬體執行於核心空間。使用者態,執行於使用者空間。程序上下文 在linux中,使用者程式裝入系統形成乙個程序的實質是系統為使用者程式提供乙個完整的執行環境。程序的執行環境是由它的程式 ...