Operating system 了解IDTR寄存器吗?

Operating system 了解IDTR寄存器吗?,operating-system,x86-64,osdev,interrupt-handling,Operating System,X86 64,Osdev,Interrupt Handling,我无法理解这幅图像,它解释了英特尔X86-64处理器中的IDTR IDT基地址大小是64,我完全理解,因为它可以几乎内存中的任何位置 但是,为什么IDT限制为16位?为什么我们需要这些东西 每个向量的大小为16,有256个向量,因此我需要表示的最大加法是16*256=4096,它可以在12位而不是16位中完成。首先,请记住,这种机制可以追溯到32位80386,其中lidt将加载32位基和16位限制 我认为使用16位限制有两个原因,即使12位就足够了: lidt采用与lgdt相同格式的基/极限对

我无法理解这幅图像,它解释了英特尔X86-64处理器中的IDTR

IDT基地址大小是64,我完全理解,因为它可以几乎内存中的任何位置

但是,为什么IDT限制为16位?为什么我们需要这些东西


每个向量的大小为16,有256个向量,因此我需要表示的最大加法是16*256=4096,它可以在12位而不是16位中完成。

首先,请记住,这种机制可以追溯到32位80386,其中
lidt
将加载32位基和16位限制

我认为使用16位限制有两个原因,即使12位就足够了:

  • lidt
    采用与
    lgdt
    相同格式的基/极限对(事实上,这两条指令都记录在上)。而且
    lgdt
    确实需要一个16位的限制,因为全局描述符表可能高达64 KB,对应于每个8字节的8K条目(同样适用于32位机器)。这个数字的选择是明确的,这样一个16位选择器,对应于8086的16位段寄存器,在屏蔽了GDT的低3位(用于在LDT/GDT之间进行选择并指定请求者权限级别)后,可以用作GDT的字节索引

    对两条指令使用相同的格式可能使它们能够共享微码,从而略微降低80386的成本和复杂性

  • 由于最小的可寻址单元是字节,因此保存4位是毫无意义的,因为没有简单的方法可以将半字节用于其他内容。我想Intel可能会说limit字段的高4位是保留的,并且可能会考虑在以后的CPU中使用它们(例如,启用新的中断处理功能),但是,他们没有


  • 它比386早,因为IDT amd GDT/LDT起源于286。在286上,GDTR/LDTR/IDTR是6字节结构。2个字节用于限制,4个字节用于基址(其中仅使用基址较低的24位,而放弃较高的8位)