【问题标题】:Can Hardware interrupts preempt the process holding spinlock(preemption disabled)?硬件中断可以抢占持有自旋锁的进程(禁用抢占)吗?
【发布时间】: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 不关心自旋锁和操作系统机制。

标签: c interrupt spinlock


【解决方案1】:

是的,中断会抢占您的锁定代码。

处理中断并跳转到 IDT 中中断向量的 CPU 硬件不知道也不关心正在运行什么代码或您拥有什么锁。它会抢占一切,甚至是其他中断处理程序。

【讨论】:

    猜你喜欢
    • 2014-01-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 2018-09-16
    • 1970-01-01
    相关资源
    最近更新 更多