4.3 KiB
4.3 KiB
APIC简介
(Advanced Programmable Interrupt Controller)是一个与8259A兼容的高级中断处理器。APIC分为两层:Local APIC和I/O APIC。
- I/O APIC I/O APIC是用来与外部设备通讯的,它安装在主板上,它完成了APIC最主要的功能:中断处理。 I/O APIC提供了两个模式,普通模式和8259A兼容模式。xv6在单核环境下,会选择使用8259A兼容模式,而在多处理器环境下,则会使用普通模式。
- Local APIC是APIC的顶层,每个核都有一个对应的Local APIC,LAPIC内置在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 |
20~23 | 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 | 意义 |
---|---|
63:56 | Destination Field(Physical Mode:APIC ID, Logical Mode:一组CPU) |
55:17 | Reserved |
16 | Interrupt Mask(1:屏蔽中断,0:中断发给LAPIC) |
15 | Trigger Mode(1:Level,电平触发。0:Edge,边沿触发) |
14 | Remote IRR,只读,只对Level触发有效。(1:LAPIC接收了该中断,0:LAPIC写EOI) |
13 | Interrupt Input Pin Polarity(INTPOL)(1:低电平,0:高电平) |
12 | Delivery Status(0:IDEL,当前没有中断,1:Send Pending,IOAPIC已收到中断,但由于某种原因还没有发给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被系统预留) |