首页/计算机组成原理/I/O系统/中断响应过程 🔗 在 Obsidian 中打开
计算机组成原理 · I/O系统

中断响应过程

难度 ★★★重要度 ★★★★ 考查频率 低题型 选择 / 综合 中断处理中断判优中断向量
速查
中断响应分两阶段:硬件自动完成(关中断→保存断点→识别中断源→形成入口)与软件完成(保存现场→开中断→执行→关中断→恢复现场→开中断+返回)。响应发生在每条指令执行完后

完整的中断响应流程

中断响应分为两个阶段:中断响应阶段(硬件完成)和中断处理阶段(软件完成)。

1.1 中断响应阶段(硬件自动完成)

Step 1: 中断请求  设备发出 IRQ,多个设备可能同时请求
Step 2: 中断判优  硬件判优电路决定响应哪个(链式/并行/软件)
Step 3: 中断响应(CPU)
  ① 关中断 (IF=0)
  ② 保存断点 (PC 和 PSW 压栈)
  ③ 识别中断源 (获取中断向量号)
  ④ 形成中断服务程序入口地址

1.2 中断处理阶段(软件完成)

Step 4: 中断服务
  ① 保存现场(通用寄存器压栈)
  ② 开中断 (IF=1,允许嵌套)
  ③ 执行中断服务程序
  ④ 关中断 (IF=0)
  ⑤ 恢复现场(寄存器出栈)
Step 5: 中断返回
  ① 开中断 (IF=1)
  ② 恢复断点 (PC 和 PSW 出栈)
  ③ 返回断点继续执行

关键细节分析

2.1 为什么要关两次中断?

关中断时机目的
响应时关中断保存断点时不能被打断,否则断点丢失
恢复现场前关中断恢复现场时不能被打断,否则寄存器被覆盖

2.2 保存断点 vs 保存现场

保存内容时机执行者内容
保存断点中断响应时硬件PC、PSW
保存现场中断服务开始软件通用寄存器

2.3 识别中断源的方式

硬件向量法:中断向量号 → 中断向量表(内存)→ 入口地址,硬件自动完成。

软件查询法:CPU 依次查询各设备状态寄存器,找到请求设备转入服务程序;速度慢但灵活。

中断向量与中断向量表

每个中断源对应一个中断向量号(0-255)。中断向量表存放中断服务程序入口地址。

x86 实模式

  • 每个表项 4 字节(段地址 2B + 偏移 2B)
  • 表大小 $= 256 \times 4B = 1024B$
  • 存放在内存 0x00000 ~ 0x003FF

x86 保护模式

  • 使用中断描述符表(IDT),每项 8 字节
  • IDT 基址与限长由 IDTR 寄存器给出

向量地址计算

入口地址位置 = 中断向量表基址 + n × 每项字节数
x86 实模式:地址 = 0x0000 + n × 4
  向量号 0x21 的入口在 0x0000 + 0x21×4 = 0x0084 处

中断响应条件

CPU 响应中断必须满足:

  1. 有中断请求:设备发出中断请求
  2. 中断未被屏蔽:未被中断屏蔽字屏蔽
  3. CPU 允许中断:中断允许标志 $IF=1$(可屏蔽中断)
  4. 当前指令执行完毕:不能在指令中途响应
  5. 无更高优先级中断正在处理(或允许嵌套)
不满足的情况$- IF=0$(关中断);当前正执行不可中断的多周期指令(乘除等);当前有更高优先级中断正在服务。

手算示例

例1:中断响应时间

CPU 指令平均 2μs;硬件开销 3 个时钟周期;时钟 100MHz
硬件响应时间 = 3 × (1/100MHz) = 30ns
总中断延迟 ≈ 30ns + 2μs ≈ 2.03μs

例2:中断判优

4 设备 A>B>C>D,屏蔽字 1110(只允许 D)
bit0(A)=1 屏蔽 / bit1(B)=1 屏蔽 / bit2(C)=1 屏蔽 / bit3(D)=0 允许
→ 仅 D 可被响应

改 0100:允许 A、C,屏蔽 B、D

例3:中断嵌套

优先级 A>B>C>D,初始中断开启
D请求→服务D;B请求→打断D服务B;A请求→打断B服务A
A完→回B;B完→回D;D完→回主程序
嵌套栈:主程序→D→B→A

中断响应时序图

时间→
          ┌──────┐ ┌────┐ ┌────┐ ┌─────────┐ ┌────┐ ┌────┐
指令执行:│当前指令│ │保存PC│ │取向│ │ 保存现场 │ │中断│ │恢复│
          └──────┘ └────┘ └────┘ └─────────┘ └────┘ └────┘
             硬件自动      硬件       软件(服务程序)      软件

记忆卡片

中断响应四个硬件步骤?
①关中断 ②保存断点(PC+PSW) ③识别中断源(取向量号) ④形成入口地址
为何先关中断再保存断点?
防止保存断点时被新中断打断,断点信息不完整
断点 vs 现场?
断点=硬件自动保存(PC+PSW);现场=软件手动保存(通用寄存器)
中断向量表存什么?
中断服务程序的入口地址(地址簿)

交互动画 · 中断响应九步流程

阶段一:硬件自动完成 ① 关中断 ② 保存断点 ③ 识别中断源 ④ 形成入口 阶段二:软件完成 ⑤ 保存现场 ⑥ 开中断 ⑦ 执行服务 ⑧ 恢复现场 ⑨ 返回断点
点击「播放」或「下一步」逐步查看中断响应流程
共 9 步(硬件 4 步 + 软件 5 步)
橙色 = 当前步,浅橙 = 已完成步;硬件阶段由 CPU 自动完成,软件阶段由中断服务程序完成。

相关知识点

io-control-comparison interrupt-and-dma exception-and-interrupt-handling

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