BIOS开发笔记 11 – 何为 GSI?

今天在stackoverflow看到了一个问题,如下:

意思是,在Intel平台的机器上,查看FADT这个ACPI Table中SCI Interrupt的值,发现是9,这个9代表是Intel AI32-X64手册中定义的INT 9吗?

查一下ACPI规格书中,FADT Table中,SCI Interrupt的定义:

即在使用 8259 模式的系统中,SCI 中断的系统向量将被链接到特定的值。在不包含 8259 的系统中,这个字段将包含SCI中断的GSI 编号。

看来要得到答案,得弄清楚什么是8259模式和非8259模式,以及 GSI相关的定义。

8259 简介 

8259 是一种可编程中断控制器 (PIC),用于管理计算机中的中断请求 (IRQ)。它可以管理多达 8 个 IRQ,支持优先级中断,可以与其他 8259 芯片级联以支持更多 IRQ。

其工作原理大致为:外部设备向 8259 发送中断请求信号,该信号对应于特定的 IRQ 线路。8259 芯片会根据中断请求的优先级来进行处理。如果 8259 芯片检测到有效的中断请求,它会向 CPU 发送一个中断信号,并告知 CPU 中断源的 IRQ 编号。CPU 会根据收到的 IRQ 号码来找到对应的中断处理程序,并执行该程序。

它只能管理 8 个 IRQ,对于现代计算机来说这远远不够,不支持即插即用 (PnP),性能相对较低。

由于这些缺点,8259 逐渐被更新的 PIC 芯片所取代,例如 Intel 的 APIC (Advanced Programmable Interrupt Controller) 和 AMD 的 MPIC (Multi-Processor Interrupt Controller)。

 APIC 简介 

APIC(Advanced Programmable Interrupt Controller),高级可编程中断控制器,是一种可编程中断控制器,用于管理现代计算机中的中断。它旨在克服 8259 可编程中断控制器 (PIC) 的缺点,提供更灵活和强大的中断管理功能。

APIC支持大量中断,可以管理多达 256 个中断源,远远超过了 8259 的 8 个中断限制。支持 PnP 功能,可以自动检测和配置新添加的设备中断。可以支持多处理器系统,并提供有效的处理器间中断 (Inter-Processor Interrupt, IPI) 机制。性能比 8259 高得多,可以减少中断处理的延迟。
APIC有2种类型,一种是Local APIC(LAPIC),每个处理器都有一个Local APIC,用于处理本地中断请求。
另一种是I/O APIC (Input/Output APIC),用于处理来自外部设备的中断请求。

GSI 简介 

全局系统中断(Global System Interrupts,简称GSIs)是在ACPI标准中定义的一种中断表示方法。GSIs是一种统一的方式来用系统中的所有中断资源,无论底层硬件如何实现。在ACPI中,全局系统中断为操作系统提供了一个统一的中断编号系统,从而简化了中断管理和配置。

支持 ACPI 的系统中使用两种中断模型。第一种模型是 APIC 模型。在 APIC 模型中,每个 I/O APIC 支持的中断输入数量可能会不同,比如有的支持24个中断,有的支持16个中断。操作系统 (OSPM) 通过确定每个 I/O APIC 支持的中断输入数量以及根据 I/O APIC 结构体指定的每个 I/O APIC 的全局系统中断基址来确定全局系统中断的映射。OSPM 通过读取 I/O APIC 的Max Redirection register来确定中断输入数量。映射到该 I/O APIC 的全局系统中断从全局系统中断基址开始,一直延伸到Max Redirection register中指定的中断数量。系统中每个 I/O APIC 都对应唯一一个 I/O APIC 结构体。下图描述了这种映射。

另一种中断模型是标准AT风格,它使用连接到主从8259 PICs对的ISA IRQ。系统向量对应于ISA IRQ。ISA IRQ及其到8259对的映射是AT标准的一部分,因而定义得很清楚。映射关系如下图。
术语释义
ISA IRQ: 早期 PC 机中使用的一种中断请求机制。
标准 AT 风格: 指代早期 PC 机使用的中断管理方式,核心是 8259 可编程中断控制器 (PIC)。
主从 8259 PICs: 在标准 AT 风格中,通常使用两个 8259 芯片级联工作,一个为主芯片,另一个为从芯片,协同处理中断请求。
 

中断号 

在APIC模式下,中断号(Interrupt Vector)的分配是在操作系统层面进行配置的,它不再固定,而是根据系统的需求和配置来动态分配。这意味着IRQ编号可以被映射到任何一个可用的中断向量号,通常这会是一个高于0x20的数值,因为0x00到0x1F的向量号被保留给了处理器的异常和非屏蔽中断(NMI)。

在多数基于APIC的现代系统中,操作系统通常会避免使用低于0x20的向量,因为这些向量号被CPU用于处理异常,如除零错误、缺页异常等。

在传统的PIC模式下,IRQ 0到IRQ 7默认映射到0x08到0x0F,IRQ 8到IRQ 15映射到中断向量0x70到0x77。

最后,回答本文开头的问题,在APIC模式下,SCI Interrupt 9的中断号是不确定的,而在PIC模式下,IRQ 9 对应的中断号则是0x71。

版权声明:
作者:bin
链接:https://ay123.net/mystudy/bios/1773/
来源:爱影博客
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
BIOS开发笔记 11 – 何为 GSI?
今天在stackoverflow看到了一个问题,如下: 意思是,在Intel平台的机器上,查看FADT这个ACPI Table中SCI Interrupt的值,发现是9,这个9代表是Intel AI32-X……
<<上一篇
下一篇>>
文章目录
关闭
目 录