中断及中断处理过程

1. 中断和异常的概念区别

Intel的官方文档里将中断和异常理解为两种中断当前程序执行的不同机制。这是中断和异常的共同点。不同点在于:

中断(interrupt)是异步的事件,典型的比如由I/O设备触发;异常(exception)是同步的事件,典型的比如处理器执行某条指令时发现出错了等等。

中断又可以分为可屏蔽中断和非可屏蔽中断,异常又分为故障、陷阱和异常中止3种,它们的具体区别很多书籍和官方文档都解释的比较清楚这里不再赘述。

关于它们的区别有两点是需要注意的:

1)平常所说的屏蔽中断是不包括异常的,即异常不会因为CPU的IF位被清(关中断,指令:cli)而受影响,比如缺页异常,即使关了中断也会触发CPU的处理。

2)通常说的int 80h这种系统调用使用的中断方式实际上硬件上是理解为异常处理的,因此也不会被屏蔽掉,这也很好理解,int 80h这种中断方式是程序里主动触发的,对于CPU来说属于同步事件,因此也就属于异常的范畴。

2. 中断(异常)处理过程

需要明确的一点是CPU对于中断和异常的具体处理机制本质上是完全一致的,即:

当CPU收到中断或者异常的信号时,它会暂停执行当前的程序或任务,通过一定的机制跳转到负责处理这个信号的相关处理程序中,在完成对这个信号的处理后再跳回到刚才被打断的程序或任务中。这里只描述保护模式下的处理过程,搞清楚了保护模式下的处理过程(更复杂),实模式下的处理机制也就容易理解了。

具体的处理过程如下:

0)中断响应的事前准备:

系统要想能够应对各种不同的中断信号,总的来看就是需要知道每种信号应该由哪个中断服务程序负责以及这些中断服务程序具体是如何工作的。系统只有事前对这两件事都知道得很清楚,才能正确地响应各种中断信号和异常。

[a]系统将所有的中断信号统一进行了编号(一共256个:0~255),这个号称为中断向量,具体哪个中断向量表示哪种中断有的是规定好的,也有的是在给定范围内自行设定的。

中断向量和中断服务程序的对应关系主要是由IDT(中断向量表)负责。操作系统在IDT中设置好各种中断向量对应的中断描述符(一共有三类中断门描述符:任务门、中断门和陷阱门),留待CPU查询使用。而IDT本身的位置是由idtr保存的,当然这个地址也是由OS填充的。

[b]中断服务程序具体负责处理中断(异常)的代码是由软件,也就是操作系统实现的,这部分代码属于操作系统内核代码。也就是说从CPU检测中断信号到加载中断服务程序以及从中断服务程序中恢复执行被暂停的程序,这个流程基本上是硬件确定下来的,而具体的中断向量和服务程序的对应关系设置和中断服务程序的内容是由操作系统确定的。

1)CPU检查是否有中断/异常信号

CPU在执行完当前程序的每一条指令后,都会去确认在执行刚才的指令过程中中断控制器(如:8259A)是否发送中断请求过来,如果有那么CPU就会在相应的时钟脉冲到来时从总线上读取中断请求对应的中断向量[2]。

对于异常和系统调用那样的软中断,因为中断向量是直接给出的,所以和通过IRQ(中断请求)线发送的硬件中断请求不同,不会再专门去取其对应的中断向量。

2)根据中断向量到IDT表中取得处理这个向量的中断程序的段选择符

CPU根据得到的中断向量到IDT表里找到该向量对应的中断描述符,中断描述符里保存着中断服务程序的段选择符。

3)根据取得的段选择符到GDT中找相应的段描述符

CPU使用IDT查到的中断服务程序的段选择符从GDT中取得相应的段描述符,段描述符里保存了中断服务程序的段基址和属性信息,此时CPU就得到了中断服务程序的起始地址。

这里,CPU会根据当前cs寄存器里的CPL和GDT的段描述符的DPL,以确保中断服务程序是高于当前程序的,如果这次中断是编程异常(如:int 80h系统调用),那么还要检查CPL和IDT表中中断描述符的DPL,以保证当前程序有权限使用中断服务程序,这可以避免用户应用程序访问特殊的陷阱门和中断门[3]。

4)CPU根据特权级的判断设定即将运行的中断服务程序要使用的栈的地址

CPU会根据CPL和中断服务程序段描述符的DPL信息确认是否发生了特权级的转换,比如当前程序正运行在用户态,而中断程序是运行在内核态的,则意味着发生了特权级的转换,这时CPU会从当前程序的TSS信息(该信息在内存中的首地址存在TR寄存器中)里取得该程序的内核栈地址,即包括ss和esp的值,并立即将系统当前使用的栈切换成新的栈。这个栈就是即将运行的中断服务程序要使用的栈。紧接着就将当前程序使用的ss,esp压到新栈中保存起来。

6)保护当前程序的现场

CPU开始利用栈保护被暂停执行的程序的现场:依次压入当前程序使用的eflags,cs,eip,errorCode(如果是有错误码的异常)信息。

官方文档[1]给出的栈变化的示意图如下:

7)跳转到中断服务程序的第一条指令开始执行

CPU利用中断服务程序的段描述符将其第一条指令的地址加载到cs和eip寄存器中,开始执行中断服务程序。这意味着先前的程序被暂停执行,中断服务程序正式开始工作。

8)中断服务程序处理完毕,恢复执行先前中断的程序

