中断和异常是什么,区别?

中断和异常

很多时候,我们会在很多地方看到“中断”和“异常”两个概念,他们到底是指什么呢?他们之间有什么区别吗?

“中断”和“异常”都是中断!

中断(interrupt)通常被定义为一个事件,它可以让处理器停止当前的工作转而运行中断处理的相关程序。在物理上,中断其实就是CPU芯片内外部硬件电路产生的电信号。

中断通常分为同步中断异步中断

  • 同步中断是cpu执行指令出现问题时由CPU控制单元产生的,因为是cpu内部产生的,所以也被称为内中断。之所以称为同步,是因为只有在一条指令终止执行后CPU才会发出中断。
  • 异步中断是指由外部硬件设备事件所引起的中断,因此也称为外中断

Intel微处理器手册中,把同步中断成为异常(exception),异步中断成为中断(interrupt)。

通俗的说,异常是cpu运行某条指令时由于某种原因(比如说除0,系统调用,缺页)产生的;而中断是由外部硬件产生的(键盘敲击),与cpu正在运行的指令无关。

中断的作用

中断是指一个硬件或软件发出的请求(电信号),要求CPU暂停当前的工作转手去处理更加重要的事情。
当一个中断信号到达时,cpu必须停止它当前正在做的事情,并且切换到一个新的活动。为了做到这一点,就要在内核栈(每个进程都有自己的内核栈)保存程序计数器的当前值(即eip和cs寄存器的内容),并把与中断类型相关的一个地址放进程序计数器。(试着理解这句话,内核代表正在运行的进程执行中断处理程序

中断一般有两个属性,中断向量中断处理程序(ISR,Interrupt Service Routine,也可以叫做中断服务例程)。有一个数组称为中断向量表,包含了中断向量及其对应中断处理程序的指针。中断到来时,CPU暂停当前执行的代码,根据中断的中断号,在中断向量表中找到对应的中断处理程序,并调用它。中断处理程序执行完成之后,CPU会继续执行之前的代码。系统调用是用户进程发出的一种中断,其过程就是通过int指令发送0x80中断向量来实现的,跳转系统调用原理及其详细过程

中断处理

当一个中断信号到达时,cpu必须停止它当前正在做的事情,并且切换到一个新的活动,这个活动就是中断处理程序(或者叫做中断服务例程)。
中断处理是由内核执行的最敏感的任务之一,因为它必须满足下列约束

  • 当内核正打算去完成一些别的事情时,中断随时会到来。因此,内核的目标就是让中断尽可能会的处理完成,尽其所能把更多的处理向后推迟。内核响应中断后需要进行的操作分为两部分:关键而紧急的部分,内核立即执行;其余推迟的部分,内核随后执行(下半部)。
  • 因为中断会随时到来,所以内核可能正在处理其中的一个中断时,另一个中断(不同类型)又发生了。因此,中断处理程序必须能嵌套运行
  • 尽管内核在处理前一个中断时可以接受一个新的中断(可屏蔽中断),但在内核代码中还是存在一些临界区,在临界区中,中断必须被禁止(不可屏蔽中断)。

中断和异常的细致分类

中断:

  • 可屏蔽中断(maskable interrupt):
    I/O设备发出的所有中断请求都产生可屏蔽中断。这些中断可以被屏蔽。
  • 不可屏蔽中断(nonmaskable Interrupt)
    只有几个危急事件(如硬件故障)才引起不可屏蔽中断。不可屏蔽中断总是能够被cpu辨认。

异常:

  • 处理器探测异常
    当cpu执行指令时探测到的一个反常条件锁产生的异常。可以进一步分为三类
    - 故障(fault)
    通常可以纠正,一旦纠正,程序就可以重新开始。保存在eip中的值是引起故障的指令地址,因此,当异常处理程序终止时,那条指令会被重新执行。(缺页异常属于故障
    - 陷阱(trap)
    在陷阱指令执行后立即报告;内核把控制权返回给程序后就可以继续执行。保存在eip中的值是一个随后要执行的指令地址。只有当没有必要重新执行已终止的指令时,才出发陷阱。陷阱的主要用途是调试程序。在这种情况下,异常的作用是通知调试程序一条特殊指令已被执行(如一个断点)。
    - 异常中止(abort)
    异常中止用于报告严重的错误,如硬件故障或系统表中无效的值或不一致的值。这个中断信号是是紧急信号,异常中止程序除了强制进程终止外,没有其他的选择。
  • 编程异常(programmed exception)
    在编程者发出请求时产生。是由intint3指令出发的;当into(检查溢出)和bound(检查地址出界)指令检查的条件不为真时,也引起编程异常。控制单元把编程异常作为陷阱来处理。编程异常通常也叫做软中断(software interrupt)(注意此处的软中断和中断处理中的软中断是两回事,这里的软中断是软件中断)。这种异常有两种常用的用途:执行系统调用及给调试程序通报一个特定事件。
    中断和异常

参考文献:

  1. https://blog.csdn.net/qq_29996285/article/details/88078939
  2. 深入理解Linux内核
posted @ 2020-07-16 11:11  BugM  阅读(652)  评论(0)    收藏  举报