首页/计算机组成原理/中央处理器/异常和中断处理 🔗 在 Obsidian 中打开
计算机组成原理 · 中央处理器

异常和中断处理

重要度 ⭐⭐⭐⭐中央处理器408CPU
速查
异常来自 CPU 内部(与当前指令相关),中断来自外部设备(与当前指令无关)。处理过程:关中断 → 保存断点 → 识别中断源 → 保护现场 → 中断服务 → 恢复现场 → 开中断

速查

项目
异常CPU 内部事件(除零、溢出、缺页)
中断外部设备请求(I/O 完成、时钟)
处理过程关中断→保存断点→识别中断源→保护现场→中断服务→恢复现场→开中断

基本概念

异常(Exception)

由 CPU 内部事件引起,与当前执行的指令相关。

中断(Interrupt)

由 CPU 外部设备引起,与当前执行的指令无关。

不同体系结构对这两个术语使用可能不同,408 中通常统一称为"中断"。

中断的分类

按来源

1. 外部中断(硬件中断)

  • 可屏蔽中断(INTR):通过中断屏蔽位可关闭。
  • 不可屏蔽中断(NMI):如电源掉电,必须立即处理。

2. 内部中断(异常)

  • 故障(Fault):可恢复,重新执行引起异常的指令。
  • 陷阱(Trap):有意触发,执行下一条指令(如系统调用)。
  • 终止(Abort):不可恢复的严重错误。

按是否可屏蔽

类型例子特点
不可屏蔽电源故障、内存校验错必须立即处理
可屏蔽I/O 中断、定时器可通过屏蔽位关闭

中断响应过程

  1. 关中断:置 $IF=0$,防止新的中断干扰。
  2. 保存断点:将 PC 和 PSW 压栈。
  3. 识别中断源:确定中断来自哪个设备。
  4. 保存现场:保存通用寄存器等。
  5. 获取中断服务程序入口:中断向量表。
  6. 执行中断服务程序
  7. 恢复现场
  8. 开中断:置 $IF=1$。
  9. 返回断点:执行中断返回指令。

中断向量表

  • 存放各中断服务程序的入口地址
  • 中断类型号 → 查表 → 获取入口地址。
  • x86 中位于内存低地址区域。

中断优先级与嵌套

当多个中断同时到达时,按优先级处理:硬件故障 > 软件中断 > NMI > INTR;同级中断通过排队器(链式优先级)决定。

中断嵌套高优先级中断可以打断低优先级中断的处理;需要在中断服务程序中开中断,并需要足够的栈空间支持嵌套深度。

CPU 响应中断的条件

  1. 有中断请求;
  2. CPU 处于开中断状态($IF=1$,对可屏蔽中断);
  3. 当前指令执行完毕(指令周期末尾检查)。

中断屏蔽

中断屏蔽字

  • 每一位对应一个中断源;1 表示屏蔽(不允许),0 表示开放。
  • 可动态修改以改变中断优先级。
屏蔽字与优先级通过改变屏蔽字可动态调整中断优先级:高优先级中断处理时屏蔽低优先级,可实现中断嵌套。

中断响应时间

中断请求发生开始执行中断服务程序第一条指令的时间:

$$T_{\text{响应}} = T_{\text{完成当前指令}} + T_{\text{关中断}} + T_{\text{保存断点}} + T_{\text{取入口}} + T_{\text{保存现场}}$$
  • 当前指令执行时间:乘除法指令可能很长。
  • 保存断点和现场:压栈操作。
  • 中断延迟:越短越好。

多重中断与中断嵌套

  • 不允许中断嵌套:处理完当前中断再响应新请求。
  • 允许中断嵌套:高优先级可打断低优先级(进入 ISR 后开中断、设置正确屏蔽字、保证足够栈空间)。

记忆卡片

异常和中断的区别?
异常来自 CPU 内部、与当前指令相关;中断来自外部设备、与当前指令无关。
Fault 和 Trap 的区别?
Fault 重新执行引起异常的指令;Trap 执行其下一条。
CPU 什么时候响应中断?
当前指令执行完毕后,在指令周期末尾检查中断请求。
中断向量表的作用?
根据中断类型号查找对应中断服务程序的入口地址。

交互动画 · 中断响应流程

逐步查看中断响应过程(关中断 → … → 开中断返回)。点击"下一步"推进。

硬件 硬件 软件 软件 硬件 软件 软件 软件 1关中断 2保存断点 3识别源 4保护现场 5取入口 6执行ISR 7恢复现场 8开中断
硬件自动(响应)软件 ISR(处理)

相关知识点

pipeline-hazard-detail interrupt-response-process process-and-thread interrupt-and-dma

↑ 以上为站内 HTML 相对链接(纯网页可浏览);本页右上「在 Obsidian 中打开」跳回源笔记。