PIC是否处理不可屏蔽中断?

时间:2013-01-19 12:16:26

标签: assembly x86 hardware interrupt computer-architecture

是否有单独的通信总线用于绕过可编程中断控制器的不可屏蔽中断?

或者PIC管理所有中断但按惯例传递所有不可屏蔽的中断吗?

这是否依赖于架构,或者是否有特定的理由让一个人优先于另一个?

2 个答案:

答案 0 :(得分:3)

我的答案来自于我很久以前在很远的银河系中设计计算机时获得的一些硬件经验......很久以前,我认为我应该从参考资料中获得一些帮助。我在浏览SO Intel's ia32 64 bit system software development manual时发现了一个下载here的地方。

您的第一个问题的答案是NMI是处理器上的引脚,它与使用PIC配置的可屏蔽中断隔离。

你的第二个问题的答案是PIC与NMI没有任何关系。但是,如果您有APIC或高级可编程中断控制器,则可以生成手册中概述的NMI:

  

处理器在系统总线(Pentium 4,Intel Core Duo,Intel Core 2,Intel Atom和Intel Xeon处理器)或APIC串行总线(P6系列和Pentium处理器)上接收消息,并提供传送模式NMI。

第二个问题的答案可以在第二个问题的答案中看到。也就是说,如果您的硬件中有APIC(而不仅仅是PIC)。如果您想了解有关APIC如何发送NMI的更多详细信息,请查看我提供的SO链接。我没有在这里详细介绍,因为你问的是“低价”的PIC,而不是APIC。但是,万一我误解了你,我想你会在SO链接上找到大量的信息,如果这还不够,那么请继续下载英特尔手册。

我希望清除一些事情。干杯!

答案 1 :(得分:2)

PIC(可编程中断控制器)不管理x86中的NMI(不可屏蔽中断)。 NMI直接进入处理器或通过另一个控制器,例如。 ISP。请参阅OSDev: Non Maskable Interrupt

但是,根据link,您可以通过以下方式禁用NMI:

/* enable the NMI */
void NMI_enable(void)
{
    outb(0x70, inb(0x70)&0x7F);
}

/* disable the NMI */
void NMI_disable(void)
{
    outb(0x70, inb(0x70)|=0x80);
}