1.APIC的引入
传统的i386处理器采用8259A中断控制器,8259A只能提供多个外部中断源与单一CPU之间的连接,如果采用8259A中断控制器,只能静态地把所有外部中断划分成若干组。
为了达到动态分配中断请求的目的,Intel设计了APIC(Advanced Programable Interrupt Controllor)。
2.SMP中的中断控制结构
在SMP结构中,考虑到有“处理器间的中断请求”的需求,在各个CPU芯片内部分别集成一个APIC。但SMP结构中还需要一个外部的、全局的、用于与外部I/O交互的APIC。
当然,在SMP结构中也可以采用各个CPU内部APIC+8259A(外部)的方式实现,因为,各个CPU内部本地的APIC有个可以用于时钟中断源的定时器。
3.几个为SMP结构专用的中断及中断响应程序
中断:
中断响应程序:
i386/kernel/smp.c
i386/kernel/apic.c
void smp_apic_timer_interrupt(struct pt_regs * regs)
{
...
ack_APIC_irq();
...
}
asmlinkage void smp_spurious_interrupt(void)
{
...
ack_APIC_irq();
...
}
asmlinkage void smp_error_interrupt(void)
{
...
ack_APIC_irq();
...
}
ack_APIC_irq():向CPU中的APIC发出对中断请求的确认。
中断序号的划分
0x00~0x1f | 0x20~0x2f | 0x30~0x79 | 0x80 | 0x81~0xef | 0xf0~0xfa | 0xfb~0xff |
CPU本身trap | ISA | 'high' PCI IRQs |系统调用 | 'high' PCI IRQs | smp |
| filled in on demand | | filled in on demand |