3

我知道一个 linux 进程有两个独立的堆栈——一个在用户空间,另一个在内核空间。但是 ISR 使用的堆栈在哪里?它是否与进程的内核空间堆栈共享?

4

1 回答 1

5

在过去,ISR 曾经使用当前进程的堆栈来提供服务。因此,当发生中断时,当前执行的进程会将其所有数据保存在其内核或用户空间堆栈上,并使用自己的内核堆栈开始执行适当的 ISR 函数。
但是随着 ISR 堆栈的引入,所有与 ISR 相关的处理都使用一个名为 ISR 堆栈的单独堆栈来完成。ISR 堆栈位于内核空间中,因为只有内核线程才能执行中断的 ISR 处理程序。
用户空间不知道并且坦率地说不关心中断是在当前进程的内核堆栈还是单独的 ISR 堆栈中服务的。由于中断来自每个 cpu,因此 ISR 堆栈必须是每个 cpu。

回答您最初的问题:如果存在 ISR 堆栈,则它与进程内核堆栈完全不同。否则,进程内核堆栈用于处理中断。

ISR 堆栈的存在也取决于架构。

于 2012-09-27T20:07:28.493 回答