【发布时间】:2012-06-04 18:27:23
【问题描述】:
如果一个中断被“cli”指令屏蔽,那么在一个“sti”指令之后,cpu能否接收到相同的中断(不是同源的中断)?
【问题讨论】:
-
您是在问是否屏蔽中断在
cli之后排队 并在sti之后处理?
标签: assembly linux-kernel kernel interrupt
如果一个中断被“cli”指令屏蔽,那么在一个“sti”指令之后,cpu能否接收到相同的中断(不是同源的中断)?
【问题讨论】:
cli 之后排队 并在sti 之后处理?
标签: assembly linux-kernel kernel interrupt
在几乎所有合理的中断应用程序中,屏蔽中断就是这样做的;取消屏蔽将导致 CPU 接受任何挂起的中断请求。
如果不是这样,中断掩码的使用会导致一些中断由于狭窄的时序分裂而丢失(软件在出现新请求的同时禁用掩码;您不会想要不同的行为只是因为其中一个事件发生在另一个之前的飞秒)。
如果在屏蔽了一类中断(“all”或“level7”或您的硬件支持的任何中断)之后,您希望某个特定的中断源消失,您的程序应该在中断被屏蔽时采取明确的措施告诉硬件忽略/确认该中断。
如果我们颠倒这个想法,你可以得到一些非常漂亮的操作系统/中断架构。有时处理极高优先级的中断很有用,但希望将开销保持在较低的水平。因此,在可能的情况下经常使用一个便宜的技巧,即让高优先级中断例程只做一小部分工作,然后通过引起在那个水平。一些硬件使这成为可能。如果任何级别的中断例程完成了应该导致任务重新调度的工作,这将特别方便;它只是发出一个低优先级中断的信号,其服务程序恰好是调度程序。
【讨论】: