為什麼Linux中每個行程都有核心堆疊?

為什麼Linux中每個行程都有核心堆疊?

最近開始學習linux,有一系列的問題,想請教一下。

  1. 在閱讀時,我遇到了一個術語“內核堆疊”,我無法理解為什麼 Linux 核心為每個進程使用核心堆疊?

  2. 當一個進程正在執行時,為什麼esp暫存器有
    該進程的核心堆疊頂部的位址,而為什麼沒有相應進程的使用者模式堆疊頂部的位址?

答案1

當進程因係統呼叫而進入核心模式時,堆疊將從使用者模式堆疊切換到核心堆疊。這樣做是為了保持核心的完整性,否則進程(例如另一個執行緒)可能會對堆疊做一些討厭的事情。

每個行程都需要一個單獨的核心堆疊來保存行程的狀態。需要保存狀態,以防執行任務切換,即當前進程進入睡眠狀態,而其他進程計劃運行。發生這種情況時,暫存器值(包括堆疊指標暫存器)將被恢復,以便要運行的進程可以從掛起時的確切位置繼續運行。

相關內容