中断浅析

定义

  • 中断是指计算机在执行程序过程中,当遇到来自硬件或软件的某些事件需要立即处理时,暂时停止当前程序的执行,转去执行相应的事件处理程序,待处理完毕后,再返回原来被中断的程序继续执行的过程

分类

  • 基于中断源可分为
    • 软件中断---由程序指令触发,主要用于系统调用和异常处理
    • 硬件中断---类似外设中断
  • 基于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进行进行判断或记录相关信息

posted @ 2025-06-24 21:12  森郁_林一  阅读(28)  评论(0)    收藏  举报