前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >中断描述符表

中断描述符表

作者头像
shysh95
发布2021-09-24 11:27:07
7580
发布2021-09-24 11:27:07
举报
文章被收录于专栏:shysh95

Hi~朋友,码字不易,点点关注呗

摘要

  1. 中断描述符表
  2. 中断描述符寄存器
  3. 中断细节
  4. 中断错误码

中断描述符表

什么是中断描述符表?

中断描述符表是保护模式下用于存储中断处理程序的数据结构。CPU在接收到中断时,会根据中断向量在中断描述符表中检索对应的描述符。

中断描述符表中的描述符有哪些类型?

中断描述表中的主要包含以下类型:

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

任务门描述符结构如下:

任务门需要和任务状态段(TSS)配合使用,这是Intel处理器在硬件一级提供的任务切换机制。任务门可以存在于全局描述符GDT、局部描述符表LDT以及中断描述符表IDT中。

中断门描述符结构如下:

中断门包含中断处理程序所在的段选择子和段内偏移地址,当通过此方式进入中断后,标志寄存器eflags中的IF位自动置0,表示把中断关闭,避免中断嵌套。中断门只存在于中断描述符表IDT。

陷阱门描述符结构如下:

通过陷阱门进入中断,标志寄存器eflags的IF位不会自动置0,陷阱门只允许存在于IDT中。

调用门描述符结构如下:

调用门是用户进程用来进入0特权级的方式,其DPL为3。调用门可以在GDT和IDT中存在的,只能使用call和jmp指令调用。

中断描述符表存储的位置不固定。

中断描述符寄存器

如何找到中断描述符表?

CPU内部有个中断描述符寄存器IDTR,该寄存器的结构图如下图:

第0~15位是表界限,即IDT减1,可容纳8192个中段描述符;第16~47位是IDT的基地址。

通过lidt 48位内存数据指令便可将中断描述符表的信息加载到IDTR寄存器中。

中断细节

中断处理过程包含哪两部分?

CPU外部:外部设备的中断由中断代理芯片接收,处理后将该中断的中断向量号发送给CPU

CPU内部:CPU执行该中断向量号的中断处理程序

如何在中断描述表中定位中断描述符?

每个中断描述符号占用8字节,所以使用中断向量号与8相乘,相当于得到偏移地址,然后从IDTR寄存器中取出中断描述符表的基址,将两个地址相加,便能定位到中断描述符的地址。

中断门处理器如何进行特权级检查?

对于内部中断来说,要求检查当前特权级CPL和中断门描述符DPL及门描述符对应的的代码段的DPL,在数值上满足以下关系:

目标代码段DPL < 当前特权级CPL < 门描述符DPL

对于外部中断,检查当前特权级CPL和目标代码段的DPL,在数值上满足以下关系:

目标代码段DPL < 当前特权级CPL

如何执行中断处理程序?

将门描述符中的目标代码段描述符选择子加载到代码段寄存器CS中,把门描述中中断处理程序的偏移地址加载到EIP,便开始执行中断程序。

如何确定使用新栈还是旧栈?

程序的运行需要栈,由于不同的特权级需要使用不同的栈,因此当涉及到特权级变化后,便需要开启新栈。

使用新栈时需要压入哪些信息?

  • 旧栈环境下SS和ESP的值
  • 标志寄存器EFLAGS的值
  • 备份CS和EIP的值
  • ERROR_CODE中断错误码

特权级不发生变化时,不需要压入旧栈环境下SS和ESP的值。

中断处理程序执行完成以后执行返回指令时,CPU会将上述值从栈中弹出,但是ERROR_CODE需要我们手动弹出。

为什么要保存CS和EIP的值?

当我们中断处理程序在返回时,检查备份的CS选择子,根据其RPL和DPL做特权级检查,如果通过,则需要更新寄存器CS和EIP,这样才可以恢复到中断之前的代码段。

该特权级检查的结果还决定了是否需要恢复SS和ESP的值,如果特权级没有发生变化,不需要恢复,因为中断处理程序和我们的应用程序是同一个栈,否则便需要恢复栈。

中断错误码

中断错误码只是用来指明中断发生在哪个段上,结构如下图:

EXT用来指明中断源来自处理器内部还是外部,1代表中断源是不可屏蔽中断或外部设备。

IDT表示选择子是否指向中断描述表,1表示执行IDT,否则指向GDT或LDT。

当IDT为1:TI为0表示从GDT中检索描述符,为1表示从LDT检索描述符。

选择子高13位索引就是用来索引描述符用的下标。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-08-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员修炼笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档