APIC
概述: 是一个用于管理和处理中断的硬件组件,用于提高多核或多处理器系统的中断处理效率
Local APIC:
- 定义:是每个处理器核心独有的APIC,负责该处理核心的中断处理任务。
- 作用:
- 接收中断:Local APIC接收来自IO APIC或其他处理器的中断请求
- 生成中断:Local APIC可以生成中断信号,以通知处理器进行任务调度、上下文切换等
- 处理中断:Local APIC负责管理本地中断,确保处理器按照优先级顺序响应中断请i去
- 功能:
- 每个核心有一个Local APIC来管理该核心的中断
- Local APIC处理器与外部设备的IO APIC通过系统总线进行通信
- Local APIC支持中断优先级控制、向量分配等功能
IO APIC:
-
定义:是一个独立的APIC,用于管理外部设备产生的中断并将这些中断转发到相应的处理器。
-
作用:
- 接收外部中断:IO APIC接收来自外部硬件设备(如网卡、磁盘、USB设备等)发送的中断信号
- 路由中断:IO APIC将接收到的外部中断根据预设的路由规则(通常根据中断源和目标CPU)转发到对应的本地APIC
-
功能:
- IO APIC支持多路复用,将来自不同外设的中断信号通过不同的IRQ编号进行管理,并将它们转发到处理器核心
- 支持中断的优先级控制,确保高优先级的中断能够及时被处理
LVT(Local Vector Table)
概述: 是一个表格,包含多个条目,每个条目对应一个中断源。每个LVT条目存储了与该中断源相关的配置,包括该中断的触发方式、目标处理器等信息
工作原理:
LVT将Local APIC的中断源映射到特定的中断服务例程,并设置相关的中断控制属性。LVT的每个条目通常包括以下几个部分:
- 中断向量(Vector):表示中断的唯一标识符
- 传递模式(Delivery Mode):
- 固定模式(Fixed Mode):中断传递给指定CPU
- 最低优先级(Lowest Priority):传递给当前优先级最低的CPU
- 外部中断(External Interrupt):来自外部设备的中断
- NMI(Non-Maskable Interrupt):不可屏蔽中断
- 触发方式(Trigger Mode):指定该中断是上升沿触发、下降沿触发、还是电平触发
- 屏蔽位(Mask):如果设置为1,表示屏蔽(禁用)该中断;如果设置为0,则启用该中断
- 目标处理器(Destination CPU):如果是多处理器系统,LVT还会指定该中断由哪个CPU来处理
主要条目:
- LVT Timer(APIC_LVTT):
- 该条目用于管理Local APIC的定时器中断
- 它控制定时器的触发方式,通常配置为周期性中断或一次性中断,用于定期触发操作系统的调度器
- LVT Keyboard(APIC_LVT0):
- 该条目用于管理键盘中断。实际上,它并不常用与现代系统,但可以用于设置其他外部中断源
- LVT Spurious Interrupt(APIC_LVT1):
- 该条目用于设置处理杂散中断(spurious interrupts)的行为。杂散中断通常是一些错误或无效的中断源
- LVT Error(APIC_LVTERR):
- 该条目用于处理APIC自身产生的错误中断。如果APIC遇到硬件错误或配置错误,就会触发该中断
- LVT Thermal(APIC_LVTTHMR):
- 该条目用于处理热管理中断,例如温度监测相关的事件。这在支持热管理的系统中非常重要
- LVT Machine Check(APIC_LVTCMCI):
- 该条目用于处理机器检查(Machine Check Exception, MCE)中断,通常用于检测硬件故障或系统错误
- LVT Performance Counter(APIC_LVTPC):
- 该条目用于管理性能计数器相关的中断
LVT的操作:
- 写入LVT寄存器:通过
apic_write()
和apic_read()
函数对LVT寄存器进行写入和读取操作,修改LVT条目的值 - 屏蔽LVT条目:通过将LVT的屏蔽位设置为1来屏蔽中断。通过将其恢复为0可以启用中断
- 配置触发方式:根据需要配置中断的触发方式