computer_knowledge_notes/Hardware/Intel/Interrupt/APIC.md

4.3 KiB
Raw Blame History

APIC简介

Advanced Programmable Interrupt Controller是一个与8259A兼容的高级中断处理器。APIC分为两层Local APIC和I/O APIC。

APIC

  • I/O APIC I/O APIC是用来与外部设备通讯的它安装在主板上它完成了APIC最主要的功能中断处理。 I/O APIC提供了两个模式普通模式和8259A兼容模式。xv6在单核环境下会选择使用8259A兼容模式而在多处理器环境下则会使用普通模式。
  • Local APIC是APIC的顶层每个核都有一个对应的Local APICLAPIC内置在CPU内部。它负责进行多处理器之间的中断传输屏蔽中断还提供了一个可编程的Timer。由于I/O APIC已经提供了中断处理的功能Local APIC只是起辅助作用可以屏蔽不用。

APIC的中断映射

IRQ Using SERIRQ Direct form Pin Using PCI Message Internal Modules
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16~19 PIRQA~PIRQD PIRQA~PIRQD Yes Internal devices are routable
2023 N/A PIRQH Yes

控制方式

APIC通过修改该单元的寄存器来实现控制但APIC的相关寄存器被映射到了物理地址。

  • Local APIC默认映射到物理地址0xFEE0 0000
  • IO APIC 默认映射到物理地址0xFEC0 0000

PRT表的格式

Programmable Redirection Table(24*64bit)IOAPIC上有24个interrupt pin每一个pin都对应一个RTE,所以针对每一个interrupt pin都可以单独设定它的mask触发方式(level,edge trigger),中断管脚的极性,传送方式,传送状态,目的地,中断向量等。

bit 意义
6356 Destination Field(Physical Mode:APIC ID, Logical Mode:一组CPU)
5517 Reserved
16 Interrupt Mask(1:屏蔽中断0:中断发给LAPIC)
15 Trigger Mode(1:Level电平触发。0Edge边沿触发)
14 Remote IRR,只读只对Level触发有效。1LAPIC接收了该中断0LAPIC写EOI
13 Interrupt Input Pin Polarity(INTPOL)(1:低电平0高电平)
12 Delivery Status(0:IDEL,当前没有中断1:Send PendingIOAPIC已收到中断但由于某种原因还没有发给LAPIC)
11 Destination Mode(0:Physical Mode, 1: Logical Mode)
10:8 Delivery Mode(0:Fixed, 1:Lowest Priority, 2: SMI, 4: NMI, 5:INIT, 7:ExtINT )
7:0 Interrupt Vector(0x10~0xFE, X86架构的前16个vector被系统预留)