26考研——中央处理器_异常和中断机制(5)

408答疑


文章目录


五、异常和中断机制

  • 现代计算机中都配有完善的异常和中断处理系统,CPU 的数据通路中有相应的异常检测和响应逻辑,外设接口中有相应的中断请求和控制逻辑,操作系统中有相应的中断服务程序。
  • 这些中断硬件电路和中断服务程序有机结合,共同完成异常和中断的处理过程。

异常和中断的基本概念

  • 由 CPU 内部产生的意外事件被称为异常,有些教材中也称内中断。由来自 CPU 外部的设备向 CPU 发出的中断请求被称为中断,通常用于信息的输入和输出,有些教材中也称外中断,内中断和外中断的联系与区别如下图所示。

    • 异常是 CPU 执行一条指令时,由 CPU 在其内部检测到的、与正在执行的指令相关的同步事件;
    • 中断是一种典型的由外部设备触发的、与当前正在执行的指令无关的异步事件。
  • 异常和中断处理过程的描述如下 :若 CPU 在执行用户程序的第 i i i 条指令时检测到一个异常事件,或者执行第 i i i 条指令后发现一个中断请求信号,则 CPU 打断当前程序,然后转去执行相应的异常或中断处理程序。

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

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

  • 中断和异常在本质上是一样的,但它们之间有两个重要的不同点:
    1. "缺页"或"溢出"等异常事件是由特定指令在执行过程中产生的,而中断不和任何指令相关联,也不阻止任何指令的完成。
    2. 异常的检测由 CPU 自身完成,不必通过外部的某个信号通知 CPU。对于中断,CPU 必须通过中断请求线获取中断源的信息,才能知道哪个设备发生了何种中断。

异常和中断的分类

异常的分类

  • 异常是由 CPU 内部产生的意外事件,分为硬故障中断和程序性异常。

    • 硬故障中断是由硬连线出现异常引起的,如存储器校验错、总线错误等。
    • 程序性异常也称软件中断,是指在 CPU 内部因执行指令而引起的异常事件。如整除 0、溢出、断点、单步跟踪、非法指令、栈溢出、地址越界、缺页等。
  • 按异常发生原因和返回方式的不同,可分为故障、自陷和终止。

故障 (Fault)
  • 指在引起故障的指令启动后、执行结束前被检测到的异常事件。
    • 例如,指令译码时,出现"非法操作码";
    • 取数据时,发生"缺权"或"缺页";
    • 执行整数除法指令时,发现"除数为 0"等。
  • 对于"缺段""缺页"等异常事件,经处理后,可将所需的段或页面从磁盘调入主存,回到发生故障的指令继续执行,断点为当前发生故障的指令;
  • 对于"非法操作码""除数为 0"等,因为无法通过异常处理程序恢复故障,因此不能回到原断点执行,必须终止进程的执行。
自陷 (Trap)

自陷也称陷阱或陷入,它是预先安排的一种"异常"事件,就像预先设定的"陷阱"一样。

  • 通常的做法是:事先在程序中用一条特殊指令或通过某种方式设定特殊控制标志来人为设置一个"陷阱",当执行到被设置了"陷阱"的指令时,CPU 在执行完自陷指令后,自动根据不同"陷阱"类型进行相应的处理,然后返回到自陷指令的下一条指令执行。

  • 在 x86 机器中,用于程序调试"断点设置"和单步跟踪的功能就是通过陷阱机制实现的。此外,系统调用指令、条件自陷指令(如 MIPS 中的 teq、teqi、tne、tnei 等)等都属于陷阱指令,执行到这些指令时,无条件或有条件地自动调出操作系统内核程序进行执行。

故障异常和自陷异常属于程序性异常(软件中断)。

终止 (Abort)
  • 若在执行指令的过程中发生了使计算机无法继续执行的硬件故障,如控制器出错、存储器校验错、总线错误等,则程序将无法继续执行,只能终止,此时,调出异常服务程序来重启系统。
  • 这种异常与故障和自陷不同,不是由特定指令产生的,而是随机发生的。

终止异常和外中断属于硬件中断。

中断的分类

  • 中断是指来自 CPU 外部、与 CPU 执行指令无关的事件引起的中断,包括 I/O 设备发出的 I/O 中断(如键盘输入、打印机缺纸等),或发生某种特殊事件(如用户按 Esc 键、定时器计数时间到)等。

  • 外部 I/O 设备通过特定的中断请求信号线向 CPU 提出中断请求,CPU 每执行完一条指令就检查中断请求信号线,若检测到中断请求,则进入中断响应周期。

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

