9.4 中断描述符表(Interrupt Descriptor Table)

中断描述符表把每个中断或异常编号和一个指向中断处理事件服务程序的描述符联系起来。同GDT和LDT一样,IDT是一个8-字节的描述符数组。和GDT、LDT不同的是,IDT的第一项可以包含一个描述符。为了形成一个在IDT内的索引,处理器把中断、异常标识号乘以8以后来做为IDT的索引。因为只有256个编号,IDT不必包含超过256个描述符。它可以包含比256更少的项,只是那些需要使用的中断、异常的项。

IDT可以在内存的任意位置。如图9-1所示,处理器通过IDT寄存器(IDTR)来定位IDT。指令LIDT和SIDT用来操作IDTR。两条指令都有一个显示的操作数:一个6字节表示的内存地址。图9-2显示了它的格式。

LIDT(Load IDT Register)使用一个包含线性地址基址和界限的内存操作数来加载IDT。这条指令只能在特权级0执行。一般是操作系统初始化软件在创建IDT时来执行它。操作系统也可以用它来改变到另一个IDT。

SIDT(Store IDT Register)拷贝IDTR的基址和界限部分到一个内存地址。这条指令可以在任意特权级执行。