我有疑问,为什么我们需要中断上下文?一切都告诉我们属性是什么,但没有人解释为什么我们提出这个概念?
与同一概念相关的另一个疑问是,如果我们不在中断处理程序中禁用中断,那么在中断上下文中运行此中断处理程序代码有什么用?
最佳答案
中断上下文与进程上下文根本不同:
它不与进程关联;特定进程不提供中断服务,而内核提供服务。即使进程将被中断,它对于中断本身或为其提供服务的例程的任何参数都没有意义。由此可见,中断上下文至少在概念上必须不同于进程上下文。
此外,如果要在进程上下文中处理中断,并在稍后(重新)安排一些工作,那么它将在什么上下文中运行?到那时,原始过程甚至可能不存在。因此,出于实际原因,我们需要一些独立于流程的上下文。
中断处理必须很快;你的中断处理程序已经中断了其他一些代码。重要的工作应该被推到中断处理程序之外,到“下半部分”。无论是在用户空间还是在内核空间,阻止一个进程执行与它无关的工作是 Not Acceptable 。
禁用中断是您可以(实际上可以,在 2.6.36 之前)在注册 ISR 时请求禁用的功能。回想一下,处理程序可以同时在多个 CPU 上提供中断服务,因此可以与自身竞争。无法禁用不可屏蔽中断 (NMI)。
关于linux-kernel - 为什么我们需要中断上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22453739/