我知道 Linux 进程有两个独立的堆栈 - 一个在用户空间,另一个在内核空间。但是 ISR 使用的堆栈在哪里?它是否与进程的内核空间堆栈共享?
最佳答案
在过去,ISR 曾经使用当前进程的堆栈来提供服务。因此,当中断发生时,当前正在执行的进程会将其所有数据保存在其内核或用户空间堆栈中,并开始使用其自己的内核堆栈执行适当的 ISR 函数。
但是随着 ISR 堆栈的引入,所有与 ISR 相关的处理都是使用一个名为 ISR 堆栈的单独堆栈完成的。 ISR 堆栈在内核空间,因为只有内核线程才能执行中断的 ISR 处理程序。
用户空间不知道并且坦率地说不关心中断是在当前进程的内核堆栈还是在单独的 ISR 堆栈中服务。由于每个 cpu 都有中断,因此 ISR 堆栈必须是每个 cpu。
回答您原来的问题:如果 ISR 堆栈存在,它与进程内核堆栈完全不同。否则,进程内核堆栈用于处理中断。
ISR 堆栈的存在也取决于架构。
关于linux - Linux ISR 的堆栈在哪里,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12588105/