多处理器系统中的中断描述符 table
Interrupt descriptor table in multiprocessor system
我读到,在多处理器系统中,每个处理器都有自己的中断描述符副本 table (IDT),并且它们使用一个全局描述符副本 table (GDT)。
为什么处理器不能使用一份 IDT?
根据 GDT 一词的使用,我假设您询问的是 x86 and/or x86-64 处理器。
每个 x86 处理器(准确地说是硬件线程)都有自己独立的 IDTR 和 GDTR 寄存器。这允许但不要求 OS 在每个处理器上使用不同的 IDT 和 GDT。
x86中的中断向量space是8位,其中32位保留,剩下224个中断。在许多平台中,这不足以区分中断向量。通过在每个处理器上使用不同的 IDT,OS 可以为每个处理器分配多达 224 个不同的中断向量。 (但是,您不应该假设所有 OS 都这样做。)
相比之下,GDT 最多可以容纳 8191 个描述符*,远远超过大多数 OSes 使用的数量,因此很少需要 OS 单独使用每个处理器上的 GDT。
* 不能使用 GDT 条目 0,因为索引为 0 的选择器被认为是空选择器。在 64 位模式下,系统描述符扩展为 16 字节,而代码和数据描述符仍为 8 字节,因此 GDT 中可能的条目总数取决于存在的描述符类型。
我读到,在多处理器系统中,每个处理器都有自己的中断描述符副本 table (IDT),并且它们使用一个全局描述符副本 table (GDT)。
为什么处理器不能使用一份 IDT?
根据 GDT 一词的使用,我假设您询问的是 x86 and/or x86-64 处理器。
每个 x86 处理器(准确地说是硬件线程)都有自己独立的 IDTR 和 GDTR 寄存器。这允许但不要求 OS 在每个处理器上使用不同的 IDT 和 GDT。
x86中的中断向量space是8位,其中32位保留,剩下224个中断。在许多平台中,这不足以区分中断向量。通过在每个处理器上使用不同的 IDT,OS 可以为每个处理器分配多达 224 个不同的中断向量。 (但是,您不应该假设所有 OS 都这样做。)
相比之下,GDT 最多可以容纳 8191 个描述符*,远远超过大多数 OSes 使用的数量,因此很少需要 OS 单独使用每个处理器上的 GDT。
* 不能使用 GDT 条目 0,因为索引为 0 的选择器被认为是空选择器。在 64 位模式下,系统描述符扩展为 16 字节,而代码和数据描述符仍为 8 字节,因此 GDT 中可能的条目总数取决于存在的描述符类型。