1. 程式人生 > >使用者態核心態及使用者空間核心空間關係

使用者態核心態及使用者空間核心空間關係

1 使用者態與核心態

 當一個任務(程序)執行系統呼叫而陷入核心程式碼中執行時,我們就稱程序處於核心執行態(或簡稱為核心態)。此時處理器處於特權級最高的(0級)核心程式碼中執行。當程序處於核心態時,執行的核心程式碼會使用當前程序的核心棧。每個程序都有自己的核心棧。

當程序在執行使用者自己的程式碼時,則稱其處於使用者執行態(使用者態)。即此時處理器在特權級最低的(3級)使用者程式碼中執行。當正在執行使用者程式而突然被中斷程式中斷時,此時使用者程式也可以象徵性地稱為處於程序的核心態。因為中斷處理程式將使用當前程序的核心棧。這與處於核心態的程序的狀態有些類似。

2 使用者棧與核心棧

 核心建立程序,建立程序的同時建立程序控制塊,建立程序自己的堆疊一個程序有兩個堆疊,使用者棧和系統棧使用者堆疊的空間指向使用者地址空間,核心堆疊的空間指向核心地址空間。

3 它們之間關係

關係如圖所示

有個CPU堆疊指標暫存器,程序執行的狀態有使用者態和核心態,當程序執行在使用者態時。CPU堆疊指標暫存器指向的是使用者堆疊地址,使用的是使用者堆疊;當程序執行在核心態時,CPU堆疊指標暫存器指向的是核心堆疊地址,使用的是核心堆疊。

 堆疊切換:

當系統因為系統呼叫(軟中斷)或硬體中斷或者異常而呼叫異常處理程式時,CPU切換到特權工作模式,程序陷入核心態,程序使用的棧也要從使用者棧轉向系統棧。從使用者態到核心態要兩步驟,首先是將使用者堆疊地址儲存到核心堆疊中,然後將CPU堆疊指標暫存器指向核心堆疊。當由核心態轉向使用者態,步驟是將核心堆疊中得使用者堆疊地址恢復到CPU堆疊指標暫存器中。

核心棧和使用者棧區別

1.當程序由於中斷進入核心態時,系統會把一些使用者態的資料資訊儲存到核心棧中,當返回到使用者態時,取出核心棧中得資訊恢復出來,返回到程式原來執行的地方。

使用者棧就是程序在使用者空間時建立的棧,比如一般的函式呼叫,將會用到使用者棧。

2.核心棧是屬於作業系統空間的一塊固定區域,可以用於儲存中斷現場、儲存作業系統子程式間相互呼叫的引數、返回值等。

使用者棧是屬於使用者程序空間的一塊區域,使用者儲存使用者程序子程式間的相互呼叫的引數、返回值等。