Exeptional Control Flow
5/27/26About 4 min
Exeptional Control Flow
正常控制流 vs 异常控制流
- 正常控制流:按指令存放的顺序执行 or 跳转到由转移类型指令指出的转移目标地址处执行
- 异常控制流 (ECF):CPU因为内部异常事件或外部中断事件而打断原来程序的执行,转去执行系统提供的针对这些特殊事件的处理程序
中断vs异常
根据事件触发的来源和与当前指令的关系,通常将其划分为外部中断和内部中断(异常) :
┌── 不可屏蔽中断 (NMI)
┌─ 外部中断 ─┤
│ (异步事件)└── 可屏蔽中断 (INTR)
中断源分类 ──┤
│ ┌── 故障 (Faults)
└─ 内部中断 ─┼── 陷阱 (Traps)
(同步异常)└── 中止 (Aborts)中断
由 CPU 外部设备(IO设备) 触发的、与当前正在执行的指令无关的异步事件 。
中断处理程序执行完后,一律返回到被中断的断点处继续执行 。
分类 :
- 不可屏蔽中断 (NMI):通常是非常紧急的硬件故障,CPU在执行完当前指令后必须无条件响应,如电源掉电、存储器出错或总线奇偶校验错等灾难性硬件故障。
- 可屏蔽中断 (INTR):通过可屏蔽中断请求线INTR向CPU进行请求的的中断,主要来自IO设备的中断请求,可以通过设置标志寄存器的中断允许标志
IF来控制(STI指令置IF=1允许响应中断“开中断”;CLI指令置IF=0不响应中断“关中断”),如来自键盘、鼠标、时钟等外设的请求 。
异常
处理器在其内部检测到的,与当前正在执行的指令相关的同步事件 。
Intel CPU 中的三类异常 :
故障 (Faults):引起故障的指令在执行过程中CPU检测到的一类与指令执行相关的意外事件 。通常可以被纠正。处理完后,CPU 会重新执行引起故障的指令(如:除法出错、数据访问越界、缺页故障) 。
陷阱 (Traps):预先安排的一种“异常”事件。处理完后,回到该指令的下一条指令继续执行 。
- 软中断(程序中有意写入的
INT n指令) - 单步异常(标志位
TF=1时,每执行完一条指令便产生一次异常) - 断点异常(调试器在代码中插入的
INT 3指令)
- 软中断(程序中有意写入的
中止 (Aborts):在执行指令过程中出现了严重错误 ,程序无法继续执行。将终止进程甚至系统重新启动。(如硬件故障、系统表中出现非法值或不一致的值)
处理过程
当CPU在处理当前指令时检测到异常事件,或收到中断请求信号,CPU 决定响应中断或异常后,保存断点和状态(CS, EIP, EFLAGS),通过中断描述符表找到对应的处理程序地址,转到处理程序去执行。处理完毕后,若可恢复,继续执行当前程序;若不可恢复,则终止用户进程。
中断描述符表
中断类型码与对应的中断处理程序之间的连接表,按中断类型码存放存放中断处理程序相关信息(入口地址、类别、权限等)的表
实地址模式下,异常处理程序或中断服务程序的入口地址称为中断向量(16位段地址+16位偏移地址),中断向量表是存储中断向量的数据结构(存放256个中断向量,共1kB)
保护模式下借助中断描述符表获得异常处理程序或中断服务程序的地址
门 :指中断和异常处理程序的入口地址等信息
- 任务门:执行处理程序时将发生任务转移 。
- 中断门:主要用于处理外部中断 。
- 陷阱门:主要用于处理异常 。
优先级关系
当多个中断/异常同时发生时,CPU 遵循以下优先级由高到低的顺序响应 :
- 最高:除调试故障以外的异常
- 异常指令(
INTO、INT n、INT 3) - 对当前指令的调试异常
- 对下条指令的调试异常
- 不可屏蔽中断 (NMI)
- 最低:可屏蔽中断 (INTR)