在 Linux 系统上,中断向量表 (IVT) 和中断描述符表 (IDT) 有什么区别?
3 回答
这与Linux无关。它是 CPU 的结构,操作系统对其进行初始化以处理中断和异常。在实际寻址模式中,该结构仅包含 ISR 的地址。这种格式称为 IVT。在保护模式下,结构更复杂,称为 IDT。Intel 或 AMD 的 CPU 手册将告诉您有关中断处理的所有细节。
现代操作系统几乎完全在保护模式下运行,因此使用 IDT。IVT 仅在操作系统启动时才需要,因为这发生在实模式下。
实模式下的中断处理 在实模式下,内存的低 1K 保存一个称为中断向量表 (IVT) 的数据结构。此表中名义上有 256 个条目。(从 80286 开始,IVT 不需要有 256 个条目或从物理地址 0 开始。IVT 的基址和地址以及长度通过查看 I** 中断描述符表寄存器**来确定。)每个条目包含指向中断服务程序的远指针。任何类型的中断都通过此表路由到相应的中断服务程序。处理器索引此表中的中断号;将当前的 CS、IP 和标志压入堆栈;并调用 IVT 中指定的远指针。处理程序处理中断,然后执行 IRET 指令,将控制权返回到中断时处理器执行的地方。
保护模式下的中断处理 在保护模式下,中断的处理方式与实模式类似。中断描述符表 (IDT) 的作用与 IVT 在实模式下的作用相同。IDT 由一组 8 字节的段描述符组成,称为门。中断描述符表寄存器 (IDTR) 保存 IDT 的基地址和限制。IDT 必须存在于物理内存中,并且永远不应换出到虚拟内存中。这是因为如果在 IDT 被换出时发生中断,处理器将产生异常,要求 IDT 获取处理此异常的处理程序,依此类推,直到系统崩溃。IDT 中的门可以由三种类型组成:中断门、陷阱门和任务门。我们不会详述陷阱和任务门的细节。有关详细信息,请参阅英特尔处理器文档。
http://www.reverse-engineering.info/SystemHooking/hooksoft.htm