【问题标题】:Interrupt descriptor table in multiprocessor system多处理器系统中的中断描述符表
【发布时间】:2018-06-24 11:34:47
【问题描述】:

我读到,在多处理器系统中,每个处理器都有自己的中断描述符表 (IDT) 副本,并且它们使用全局描述符表 (GDT) 的副本。

为什么处理器不能使用 IDT 的一份副本?

【问题讨论】:

  • 您正在阅读的内容必须是系统特定的。所有处理器都可能使用一个 IDT。
  • 您对什么处理器/系统感兴趣?

标签: assembly operating-system interrupt interrupt-handling protected-mode


【解决方案1】:

我假设您使用术语 GDT 来询问 x86 和/或 x86-64 处理器。

每个 x86 处理器(准确地说是硬件线程)都有自己独立的 IDTR 和 GDTR 寄存器。这允许但不要求操作系统在每个处理器上使用不同的 IDT 和 GDT。

x86中的中断向量空间为8位,其中32位保留,剩下224个中断。在许多平台中,这还不够独特的中断向量。通过在每个处理器上使用不同的 IDT,操作系统可以为每个处理器分配多达 224 个不同的中断向量。 (但是,您不应该假设所有操作系统都这样做。)

相比之下,GDT 最多可以容纳 8191 个描述符*,这远远超过大多数操作系统使用的数量,因此操作系统很少需要在每个处理器上使用单独的 GDT。

* GDT 条目 0 不能使用,因为索引为 0 的选择器被视为空选择器。在 64 位模式下,系统描述符扩展为 16 字节,而代码和数据描述符保持 8 字节,因此 GDT 中可能的条目总数取决于存在的描述符类型。

【讨论】:

  • the size:pointer operand for lgdt 的 16 位 table-size 字段被编码为 bytes - 1,因此您可以传递 65536 字节 / 8192 个描述符的大小。 0xfff8 | priv_level 的段选择器应该索引最高的。是否有其他限制阻止您使用所有 8192 GDT 或 LDT 条目?
  • 顺便说一句,英特尔的手册使用名称GDTR 表示lgdt 设置的内部GDT 指针寄存器,IDTR / LDTR 也是如此。
  • 呵呵,我想知道是不是这么简单,谢谢。
  • 有点迂腐,但在 64 位模式下,当存在 TSS 描述符时,描述符的数量可能会更少,因为它们是 16 字节宽(而不是 8 字节)
猜你喜欢
  • 2015-08-05
  • 2016-01-07
  • 2015-04-07
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 2017-02-12
  • 2016-08-07
  • 2018-01-19
相关资源
最近更新 更多