【问题标题】:What happens if a interrupt handler starts spinning?如果中断处理程序开始旋转会发生什么?
【发布时间】:2012-02-22 21:54:35
【问题描述】:

我正在关注 Linux 设备驱动程序。在引入自旋锁的时候,给出了如下的例子:

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

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

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

【问题讨论】:

  • 中断处理程序正在旋转,因为它试图获取已由非中断代码持有的自旋锁,后者可能不一定在中断完成之前运行。

标签: linux linux-kernel kernel interrupt spinlock


【解决方案1】:

是不是因为中断处理程序中的例程不能被抢占?

不是通过进程上下文代码。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多