如果中断处理程序开始旋转会发生什么?

时间:2012-02-22 21:54:35

标签: linux linux-kernel kernel interrupt spinlock

我正在关注Linux设备驱动程序。当它引入自旋锁时,它给出了以下示例:

  

您的驱动程序正在执行,并且刚刚取出一个锁定来控制对其设备的访问。锁定时,设备会发出中断,导致中断处理程序运行。在访问设备之前,中断处理程序还必须获得锁定。在中断处理程序中取出一个自旋锁是合法的事情;这是自旋锁操作不睡觉的原因之一。但是,如果中断例程在与最初取出锁的代码相同的处理器中执行会发生什么? 当中断处理程序正在旋转时,非中断代码将无法运行以释放锁。那个处理器将永远旋转。

我不明白为什么如果中断处理程序正在旋转,则不能执行非中断代码。

是否因为中断处理程序中的例程无法被抢占?如果是这样,是否说中断例程必须是原子的?

1 个答案:

答案 0 :(得分:2)

  

是否因为中断处理程序中的例程无法被抢占?

不是按进程上下文代码。

  

如果是这样,是否说中断例程必须是原子的?

可能被更高优先级的中断或NMI(或SMM)中断。