11

当您禁用中断(使用clix86 中的指令)时,究竟会发生什么?

  • PIC 是否等待您打开中断,并在发生这种情况时触发中断?(如果是这样,它等待多长时间,如果时间“到期”会发生什么?)

  • 从设备的角度来看,中断是否会被发送到“黑洞”而没有响应?

  • PIC 是否以某种方式告诉设备“CPU 很忙”之类的?

  • 还是发生了其他事情?

另外,您如何处理您不知道如何处理的中断?
有什么方法可以告诉 PIC(或设备,如果您不知道设备是什么),“是的,我收到了您的消息,但我不知道如何处理它”?

4

2 回答 2

7

8259a PIC 等待来自 CPU 的 INTA 信号。CPU 在开始处理中断时通过将控制权转移到适当的 ISR 来发送它。哪个 ISR?PIC 将中断向量提供给 CPU,CPU 会在 IVT/IDT 中查找地址,剩下的就知道了。PIC 在收到 INTA 之前不会提供中断向量。

8259a PIC 只与 I/O 设备进行单向通信。他们可以告诉它他们有一个需要服务的中断。

因此,如果 CPU 不响应中断,那么 PIC 中的一切都将悬而未决。但是,设备可能会随心所欲地取消断言,然后重新断言中断请求信号。我不知道哪个做。我也不知道哪些对中断服务有任何时间要求。

如果您对来自特定来源的中断不感兴趣,您可以将其屏蔽,您将一无所获。如果您收到中断但不知道如何处理它,您可以告诉 PIC 您已处理它。这可能会使中断的设备处于“冻结”状态,无限期地等待服务发生。它还可能导致设备保持其中断请求信号为高电平,如果您在电平触发模式下进行中断,这将是一个问题——您将不断收到中断。

于 2012-05-20T12:37:05.963 回答
4

中断仍然触发,但 CPU 没有在监听。当您再次开始收听时(sti),信号仍然存在,并将在第一时间生效。

一个 PC PIC 有几个级别的中断,我相信它可以为每个优先级保留一个活动中断。它将保留它们中的每一个,直到 CPU 告诉它相应的处理完成为止。长时间禁用中断可能会破坏这一点,所以不要那样做!

负责中断的设备在等待时不会得到任何响应——无论如何这都是一种响应。如果它不能等待,它可能会进入一些错误状态,当它最终出现时 CPU 会看到。

你只会得到你明确启用的中断,所以应该没有意外。打开中断的设备驱动程序更好地知道如何处理它。

于 2012-05-20T12:24:14.543 回答