中断处理机制(RISC-V)

2021-05-22 操作系统 uCore

# 一、概述

建立中断机制的流程为:

  1. 让 CPU 能响应中断
  2. 建立中断服务例程
  3. 响应并处理中断
  4. 保存与恢复现场

下面详细介绍每个步骤的实现。

# 二、让 CPU 能响应中断

# 2.1 硬件设置

  • sstatus:保存全局中断使能位;
  • sie:指出 CPU 目前能处理 | 忽略的中断;
  • stvec:记录中断入口地址(中断向量表)。

# 2.2 初始化操作

  • 设置 sieTI 使能 STIE 位;
  • 设置 sstatus 的使能中断 SIE 位;
  • 实现中断服务总控函数;
  • 设置 stvec 指向中断服务总控函数的入口地址。

# 三、建立中断服务例程

  • 初始化:设置时钟中断触发次数;
  • 初始化:设置 sieTI 使能 STIE 位;
  • 服务例程:调用 OpenSBI 提供的接口设置下次时钟中断触发时间。

# 四、保存与恢复现场

# 4.1 硬件设置

  • sepc:保存中断的指令地址
  • pc:设置为 stvec
  • scause:设置中断的来源
  • sstatusSIE 位置零以禁用中断
  • stval:保存了中断相关的附加信息

# 4.2 软件保存

  • x[0–31]:通用寄存器
  • pc:设置为 stvec
  • scause:设置中断的来源
  • sstatusSIE 位置零以禁用中断
  • stval:保存了中断相关的附加信息

# 4.3 总结

产生中断后的流程如下:

  1. 硬件设置
  2. 软件保存被打断现场
  3. 执行软件实现的中断服务例程
  4. 软件恢复被打断现场
  5. 继续执行

# 五、中断嵌套

硬件中断服务例程可被打断,不同硬件中断源可能在硬件中断处理时出现。

中断嵌套是指中断系统正在执行一个中断服务时,有另一个优先级更高的中断提出中断请求,这时会暂时终止当前正在执行的级别较低的中断服务例程,去处理级别更高的中断源,待处理完毕,再返回到被中断了的中断服务例程继续执行的过程。

# 六、参考资料

Last Updated: 2023-01-28 4:31:25