核心棧和使用者棧

2021-08-02 05:16:24 字數 1049 閱讀 1816

核心棧和使用者棧區別:

intel的cpu分為四個執行級別ring0~ring3

核心建立程序,建立程序的同時建立程序控制塊,建立程序自己的堆疊

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

使用者堆疊的空間指向使用者位址空間,核心堆疊的空間指向核心位址空間。

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

堆疊切換

當系統因為系統呼叫(軟中斷)或硬體中斷,cpu切換到特權工作模式,程序陷入核心態,程序使用的棧也要從使用者棧轉向系統棧。

從使用者態到核心態要兩步驟,首先是將使用者堆疊位址儲存到核心堆疊中,然後將cpu堆疊指標暫存器指向核心堆疊。

當由核心態轉向使用者態,步驟首先是將核心堆疊中得使用者堆疊位址恢復到cpu堆疊指標暫存器中。

核心棧和使用者棧區別

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

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

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

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

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

3.每個windows 都有4g的程序空間,系統棧使用程序空間的地段部分,使用者棧是高階部分如果使用者要直接訪問系統棧部分,需要有特殊的方式。

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

共享原因:

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

安全原因:

如果只有乙個棧,那麼使用者就可以修改棧內容來突破核心安全保護。

頂 1

使用者棧和核心棧

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

使用者棧和核心棧

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

使用者棧和核心棧的區別

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