首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

高级可编程中断控制器 APIC

高级可编程中断控制器 APIC

对于处理器来说,有两个最主要的功能:
它接收来自处理器中断pin 发来的中断,这个中断可以是来自内部也可以是来自外部的I/O APIC, 然后交给处理器core 去处理。
在多处理器系统中,它发送和接收处理器之间的中断(interprcessor interrupt Ipi), ipi 消息可以用来在处理器之间分发中断,或者执行系统级的功能(原文 system wide functions) 比如, 启动处理器,给一群处理器分配任务)。
外部的I/O  APIC, 作为intel 芯片组的一部分,它主要功能就是接收来自I/O 设备的中断事件,然后转发给local apic, 在多处理器系统中,还得考虑这样一个事情,就是当有中断消息的时候, 这个中断消息发给哪一个core 来处理,或者说将这个中断分配给哪个core 来处理,这个机制也是I/O apic 要做的事情。
这一章主要讲LOCAL APIC 以及他的编程接口,还要大致讲解local APIC 和 I/O APIC 的交互接口。
当local APIC 把一个中断发送给core 处理的时候,处理器怎么去处理这个事情会在另外一章具体讲解。 第六章 "Interrupt and Exception Handling".
每一个local APIC 包含很多个APIC 寄存器和相关的硬件,用来控制中断到processor core的传送,还有生成IPI 消息,APIC 寄存器使用内存映射的方式,对于它的读写可以使用MOV 指令。
Local APIC 可以接收来自下面中断源的中断:
连在本地的I/O 设备 (Locally connected I/O device) ,这些设备直接连在local 中断pin(LINT0 和LINT 1), 也可以是连接
在8259 类型的控制器上,然后通过 8259级联转发给一个local 中断pin。

处理器之间的中断 (Inter-processor interrupts, IPIS)  Intel 64 或者 IA 32 处理器可以使用IPI 机制去中断另外一个system
bus 上的处理器,ipi 用来self 中断,中断转发,或者优先处理(preemptive scheduling).

APIC 时钟中断,local APIC 时钟,当时钟里的count 值到了,它可以发一个local 中断到相应的处理器。

性能监视计数中断 当pernformance-monitoring counter overflow 的时候,会发一个中断给相应的处理器。

热传感器中断 Thermal Sensor interrupt 当内部thermal 传感器被trip的时候,会向自己发一个中断。

APIC 内部错误中断, APIC internal error interrupts 当local APIC 识别到一个内部错误的时候,比如尝试去访问一个
没有实现的寄存器,APIC 可以发送一个中断给相应的processor.

上面提到的中断源:处理器的LINT0和LINT1 pin, APIC 时钟控制器, 性能监视计数器(performance-monitoring counter),热传感器,内部错误检测器,
都叫做内部中断源(local interrup sources), 当从内部中断源接收一个中断时,local APIC 使用中断传送协议去传送一个中断,通过去设置一堆叫做本地中断向量表(local vector table) LVT,  这个中断向量表为每一个中断源提供了一个独立的,分开的进入点,举个例子,如果把LINT 1 作为NMI pin, 这个时时候 ,在中断向量表中,把中断号设为2(NMI interrupt), 知道中断号之后,处理器就知道怎么去处理这个中断。
local APIC 使用IPI 消息的机制来处理来自其他处理器的中断。
处理器使用编程local ICR(interrupt command register) 的方式去生成一个ipi, 这个写ICR的动作就会在 system bus 或者 APIC bus 上生成一个IPI message.
IPI 可以发送给别的处理器也可发给生成这个ipi 的处理(就是自已), 当目的处理器接收 IPI 消息的时候,它的local APIC 就会自动去处理这些消息,
local APIC 也可以接收接在 I/O APIC 上面各个设备发来的中断,I/O APIC 的职责就是接收来自外部设备的中断,然后以中断消息的方式发给local APIC.

单处理器中local APIC 与 I/O APIC 之间的关系

I/O APIC 上个别pin 被编程后可生成特殊的中断向量, I/O APIC 还有一个 “virtal wre mode" 使得它要以和标准的8259A 中断控制器沟通,注意local APIC 是可以被disabl的,这样就允许处器直接接收来自8259A中断控制器的中断。
local APIC 和 I/O APIC 都是为MP 系统设置的,每一个local APIC 可以去处理来自 I/O APIC, system bus 上面传来的 IPI, 还有自己产生的中断。中断也可以通过local 中断pin 传到指定(individual)pin, 但是,一般情况下,不这么玩。

Intel xeon 处理器上 local apic 和 I/O APIC

P6 Family 处理器中 local APIC 与 I/O APIC.
在多处理器系统中,最典型的用法就是使用IPI 去发送固定的中断(有明确(specific)中断向量号的中断)以及特殊目的的中断,举个例子,loal APIC 可以使用IPI 去转发一个中断给另外一个处理器。特殊功能(purpose) 的IPI (包括 NMI, INIT, SMI 以入SIPI IPIs), 这样使得系统总线上的一个或多个处理器去执行system -wide 启动和控制。
继承事业,薪火相传
返回列表