中断是否分配给固定的 CPU(总是由同一个 CPU 处理)?
将我的问题放在上下文中:
来自: http://msdn.microsoft.com/en-us/library/ms795060.aspx
保护共享区域的自旋锁的 IRQL 等于设备中断时的 DIRQL。只要临界区例程持有自旋锁并访问 DIRQL 的共享区域,ISR 就不能在单处理器或 SMP 机器上运行。
这在单处理器机器上是有意义的,因为 CPU 的 IRQL 不小于中断 IRQL,直到锁被释放,中断才会被 CPU 服务。然而,在 SMP 机器上,什么会阻止中断被另一个 CPU(不是拥有锁的 CPU)处理并破坏数据...?
最佳答案
阅读下一节......
In an SMP machine, the ISR cannot acquire the spin lock that protects the shared data while the critical-section routine holds the spin lock and accesses the shared data at DIRQL.
...我认为这是在说在 SMP 机器上中断可以发生;但是如果中断发生,那么中断服务例程(在另一个 CPU 上运行)仍然无法获取自旋锁:即它自旋,浪费周期,尝试获取自旋锁,除非你释放自旋锁让等待的 ISR 获取它。
我想知道为什么它可能允许 ISR 在另一个 CPU 上运行,而不是像在单 CPU 情况下那样屏蔽中断(以防止 ISR 被启动)。对此的答案是,无论在持有自旋锁时是否可以在另一个 CPU 上启动新的 ISR,事实是(与单 CPU 情况不同)一个 ISR 可能已经 在 DIRQL 自旋锁启动时在另一个 CPU 上运行:正是出于这个原因,这样的 ISR(如果它存在于另一个 CPU 上)必须自旋(如果它试图获取自旋锁)。
关于operating-system - SMP 系统上的中断处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1522690/