Linux使用者態切換核心態介紹

2021-06-18 10:50:33 字數 600 閱讀 6516

在linux系統中,所有中斷服務程式都屬於核心**。如果乙個中斷產生時任務正在使用者**中執行,那麼該中斷就會引起cpu特權級從3級到0級的變化,此時cpu就會進行使用者態堆疊到核心態堆疊的切換操作。cpu會從當前任務的任務狀態段tss中取得新堆疊的段選擇符和偏移值。因為中斷服務程式在核心中,屬於0級特權級**,所以48位的核心態堆疊指標會從tss的ss0和esp0欄位中獲得。在定位了新堆疊(核心態堆疊)之後,cpu就會首先把原使用者態堆疊指標ss和esp壓入核心態堆疊,隨後把標誌暫存器eflags的內容和返回位置cs、eip壓入核心態堆疊。

核心的系統呼叫是乙個軟體中斷,因此任務呼叫系統呼叫時就會進入核心並執行核心中的中斷服務**。此時核心**就會使用該任務的核心態堆疊進行操作。同樣,當進入核心程式時,由於特權級別發生了改變(從使用者態轉到核心態),使用者態堆疊的堆疊段和堆疊指標以及eflags會被儲存在任務的核心態堆疊中。而在執行iret退出核心程式返回到使用者程式時,將恢復使用者態的堆疊和eflags。

如果乙個任務正在核心態中執行,那麼若cpu響應中斷就不再需要進行堆疊切換操作,因為此時該任務執行的核心**已經在使用核心態堆疊,並且不涉及優先順序別的變化,所以cpu僅把eflags和中斷返回指標cs、eip壓入當前核心態堆疊,然後執行中斷服務過程。

核心態與使用者態切換

a.系統呼叫 這是使用者態程序主動要求切換到核心態的一種方式,使用者態程序通過系統呼叫申請使用作業系統提供的服務程式完成工作,比如前例中fork 實際上就是執行了乙個建立新程序的系統呼叫。而系統呼叫的機制其核心還是使用了作業系統為使用者特別開放的乙個中斷來實現,例如linux的int 80h中斷。b...

linux核心態使用者態

概述 linux系統使用者態和核心態相關知識,linux核心版本為3.10.79。使用者態和核心態定義 核心態 cpu可以訪問記憶體所有資源,包括外圍裝置.可以進行處理器工作模式切換,程式的切換。使用者態 只能受限的訪問記憶體,且不允許訪問外圍裝置,不可以進行處理器模式切換。為什麼分使用者態和核心態...

從使用者態切換到核心態

在linux系統中,每個系統呼叫被賦予乙個系統呼叫號。這樣通過這個系統呼叫號就可以關聯系統呼叫。當使用者空間執行的程序執行乙個系統呼叫的時候,這個系統呼叫號就告訴核心需要呼叫哪個。核心記錄了系統調表中所有已註冊過的系統呼叫的列表,這個表為每乙個有效的系統呼叫指定了唯一的系統呼叫號。使用者空間程式無法...