Chapter 4 Software-Hardware Interface¶
1 异常与中断¶
基本概念
- 异常(Exceptions):指控制流的任何意外变化,可来自内部或外部
- 中断(Interrupts):来自外部 I/O 控制器的请求
| 事件类型 | 来源 | RISC-V 术语 |
|---|---|---|
| 系统重置 | 外部 | 异常 |
| I/O 设备请求 | 外部 | 中断 |
| 从用户程序调用操作系统 | 内部 | 异常 |
| 使用未定义指令 | 内部 | 异常 |
| 硬件故障 | 任一 | 任一 |
1. 1 RISC-V 异常处理¶
- 监管者异常程序计数器(SEPC, Supervisor Exception Program Counter):保存引发异常指令或被中断指令的 PC,用于标识故障指令
- 监管者异常原因寄存器(SCAUSE, Supervisor Exception Cause Register):保存异常触发原因
- 向量中断(Vectored Interrupts):控制转移地址由异常原因决定,通过向量表基址寄存器和异常向量地址偏移确定处理入口
| 异常类型 | 异常向量地址偏移 |
|---|---|
| 未定义指令 | 0001000000 |
| 系统错误(硬件故障) | 0110000000 |
1. 2 处理器动作(Handler Actions)¶
- 读取 SCAUSE 的异常原因,转移到对应异常处理器
- 确定处理动作
- 可重启异常:
- 采取纠正措施,流水线可清空引发异常的指令
- 利用 SEPC 返回原程序,重新获取并执行引发异常的指令
- 不可重启异常:终止程序,利用 SEPC、SCAUSE 等信息报告错误
- 可重启异常:
1. 3 流水线中的的异常¶
- 本质是控制冒险的一种形式,以 EXE 阶段加法指令
add x1, x2, x1故障为例,其处理步骤为:- 防止目标寄存器
x1被错误修改 - 完成之前的指令
- 清空该加法指令及后续指令
- 设置 SEPC 和 SCAUSE 寄存器
- 将控制转移到异常处理器
- 防止目标寄存器
- 与分支预测错误机制类似,复用大量硬件

Example
以加法指令 add x1, x2, x1(地址4C)引发异常为例,指令序列:
40 sub x11, x2, x4
44 and x12, x2, x5
48 or x13, x2, x6
4C add x1, x2, x1
50 sub x15, x6, x7
54 ld x16, 100(x7)
1C090000 sd x26, 1000(x10)
1c090004 sd x27, 1008(x10)
1. 4 多异常处理¶
- 流水线的指令重叠执行可能导致多个异常同时发生
- 简单处理策略:
- 优先处理最早指令引发的异常
- 清空后续指令,实现精确异常
- 在复杂流水线(多发射、指令乱序完成)中,维持精确异常机制是困难的
2 软硬件接口(Software-Hardware Interface)¶
CPU 软硬件协作实例
| 类别 | 硬件方案 | 软件方案 |
|---|---|---|
| 数据冒险 | 转发(Forwarding) | 代码重排(Code Reordering) |
| 控制冒险 | 分支预测(Branch Prediction) | 代码调度(Code Scheduling) |
Hello World
-
- 计算字符 'H' 的 ASCII 码(72)
- 通过 UART 外设地址(基址 0x64000000),将数据写入 UART 发送数据寄存器(txdata,偏移 0x00)
System-I 版本(机器模式):直接操作硬件,无需操作系统/固件介入
指令示例80000000: 04800413 li s0, 72 # 加载 'H' 的 ASCII 码 80000004: 640004b7 lui s1, 0x64000 # 设置 UART 基址 80000008: 00848023 sb s0, 0(s1) # 写入 txdata 寄存器 -
System-II版本(M/S模式):用户程序运行在监督模式(S模式),通过系统调用(ecall)请求机器模式(M模式)固件(如OpenSBI)完成硬件操作
- 计算字符 'H' 的 ASCII 码
- 调用 SBI 控制台输出函数(
a7=1表示系统调用号,a0存储数据) - 固件接收系统调用,操作 UART 硬件完成输出
指令示例80000000: 04800413 li s0, 72 # 加载'H'的ASCII码 80000004: 8522 mv a0, s0 # 设置系统调用参数 80000006: 4885 li a7, 1 # 设置系统调用号 80000008: 00000073 ecall # 触发系统调用 80002000: 640004b7 lui s1, 0x64000 # 固件:设置UART基址 80002004: 00a48023 sb a0, 0(s1) # 固件:写入txdata寄存器
4. 3 Brief Introduction of OS¶
- 定义:作为用户与计算机硬件之间的中介程序,是系统软件的核心。
- 核心目标:方便用户使用计算机,简化用户程序执行;高效利用计算机硬件资源,合理分配冲突请求。
| 功能模块 | 作用 |
|---|---|
| 进程管理 | 调度任务、协调进程执行、处理进程同步与通信 |
| 内存管理 | 分配内存空间、管理虚拟内存、避免内存泄漏 |
| 存储管理 | 管理磁盘等外存设备,处理文件系统、存储分配与回收 |
| I/O子系统 | 协调CPU与I/O设备(如UART、磁盘)的通信,提供设备驱动接口 |
| 保护与安全 | 隔离不同用户/程序的资源,防止非法访问与操作 |