
最近開始學習linux,有一系列的問題,想請教一下。
在閱讀時,我遇到了一個術語“內核堆疊”,我無法理解為什麼 Linux 核心為每個進程使用核心堆疊?
當一個進程正在執行時,為什麼esp暫存器有
該進程的核心堆疊頂部的位址,而為什麼沒有相應進程的使用者模式堆疊頂部的位址?
答案1
當進程因係統呼叫而進入核心模式時,堆疊將從使用者模式堆疊切換到核心堆疊。這樣做是為了保持核心的完整性,否則進程(例如另一個執行緒)可能會對堆疊做一些討厭的事情。
每個行程都需要一個單獨的核心堆疊來保存行程的狀態。需要保存狀態,以防執行任務切換,即當前進程進入睡眠狀態,而其他進程計劃運行。發生這種情況時,暫存器值(包括堆疊指標暫存器)將被恢復,以便要運行的進程可以從掛起時的確切位置繼續運行。