中断
中断是硬件层的特性,允许外部设备通过硬件信号打断 CPU 的正常执行流程,转而处理更紧急的任务。更进一步的,中断信号使得 CPU 停下手中的工作,保存寄存器现场,然后跳转到某个内存地址,执行该位置处的函数。
其实现的理由是让 CPU 或者计算机系统具有被动感知外界的能力。因为,如果不是被动感知,那么 CPU 就需要通过主动轮询的方式去主动调查外界,就会导致 CPU 资源的浪费。同时,中断为上层程序的赖以使用的回调函数和异步能力的功能基础提供支持。
中断分为两种类型。外部中断,来自外部设备的中断、时钟中断、电源管理中断、核间中断(多核心 CPU 之间进行的主动中断触发)等;内部中断,通过特定的指令由软件主动触发,来自异常(由 CPU 执行指令时产生的错误),陷阱(由程序主动触发的中断),系统调用(用户程序请求操作系统服务)。
中断的基本特点
- 异步性:中断可以在任何时候发生,不需要与 CPU 的执行同步
- 优先级:不同类型的中断具有不同的优先级,确保重要事件得到及时处理
- 可屏蔽:某些中断可以被暂时禁止,以保护关键代码段的执行
- 可嵌套:高优先级中断可以打断低优先级中断的处理
中断控制器
中断控制器是管理中断请求的硬件设备,主要负责:
- 接收来自各个设备的中断请求
- 对中断请求进行优先级排序
- 向 CPU 发送中断信号
- 管理中断屏蔽和使能
现代计算机系统通常使用高级可编程中断控制器(APIC),它支持:
- 多处理器环境下的中断分发
- 中断优先级管理
- 中断向量表
- 中断屏蔽控制
在多核处理器系统中,中断处理变得更加复杂,中断控制器需要负责中断分发,决定由哪个 CPU 核心处理中断;负载均衡,在不同核心间分配中断处理任务;缓存一致性,确保中断处理程序的数据一致性;同步机制,处理多核心间的中断竞争。
中断处理流程
当发生中断时,硬件会执行以下步骤:
- 保存当前执行状态,将程序计数器(PC)压入栈,保存处理器状态寄存器,保存其他必要的寄存器
- 切换到中断处理模式,禁用其他中断(可配置),切换到内核模式,加载中断处理程序的地址
- 执行中断服务程序,识别中断源,处理中断请求,清除中断标志
- 恢复执行状态,恢复保存的寄存器,恢复处理器状态,返回被中断的程序
中断向量表
中断向量表是一个存储中断处理程序入口地址的数据结构,通常位于内存的固定位置。每个中断类型对应一个向量号,通过向量号可以找到对应的处理程序。
中断优先级
中断优先级决定了多个中断同时发生时,哪个中断会被优先处理。优先级通常分为:
- 不可屏蔽中断(NMI)
- 硬件中断
- 软件中断
- 异常
中断延迟
中断延迟是指从中断发生到开始执行中断处理程序的时间,包括:
- 硬件延迟:中断信号传播时间
- 软件延迟:中断处理程序准备时间
- 系统延迟:其他中断或系统活动造成的延迟
中断优化
为了提高中断处理效率,现代处理器采用多种优化技术:
- 中断合并:将多个相似的中断合并处理
- 中断亲和性:将中断绑定到特定 CPU 核心
- 中断轮询:在低负载时使用轮询代替中断
- 中断延迟:通过延迟处理非关键中断来减少系统开销
作用场景
- 多任务处理:通过中断实现进程切换和调度
- 资源管理:及时响应硬件资源状态变化
- 事件驱动:响应IO设备的中断,实现监听IO事件
- 异常处理:处理系统异常和错误
- 实时响应:保证关键事件的及时处理
类型 | 具体中断 |
---|---|
硬件中断 | - IO中断(磁盘读写完成) - 定时器中断 - 外设中断(鼠标键盘操作) - 电源管理中断 - 网络设备中断 - DMA传输完成中断 |
软件中断 | - 系统调用(通过int指令触发) - 异常处理(如除零错误) - 调试断点 - 信号处理 - 内核态切换 |
异常 | - 页错误(Page Fault) - 段错误(Segmentation Fault) - 除零错误 - 非法指令 - 栈溢出 - 特权级错误 |