2

「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」などの割り込み番号はどうすれば取得できますか?

4

1 に答える 1

6

x86ではNMIs、常に割り込みベクタ2にあります。数値は、一般的な例外(0による除算、ページフォールトなど)と同じようにハードコードされています。これは、Intel/AMDのCPUドキュメントに記載されています。

が有効になっている場合APIC(質問に示されているダンプの場合のように)、スプリアス割り込みの割り込みベクトル番号はAPICのSVRレジスタから取得できます。繰り返しになりますが、同じCPUのドキュメントを参照してください。

APICが有効になっておらず、代わりにが使用されている場合PIC、スプリアス割り込みはとして配信されます(そのためのPICチップ仕様をIRQ7参照してください)。IRQ7が割り込みベクトルになるようにPICをプログラムしますが、WindowsとLinuxはこのマッピングを変更して、IRQとCPU例外に対して同じ割り込みベクトルを共有しないようにします8259A。このマッピングはPICから照会できないようですが、初期化制御ワード2()をPICに送信することで確立されます。Linuxコードの関連部分は次のとおりです。BIOS0FhICW2init_8259A()

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

これは、スプリアス割り込みベクトル部分に答えるはずです。

LOCとについてPMIは、これらはローカルAPICの割り込みであり、上記のスプリアス割り込みと同じように、APICから割り込みベクトルを見つけることができます。

于 2012-07-08T04:49:01.060 に答える