linux - Linux ISR 的堆栈在哪里

标签 linux operating-system linux-kernel

我知道 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/

相关文章:

c - 为什么像clone()这样的系统调用会失败、恢复和暂停?

Linux 终端鼠标报告——基本问题

python - 有没有办法获取 'own' 或 'get priority over' linux 中外部进程的 stdin 文件描述符?

c - 如何以线程友好的方式读取文本文件(字典)

c - 在 C 语言中使用 setenv()

algorithm - 在资源被使用后保持声明优势的原因是什么?

python - 如何在 os.rename 替换中忽略区分大小写

php - 警告 : require(file): failed to open stream

copy_to_user 与 memcpy

linux - 从内核模块写入 eventfd