我是新手,请问IDT的大小是多少?

问题描述 投票:0回答:1

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

operating-system interrupt
1个回答
3
投票

通常情况下,你有256个条目(因为每个CPU只有256个可能的中断);所以如果一个条目是8个字节(保护模式),IDT限制将是2047(在长模式下是4095,因为条目是16个字节)。

然而,对于古老的计算机(单CPU)来说,它的IDT限制是2047(在长模式下是4095,因为条目是16字节)。

  • 对于古老的计算机(单CPU,没有IO APIC),你只需要48个条目(32个异常条目加上16个PIC芯片IRQs条目)

  • 对于 "非正常情况"(如临时启动代码),你可以作弊(当IDT条目不存在时,使用一般保护故障异常的错误代码来确定中断IRQ号,超出IDT的限制);用14个IDT条目(足够应付一般保护故障,没有更多的条目)。

  • 理论上,你可以动态调整IDT的大小(比如一开始空间足够256个条目,但只分配48个条目的RAM,然后自动检测硬件能力,通过分配更多的RAM和调整IDT限制来增加IDT的大小)。这样做多半不值得(例如调整IDT大小的额外代码可能会让你损失更多的RAM,而不是节省下来)

请注意,对于大型服务器来说,为不同的NUMA域或不同的CPU设置不同的IDT是很有意义的;以避免 "每台计算机最大256-32-some IRQs "的限制(而得到 "每个NUMA域或每个CPU最大256-32-some IRQs "的限制)。不要忘记,每个支持MSI的PCI设备可以(理论上)想要一组最多16个IRQ;所以当有14个或更多的PCI设备时,"大约220个IRQs maybe "的全局限制可以(理论上)成为一个问题(对于寻找allocating空闲的IDT条目);并且由于中断优先级的工作方式(对于APIC),一个单一的全局IDT可以(理论上)在只有2个PCI设备的情况下开始 "不那么理想"(例如:如果它们都想要16个中断)。 例如,如果它们都想要16个中断,并且都 "需要 "相同的中断优先级)。) 在实践中,不可能所有的PCI设备都想要这么多的中断,所以 "实践中 "并不像 "理论上 "那么糟糕。

注意:"最大256-32-some IRQs "来自于最大256个IDT条目,减去32个异常条目,减去一些杂项(用于处理器间中断、虚假IRQs,如果使用软件中断,可能还有内核API)。

© www.soinside.com 2019 - 2024. All rights reserved.