2011-01-19 97 views
4

为什么中断处理程序正在执行时不能执行上下文切换?更具体地说,在linux内核中,中断处理程序在被中断的进程的上下文中运行。为什么不可能在中断处理程序中执行上下文切换来安排另一个进程?中断处理程序中的上下文切换

回答

7

在多处理器上,上下文切换当然可以在中断处理程序执行时发生。事实上,这是很难预防的。

在单CPU机器上,根据定义,它一次只能运行一个控制线程。它只有一个寄存器组,一个ALU等。所以如果中断处理程序正在运行,那么根本没有资源可以执行上下文切换。

现在,如果你的意思是,中断处理程序实际上是否可以调用上下文切换代码,并且会使发生,那么,我想在一些可以工作的系统上。但对大多数人来说,这不会有太多的价值,而且很难安排。 CPU以高优先级运行,并且该优先级不能降低或中断级之间的同步丢失。操作系统中的关键部分已经与中断执行同步,这会引入复杂性。此外,上下文切换通过改变堆栈发生,就像在线程用户模式程序中一样,所以很难想象当需要中断堆栈来从中断返回时如何发生这种情况。

+0

感谢您的回复。我的意思是调用schedule()的中断处理程序。您能否详细说明“很难想象当需要从中断返回中断堆栈时会发生什么?”? – Bandicoot 2011-01-19 07:06:34

3

一对夫妇的原因,我想,这取决于你的问题的含义是:

  1. 中断通常是硬件交互。硬件通常是时间敏感的,所以操作系统不能停止在某件事情中处理它,并在感觉到它时回来。

  2. 中断发生在特殊的中断上下文中,而不是常规的过程上下文。由于它不在一个进程中,因此它不会像正常进程那样受上下文切换的影响。

可能会有更好,更深入的解释,但这是我对此事的理解程度。