禁用中断时会发生什么,以及如何处理不知道如何处理的中断?

时间:2012-05-20 05:32:14

标签: assembly x86 interrupt interrupt-handling isr

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

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

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

  • PIC是否以某种方式告诉设备" CPU正在忙碌"还是什么?

  • 还是会发生其他事情?

另外,你如何处理一个你不知道如何处理的中断? 有没有办法告诉PIC(或设备,如果你不知道设备是什么),"是的,我收到你的消息,但我不知道如何处理它"

2 个答案:

答案 0 :(得分:5)

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

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

因此,如果CPU没有响应中断,那么PIC中的所有内容都会浮出水面。但是,设备可能会随心所欲地断言然后重新断言中断请求信号。我不知道哪个。我也不知道中断服务有哪些时间要求。

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

答案 1 :(得分:3)

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

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

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

您只会获得明确启用的中断,因此不应该出现意外情况。设备驱动程序打开中断最好知道如何处理它。