中断处理程序中的上下文切换

时间:2011-01-19 06:36:03

标签: linux linux-kernel

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

2 个答案:

答案 0 :(得分:7)

在多处理器上,当执行中断处理程序时,肯定会发生上下文切换。事实上,很难预防。

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

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

答案 1 :(得分:5)

我想,有几个原因,取决于你问题的含义:

  1. 问: 为什么在中断过程中上下文切换不好?

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

  2. 问: 在中断期间发生上下文切换的原因是什么?

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

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