RISC-V AIA学习1----介绍

发布于:2025-03-22 ⋅ 阅读:(20) ⋅ 点赞:(0)

PLIC(平台级中断控制器)

PLIC 是 Platform-Level Interrupt Controller 的缩写,PLIC 是计算机系统中管理硬件中断的 “总调度员”。不同的外设比如 GPIO、UART 等会产生中断,PLIC 负责管理这些中断,决定哪个中断先被处理。比如,当多个外设同时请求中断时,PLIC 会根据优先级排队,让 CPU 先处理最重要的那个。

  • 场景类比:
    想象一个公司有多个部门(外设),每个部门遇到问题时都要找老板(CPU)汇报。但老板一次只能处理一件事,PLIC 就像老板的秘书,负责:
    1. 接收所有部门的请求(中断信号);
    2. 按优先级排队(比如财务部的紧急程度比保洁部高);
    3. 通知老板处理当前优先级最高的请求。

特点:

  • 硬件中断:通过物理信号线(如 IRQ 线)传递请求。
  • 固定优先级:每个外设的优先级在硬件设计时确定,不够灵活。
  • 适用场景:传统嵌入式系统或单核处理器。

MSI(消息信号中断)

MSI 是一种用 “软件消息” 替代硬件信号线的中断触发方式。

  • 场景类比:
    部门不再通过秘书(PLIC)传递请求,而是直接给老板发邮件(写特定内存地址)。邮件内容可以包含请求类型和优先级,老板收到邮件后自己处理。

特点:

  • 软件触发:通过写入特定内存地址触发中断,无需物理线路。
  • 动态优先级:中断的优先级和内容可通过软件灵活配置。
  • 扩展性强:适合多核处理器或虚拟化环境(如云服务器中的虚拟机动态分配中断)

AIA 规范为何引入 MSI?

  • 痛点:传统 PLIC 的硬件中断在复杂系统中扩展性差(比如需要大量物理线路)。
  • 优势:
    • 节省资源:无需为每个外设分配独立的中断线。
    • 灵活管理:中断的优先级、触发方式可动态调整。
    • 适应多核:多核 CPU 可通过 MSI 消息直接分配任务,减少竞争。

Hart的概念:

Hard thread硬件线程,在多核处理器中,每个核就是一个hart,每个hart可以同时处理不同任务

现在AIA规范增加了对MSI消息中断的支持,RISCV的两个标准中断控制器

  1. APLIC(在软件的配置下,将线中断转换成MSI中断,收集并处理MSI中断)
  2. IMSIC(任务是收集和处理中断,然后将这些中断以线连接或者MSI的方式传递给hart)

通常在较大的系统中,比如支持PCI设备的系统,每个hart都有IMSIC,从而完全支持MSI,可以用来控制external interrupt

一、 不带IMSIC的中断

当RSIC-V hart不带IMSIC时,外部中断通过独享的中断线传送到hart内。

在这种情况下,APLIC作为外部中断控制器,负责将所有外部中断路由至不同的hart中,并对不同的外部中断进行优先级排序。

APLIC会根据软件配置(即Delgate)将外部中断有选择性的传入到hart中的M态或者S态。

二、带IMSIC的外部中断

IMSIC用来接收MSI中断,因此,每个 IMSIC 在物理地址空间中被分配了一个或多个不同的地址,当对这些地址进行写入时,接收的 IMSIC 就表示该行为为 external interrupt。所有 IMSIC 在机器的实体地址空间中都有唯一的地址,所以每个 IMSIC 都可以接收 MSI。

MSI中断的实现方式

MSI中断通过向内存映射地址写数据的方式实现。MSI 只是一种对特定的内存写入,硬件接受该地址表示为 interrupt。

想象计算机的内存就像一个巨大的文件柜,里面有很多抽屉,每个抽屉都有一个特定的编号(地址)。MSI 中断就像是一种特殊的 “写文件” 操作。当我们需要给计算机传达一个中断信号时,不需要用复杂的硬件线路去专门传递,而是直接往文件柜的某个特定抽屉(内存映射地址)里放一份文件(写数据)一旦硬件发现这个特定抽屉里有新文件了,就知道这是一个中断信号(interrupt),需要停下来处理这个事情。

IMSIC接收MSI中断

IMSIC用来接收MSI中断。因此,每个 IMSIC 在物理地址空间中被分配了一个或多个不同的地址,当对这些地址进行写入时,接收的 IMSIC 就表示该行为为 external interrupt

IMSIC 就像是文件柜的管理员。每个管理员(IMSIC)都负责管理文件柜里的一个或几个特定抽屉(物理地址空间中的一个或多个不同地址)。当有人往这些管理员负责的抽屉里放文件(对特定地址进行写入操作)时,管理员就知道这是一个外部中断信号(external interrupt),然后会按照规定去处理这个中断。而且,每个管理员负责的抽屉编号都是独一无二的,这样就保证了每个 IMSIC 都能准确接收到属于自己的 MSI 中断,不会出现混乱。

