RISC-V 特权指令 第1章 引言

1.1 引言

本文档描述 RISC-V 特权架构,涵盖 RISC-V 系统中除无特权指令集架构(ISA)之外的所有方面,包括特权指令以及运行操作系统和连接外部设备所需的附加功能。

设计评论
有关我们设计决策的评注采用本段落的格式呈现,如果读者仅对规范本身感兴趣,可以跳过这些评注。

我们简要说明,本文档中描述的整个特权级设计可以被完全不同的特权级设计所替代,而无需改变无特权 ISA,甚至可能无需改变应用程序二进制接口(ABI)。特别是,本特权规范旨在运行现有的主流操作系统,因此体现了传统的基于级别的保护模型。替代的特权规范可以采用其他更灵活的Protection Domain模型。为表达简洁起见,本文的撰写方式仿佛这是唯一可能的特权架构。


1.1.1 RISC-V 特权软件栈术语

本节介绍我们用于描述 RISC-V 各种可能特权软件栈组件的术语。

图 1 展示了 RISC-V 架构可以支持的一些可能的软件栈。左侧显示了一个简单的系统,仅支持单个应用程序在**应用程序执行环境(Application Execution Environment, AEE)上运行。该应用程序按照特定的应用程序二进制接口(Application Binary Interface, ABI)**编写。ABI 包括支持的用户级 ISA 以及一组与 AEE 交互的 ABI 调用。ABI 向应用程序隐藏 AEE 的细节,以便在实现 AEE 时具有更大的灵活性。相同的 ABI 可以在多个不同的主机操作系统上以本机方式实现,也可以通过在具有不同原生 ISA 的机器上运行的用户模式仿真环境来支持。

图形约定
我们的图形约定使用黑底白字来表示抽象接口,以将它们与实现接口的组件的具体实例区分开来。
在这里插入图片描述

图 1. 支持各种形式特权执行的不同实现栈

中间配置展示了一个支持多道程序执行的多个应用程序的常规操作系统(Operating System, OS)。每个应用程序通过 ABI 与提供 AEE 的 OS 进行通信。正如应用程序通过 ABI 与 AEE 交互一样,RISC-V 操作系统通过**监管者二进制接口(Supervisor Binary Interface, SBI)监管者执行环境(Supervisor Execution Environment, SEE)**进行交互。SBI 包括用户级和监管者级 ISA 以及一组 SBI 函数调用。在所有 SEE 实现中使用单一的 SBI,使得单个操作系统二进制映像可以在任何 SEE 上运行。SEE 可以是低端硬件平台中的简单引导加载程序和 BIOS 风格的 I/O 系统,也可以是高端服务器中由虚拟机监控程序提供的虚拟机,或者是架构仿真环境中主机操作系统上的薄转换层。

对比说明
大多数监管者级 ISA 定义并未将 SBI 与执行环境和/或硬件平台分离,这使得虚拟化和新硬件平台的启动变得复杂。

最右侧的配置展示了**虚拟机监控器(Virtual Machine Monitor)配置,其中一个虚拟机监控程序支持多个多道程序操作系统。每个操作系统通过 SBI 与提供 SEE 的虚拟机监控程序进行通信。虚拟机监控程序使用虚拟机监控器二进制接口(Hypervisor Binary Interface, HBI)虚拟机监控器执行环境(Hypervisor Execution Environment, HEE)**进行通信,以将虚拟机监控程序与硬件平台的细节隔离开来。

开发状态
ABI、SBI 和 HBI 仍在开发中,但我们目前优先支持 Type-2 虚拟机监控程序,其中 SBI 由 S-mode 操作系统递归提供。

RISC-V ISA 的硬件实现通常需要特权 ISA 之外的附加功能来支持各种执行环境(AEE、SEE 或 HEE)。


1.1.2 特权级别

在任何时候,RISC-V 硬件线程(hart)都以一个或多个 CSR(控制和状态寄存器)中编码为模式的某个特权级别运行。

