【发布时间】:2017-03-12 02:02:58
【问题描述】:
有人问了一个类似的问题:
How does Kernel handle the lock in process context when an interrupt comes?
但仍然不清楚,当中断出现在一个 CPU 上并且一个进程在同一个 CPU 上执行并持有自旋锁时。可以中断抢占持有自旋锁的进程。 ?应该是因为我们有 spin_lock_irq 来禁用中断。
也就是说,当内核抢占被禁用,中断来临时,中断可以抢占进程并开始执行,对吗?
任何人都可以澄清这一点。我想我在这里遗漏了一点。
谢谢 古拉杰
【问题讨论】:
-
当 IRQ 被禁用时,CPU 将保存中断以供以后处理。但是无论如何都会处理 NMI。
-
如果您不指定操作系统,答案可能会有所不同...
-
@tofro 我指的是 Linux 操作系统。情况是 Spinlock 被持有意味着抢占被禁用并且 IRQ 未被禁用。如果是这种情况,中断会抢占持有自旋锁的进程。?
-
如果没有禁用中断,中断通常会抢占任何东西 - 它是硬件。 CPU 不关心自旋锁和操作系统机制。