③特权等级与中断控制

IMSIC 针对 machine level 和 supervisor level 有独立的地址,通过不同地址写入的权限,可以授予或拒绝每个级别发出 interrupt 信号的能力

  • 独立地址的作用:
    管理层(machine level)和员工层(supervisor level)的邮箱(地址)是分开的。
    • 权限控制:只有特定部门能往对应邮箱发邮件(写数据触发中断)。例如:
      • 管理层邮箱:允许发送高优先级中断(如系统故障)
      • 员工层邮箱:只能发送普通中断(如应用请求)
    • 避免干扰:不同部门的任务清单(interrupt file)独立,防止越权操作。

Interrupt File(中断文件)

面向特定特权等级下的hart的MSI中断会被记录在IMSIC的interrupt file中

每个 IMSIC 管理员有一个 “任务清单”(interrupt file),记录两类信息:

  • Pending 位(eip0-eip63):任务是否已提交(类似 “待办事项标记”)
  • Enable 位(eie0-eie63):是否允许接收该任务(类似 “任务开关”)

特点:

  • 每个任务清单支持最多 2047 个任务(编号 1-2047   64个寄存器*32个中断=2048),编号 0 固定禁用
  • 每个任务用 32 位寄存器管理(类似每行记录一个任务的详细信息)

⑤APLIC 的角色变化

  • 传统情况(无 IMSIC):
    APLIC 像 “传统邮局”,直接通过物理线路(wired interrupt)发送信件(中断)给 hart。
  • risc-v 系统中 hart有 IMSIC 时:
    APLIC 像 “智能邮局”,将传统信件(wired interrupt)转换成电子邮件(MSI),再通过 IMSIC 管理员的邮箱(内存地址)发送。
    • 软件配置:通过设置 APLIC 的寄存器,决定:
      • 中断发送给哪个 hart 的哪个特权等级对应的 IMSIC的interrupt file
      • 中断的优先级(类似邮件的紧急程度)

⑥虚拟化支持(Guest Interrupt File)

  • 类比:
    公司开设多个 “虚拟子公司”(虚拟机),每个子公司有自己的任务清单(guest interrupt file)。
  • 作用:
    • 虚拟机之间的中断相互隔离(类似子公司独立处理自己的任务)
    • 增强安全性:物理主机(hypervisor)通过控制 guest 文件,确保虚拟机无法越权访问真实硬件。

三、其它中断

本地中断(local interrupt),包含timer interruptsoft interrupt(IPI),它们是hart内部的中断,不会通过APLIC和IMSIC

四、在hart中的中断ID定义

RISC-V 特权架构为每个 hart 上的 interrupt cause 定义了不同的 ID number ,这是当 trap 发生时自动写入 mcause 或是 scause 的。

  • major identity:中断的 “部门编号”(如管理部、员工部)
    • S 级(员工层):部门编号 9
      (例如:普通应用程序触发的中断)
    • H 级(虚拟管理层):部门编号 10
      (例如:虚拟机监控程序处理的中断)
    • M 级(最高管理层):部门编号 11
      (例如:硬件故障等紧急中断)

                作用:快速区分中断的优先级和处理权限。

 

  • minor identity:中断的 “任务编号”(如 “网络请求”、“磁盘读写”)
    • 线中断(wired interrupt):由 APLIC(邮局)配置任务编号
      (例如:设置 “磁盘中断” 为任务 5)
    • MSI 中断:由设备(如显卡)直接指定任务编号
      (例如:显卡发送任务 10 表示 “画面渲染完成”)

                作用:在同一部门内区分具体任务类型。        

中断路由规则

1. 中断只能发给一个 hart

  • 类比:每个任务只能分配给一条生产线(hart)处理,不能同时发给多条。
  • 原因:
    • 简化硬件设计,避免多个 hart 同时响应导致冲突。
    • 软件可精确控制中断处理逻辑(例如:让特定 hart 处理网络中断)。

2. 如何选择目标 hart?

  • 软件配置:通过 APLIC(邮局)或设备寄存器设置中断的目标 hart。
    • 例如:将 “磁盘中断” 配置为只发给 hart 0 的 S 级部门。
  • 定时器中断:每个 hart 自己的闹钟,只能由自己处理。
    • 类比:每个生产线自己的闹钟,不会干扰其他生产线。

3. 多 hart 协作的限制

  • 无法广播:不能像广播通知一样同时发给所有 hart。
    • 替代方案:
      若需向多个 hart 发送中断(如处理器间中断 IPI),必须逐个发送。
      类比:通知多个同事需要单独发消息,不能群发。

中断的可见性

  • 本地中断:只能在发起的 hart 内部可见。
    (例如:某个 hart 的内部计算错误,其他 hart 不知道)
  • 虚拟中断:虚拟机内部的中断,物理主机不可见。
    (例如:虚拟机 A 的键盘中断,不会影响物理主机或虚拟机 B)