先介绍一下什么是APLIC
1. APLIC 的背景与必要性
-
为什么需要 APLIC?
APLIC 是 RISC-V 架构中升级版的中断控制器,专门处理通过物理线路(而非电子消息)传递的硬件中断。就像传统邮局处理实体信件,APLIC 负责处理这类 “实体中断信号”。 -
与旧版 PLIC 的区别
APLIC 是 “高级版”,不兼容旧的 PLIC。就像智能手机不兼容老式大哥大,新系统需要 APLIC 才能支持最新的中断管理功能。
2. 何时使用 APLIC?
-
无 IMSIC 的系统
如果 CPU 核心(hart)没有 IMSIC(类似智能分拣中心),所有外部中断必须通过 APLIC(或旧版 PLIC)处理。例如,老式电脑只能通过传统邮局(PLIC/APLIC)接收信件。 -
有 IMSIC 的系统
即使 CPU 有 IMSIC(能处理电子消息中断 MSI),某些设备仍可能使用物理线路中断:- 成本原因:像老式打印机,添加电子消息功能太贵,不如直接拉条线更省钱。
- 兼容性:许多设备(如 USB 控制器)必须兼容所有平台,物理线路是通用解决方案。
3. APLIC 的功能与设计
-
核心作用
APLIC 就像邮局的分拣中心,负责将物理线路的中断信号转化为 CPU 能处理的格式。例如,将实体信件(线路中断)扫描成电子文档(MSI)再发送给 CPU。 -
多 APLIC 的情况
当设备分布在不同物理位置(如多个芯片),可以部署多个 APLIC:- 每个 APLIC 负责附近设备的中断转换。
- 例如,北京的 APLIC 处理北方设备,上海的 APLIC 处理南方设备。
4. 与旧系统的兼容性
-
替代方案
旧的 PLIC 仍可使用,但只能处理物理线路中断,无法支持 MSI。就像老式邮局只能处理实体信件,不能发送电子邮件。 -
Duo-PLIC 的尴尬
曾有一个 “二合一” 设计(Duo-PLIC),可以切换成旧 PLIC 或 APLIC,但可能不会成为标准。类似能插软盘和 U 盘的光驱,但最终 U 盘成为主流。
5. 系统架构示例
-
无 IMSIC 的系统
-
有 IMSIC 的系统
6. 多 APLIC 的效率问题
-
优点:
物理上分散的设备可以就近处理,减少线路延迟。例如,上海的信件直接由上海邮局处理。 -
缺点:
多个 APLIC 需要更多资源(如内存、电力),可能不如一个大 APLIC 高效。就像每个城市都建邮局,成本高于集中处理。
总结比喻
APLIC 是 RISC-V 架构中的 “智能邮局”:
- 处理实体信件(物理线路中断),并将其转换为电子文档(MSI)。
- 比旧邮局(PLIC)更高效,但不兼容旧系统。
- 在分布式系统中,多个 APLIC 可以分工处理不同区域的信件。
- 有了它,即使 CPU 有智能分拣中心(IMSIC),仍能兼容老式设备的中断方式。
一、Interrupt sources and identities
1. 中断源的物理基础
-
APLIC 的 "插座"
APLIC 就像一个带多个物理插座的插排,每个插座对应一个中断源。这些插座连接到设备或控制器的中断信号线:- 例如:打印机连接到插座 1,键盘连接到插座 2
- 特殊情况:多个设备的中断信号可以合并到同一个插座(电平触发中断)
-
插座编号规则
每个插座的编号是 1 到 N(N 最多 1023),0 号无效。就像酒店房间号从 1 开始,没有 0 号房。
2. 中断标识的作用
-
直接传递模式
当 APLIC 直接向 CPU 核心(hart)发送中断时:- APLIC 的插座编号(1-1023)直接作为 hart 的中断 ID
- 例如:插座 5 的中断会被 hart 识别为中断 5
-
MSI 转发模式
当 APLIC 将中断转换为电子消息(MSI)时:- 软件会为每个插座分配一个新的 ID(可能与原编号无关)
- 例如:插座 5 的中断可能被重新编号为 ID 100 发送给 hart
3. 两种模式的对比
4. 特殊配置说明
-
电平触发中断
多个设备的中断信号可以 "线或" 到同一个插座。例如:- 打印机和扫描仪同时连接到插座 3 的信号线
- 任一设备触发中断,APLIC 都会收到插座 3 的中断
-
固定电平插座
插座可以被硬连线为高或低电平:- 高电平:永远触发中断(可能用于测试)
- 低电平:永远不触发中断(可能用于预留)
5. 为什么最大源数是 1023?
- 技术原因:APLIC 使用 10 位寄存器存储中断 ID(2^10=1024)
- 有效范围:排除 0 后,实际可用 1-1023(共 1023 个)
总结比喻
APLIC 的中断源系统就像一个邮件分拣中心:
- 直接投递模式:邮件按原始编号(1-1023)直接送到对应的邮箱(hart)
- 转寄模式:邮件会被重新编号(如转换为 EMS 单号),再通过快递(MSI)发送
- 特殊处理:允许将多封邮件合并到同一个邮箱,或设置某些邮箱为常满 / 空
这种设计兼顾了物理设备的兼容性和电子消息的灵活性,适用于不同复杂度的系统。
二、Interrupt domains
1. 中断域的基本概念
APLIC 可以划分成多个 "中断域",每个中断域就像一个独立的 "管理小组":
- 每个小组负责管理特定权限级别的处理器核心(HART)
- 例如分为 "机器级小组" 和 "管理级小组"
- 每个小组有自己的 "控制面板"(内存映射控制区域),但实际都是同一个 APLIC 控制器的不同管理界面
APLIC 就像一家公司,中断域就是不同的部门:
- 机器级域(M 域):最高管理层(根域),所有中断线首先到达这里
- 管理级域(S 域):业务部门,处理日常工作(操作系统直接控制)
- 每个部门:有自己的 "办公系统"(内存映射控制区域),但实际共享同一栋办公楼(同一个 APLIC 控制器)
2. 中断域的层次结构
- 根域:必须是机器级域,所有中断线首先到达这里
- 子域:根域可以将部分 "工作任务"(中断源)委派给子域
例如:根域(CEO)将 "打印机管理" 任务交给 IT 部门(子域)
未被委派的任务(中断源)对子域来说 "不存在"
- 编号规则:所有域的中断源编号是统一的(比如源 1 在所有域都指向同一个物理线路)
3. 典型系统架构示例
3.1 一个interrupt domain
只有一个hart并且只支持machine level 的中断域
类似于单核心小公司
- 只有 1 个员工(hart),只能处理最高层(M 域)的工作
- 所有中断直接由根域处理,没有其他部门
machine-level interrupt domain对应hart0的machine模式,可以触发hart0 machine模式的中断。
3.2 两个interrupt domain
下图为SMP系统基本架构,有多个hart,hart支持S mode和M mode。APLIC为supervisor level提供了一个独立的interrupt domain。此interrupt domain允许操作系统直接在S态处理接收到的中断,避免调用M mode来处理中断,提高处理中断的效率。
类似于多核心 SMP 公司
- 4 个员工(harts),分为两个部门:
- M 域:处理硬件维护(如电源故障)
- S 域:处理日常业务(如打印、网络)
- S 域允许操作系统直接管理,无需每次请示 CEO(M 域)
machine-level interrupt domain对应hart0-3的machine模式,可以触发这些hart的machine模式下中断。
supervisor-level interrupt domain对应hart0-3的supervisor模式,可以触发这些hart的supervisor模式下中断。
3.3 三个interrupt domain
APLIC的root domain始终是machine-level interrupt domain。输入的线中断,首先进入根中断域。每个中断域,会有选择地将部分中断域,进行委托给子中断域。
下图是三个中断域的结构,两个在machine-level,一个在supervisor-level。当结合PMP(物理内存保护)使用时,允许软件在machine-level专门为hart0建立一个独立域。
类似于
- 新增 1 个 "经理" 员工(M 域专用)
- 通过 "门禁系统"(PMP 内存保护)将特定任务(中断)隔离给经理,其他员工无法处理
machine-level interrupt domain(Root) 对应Hart0的machine模式,可触发Hart0的machine模式下中断。
machine-level interrupt domain(非Root) 对应Hart1 ~ 4的machine模式,可触发这些Hart的machine模式下中断。
supervisor-level interrupt domain对应Hart1 ~ 4的supervisor模式,可触发这些Hart的supervisor模式下中断。
4. 规则
- 管理级域的父域必须是包含相同核心的机器级域
- 同一域内的所有核心必须使用同一种中断传递方式(全部直接连线或全部 MSI 消息)
- 使用 APLIC 的核心在每个权限级别只能属于一个域
- 使用 IMSIC 控制器的核心可以属于多个域
APLIC 的中断域就像一家公司的部门架构:
- 根域(M 域):CEO 办公室,处理最紧急的任务
- 子域(S 域):各业务部门,处理日常工作
- 任务编号:全公司统一的分机号,无论哪个部门都指向同一台设备
- 委派机制:CEO 可以将任务分配给部门,未分配的任务对部门不存在
- 通信方式:同一部门必须使用相同沟通渠道(邮件 / 电话)
这种设计让公司(系统)能够高效管理不同优先级的任务,同时保证安全性和灵活性。
三、Hart index numbers
1. 索引编号的本质:部门内的员工编号
在 APLIC 的中断域中,每个 Hart 的索引编号就像公司部门内的员工编号:
- 范围:0 到 16383(共 16384 个编号)
- 独立性:与 RISC-V 架构分配的全局 Hart ID 无关
- 灵活性:不同部门(中断域)可以给同一批员工(Hart)分配不同的编号
示例:
同一个 Hart(员工)在部门 A 的编号是 5,在部门 B 可能变成 10。
2. 索引编号的作用
- 域内控制:用于中断域内的优先级设置、中断路由等
- 隔离性:不同域的编号系统相互独立,避免冲突
3. MSI 转发时的特殊规则
如果 APLIC 支持通过 MSI(电子消息)转发中断:
- 所有机器级域必须共享相同的索引→Hart 映射
- 这就像多个部门合作时,必须使用统一的员工编号系统
示例:
当部门 A(机器级域)和部门 B(另一个机器级域)都需要通过 MSI 发送消息时,它们的员工编号必须一致。
4. 为什么需要不同的索引?
- 域的独立性:每个域可以独立管理自己的中断路由策略
- 简化配置:避免与全局 Hart ID 的复杂映射
5. 实际应用场景
- 单域系统:索引与 Hart ID 可能相同
- 多域系统:
- 部门 A(管理级域)使用简单编号(0-3)
- 部门 B(机器级域)使用复杂编号(100-103)
- 跨域 MSI:必须统一编号,否则消息无法正确路由
总结比喻
Hart 索引编号就像:
- 部门内的工号:不同部门可以有不同的编号方式
- 跨部门协作时的工牌:必须使用统一编号才能互相识别
这种设计让中断域可以灵活管理自己的资源,同时保证跨域通信的兼容性。
四、Overview of interrupt control for a single domain
1. 中断域的内存映射控制接口
由高级平台级中断控制器(APLIC)实现的每个中断域都有其独立的物理控制接口
- 权限管理:通过 PMP 内存保护 和 基于页的地址转换 控制访问
- 独立性:每个中断域的控制接口都具有相同的结构
- 对于软件而言,每个中断域看起来都像是根域,无法看到其所在层次结构中位于它之上的那些中断域。
2. 中断源的三个核心组件
每个中断源在域内有三个管理设置:
a. 源配置
- 决定设备是否激活(启用 / 禁用)
- 判断输入信号类型(电平触发:持续按压;边沿触发:按一下)
- 未激活时:可以将控制权委派给子部门(子域)
b. 中断待处理位和中断使能位
- 未激活的中断源:这两位均为只读的零值
- 激活的中断源:
- 待处理位:记录未处理的中断
- 使能位:决定当前是否应传递来自该中断源的中断,还是让其中断保持待处理状态
c. 目标选择
- 直接传递模式:指定中断发送给哪个Hart
- MSI 转发模式:为中断分配新的优先级或 ID
APLIC 的多域实现实际上共享源状态,因为每个源最终只在一个域中激活。未被委派的域中的源状态显示为只读零,节省了硬件资源。