linux-kernel - 为什么我们需要中断上下文?

标签 linux-kernel kernel interrupt-handling

我有疑问,为什么我们需要中断上下文?一切都告诉我们属性是什么,但没有人解释为什么我们提出这个概念?

与同一概念相关的另一个疑问是,如果我们不在中断处理程序中禁用中断,那么在中断上下文中运行此中断处理程序代码有什么用?

最佳答案

中断上下文与进程上下文根本不同:

  1. 它不与进程关联;特定进程不提供中断服务,而内核提供服务。即使进程将被中断,它对于中断本身或为其提供服务的例程的任何参数都没有意义。由此可见,中断上下文至少在概念上必须不同于进程上下文。

  2. 此外,如果要在进程上下文中处理中断,并在稍后(重新)安排一些工作,那么它将在什么上下文中运行?到那时,原始过程甚至可能不存在。因此,出于实际原因,我们需要一些独立于流程的上下文。

  3. 中断处理必须很快;你的中断处理程序已经中断了其他一些代码。重要的工作应该被推到中断处理程序之外,到“下半部分”。无论是在用户空间还是在内核空间,阻止一个进程执行与它无关的工作是 Not Acceptable 。

  4. 禁用中断是您可以(实际上可以,在 2.6.36 之前)在注册 ISR 时请求禁用的功能。回想一下,处理程序可以同时在多个 CPU 上提供中断服务,因此可以与自身竞争。无法禁用不可屏蔽中断 (NMI)。

关于linux-kernel - 为什么我们需要中断上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22453739/

相关文章:

c - 有没有办法从 C 应用程序与驱动程序通信?

linux - 我在哪里可以找到足够好的默认配置来编译 Linux 内核?

io - 驱动程序和用户应用程序之间的主要区别是什么?

linux - 如何在 Linux 内核中启用 CONFIG_PREEMPT 选项?

linux - 用户空间中 x86-64 Linux 上 CS 和 SS 寄存器的含义?

c - PF_BRIDGE(NF_BR_PRE_ROUTING) Hook 未被调用

linux - 是否可以将 2 个内核模块链接到同一个/dev/device?

linux - Linux 中的中断处理和挂起中断

assembly - 自定义键盘中断处理程序

embedded - Arduino 上的中断会中断其他中断吗?