X86 SCI-系统控制中断向量是如何定义的?

X86 SCI-系统控制中断向量是如何定义的?,x86,interrupt,interrupt-handling,X86,Interrupt,Interrupt Handling,根据ACPI规范,FADT(固定ACPI描述表)表包含一个向操作系统报告SCI中断编号的字段。该字段定义如下: 我在Intel x86平台上转储了FADT表,并看到SCI中断与编号9: 但根据英特尔手册,0-31是IA架构定义中断的保留向量。具体而言,9定义为: 因此,根据注释,9不是在I386处理器之后生成的。所以我想这就是为什么9可以被SCI回收的原因。这可以看作是ACPI规范的特定于x86的实现 我说的对吗 加1 我好像误解了什么。将在以后更新。在整个过程中,使用中断机制的每个通知事

根据ACPI规范,FADT(固定ACPI描述表)表包含一个向操作系统报告SCI中断编号的字段。该字段定义如下:

我在Intel x86平台上转储了FADT表,并看到SCI中断与编号
9

但根据英特尔手册,
0-31
是IA架构定义中断的保留向量。具体而言,
9
定义为:

因此,根据注释,
9
不是在I386处理器之后生成的。所以我想这就是为什么9可以被SCI回收的原因。这可以看作是ACPI规范的特定于x86的实现

我说的对吗

加1 我好像误解了什么。将在以后更新。

在整个过程中,使用中断机制的每个通知事件都会与关联。
GSI在先前链接的6.1 ACPI规范1的第5.2.13节“全局系统中断”中进行了简要描述

全局系统中断可视为ACPI即插即用IRQ编号。
他们习惯于 在执行中断资源分配的表和ASL方法中虚拟化中断

规范使用术语系统向量表示GSI的编号。
例如,GSI编号9具有系统向量编号9。
这是公认的混淆,因为术语“向量”可能会被误认为英特尔手册中“中断向量”中的术语“向量”

要了解GSIs,必须至少了解IRQ。
x86系统上的两个标准中断控制器是

  • 8259A图片
    在标准IO地址上总是有两个PIC,每个PIC有八个输入引脚(IR 0-7)。
    一个PIC是主PIC,处理IRQ 0-7。
    另一个是从机,处理IRQ 8-15,其输出到主机2的IR2

  • IO APIC。
    不要将IO APIC与LAPIC混淆。

    可以有一个或多个IO APIC,所有内存都映射到可变(但通常固定)地址,每个IO APIC都具有可变数量的INTINx输入引脚。
    通常,其中一个IO APIC连接并配置为模拟PIC,INTIN0-15映射到IRQ0-15,但这不是要求

  • 消息信号中断[]
    这不是一个中断控制器(因此不计入计数),但值得一提。
    PIC是第一代控制器,IO APIC是第二代控制器,MSI是第三代控制器。
    它们以写入特定内存地址的方式实现,因此不需要控制器。
    在x86系统上,PCI(e)设备配置为写入LAPIC专用区域3

  • 中断控制器与LAPIC一起配置为将IRQ号映射为矢量号。
    PIC的标准配置为

    IRQ 0-7  -> INT 08h - 0fh  
    IRQ 8-15 -> INT 70h - 77h  
    
    请注意,IBM将第一个IRQ映射到基08h是一个错误(Intel将前32个中断向量标记为保留)

    一旦知道了IRQ号,就很容易得到INT号,操作系统通常可以很容易地为此目的制作一个表,因为中断控制器如何连接到CPU是众所周知的(或者可以通过ACPI表知道)

    将IRQ与设备关联(称为中断路由的过程)非常复杂,因为它需要了解设备如何连接,ACPI规范使用GSI来简化这一方面

    最后,GSI(或ACPI中的系统向量)必须映射到IRQ,这在PIC模式下以一对一的方式完成,或者通过为每个IO APIC分配一个GSI基(系统向量基),从而将所有GSI从基分配到引脚数减一


    记住所有这些,我们最终可以理解
    SCI_INT
    字段的描述:

    SCI中断以8259模式连接到的系统向量。在…上 不包含8259的系统,此字段包含 SCI中断的全局系统中断号

    在我看来,文本不精确,全局系统中断号只是系统向量的另一个名称,因此整个文本简化为“SCI中断的系统向量”

    SCI是一个系统向量数,它具有GSI的性质,因此您找到的数字9是IRQ 94。 默认情况下,IRQ 9是INT 71h,但任何使用ACPI的操作系统都肯定已将IRQ重新映射到不同的基,并且肯定避免了与处理器异常的任何冲突

    长话短说,数字9不是一个中断向量,而是一个系统向量(由ACPI定义)

    GSI-IRQ-INT
    系统向量中断向量
    

    1最迟在撰写本文时。
    8259A的设计考虑了链式连接。
    3在所有LAPIC之间共享,但可以重新映射,特别是对于非SMP系统,以避免交叉QPI链路。

    4正如我们所知,在APIC模式下,GSI 9可由不处理ISA IRQ的IO APIC处理

    9是IRQ编号。8259A或APIC链将从特定的矢量号开始重新映射IRQ。在实模式下,默认值将IRQ0-7映射到INT 8-15,并将IRQ8-15映射到INT 70h-77h。进入保护模式后,操作系统在前32个中断向量后重新映射IRQ,以便它们不会与异常重叠。我感觉这只是从每个PIC的
    局部编号空间
    全局编号空间
    的一种映射。这样的映射可以更容易地分辨来自每个PIC.yarchive.net/comp/linux/tla.html的每个中断输入。Linus也不喜欢这个术语。我猜全局系统中断与全局系统中断来自同一个名称
         GSI        <---->   IRQ     <---->           INT
    System vector                                Interrupt vector