保护模式下三个重要的系统表——GDT、LDT和IDT

这里主要是解释中断描述符表

中断描述符表IDT将每个异常或中断向量分别与它们的处理过程联系起来。与GDT和LDT表类似,IDT也是由8字节长描述符组成的一个数组。与GDT不同的是,表中第一项可以包含描述符。为了构成IDT表中的一个索引值,处理器把异常或中断的向量号*8。因为最多只有256个中断或异常向量,所以IDT无需包含多于256个描述符。IDT中可以含有少于256个描述符,因为只有可能发生的异常或中断才需要描述符。不过IDT中所有空描述符项应该设置其存在位标志为0。

IDT表可以驻留在线性地址空间的任何地方,处理器使用IDTR寄存器来定位IDT表的位置。这个寄存器中含有IDT表32位的基地址和16位的长度(限长)值。IDT表基地址应该对其在8字节边界上以提高处理器的访问效率。限长值是以字节为单位的IDT表的长度。

IDTR寄存器是6个字节,   [一个简单的多任务内核实例]里, boot.s中, 有

lidt idt_48     ; 加载IDTR。6字节操作数:2字节表长度,4字节线性基地址  

idt_48: .word                  ; idt 从零开始, 限长也是0,跟没有一样,不用在意
.word ,        ; idt基地址 , 0开始

IDT 表中可以存放三种类型的门描述符:

  • 中断门描述符
  • 陷阱门描述符
  • 任务门描述符

中断门和陷阱门含有一个长指针(即段选择符和偏移值),处理器使用这个长指针把程序执行权转移到代码段中的异常或中断的处理程序中。这两个段的主要区别在于处理器操作EFLAGS寄存器IF标志上。IDT中任务门描述符的格式与GDT和LDT中任务门的格式相同。

任务门描述符中含有一个任务TSS段的选择符,该任务用于处理异常和/或中断。

中断门、陷阱门和任务门描述符格式如下图所示:

以上的图例和描述,都是参考网上的,非原创,只是为了方便看书和读代码时候查看各个描述符的结构

最新文章

  1. mysqldump
  2. VIM基础
  3. js异步收集
  4. ant+dbunit 导xml到mysql
  5. Asp.Net 控件radio 的简单使用
  6. Android之断点续传下载
  7. Sql Server使用正则表达式
  8. ORACLE MTTR
  9. angularjs入门学习【指令篇】
  10. Windows 7 USB DVD Download Tool 制作的U盘无法启动安装Windows7 SP1
  11. Nginx+Tomcat+Memcached实现tomcat集群和session共享
  12. Java模拟新浪微博登陆抓取数据
  13. 技术方案:在外部网址调试本地js(基于fiddler)
  14. poj_3468: A Simple Problem with Integers (树状数组区间更新)
  15. Docker & pure-ftpd 快速加建 FTP 服务器
  16. forget word a out 1
  17. 当python模式遇见cedet
  18. MyEclipse10.0 配置 Tomcat1.7
  19. 为什么23种设计模式里面没有MVC?
  20. NSArray利用Cocoa框架进行汉字排序

热门文章

  1. ThinkPHP无限分类模块设计
  2. 【珍惜时间】vuepro
  3. GNU GRUB引导的默认启动项是ubuntu
  4. LoadRunner如何调用外部函数
  5. [转载]Emmet (ZenCoding) 缩写语法
  6. leetcode146周赛-1131-绝对值表达式的最大值
  7. Ubuntu 快速安装配置Odoo 12
  8. 使用XPath查询带有命名空间(有xmlns)的XML(转)
  9. 如何做系列(1)- mybatis 如何实现分页?
  10. MapReduce深入理解输入和输出格式(1)-输入分片与记录