使用者棧和核心棧

2021-09-07 13:06:17 字數 748 閱讀 5890

1. 作業系統中,每個程序會有兩個棧,乙個使用者棧,存在於使用者空間,乙個核心棧,存在於核心空間。

2. 當程序在使用者空間執行時,cpu堆疊指標暫存器裡面的內容是使用者堆疊位址,使用使用者棧;當程序在核心空間時,cpu堆疊指標暫存器裡面的內容是核心棧空間位址,使用核心棧。

3. 核心棧是記憶體中屬於作業系統空間的一塊區域,其主要用途為:

1)儲存中斷現場,對於巢狀中斷,被中斷程式的現場資訊依次壓入系統棧,中斷返回時逆序彈出;

2)儲存作業系統子程式間相互呼叫的引數、返回值、返回點以及子程式(函式)的區域性變數。

4. 使用者棧是使用者程序空間中的一塊區域,用於儲存使用者程序的子程式間相互呼叫的引數、返回值、返回點以及子程式(函式)的區域性變數。

ps:那麼為什麼不直接用乙個棧,何必浪費那麼多的空間呢?

1)如果只用系統棧。系統棧一般大小有限,如果中斷有16個優先順序,那麼系統棧一般大小為15(只需儲存15個低優先順序的中斷,另乙個高優先順序中斷處理程式處於執行)。

但使用者程式子程式呼叫次數可能很多,那樣15次子程式呼叫以後的子程式呼叫的引數、返回值、返回點以及子程式(函式)的區域性變數就不能被儲存,使用者程式也就無法正常執行了。

2)如果只用使用者棧。我們知道系統程式需要在某種保護下執行,而使用者棧在使用者空間(即cpu處於使用者態,而cpu處於核心態時是受保護的),不能提供相應的保護措施(或相當困難)。

核心棧和使用者棧

核心棧和使用者棧區別 intel的cpu分為四個執行級別ring0 ring3 核心建立程序,建立程序的同時建立程序控制塊,建立程序自己的堆疊 乙個程序有兩個堆疊,使用者棧和系統棧 使用者堆疊的空間指向使用者位址空間,核心堆疊的空間指向核心位址空間。有個cpu堆疊指標暫存器,程序執行的狀態有使用者態...

使用者棧和核心棧

作業系統中,每個程序會有兩個棧,乙個使用者棧,存在於使用者空間,乙個核心棧,存在於核心空間。當程序在使用者空間執行時,cpu堆疊指標暫存器裡面的內容是使用者堆疊位址,使用使用者棧 當程序在核心空間時,cpu堆疊指標暫存器裡面的內容是核心棧空間位址,使用核心棧。通過中斷或系統呼叫進入核心態 核心棧是記...

使用者棧和核心棧的區別

乙個程序有兩個堆疊,使用者棧和系統棧 為何要設定兩個不同的棧?共享原因 核心的 和資料是為所有的程序共享的,如果不為每乙個程序設定對應的核心棧,那麼就不能實現不同的程序執行不同的 核心棧是系統執行在核心態的時候使用的棧,使用者棧是系統執行在使用者態時候使用的棧。當程序由於中斷進入核心態時,系統會把一...