Linux kernel IRQ与中断向量

Linux kernel IRQ与中断向量,linux-kernel,operating-system,intel,Linux Kernel,Operating System,Intel,在本文件中 COM3的IRQ为4,中断向量为0C 但是int 0C中断向量是为堆栈故障保留的 这很令人困惑。当COM3中断时,堆栈故障同时发生 该表显示了BIOS设置的从IRQ(进入可编程中断控制器(PIC)的外部中断信号)到CPU看到的中断或异常号的默认映射。因此,在这种情况下,串行端口的中断线连接到PIC输入3,当断言时,将导致CPU运行中断向量表中条目0xC所指向的中断/异常处理程序 CPU内部生成的异常也会发生同样的情况。为了继续您的示例,堆栈故障会导致运行中断向量表中条目0xC指向的异

在本文件中

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

但是int 0C中断向量是为堆栈故障保留的

这很令人困惑。当COM3中断时,堆栈故障同时发生

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

CPU内部生成的异常也会发生同样的情况。为了继续您的示例,堆栈故障会导致运行中断向量表中条目0xC指向的异常处理程序

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

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

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

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

因此,大多数在保护模式下运行的现代操作系统使用的解决方案是将PIC重新编程为,以便中断使用中断向量号0x20或更大。有关更多详细信息或具体示例,请参阅。该表显示了BIOS设置的从IRQ(进入可编程中断控制器(PIC)的外部中断信号)到CPU看到的中断或异常号的默认映射。因此,在这种情况下,串行端口的中断线连接到PIC输入3,当断言时,将导致CPU运行中断向量表中条目0xC所指向的中断/异常处理程序

CPU内部生成的异常也会发生同样的情况。为了继续您的示例,堆栈故障会导致运行中断向量表中条目0xC指向的异常处理程序

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

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

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

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


因此,大多数在保护模式下运行的现代操作系统使用的解决方案是将PIC重新编程为,以便中断使用中断向量号0x20或更大。有关更多详细信息或具体示例,请参见。非常感谢,非常有用!非常感谢,非常有帮助!