# 6.3硬件中断与异常

> [!NOTE]
> 本章讨论的“中断”是广义说法：外部设备和CPU硬件发出的异步信号，以及指令执行触发的同步异常，都可能在程序执行过程中打断CPU的正常执行流。课件先按来源分成三类，再比较它们的同步性与处理方式。

## 阅读入口

* [硬件中断](/knowledge/cs/operating-systems/hardware-interrupt/)
* [6.4软件中断与系统调用](/courses/cs/csintro/6.4/)（系统调用的完整流程在6.4展开）

## 三类事件

硬件中断是设备、定时器等硬件向处理器发出的事件通知。它通常与当前执行的具体指令无关，因此称为**异步**事件。处理器在体系结构允许的时机响应中断，转入相应的处理程序。

例如，设备可以在一次输入输出完成后发出中断请求；定时器也可以产生中断以便内核处理计时与调度。定时器的位置、周期和触发方式由具体平台配置，不必都位于CPU内部，也不必始终采用固定周期。

与之相对，[异常](/knowledge/cs/operating-systems/processor-exception/)通常与当前指令的执行同步产生。中断与异常都可能引起执行流转移，但来源和返回行为不应混为一谈。

[来源：硬件中断](/knowledge/cs/operating-systems/hardware-interrupt/#definition)

处理器异常通常由当前指令执行时的条件同步触发，例如缺页、整数除零或无效指令。异常会把控制交给处理程序；是否能继续执行取决于异常原因、体系结构与操作系统的处理方式。

异常与[硬件中断](/knowledge/cs/operating-systems/hardware-interrupt/)的区别在于触发关系：前者通常与当前指令同步，后者通常是设备或定时器发出的异步请求。

[来源：处理器异常](/knowledge/cs/operating-systems/processor-exception/#definition)

课件把异常称为“异常中断”或“同步中断”，与两类硬件中断并列，与这里的划分一致。知识点把“是否由当前指令触发”写成了显式判据，判断时直接套这一条即可。

## 硬件中断的处理

一种简化的处理过程是：硬件提出请求，处理器响应并保存必要状态，内核运行处理程序，再恢复执行或根据调度结果运行其他线程。具体保存哪些寄存器、何时响应以及能否屏蔽，取决于体系结构与操作系统。

定时器事件可以让内核更新计时和调度状态。处理一次中断并不必然切换进程；是否切换由内核当时的调度决定。

[来源：硬件中断](/knowledge/cs/operating-systems/hardware-interrupt/#properties)

先看硬件请求的处理过程，再看异常在不同原因下可能采取的处理方式。

## 学习安排

课件按来源分为I/O硬件中断、CPU硬件中断和异常三类，再比较它们的同步性。阅读时从“事件由谁产生、是否由当前指令触发”入手，例子自然能归类。

建议顺序：先看I/O中断的处理流程，建立“设备发信号，CPU保存现场，执行ISR，恢复现场”的框架；再看时钟中断，理解CPU内部也会产生异步中断；最后比较故障、陷阱等异常的返回行为；具体行为取决于体系结构与系统处理。

系统调用在6.4展开；它是程序主动发起的同步内核请求，具体入口指令与异常分类取决于体系结构。

## 课程约定

* 课件把异常称为“异常中断”或“同步中断”，与I/O硬件中断、CPU硬件中断并列；本章沿用这个三分法。
* “同步/异步”按是否由当前指令触发判断，不按事件来自CPU内部还是外部判断。
* 时钟中断的10ms是课件中的示例；实际触发方式与时间间隔由系统配置决定。
* 比较三类事件时，除了来源和同步性，还要写“处理完后返回到哪里”；这张表比只背例子更能应付判断题。

## 易错点

* 定时器可以位于处理器内部或其他硬件中；中断通常与当前指令异步。
* 异常不等于程序崩溃：系统调用是程序主动触发的陷阱，缺页也可能被内核修复后继续执行。
* 可处理的缺页在页面准备好后通常重试触发指令；系统调用正常返回时继续后续用户代码。
* 中断处理程序保存和恢复的是被中断程序的上下文，是否切换进程由调度器决定，ISR本身不负责选择下一个进程。
* I/O硬件中断和CPU硬件中断都属于硬件中断；异常不属于硬件中断。

## 复习要点

复习时拿四个事件自测：键盘按下、时钟到期、缺页、系统调用。对每个事件依次写出来源、同步或异步、处理后的返回位置；如果某一列卡住，再回到知识点查对应段落。

判断顺序可以固定为：先看有没有外部设备信号，再看是不是当前指令触发，最后看处理程序能否修复。这个顺序能避免把时钟中断和系统调用都笼统地叫“中断”。
