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) 的缺点,提供更灵活和强大的中断管理功能。
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 结构体。下图描述了这种映射。
中断号
在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/
来源:爱影博客
文章版权归作者所有,未经允许请勿转载。
共有 0 条评论