跳至主要內容

5.异常和中断机制


异常和中断的基本概念

  • CPU 内部产生的意外事件被称为异常,有些教材中也称内中断
  • 由来自 CPU 外部的设备向 CPU 发出的中断请求被称为中断,通常用于信息的输入和输出,有些教材中也称外中断
  • 异常是CPU 执行一条指令时,由 CPU 在其内部检测到的、与正在执行的指令相关的同步事件;
  • 中断是一种典型的由外部设备触发的、与当前正在执行的指令无关的异步事件

异常和中断处理过程的大致描述

当CPU在执行用户程序的第i条指令时检测到一个异常事件,或者在执行第i条指令后发现一个中断中断请求信号,则cpu打断当前用户程序,然后转到相应的异常或中断处理程序区执行。若异常或中断处理程序能够解决相应的问题,则在异常或中断处理程序的最后,cpu通过执行异常或中断返回指令,回到被打断的用户程序的第i条指令或第i+1条指令继续执行;若异常或中断处理程序发现是不可恢复的致命错误,则终止用户程序。通常情况下,对异常和中断的具体处理过程由操作系统完成。

异常和中断处理过程

  • 当 CPU 在执行用户程序的第i条指令时检测到一个异常事件,或者在执行第i条指令后发现一个中断请求信号,则 CPU 打断当前用户程序,然后转到相应的异常或中断处理程序去执行。
  • 若异常或中断处理程序能够解决相应的问题,则在异常或中断处理程序的最后,CPU 通过执行异常或中断返回指令,回到被打断的用户程序的第i条指令或第i+1条指令继续执行;
  • 若异常或中断处理程序发现是不可恢复的致命错误,则终止用户程序。
  • 通常情况下,对异常和中断的具体处理过程由操作系统(和驱动程序)完成。

注意

异常和中断的处理过程基本是相同的,这也是有些教材将两者统称为中断的原因。

异常和中断的分类

异常的分类

  • 异常是由 CPU 内部产生的意外事件,分为硬故障中断程序性异常
  • 硬故障中断是由硬连线出现异常引起的,如存储器校验错、总线错误等。
  • 程序性异常也称软件中断,是指在 CPU 内部因执行指令而引起的异常事件。如整除0、滥出、断点、单步跟踪、非法指令、栈滥出、地址越界、缺页等。
  • 按异常发生原因和返回方式的不同,可分为故障自陷终止
  1. 故障:指在引起故障的指令启动后、执行结束前被检测到的异常事件
  2. 自陷:也称陷阱或陷入,它是预先安排的一种 “异常” 事件,就像预先设定的 “陷阱”一样。cpu执行自陷指令返回到自陷指令的下一条指令执行,但是当子线指令是转移指令时,并不是返回到下一条指令执行,而是返回到转移目标指令执行系统调用指令,条件子线指令等都属于陷阱指令
  3. 终止:与故障和自陷不同,不是由特定指令产生的,而是随机发生

中断的分类

  • 中断是指来自 CPU 外部、与CPU 执行指令无关的事件引起的中断,包括I/O 设备发出的 I/0 中断(如键盘输入、打印机缺纸等),或发生某种特殊事件(如用户按 Esc 键、定时器计数时间到)等。外部I/O 设备通过特定的中断请求信号线向 CPU 提出中断请求,CPU 每执行完一条指令就检查中断请求信号线,如果检测到中断请求,则进入中断响应周期。

中断可分为可屏蔽中断和不可屏蔽中断。

中断和异常的区别

中断和异常在本质上是一样的,但它们之间有以下两个重要的不同点:

  1. “缺页”或“滥出” 等异常事件是由特定指令在执行过程中产生的,而中断不和任何指令相关联,也不阻止任何指令的完成。
  2. 异常的检测由 CPU 自身完成,不必通过外部的某个信号通知 CPU。对于中断,CPU必须通过中断请求线获取中断源的信息,才能知道哪个设备发生了何种中断。

异常和中断响应过程

CPU 执行指令时,如果发生了异常或中断请求,必须进行相应的处理。从 CPU 检测到异常或中断事件,到调出相应的处理程序,整个过程称为异常和中断的响应。CPU 对异常和中断响应的过程可分为:

  1. 关中断,在保存断点和程序状态期间,不能被新的中断打断,因此要禁止响应新的中断,即关中断
  2. 保存断点和程序状态
  3. 识别异常和中断并转到相应的处理程序,异常大多采用软件识别方式,而中断可以采用软件识别方式或硬件识别方式

硬件识别

硬件识别方式又称向量中断,异常或中断处理程序的首地址称为中断向量,所有中断向量都存放在中断向量表中。每个异常或中断都被指定一个中断类型号。在中断向量表中,类型号和中断向量一一对应,因而可以根据类型号快速找到对应的处理程序。
image.png