任務核心態堆疊與使用者態堆疊之間的切換

2021-05-07 16:47:40 字數 757 閱讀 4594

在linux 0.12系統中,所有中斷服務程式都屬於核心**。如果乙個中斷產生時任務正在使用者**中執行,那麼該中斷就會引起cpu特權級從3級到0級的變化,此時cpu就會進行使用者態堆疊到核心態堆疊的切換操作。cpu會從當前任務的任務狀態段tss中取得新堆疊的段選擇

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

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

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

核心態與使用者態

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

核心態與使用者態

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

核心態與使用者態

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