每日科普 · 2026-10-01 周四
考研 408 × 求职面试
知识点 · 操作系统 · 进阶
中断与异常的处理机制
中断与异常都是CPU暂停当前程序、转去处理特殊事件的机制,但来源不同。
1. 中断:由外部设备或时钟等异步触发,如键盘、网卡、定时器,当前指令执行完后才响应。
2. 异常:由CPU执行指令时同步触发,如除零、缺页、系统调用(陷阱),与当前指令直接相关。
3. 处理流程:硬件先保存断点(PC)和程序状态字,关中断或屏蔽同级,按中断号查中断向量表,跳到处理程序入口。软件接着保存通用寄存器等现场,识别类型并处理;完成后恢复现场,开中断,执行中断返回指令(如IRET)回到断点。
4. 返回差异:故障(如缺页)处理后通常重新执行出错指令;陷阱(如系统调用)返回下一条指令;终止则可能结束进程。
5. 进阶要点:中断可屏蔽、可嵌套,需考虑优先级;异常同步且通常不可屏蔽。中断向量表和中断控制器负责分发。系统调用本质是陷阱,是用户态进入内核态的受控入口。
每日一题 · 操作系统
中断与异常的处理机制
关于中断与异常的处理,下列说法正确的是:
A. 中断由CPU内部指令执行引起,异常由外部设备引起
B. 中断处理必须保存断点,异常处理不需要
C. 缺页异常处理后通常重新执行引起缺页的指令
D. 系统调用属于外部中断
解析
答案:C。中断是外部异步事件,异常是CPU执行指令同步引发,故A错;两者都要保存断点与现场,故B错;系统调用是陷阱类异常,不是外部中断,故D错。缺页属于故障:访问的页面不在内存,处理程序调入页面后,返回时必须重新执行原指令,因此C正确。
面试小贴士 · 操作系统
中断与异常的处理机制
面试常问:中断和异常区别、处理流程、系统调用/缺页属于哪类。答法:先同步/异步,再按“保存断点→查向量表→保存现场→处理→恢复→返回”讲。易错:系统调用是陷阱异常;缺页返回后重新执行原指令;中断响应在指令边界。
代码实现 · C
代码示例
#include <stdio.h>
typedef void (*handler_t)(int);
handler_t ivt[256]; // 中断向量表
void page_fault(int vec) {
printf("处理缺页异常 %d,返回后重新执行原指令\n", vec);
}
void timer_interrupt(int vec) {
printf("处理时钟中断 %d,返回后继续下一条指令\n", vec);
}
void do_interrupt(int vec) {
handler_t h = ivt[vec];
if (!h) { printf("未注册向量 %d\n", vec); return; }
// 硬件已保存断点,软件保存现场(此处简化)
h(vec);
// 恢复现场,并由iret返回
}
int main(void) {
ivt[14] = page_fault; // 常见:14号缺页异常
ivt[32] = timer_interrupt; // 常见:32号时钟中断
do_interrupt(14);
do_interrupt(32);
return 0;
}