IRQ和中断向量

时间:2017-12-23 11:38:22

标签: linux-kernel operating-system intel

在本文档中,http://retired.beyondlogic.org/serial/serial1.htm#30

COM3的IRQ为4,其中断向量为0C。

但是int 0C中断向量​​是为 Stack Fault ....

保留的

这很令人困惑。当COM3中断时, Stack Fault 会同时发生吗?

https://en.wikipedia.org/wiki/Interrupt_descriptor_table

1 个答案:

答案 0 :(得分:3)

beyondlogic.com表显示了由BIOS设置的默认映射,从IRQ(进入可编程中断控制器(PIC)的外部中断信号)到中断或CPU看到的异常编号。因此,在这种情况下,来自串行端口的中断线连接到PIC输入3,当置位时,它将使CPU运行中断向量表中的条目0xC指向的中断/异常处理程序。

同样的事情发生在CPU内部生成的异常中。要继续您的示例,堆栈错误会导致中断向量表中的条目0xC指向的异常处理程序运行。

因此,在这种情况下,并不是串口中断导致堆栈错误,而是两个不同的事件可能导致相同的中断/异常处理程序运行。

这种冲突是不可取的。从理论上讲,中断/异常处理程序代码可以检查实际导致处理程序运行的原因,但这需要时间,因此我们需要一个更好的解决方案。

然而,首先值得看一下导致这场冲突的原因。对于内部异常,英特尔总是保留小于0x20的条目,但是在8086上只使用了0到4的条目,因此当原始IBM PC映射中断到8及以上时这不是问题。

随着80386和保护模式的引入,异常数量增加,现在使用条目5到0x14,这意味着当使用默认IRQ映射时,中断可能发生冲突。

因此,在保护模式下运行的大多数现代操作系统使用的解决方案是重新编程PIC,以便中断使用0x20或更大的中断向量。有关详细信息,请参阅OSDev.org或了解具体示例,了解Linux如何执行此操作。