← 前一天目录后一天 →

每日科普 · 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;
}
← 前一天目录后一天 →