3

如果中断被“cli”指令屏蔽,那么在“sti”指令之后,cpu 是否可以接收到相同的中断(不是同一源的中断)?

4

1 回答 1

4

在几乎所有合理的中断应用程序中,屏蔽中断就是这样做的;取消屏蔽将导致 CPU 接受任何未决的中断请求。

如果不是这种情况,中断掩码的使用会导致一些中断由于狭窄的时序分裂而丢失(软件在新请求出现的同时禁用掩码;你不想要不同的行为只是因为其中一个事件发生在另一个之前的飞秒)。

如果在屏蔽了一类中断(“all”或“level7”或您的硬件支持的任何中断)之后,您想要一个特定的中断源消失,您的程序应该在屏蔽中断时采取明确的措施来告诉硬件忽略/确认该中断。

如果我们颠倒这个想法,你可以得到一些非常漂亮的操作系统/中断架构。有时处理极高优先级的中断很有用,但希望将开销保持在低水平。因此,在可能的情况下经常使用一个便宜的技巧,即让高优先级中断例程只做一小部分工作,然后通过在该级别引发中断来将其余工作降低到较低优先级。一些硬件使这成为可能。如果任何级别的中断例程完成了应该导致任务重新调度的工作,这将特别方便;它只是发出一个低优先级中断的信号,其服务程序恰好是调度程序。

于 2012-05-30T14:06:26.317 回答