首页 > 其他分享 >中断与中断描述符表

中断与中断描述符表

时间:2022-12-11 19:01:30浏览次数:53  
标签:中断 80286 描述符 陷阱 DPL CPU

中断和异常

中断,也叫做异步中断,由外部设备产生可以随时打断当前CPU的执行流程。通常分为。

  • 可屏蔽中断:由IO设备产生的IRQ中断。这类中断可以通过将%eflags寄存器中的IF标志置为0来屏蔽。
  • 不可屏蔽中断:比如内存不对齐,断电等无法忽略的外部信号。

异常,也叫做同步中断,中断信号在CPU执行完某个指令后产生并接收到。通常分为。

  • 故障(fault):通常可以恢复,恢复之后返回到引起异常的语句重新执行,比如缺页故障。
  • 陷阱(trap):可以恢复,恢复之后引起异常的指令应该已经完成,所以返回到下一条语句执行,比如用来实现系统调用的软中断INT指令。
  • 终止(abort):不可恢复,不返回引起异常的地方,都是直接终止进程。

中断描述符表

中断发生后,会根据当前的中断向量号去查询中断描述符表,里面的中断描述符记录了当前中断的处理程序的地址信息,这样就可以正确跳转到中断处理程序了。

在中断描述符表中,可以存放中断门,陷阱门,调用门,任务门这几种描述符。结构如下。

  • Offset:中断函数在段中的偏移地址。
  • Selector:段选择子。
  • Arguments:调用门的参数。
  • Type:门的类型。
  • S:为0表示为系统段,这里必须为0。
  • DPL:门特权级。
  • P:存在位,如果这一位为0,则此描述符为非法的。

门的类型如下。

系统段类型 type值 说明
未定义 0000 保留
可用的80286TSS 0001 仅限80286,任务状态段
LDT 0010 局部描述符表
忙碌的80286TSS 0011 仅限80286
80286调用门 0100 仅限80286
任务门 0101
80286中断门 0110 仅限80286
80286陷阱门 0111 仅限80286
未定义 1000 保留
可用的80386TSS 1001 386以上的CPU的任务状态段
未定义 1010 保留
忙碌的80386TSS 1011
80386调用门 1100 386以上CPU的调用门
未定义 1101 保留
中断门 1110 386以上CPU的中断门
陷阱门 1111 386以上CPU的陷阱门

中断门和陷阱门的区别

它们之间的唯一区别就是中断门在中断触发的时候会自动将%eflags中的IF值0,频闭外部中断,以免被打断。陷阱门则不会。
中断处理完毕后,执行iret指令会自动恢复之前压入栈的%eflags的值。

中断流程

  1. 发生异常后,先查询中断描述符表,找到对应的描述符,一般而言不检查门描述符里面的DPL,除了用软中断int n和单步中断int3,以及into引发的中断和异常。这时候需要CPL必须小于等于DPL,也就是防止用户态程序随便调用内核的一些中断。
  2. 检查段权限:将目标代码段描述符中的DPL与CPL比较,目标段的DPL必须小于或等于CPL。也就是说,通过中断门时只允许保持或提升CPU的运行级别。失败都会产生一次一般保护错误(General protection fault,GPF)。
  3. 保存现场:如果当前的程序优先级CPL和目标代码段DPL的一致,那么直接将中断现场压入当前的栈。如果发生了优先级提升,那么切换到对应优先级的栈空间,在那里去保存现场。可以通过TSS中保存的各个优先级的栈地址来知道具体切换到哪个栈空间去。

  1. 执行中断程序并从中断处理程序中返回:从栈中依次弹出Error Code(只有异常8-14以及异常17硬件才会压入错误码,其他的不会)和EIP和CS以及EFLAGS寄存器的值。然后进行栈恢复,判断当前的特权级别和弹出的CS选择子的特权级别,如果不同,说明之前有过栈切换,从栈中再弹出ESP和SS寄存器的值。

参考资料

标签:中断,80286,描述符,陷阱,DPL,CPU
From: https://www.cnblogs.com/HachikoT/p/16974170.html

相关文章

  • 可编程中断控制器
    可编程中断控制器8259A8259A内部寄存器ICW1寄存器ICW2寄存器ICW3寄存器ICW4寄存器OCW1寄存器OCW2寄存器OCW3寄存器参考资料可编程中断控制器在x86中,外部......
  • 中断和异常
    ①中断的概念和作用当中断发生时,CPU立即进入核心态当中断发生后,当前运行的进程暂停运行,并由操作系统内核对中断进行处理对于不同的中断信号,会进行不同的处理发......
  • 什么是软中断?
    前面我们也提到了,中断请求的处理程序应该要短且快,这样才能减少对正常进程运行调度地影响,而且中断处理程序可能会暂时关闭中断,这时如果中断处理程序执行时间过长,可能在还未......
  • 中断是什么?
    先来看看什么是中断?在计算机中,中断是系统用来响应硬件设备请求的一种机制,操作系统收到硬件的中断请求,会打断正在执行的进程,然后调用内核中的中断处理程序来响应请求。这样......
  • ORA-12514 监听程序当前无法识别连接描述符中请求
    问题描述:在安装完数据库后,无法进行正常连接,提示ORA-12514错误,环境为WindowsServer2008R2+Oracle11.2.0.4,之前安装11.2.0.1的时候没有遇到这个问题,不清楚是否和版本有关。......
  • Java线程中断机制
    在阅读AQS源码以及juc包很多基于AQS的应用源码过程中,会遇到很多interrupted相关的方法,这里复习一下java线程中断相关。要点:使用interrupt()中断一个线程,该方法只是标记中......
  • JUC6 中断机制与线程通信三种让线程等待和唤醒的方法:
    1.线程中断1.1什么是线程中断①.一个线程不应该由其他线程来强制中断或停止,而是应该由线程自己自行停止,所以,Thread.stop、Thread.suspend、Thread.resume都已经被废......
  • 线程的取消和中断
    下面介绍取消线程常用的4中方式:一、通过设置“cancelled requested”标志来中断线程java中的任务取消实现:    是通过一个协作机制完成的,使用一个线程能够要求另......
  • linux不用设备树写中断,linux-kernel – 将设备树中断标志映射到devm_request_irq
    我目前正在为Linux使用PowerPC编写设备驱动程序.设备树条目如下://PPSInterruptclientpps_hwirq{compatible="pps-hwirq";interrupts=<170x02>;//IPIC1......
  • 生产环境mysql主从同步中断引发的启迪
    迁移背景:生产环境mysql主从同步中断,因中断时间太久、数据量太大,所以计划通过云平台的磁盘克隆功能实现数据全量同步。环境说明:主库:192.168.12.76盘名:/dev/mapper/mysql-da......