这里主要是解释中断描述符表数组
中断描述符表IDT将每一个异常或中断向量分别与它们的处理过程联系起来。与GDT和LDT表相似,IDT也是由8字节长描述符组成的一个数组。与GDT不一样的是,表中第一项能够包含描述符。为了构成IDT表中的一个索引值,处理器把异常或中断的向量号*8。由于最多只有256个中断或异常向量,因此IDT无需包含多于256个描述符。IDT中能够含有少于256个描述符,由于只有可能发生的异常或中断才须要描述符。不过IDT中全部空描述符项应该设置其存在位标志为0。spa
IDT表能够驻留在线性地址空间的任何地方,处理器使用IDTR寄存器来定位IDT表的位置。这个寄存器中含有IDT表32位的基地址和16位的长度(限长)值。IDT表基地址应该对其在8字节边界上以提升处理器的访问效率。限长值是以字节为单位的IDT表的长度。指针
IDTR寄存器是6个字节, [一个简单的多任务内核实例]里, boot.s中, 有code
lidt idt_48 ; 加载IDTR。6字节操做数:2字节表长度,4字节线性基地址 idt_48: .word 0 ; idt 从零开始, 限长也是0,跟没有同样,不用在乎 .word 0,0 ; idt基地址 , 0开始
IDT 表中能够存放三种类型的门描述符:blog
中断门和陷阱门含有一个长指针(即段选择符和偏移值),处理器使用这个长指针把程序执行权转移到代码段中的异常或中断的处理程序中。这两个段的主要区别在于处理器操做EFLAGS寄存器IF标志上。IDT中任务门描述符的格式与GDT和LDT中任务门的格式相同。索引
任务门描述符中含有一个任务TSS段的选择符,该任务用于处理异常和/或中断。class
中断门、陷阱门和任务门描述符格式以下图所示:效率
以上的图例和描述,都是参考网上的,非原创,只是为了方便看书和读代码时候查看各个描述符的结构程序