1. 中断概念

中断是指由于接收到来自外围硬件(相对于中央处理器和内存)的异步信号或来自软件的同步信号,而进行相应的硬件/软件处理。发出这样的信号称为进行中断请求(interrupt request,IRQ)。硬件中断导致处理器通过一个上下文切换(context switch)来保存执行状态(以程序计数器和程序状态字等寄存器信息为主);软件中断则通常作为CPU指令集中的一个指令,以可编程的方式直接指示这种上下文切换,并将处理导向一段中断处理代码。中断在计算机多任务处理,尤其是实时系统中尤为有用。这样的系统,包括运行于其上的操作系统,也被称为“中断驱动的”(interrupt-driven)。

中断是一种使CPU中止正在执行的程序而转去处理特殊事件的操作,这些引起中断的事件称为中断源,它们可能是来自外设的输入输出请求,也可能是计算机的一些异常事故或其它内部原因。

中断:在运行一个程序的过程中,断续地以“插入”方式执行一些完成特定处理功能的程序段,这种处理方式称为中断。

2. 中断的作用

并行操作

硬件故障报警与处理

支持多道程序并发运行,提高计算机系统的运行效率

支持实时处理功能

3. 术语

按中断源进行分类:发出中断请求的设备称为中断源。按中断源的不同,中断可分为

内中断:即程序运行错误引起的中断

外中断:即由外部设备、接口卡引起的中断

软件中断:由写在程序中的语句引起的中断程序的执行,称为软件中断

允许/禁止(开/关)中断: CPU通过指令限制某些设备发出中断请求,称为屏蔽中断。从CPU要不要接收中断即能不能限制某些中断发生的角度 ,中断可分为

可屏蔽中断 :可被CPU通过指令限制某些设备发出中断请求的中断, 那是不是意味着进中断时disable整个中断,其实disable的都是可屏蔽中断?

不可屏蔽中断:不允许屏蔽的中断如电源掉电

中断允许触发器:在CPU内部设置一个中断允许触发器,只有该触发器置“1”,才允许中断;置“0”,不允许中断。

指令系统中,开中断指令,使中断触发器置“1”

关中断指令,使中断触发器置“0”

中断优先级:为了管理众多的中断请求,需要按每个(类)中断处理的急迫程度,对中断进行分级管理,称其为中断优先级。在有多个中断请求时,总是响应与处理优先级高的设备的中断请求。

中断嵌套:当CPU正在处理优先级较低的一个中断,又来了优先级更高的一个中断请求,则CPU先停止低优先级的中断处理过程,去响应优先级更高的中断请求,在优先级更高的中断处理完成之后,再继续处理低优先级的中断,这种情况称为中断嵌套。

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

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

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

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

平常所说的屏蔽中断是不包括异常的,即异常不会因为CPU的IF位被清(关中断,指令:cli)而受影响,比如缺页异常,即使关了中断也会触发CPU的处理,回答了我上面红色部分疑问。

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

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

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

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

具体的处理过程如下:

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

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

系统将所有的中断信号统一进行了编号(一共256个:0~255),这个号称为中断向量,具体哪个中断向量表示哪种中断有的是规定好的,也有的是在给定范围内自行设定的。  中断向量和中断服务程序的对应关系主要是由IDT(中断向量表)负责。操作系统在IDT中设置好各种中断向量对应的中断描述符(一共有三类中断门描述符:任务门、中断门和陷阱门),留待CPU查询使用。而IDT本身的位置是由idtr保存的,当然这个地址也是由OS填充的。

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

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

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

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

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

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

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

CPU使用IDT查到的中断服务程序的段选择符从GDT中取得相应的段描述符,段描述符里保存了中断服务程序的段基址和属性信息,此时CPU就得到了中断服务程序的起始地址。这里,CPU会根据当前cs寄存器里的CPL和GDT的段描述符的DPL,以确保中断服务程序是高于当前程序的,如果这次中断是编程异常(如:int 80h系统调用),那么还要检查CPL和IDT表中中断描述符的DPL,以保证当前程序有权限使用中断服务程序,这可以避免用户应用程序访问特殊的陷阱门和中断门[3]。

5) 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. 中断和异常的概念区别 Intel的官方文档里将中断和异常理解为两种中断当前程序执行的不同机制.这是中断和异常的共同点.不同点在于: 中断(interrupt)是异步的事件,典 ...

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

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

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

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

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

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

  5. 中断处理过程示意图_ucore操作系统实验笔记 - Lab1

    最近一直都在跟清华大学的操作系统课程,这个课程最大的特点是有一系列可以实战的操作系统实验.这些实验总共有8个,我在这里记录实验中的一些心得和总结. Task1 这个Task主要是为了熟悉Makfile ...

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

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

  7. :I/O中断处理过程包括哪几个阶段?中断服务程序流程分为哪几部分?

    完整的中断处理过程分为 1)中断响应的事前准备: 系统要想能够应对各种不同的中断信号,总的来看就是需要知道每种信号应该由哪个中断服务程序负责以及这些中断服务程序具体是如何工作的.系统只有事前对这两件事 ...

  8. linux 中断 c语言程序,linux驱动之中断处理过程C程序部分

    当发生中断之后,linux系统在汇编阶段经过一系列跳转,最终跳转到asm_do_IRQ()函数,开始C程序阶段的处理.在汇编阶段,程序已经计算出发生中断的中断号irq,这个关键参数最终传递给asm_d ...

  9. Linux中断子系统(三)之GIC中断处理过程

    Linux中断子系统(三)之GIC中断处理过程 备注:   1. Kernel版本:5.4   2. 使用工具:Source Insight 4.0   3. 参考博客: Linux中断子系统(一)中 ...

最新文章

  1. 【运维学习笔记】运维入门
  2. 笔记-项目质量管理-精简
  3. under what circumstances, breakfast is essential
  4. ubuntu上安装nodejs
  5. JavaWeb学习总结(二)——JSP中的九个内置对象
  6. The Linux Storage Stack Diagram
  7. JavaEE编码规范
  8. RK3399 Mali-T860占用率
  9. pascal voc2012分割标签处理
  10. 详解无人驾驶汽车工作原理及关键技术。
  11. 电赛总结(二)——AD芯片总结之AD7705
  12. python图片标记_用python找出那些被“标记”的照片
  13. java实现附件预览(openoffice+swftools+flexpaper)
  14. 代理模式(静态代理和动态代理)
  15. 李政軒Cheng-Hsuan Li的关于机器学习一些算法的中文视频教程
  16. 【论文笔记】匹配关系未知情况下点云配准Solving the Blind Perspective-n-Point ProblemEnd-To-End With Robust Differentiabl
  17. 《Sony Vegas Pro 12标准教程》——第1章 基础篇——基础知识 1.1 影视剪辑的概念...
  18. 无绿幕实景抠图、AI抠图
  19. RealSense 动态校准
  20. 全景图像拼接【计算机视觉】

热门文章

  1. mysql创建日历表,可以按日或按月增加数据
  2. Linux常用命令和shell命令
  3. Excel数据分析常用函数②——统计函数(sumproduct,sumif,sumifs,count,countif,countifs,counta…)
  4. 零基础语法入门第四讲 代词的主格和宾格
  5. C# 获取汉字的拼音首字母和全拼(含源码)
  6. 北京理工大学计算机学院学生数,金福生_北京理工大学计算机学院
  7. char码值对应列表大全
  8. QQ空间自动点赞脚本
  9. 公司邮箱精选-国际通用的电子邮箱有哪些?
  10. 神经网络为什么要归一化?