3
我知道一個linux進程有兩個獨立的堆棧 - 一個在用戶空間,另一個在內核空間。但ISR使用的堆棧在哪裏?它是否與進程的內核空間堆棧共享?Linux ISR的堆棧在哪裏
我知道一個linux進程有兩個獨立的堆棧 - 一個在用戶空間,另一個在內核空間。但ISR使用的堆棧在哪裏?它是否與進程的內核空間堆棧共享?Linux ISR的堆棧在哪裏
在舊時代,ISR曾經使用當前進程的堆棧來提供服務。所以,當發生中斷時,當前正在執行的進程會將其所有數據保存在內核或用戶空間堆棧中,並使用其自己的內核堆棧開始執行相應的ISR功能。
但是隨着ISR堆棧的引入,所有與ISR相關的處理都使用一個名爲ISR堆棧的單獨堆棧完成。 ISR棧位於內核空間,因爲只有內核線程可以執行中斷的ISR處理程序。
用戶空間不知道並坦率地不在意中斷是在當前進程的內核堆棧還是單獨的ISR堆棧中提供。由於每個CPU都有中斷,所以ISR堆棧必須是每個CPU。
回答你原來的問題:如果ISR堆棧存在,它就與進程內核堆棧完全不同。否則,進程內核堆棧用於處理中斷。
ISR堆棧的存在也取決於架構。
你爲什麼問?從應用程序的角度來看,與內核進行交互的唯一方式是通過系統調用,因此內核堆棧不可訪問(因此應用程序「不存在」)。從內核模塊的角度來看,您不關心用戶空間堆棧(僅限於調度程序護理)。 –
這取決於體系結構。 – ninjalj