6.3硬件中断与异常
阅读入口
- 硬件中断
- 6.4软件中断与系统调用(系统调用的完整流程在6.4展开)
三类事件
硬件中断是设备、定时器等硬件向处理器发出的事件通知。它通常与当前执行的具体指令无关,因此称为异步事件。处理器在体系结构允许的时机响应中断,转入相应的处理程序。
例如,设备可以在一次输入输出完成后发出中断请求;定时器也可以产生中断以便内核处理计时与调度。定时器的位置、周期和触发方式由具体平台配置,不必都位于CPU内部,也不必始终采用固定周期。
与之相对,异常通常与当前指令的执行同步产生。中断与异常都可能引起执行流转移,但来源和返回行为不应混为一谈。
处理器异常通常由当前指令执行时的条件同步触发,例如缺页、整数除零或无效指令。异常会把控制交给处理程序;是否能继续执行取决于异常原因、体系结构与操作系统的处理方式。
异常与硬件中断的区别在于触发关系:前者通常与当前指令同步,后者通常是设备或定时器发出的异步请求。
课件把异常称为“异常中断”或“同步中断”,与两类硬件中断并列,与这里的划分一致。知识点把“是否由当前指令触发”写成了显式判据,判断时直接套这一条即可。
硬件中断的处理
一种简化的处理过程是:硬件提出请求,处理器响应并保存必要状态,内核运行处理程序,再恢复执行或根据调度结果运行其他线程。具体保存哪些寄存器、何时响应以及能否屏蔽,取决于体系结构与操作系统。
定时器事件可以让内核更新计时和调度状态。处理一次中断并不必然切换进程;是否切换由内核当时的调度决定。
先看硬件请求的处理过程,再看异常在不同原因下可能采取的处理方式。
学习安排
课件按来源分为I/O硬件中断、CPU硬件中断和异常三类,再比较它们的同步性。阅读时从“事件由谁产生、是否由当前指令触发”入手,例子自然能归类。
建议顺序:先看I/O中断的处理流程,建立“设备发信号,CPU保存现场,执行ISR,恢复现场”的框架;再看时钟中断,理解CPU内部也会产生异步中断;最后比较故障、陷阱等异常的返回行为;具体行为取决于体系结构与系统处理。
系统调用在6.4展开;它是程序主动发起的同步内核请求,具体入口指令与异常分类取决于体系结构。
课程约定
- 课件把异常称为“异常中断”或“同步中断”,与I/O硬件中断、CPU硬件中断并列;本章沿用这个三分法。
- “同步/异步”按是否由当前指令触发判断,不按事件来自CPU内部还是外部判断。
- 时钟中断的10ms是课件中的示例;实际触发方式与时间间隔由系统配置决定。
- 比较三类事件时,除了来源和同步性,还要写“处理完后返回到哪里”;这张表比只背例子更能应付判断题。
易错点
- 定时器可以位于处理器内部或其他硬件中;中断通常与当前指令异步。
- 异常不等于程序崩溃:系统调用是程序主动触发的陷阱,缺页也可能被内核修复后继续执行。
- 可处理的缺页在页面准备好后通常重试触发指令;系统调用正常返回时继续后续用户代码。
- 中断处理程序保存和恢复的是被中断程序的上下文,是否切换进程由调度器决定,ISR本身不负责选择下一个进程。
- I/O硬件中断和CPU硬件中断都属于硬件中断;异常不属于硬件中断。
复习要点
复习时拿四个事件自测:键盘按下、时钟到期、缺页、系统调用。对每个事件依次写出来源、同步或异步、处理后的返回位置;如果某一列卡住,再回到知识点查对应段落。
判断顺序可以固定为:先看有没有外部设备信号,再看是不是当前指令触发,最后看处理程序能否修复。这个顺序能避免把时钟中断和系统调用都笼统地叫“中断”。