可屏蔽中断
  • 指通过可屏蔽中断请求线 INTR 向 CPU 发出的中断请求。
  • CPU 可以通过在中断控制器中设置相应的屏蔽字来屏蔽它或不屏蔽它,被屏蔽的中断请求将不被送到 CPU。
不可屏蔽中断
  • 指通过专门的不可屏蔽中断请求线 NMI 向 CPU 发出的中断请求。
  • 通常是非常紧急的硬件故障,如电源掉电等。这类中断请求信号不可被屏蔽,以让 CPU 快速处理这类紧急事件。

异常和中断响应过程

  • CPU 执行指令时,若发生了异常或中断请求,则必须进行相应的处理。
  • 从 CPU 检测到异常或中断事件,到调出相应的处理程序,整个过程称为异常和中断响应。
  • CPU 对异常和中断响应的过程可分为关中断、保存断点和程序状态、识别异常和中断并转到相应的处理程序。

关中断

在保存断点和程序状态期间,不能被新的中断打断,因此要禁止响应新的中断,即关中断。

  • 通常通过设置"中断允许"(IF)触发器来实现,若 IF 置为 1,则为开中断,表示允许响应中断;
  • 若 IF 置为 0,则表示关中断,表示不允许响应中断。

保存断点和程序状态

  • 为了能在异常和中断处理后正确返回到被中断的程序继续执行,必须将程序的断点(返回地址)送到栈或特定寄存器中。通常保存在栈中,这是为了支持异常或中断的嵌套。
  • 异常和中断处理后可能还要回到被中断的程序继续执行,被中断时的程序状态字寄存器 PSW 的内容也需要保存在栈或特定寄存器中,在异常和中断返回时恢复到 PSW 中。

识别异常和中断并转到相应的处理程序

异常和中断源的识别有软件识别和硬件识别两种方式。异常和中断源的识别方式不同,异常大多采用软件识别方式,而中断可以采用软件识别方式或硬件识别方式。

  • 软件识别方式是指 CPU 设置一个异常状态寄存器,用于记录异常原因。操作系统使用一个统一的异常或中断查询程序,按优先级顺序查询异常状态寄存器,以检测异常和中断类型,先查询到的先被处理,然后转到内核中相应的处理程序。

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

  • 整个响应过程是不可被打断的。

  • 中断响应过程结束后,CPU 就从 PC 中取出对应中断服务程序的第一条指令开始执行,直至中断返回,这部分任务是由 CPU 通过执行中断服务程序完成的,整个中断处理过程是由软/硬件协同实现的。

注意:

所有的异常和中断事件都是由硬件检测发现的。

此外,根据识别中断服务程序地址的方式,可分为向量中断和非向量中断;根据中断处理过程是否允许被打断,还可分为单重中断和多重中断。

八、参考资料

鲍鱼科技课件

b站免费王道课后题讲解:

网课全程班:

26王道考研书

相关推荐
Li_RuiQi8 小时前
DAgger与交互式模仿学习_ACT学习笔记
笔记·学习
He BianGu8 小时前
【笔记】C# 中BindingFlags的详细作用
笔记·c#
AI视觉网奇8 小时前
turtle 入门教程笔记
笔记
跨知易知识产权9 小时前
美国专利确权是什么,和专利诉讼有什么不一样?
笔记
杨逢昌工厂6S管理9 小时前
126-杨逢昌6S三环体系:越做越乱的现场熵增机理与基准化治理——一线现场诊断笔记
经验分享·笔记·职场和发展·学习方法
悟道书生9 小时前
若依 RBAC 权限控制学习笔记
java·网络·笔记·sql·学习·vue
陈哈哈11119 小时前
折腾了半天,总算把 Vim 9.2 装明白了
笔记
陈哈哈11119 小时前
折腾了半天,总算把 OpenGL 的开发环境给装明白了
笔记
深圳老胡10 小时前
STM32F103 硬件 SPI 与软件 IO 模拟 SPI 最高速度差异详解
笔记·stm32·单片机·代码规范·1024程序员节
正弦波_Wave10 小时前
【Orcad原理图打印Pdf】
笔记·pdf