在每个中断服务程序的最后,必须有中断完成返回先前程序的指令,这就是iret(或iretd)。程序执行这条返回指令时,会从栈里弹出先前保存的被暂停程序的现场信息,即eflags,cs,eip重新开始执行。

中断处理过程示意图_中断及中断处理过程相关推荐

  1. 中断处理过程示意图_中断和中断处理流程

    1. 中断概念 中断是指由于接收到来自外围硬件(相对于中央处理器和内存)的异步信号或来自软件的同步信号,而进行相应的硬件/软件处理.发出这样的信号称为进行中断请求(interrupt request, ...

  2. 中断处理过程示意图_中断服务程序流程图

    教学方法.实施步骤 时间分配 教学手段 回 顾 5 " × 2 板书 计算机 投影仪 多媒体课件等 讲 授 40 " × 2 提 问 3 " × 2 小 结 2 &quo ...

  3. 中断处理过程示意图_聊聊什么是中断机制?

    什么是中断 中断其实是一种"中断"事件,中断具体代表什么意思需要考虑它所处的上下文环境和参照对象是谁.考虑事件,我们可以简单把中断抽象为这样一种模型: 当我们分析某种中断事件时,我 ...

  4. 中断处理过程示意图_PCIe中断方法和系统与流程

    本发明实施例涉及通信技术领域,尤其涉及一种PCIe中断方法和系统. 背景技术: PCIe(Peripheral Component Interconnect Express,高速外围组件互联)是最新的 ...

  5. 密文恢复出明文的过程称为_整流二极管的反向恢复过程图解

    随着电力电子技术向高频化.模块化方向发展,快恢复二极管是一种具有开关特性好.反向恢复时间短特点的半导体二极管.快恢复二极管作为一种高频器件也得到蓬勃发展,现已广泛用于各种高频逆变装置和斩波调速装置内, ...

  6. 中断处理过程示意图_Linux中断处理

    简介 1.基于Linux0.11代码进行分析. 2.中断类型分类以及具体的中断. 3.中断向量的注册. 4.中断处理流程. 5.各类型中断的具体执行流程. 中断的类型及具体的种类 Linux0.11内 ...

  7. WinCE中中断的处理过程(驱动开发人员角度)

    WinCE中中断的处理过程(驱动开发人员角度) 中断是硬件与软件打交道的重要方法,因此,大多数驱动程序都涉及到对中断的处理,本文就驱动程序的开发人员以及BSP的开发人员的角度,来谈谈Windows C ...

  8. 系统中断服务器,windows7资源管理器中有一个 系统中断 描述为延迟过程调用和中断服务例程__这是安全的吗,windows7的系统进程吗...

    安全的.系统中断是个很重要的功能,是保障系统正常执行必不可少.有兴趣的话,可以找些计算机系统基础的书,对系统中断有比较详细的描述. 中断装置和中断处理程序统称为中断系统. 中断系统是计算机的重要组成部 ...

  9. ARM Cortex-M3中断跳转过程

    在学习CM3的时候,仔细学习了CM3的中断跳转过程,发现嵌入式的MCU在这一块基本上是一样的,当然不同架构的MCU也有自己的特性. 我来介绍下CM3的中断跳转过程,首先假设中断发生,CM3内核开始响应 ...

最新文章

  1. 《Swift开发实战》——第2章,第2.4节函数和闭包
  2. CodePush使用调研
  3. java邮件客户端源代码,JAVA基于B/S模式下的电子邮件客户端软件,源码分享
  4. [HNOI2016]矿区
  5. jsp实现上一页下一页翻页功能
  6. Tyvj P1463 智商问题 分块
  7. centos 5.6安装nginx+mysql+php(php-fpm)+phpmyadmin总结
  8. 数据分析学习笔记—文件处理与pdf处理
  9. GitHub 标星 10,000+,Apache 顶级项目 ShardingSphere 的开源之路
  10. 查看每个用户linux内存,编写shell脚本查看linux当前各用户的cpu和memory消耗比例
  11. Oracle RAC备份异机单实例恢复演练
  12. 兵马未动粮草先行,关于乐视模式的思考
  13. termux 安装python3教程_termux怎么安装python
  14. time+dd测试硬盘读写速度
  15. 根据小米商城官网首页效果敲写页面
  16. 交换机和路由器的区别计算机网络,交换机和路由器有什么区别?路由器与交换机的区别知识...
  17. 计算机一级用写在简历里面吗,写简历要小心,简历填写最忌讳的是什么,你知道吗?...
  18. js 跨浏览器tab页通信
  19. Aqara网关、yeelight智能灯、智能窗帘电机如何实现场景化互联?
  20. 脉冲成形matlab代码,[转]MATLAB信号处理仿真-基带脉冲成形的数字滤波器

热门文章

  1. 常见的列表html,html常见列表元素介绍与应用
  2. 获取百度地图上某点的经纬度信息(百度地图拾取坐标系统)
  3. 【正点原子MP157连载】第二十五章 pinctrl和gpio子系统实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
  4. 一键换机或者克隆的原理分析
  5. 浪晋的测试小讲堂萌芽计划第二期视频学习笔记
  6. Unity3D打包PC运行报DllNotFoundException
  7. linux的作业控制(job control)
  8. Qt在window系统下打印小票——————附带完整代码
  9. MybatisPlus 使用resultMap
  10. 华硕 B150M-ET SERIES主板加装内存条