X86 我是操作系统新手,IDT的大小是多少?

X86 我是操作系统新手,IDT的大小是多少?,x86,interrupt,osdev,X86,Interrupt,Osdev,存储中断门描述符需要6个字节,每个描述符由32位段选择器和16位偏移组成。中断描述符表的字节大小是多少?通常,您有256个条目,因为每个CPU只有256个可能的中断;因此,如果一个条目是8字节保护模式,那么长模式下的IDT限制将是2047和4095,因为条目是16字节 然而: 对于单CPU、无IO APIC的古代计算机,您只需要48个条目、32个异常条目和16个PIC芯片IRQ条目 对于异常情况,例如临时启动代码,当IDT条目不存在/超出IDT限制时,您可以使用通用保护故障异常的错误代码来确定中

存储中断门描述符需要6个字节,每个描述符由32位段选择器和16位偏移组成。中断描述符表的字节大小是多少?

通常,您有256个条目,因为每个CPU只有256个可能的中断;因此,如果一个条目是8字节保护模式,那么长模式下的IDT限制将是2047和4095,因为条目是16字节

然而:

对于单CPU、无IO APIC的古代计算机,您只需要48个条目、32个异常条目和16个PIC芯片IRQ条目

对于异常情况,例如临时启动代码,当IDT条目不存在/超出IDT限制时,您可以使用通用保护故障异常的错误代码来确定中断/IRQ号;14个IDT条目足以应付一般保护故障,但没有更高的条目

理论上,您可以动态调整IDT的大小,例如,开始时有足够的空间容纳256个条目,但只为48个条目分配RAM,然后自动检测硬件功能,并通过分配更多RAM和调整IDT限制来增加IDT的大小。这通常是不值得费心的,例如,调整IDT大小的额外代码可能会花费比节省更多的RAM

请注意,对于大型服务器,对于不同的NUMA域或不同的CPU使用不同的IDT是有意义的;为了避免每个计算机限制的设备的最大IRQ为256-32-some,而改为每个NUMA域或每个CPU限制的设备的最大IRQ为256-32-some。不要忘记,理论上,每个支持MSI的PCI设备都需要一组多达16个IRQ;因此,当有14个或更多PCI设备时,理论上大约220个IRQ的全局限制可能会成为查找/分配免费IDT条目的问题;而且由于中断优先级对APIC的工作方式,理论上,一个全局IDT在仅有2个PCI设备的情况下可能会开始变得不理想,例如,如果它们都需要16个中断,并且都需要相同的中断优先级。实际上,不太可能所有的PCI设备都需要这么多的中断,所以实际上并不像理论上那么糟糕


注意:最大值256-32——一些IRQ来自最大值256个IDT条目,减去32个异常条目,减去一些处理器间中断的杂项条目,伪IRQ,如果使用软件中断,可能还有内核API。

通常,您有256个条目,因为每个CPU只有256个可能的中断;因此,如果一个条目是8字节保护模式,那么长模式下的IDT限制将是2047和4095,因为条目是16字节

然而:

对于单CPU、无IO APIC的古代计算机,您只需要48个条目、32个异常条目和16个PIC芯片IRQ条目

对于异常情况,例如临时启动代码,当IDT条目不存在/超出IDT限制时,您可以使用通用保护故障异常的错误代码来确定中断/IRQ号;14个IDT条目足以应付一般保护故障,但没有更高的条目

理论上,您可以动态调整IDT的大小,例如,开始时有足够的空间容纳256个条目,但只为48个条目分配RAM,然后自动检测硬件功能,并通过分配更多RAM和调整IDT限制来增加IDT的大小。这通常是不值得费心的,例如,调整IDT大小的额外代码可能会花费比节省更多的RAM

请注意,对于大型服务器,对于不同的NUMA域或不同的CPU使用不同的IDT是有意义的;为了避免每个计算机限制的设备的最大IRQ为256-32-some,而改为每个NUMA域或每个CPU限制的设备的最大IRQ为256-32-some。不要忘记,理论上,每个支持MSI的PCI设备都需要一组多达16个IRQ;因此,当有14个或更多PCI设备时,理论上大约220个IRQ的全局限制可能会成为查找/分配免费IDT条目的问题;而且由于中断优先级对APIC的工作方式,理论上,一个全局IDT在仅有2个PCI设备的情况下可能会开始变得不理想,例如,如果它们都需要16个中断,并且都需要相同的中断优先级。实际上,不太可能所有的PCI设备都需要这么多的中断,所以实际上并不像理论上那么糟糕

注意:最多256-32个IRQ——一些IRQ来自最多256个IDT条目,减去32个异常条目,减去一些处理器间中断的杂项条目,伪IRQ,如果使用软件中断,可能还有内核API