使用者棧和核心棧的區別

2021-07-23 05:29:14 字數 898 閱讀 9030

乙個程序有兩個堆疊,使用者棧和系統棧

為何要設定兩個不同的棧?

共享原因:

核心的**和資料是為所有的程序共享的,如果不為每乙個程序設定對應的核心棧,那麼就不能實現不同的程序執行不同的**。

核心棧是系統執行在核心態的時候使用的棧,使用者棧是系統執行在使用者態時候使用的棧。

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

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

當程序因為中斷或者系統呼叫而陷入核心態之行時,程序所使用的堆疊也要從使用者棧轉到核心棧。程序陷入核心態後,先把使用者態堆疊的位址儲存在核心棧之中

,然後設定堆疊指標暫存器的內容為核心棧的位址,這樣就完成了使用者棧向核心棧的轉換;

當程序從核心態恢復到使用者態之行時,在核心態之行的最後將儲存在核心棧裡面的使用者棧的位址恢復到堆疊指標暫存器即可。

這樣就實現了核心棧和使用者棧的互轉。

關鍵在程序從使用者態轉到核心態的時候,

程序的核心棧總是空的

。這是因為,當程序在使用者態執行時,使用的是使用者棧,

當程序陷

入到核心態時,核心棧儲存程序在核心態執行的相關資訊,但是一旦程序返回到使用者態後,核心棧中儲存的資訊無效,會全部恢復,因此每次程序從使用者態陷入核心的時候得到的核心棧都是空的。

所以在程序陷入核心的時候,直接把核心棧的棧頂位址給堆疊指標暫存器就可以了。

有個cpu堆疊指標暫存器

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

核心棧和使用者棧

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

使用者棧和核心棧

1.作業系統中,每個程序會有兩個棧,乙個使用者棧,存在於使用者空間,乙個核心棧,存在於核心空間。2.當程序在使用者空間執行時,cpu堆疊指標暫存器裡面的內容是使用者堆疊位址,使用使用者棧 當程序在核心空間時,cpu堆疊指標暫存器裡面的內容是核心棧空間位址,使用核心棧。3.核心棧是記憶體中屬於作業系統...

使用者棧和核心棧

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