【问题标题】:What happens to lost interrupts after cli on x86?x86 上 cli 后丢失的中断会发生什么?
【发布时间】:2014-04-21 18:05:12
【问题描述】:

在我使用 cli 命令和使用 sti 再次启用它们之前发送到处理器的中断会发生什么?

【问题讨论】:

  • “丢失的中断”将永远丢失。没有“回收站”可以从中恢复它们。
  • 所以只是为了确定:如果处理器在我使用 cli 后从设备(比如我的 NIC)获得中断,中断将永远丢失?网卡如何知道中断丢失以及在这种情况下它通常会做什么?
  • 根据外围设备(例如网卡)的配置方式,它将等待 CPU 确认。在 CPU(禁用中断)没有响应的预配置时间之后,外设可能会重试发送另一个中断。或者它可以简单地放弃。
  • 一个中断不会丢失,除非您在 CLI“期间”明确清除一个中断。 CLI 只会延迟中断响应,直到发出 STI(+1 更多指令,用于允许 STI / RETI 序列)。
  • 好的,现在我很困惑,你们俩说的不同,你们中的哪一个能给我一些文档参考吗?

标签: assembly linux-kernel operating-system x86


【解决方案1】:

正如您的 cmets 中的几个人所说,中断不会不会丢失。 CLISTI 之间发生的中断 一旦您使用STI 指令重新启用中断,就会立即得到服务。

要了解这种行为,您必须知道中断是如何传递给处理器的。引用英特尔开发者手册:

置位 INTR 引脚会向处理器发出信号:外部 发生了中断。处理器从系统总线读取 由外部中断控制器提供的中断向量号, 比如8259A

关键是INTR 引脚由 8259A PIC 断言,直到您在 中断服务程序,确认中断。因此,当您禁用中断时,您只是在指示处理器忽略INTR 引脚。 当您重新启用中断时,您将停止忽略 INTR 引脚并 处理器立即开始处理中断。

免责声明:这是一种遗留行为,但足以解释。

【讨论】:

    猜你喜欢
    • 2011-02-23
    • 1970-01-01
    • 2019-11-02
    • 2015-05-14
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    相关资源
    最近更新 更多