如何获得中断向量?

当我运行“cat / proc / interrupts”时,我可以得到以下结果:

CPU0 CPU1 0: 253 1878 IO-APIC-edge timer 1: 3 0 IO-APIC-edge i8042 7: 1 0 IO-APIC-edge parport0 8: 0 1 IO-APIC-edge rtc0 9: 0 0 IO-APIC-fasteoi acpi 12: 1 3 IO-APIC-edge i8042 16: 681584 60 IO-APIC-fasteoi uhci_hcd:usb3, nvidia 17: 0 0 IO-APIC-fasteoi uhci_hcd:usb4, uhci_hcd:usb7 18: 0 0 IO-APIC-fasteoi uhci_hcd:usb8 22: 2 1 IO-APIC-fasteoi ehci_hcd:usb1, uhci_hcd:usb5 23: 17 17 IO-APIC-fasteoi ehci_hcd:usb2, uhci_hcd:usb6 44: 146232 472747 PCI-MSI-edge ahci 45: 118 115 PCI-MSI-edge snd_hda_intel 46: 10038650 842 PCI-MSI-edge eth1 NMI: 44479 43798 Non-maskable interrupts LOC: 19025635 29426776 Local timer interrupts SPU: 0 0 Spurious interrupts PMI: 44479 43798 Performance monitoring interrupts IWI: 0 0 IRQ work interrupts RES: 3442001789 3442627214 Rescheduling interrupts CAL: 1406 1438 Function call interrupts TLB: 781318 792403 TLB shootdowns TRM: 0 0 Thermal event interrupts THR: 0 0 Threshold APIC interrupts MCE: 0 0 Machine check exceptions MCP: 2063 2063 Machine check polls ERR: 0 MIS: 0 

如何获取“NMI”“LOC”“SPU”“PMI”等的中断号码

Solutions Collecting From Web of "如何获得中断向量?"

在x86上, NMIs总是在中断矢量2上。数字是硬编码的,就像常见的异常(除以0,页面错误等)一样。 您可以在Intel / AMD的CPU文档中找到它。

如果启用了APIC (问题中提供的转储就是这种情况),则可以从APIC的SVR寄存器中获取寄生中断的中断向量编号。 再次看到相同的CPU文件。

如果APIC没有被使能,而是正在使用PIC ,则伪中断作为IRQ7被传送(参见8259A PIC芯片规格)。 BIOS对PIC进行编程,IRQ7为中断向量0Fh ,但Windows和Linux更改此映射以避免为IRQ和CPU异常共享相同的中断向量。 似乎这个映射不能从PIC查询,但它是通过向PIC发送初始化控制字2( ICW2 )来建立的。 以下是init_8259A()相关的一段Linux代码:

  /* ICW2: 8259A-1 IR0-7 mapped to 0x30-0x37 on x86-64, to 0x20-0x27 on i386 */ outb_pic(IRQ0_VECTOR, PIC_MASTER_IMR); 

这应该回答虚假中断矢量部分。

至于LOCPMI ,我认为这些是本地APIC的中断,你可以从APIC中找到它们的中断向量,就像上面的虚假中断一样。