注:本文档为《从0学x86操作系统》课程配套的学习文档,提供相应的辅助学习资料和答疑勘误。 有关该课程的信息,请点击这里访问:https://study.163.com/provider/1017884735/index.htm 在阅读本文档时,如有疑问和建议,欢迎在下方留言或者直接联系我。

本课时主要介绍x86中断描述符的结构,以及其具体的作用。

除0异常跑飞重启的原因

原因:进入32位保护模式后,向量表需要重新配置,不能再使用BIOS自己提供的。

IDT表

进入保护模式后,需要使用新的向量表,即IDT表。其配置类似于GDT表,由一个寄存器指向:IDTR寄存器。
image.png
参考手册第202页
IDT表项有多种类型,本课程只使用其中的interrupt gate,其它两种如有兴趣可以自行查看。其中interrupt gate中segment selector指定了代码段的选择子,offset指定了偏移。即二者结合,指定了各表项对应的异常/中断的处理程序的首地址。

image.png
参考手册第203页
地址生成如下:

  1. 根据向量号取IDT中的对应表项,
  2. 从IDT表项取选择子
  3. 用选择子从GDT表中查找段的首地址,
  4. 将段首地址+IDT表项中的偏移量,生成处理程序的首地址
  5. 跳转至首地址运行。

image.png
参考手册第204页

参考资料

  • 课程附带的intel编程文档卷3:Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 3 (3A, 3B, 3C & 3D): System Programming Guide