中断浅析
定义
- 中断是指计算机在执行程序过程中,当遇到来自硬件或软件的某些事件需要立即处理时,暂时停止当前程序的执行,转去执行相应的事件处理程序,待处理完毕后,再返回原来被中断的程序继续执行的过程
分类
- 基于中断源可分为
- 软件中断---由程序指令触发,主要用于系统调用和异常处理
- 硬件中断---类似外设中断
- 基于cpu是否可屏蔽
- 可屏蔽中断---类似网卡收包中断
- 不可屏蔽中断---类似电源故障,硬件异常
- 基于cpu指令执行时间
- 同步中断---与cpu指令相关,是cpu在执行相关指令时,根据指令结果和处理器状态产生的中断,类似除0异常或内存异常
- 异步中断---与cpu指令无关,是由外部事件触发,类似键盘敲击
整体中断处理流程梳理
初始化
- 硬件
- 保证外设设备的gpio配置
- 保证外设到中断控制器以及中断控制器到cpu的中断信号线的配置
- 中断控制器
- 配置中断模式
- 配置中断屏蔽使能
- 配置中断优先级
- 软件
- 中断向量表的注册
- 中断服务程序的编写和注册
- cpu相关中断寄存器的配置
中断触发流程
- 外设端:触发中断,通过该外设的irq线与中断控制器的一根中断信号线链接,通过高低电平变化告知中断控制器
- 中断控制器(PLIC):接受到中断源的信号后,根据中断使能以及中断优先级路由到对应cpu的hart
- 处理器(risc-v): riscv的cpu会在处理完成每条指令后,检测到中断信号触发;保存 当前pc指针(mepc)、当前特权级别(mpp)、中断id(mcause)【异常或是中断+编号】、中断其他信息(mtval)【类似异常内存地址或异常指令】;根据获取的中断id以及mtvec跳转到对应中断向量函数
- 软件代码 :保存当前寄存器的上下文,查询plic的中断信息,跳转到对应的中断处理函数,完成处理后恢复寄存器上下文
部分概念说明
irq:interupt request,本质上是一个硬件信号线,用于传输中断信号
hart:riscv的概念hard thread,类似于cpu的核心的意思
mepc:机器模式下异常pc指针寄存器
mpp:机器模式下之前特权级别寄存器
mcause:机器模式异常原因寄存器
mtval:机器模式异常值寄存器
mtvec:机器模式异常向量基址寄存求
在向量模式下,cpu根据mcause获取相关的向量id,根据mtvec获取到向量基址,从而跳转到相关的中断处理函数,中断处理函数通过mtval进行进行判断或记录相关信息

浙公网安备 33010602011771号