目前已定义三个 RISC-V 特权级别,如下表所示。

级别 编码 名称 缩写
0 00 用户/应用 U
1 01 监管者 S
2 10 保留
3 11 机器 M

特权级别用于在软件栈的不同组件之间提供保护,尝试执行当前特权模式不允许的操作将引发异常。这些异常通常会导致陷入底层执行环境。

在描述中,我们尝试将代码为其编写的特权级别与代码运行时的特权模式分开,尽管这两者通常是绑定的。例如,监管者级操作系统可以在具有三个特权模式的系统上以监管者模式运行,也可以在具有两个或更多特权模式的系统上在经典虚拟机监控器下以用户模式运行。在这两种情况下,可以使用相同的监管者级操作系统二进制代码,按照监管者级 SBI 编写,因此期望能够使用监管者级特权指令和 CSR。当以用户模式运行客户操作系统时,所有监管者级操作都将被陷入并由在更高特权级别运行的 SEE 进行仿真。

机器级别具有最高特权,是 RISC-V 硬件平台唯一强制要求的特权级别。在机器模式(M-mode)下运行的代码通常是固有受信任的,因为它具有对机器实现的底层访问权限。M-mode 可用于管理 RISC-V 上的安全执行环境。用户模式(U-mode)和监管者模式(S-mode)分别用于常规应用程序和操作系统用途。

每个特权级别都有一组核心的特权 ISA 扩展,以及可选的扩展和变体。例如,机器模式支持用于内存保护的可选标准扩展。此外,监管者模式可以扩展以支持 Type-2 虚拟机监控程序执行,详见 “H” 虚拟机监控程序支持扩展

实现可以提供 1 到 3 个特权模式,以在减少隔离和降低实现成本之间进行权衡,如下表所示。

级别数量 支持的模式 预期用途
1 M 简单嵌入式系统
2 M, U 安全嵌入式系统
3 M, S, U 运行类 Unix 操作系统的系统

所有硬件实现都必须提供 M-mode,因为这是唯一对整个机器具有无限制访问权限的模式。最简单的 RISC-V 实现可能仅提供 M-mode,尽管这无法防止不正确或恶意的应用程序代码。

PMP 保护
可选 PMP(物理内存保护)机制的锁定功能即使在仅实现 M-mode 的情况下也能提供一些有限的保护。

许多 RISC-V 实现还将至少支持用户模式(U-mode),以保护系统的其余部分免受应用程序代码的影响。可以添加监管者模式(S-mode),以在监管者级操作系统和 SEE 之间提供隔离。

hart 通常在 U-mode 下运行应用程序代码,直到某个陷阱(例如,监管者调用或定时器中断)强制切换到通常在更高特权模式下运行的陷阱处理程序。然后 hart 将执行陷阱处理程序,该处理程序最终将在 U-mode 下恢复执行原始被陷阱指令处或其之后的指令。增加特权级别的陷阱称为垂直陷阱(vertical traps),而保持在相同特权级别的陷阱称为水平陷阱(horizontal traps)。RISC-V 特权架构提供了灵活的陷阱路由到不同特权层。

水平陷阱实现
水平陷阱可以作为垂直陷阱实现,将控制权返回到较低特权模式中的水平陷阱处理程序。


1.1.3 调试模式

实现还可以包括调试模式以支持片外调试和/或制造测试。调试模式(D-mode)可以被视为额外的特权模式,其访问权限甚至超过 M-mode。单独的调试规范描述了 RISC-V hart 在调试模式下的操作。调试模式保留了仅在 D-mode 下可访问的几个 CSR 地址,还可以在平台上保留部分物理地址空间。


原文链接:https://docs.riscv.org/reference/isa/priv/priv-intro.html

版权所有 © RISC-V International。保留所有权利。RISC-V、RISC-V International 和 RISC-V 徽标是 RISC-V International 的商标。

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