【问题标题】:Can a masked interrupt be received after the mask canceled?屏蔽取消后能否接收屏蔽中断?
【发布时间】:2012-06-04 18:27:23
【问题描述】:

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

【问题讨论】:

  • 您是在问是否屏蔽中断在cli 之后排队 并在sti 之后处理?

标签: assembly linux-kernel kernel interrupt


【解决方案1】:

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

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

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

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

【讨论】:

  • 屏蔽的中断是否在 cli 之后排队并在 sti 之后处理?
  • 通常中断信号由中断设备(通过中断设备中的锁存器)保持高电平,直到它被服务;您可以将其视为“存储请求”意义上的队列。实际上,来自多个设备的多个中断线往往在硬件中简单地“或”在一起以产生单个中断优先级,但没有任何顺序,因此从这个意义上说它不是一个队列。如果设备没有将中断线保持为高电平,则中断控制器通常会有一个锁存器,因此又是一个“队列”。
  • ...如何工作的细节都取决于硬件的中断架构。您似乎在询问 Linux,因此您可能在谈论 Intel 风格的硬件。 IIRC,如果现在不是 CPU 本身,主板中内置了一个名为“APIC”(?)的中断控制器设备。你应该去了解它是如何工作的,以及处理器是如何处理中断的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多