
第1章 引言
本文档描述了RISC-V特权架构,其涵盖了RISC-V系统中非特权指令集架构(ISA)之外的所有方面,包括特权指令以及运行操作系统和连接外部设备所需的其他功能。
关于我们设计决策的评论采用本段落格式,如果读者仅对规范本身感兴趣,可以跳过。
我们简要说明,本文档描述的全部特权级设计都可以被完全不同的特权级设计所替代,而无需改变非特权ISA,甚至可能无需改变应用程序二进制接口(ABI)。特别是,本特权规范旨在运行现有的主流操作系统,因此体现了传统的基于级别的保护模型。其他替代的特权规范可以体现其他更灵活的保护域模型。为表述简洁,本文档的叙述方式如同这是唯一可能的特权架构。
1.1. RISC-V特权软件栈术语
本节描述我们用于描述RISC-V可能的各种特权软件栈组件的术语。
图1展示了RISC-V架构可以支持的一些可能的软件栈。左侧展示了一个简单的系统,仅支持在应用程序执行环境(AEE)上运行的单个应用程序。应用程序编码为在特定的应用程序二进制接口(ABI)下运行。ABI包括支持的用户级ISA以及一组用于与AEE交互的ABI调用。ABI向应用程序隐藏了AEE的细节,以便在实现AEE时获得更大的灵活性。同一ABI可以在多个不同的宿主操作系统上本地实现,也可以由运行在不同本地ISA机器上的用户模式仿真环境支持。
我们的图形约定使用白字黑框表示抽象接口,以将其与实现接口的组件的具体实例区分开。

图1. 支持各种形式特权执行的不同实现栈。
中间配置展示了一个支持多应用程序多道编程执行的传统操作系统(OS)。每个应用程序通过ABI与提供AEE的OS进行通信。正如应用程序通过ABI与AEE交互,RISC-V操作系统通过监管者二进制接口(SBI)与监管者执行环境(SEE)交互。一个SBI包含用户级和监管者级ISA以及一组SBI函数调用。在所有SEE实现中使用单一的SBI,允许单一的操作系统二进制镜像在任何SEE上运行。SEE可以是低端硬件平台中的简单引导加载程序和BIOS风格的IO系统,也可以是高端服务器中由虚拟机监控程序(Hypervisor)提供的虚拟机,或者是架构仿真环境中宿主操作系统之上的一层薄薄的转换层。
大多数监管者级ISA定义并未将SBI与执行环境和/或硬件平台分开,这使得虚拟化和新硬件平台的启动变得复杂。
最右侧的配置展示了一个虚拟机监控程序配置,其中单个虚拟机监控程序支持多个多道编程操作系统。每个OS通过SBI与提供SEE的虚拟机监控程序通信。虚拟机监控程序使用虚拟机监控程序二进制接口(HBI)与虚拟机监控程序执行环境(HEE)通信,以使虚拟机监控程序与硬件平台的细节隔离。
ABI、SBI和HBI仍在制定中,但目前我们优先支持SBI由S模式操作系统递归提供的Type-2型虚拟机监控程序。
RISC-V ISA的硬件实现通常需要特权ISA之外的附加功能,以支持各种执行环境(AEE、SEE或HEE)。
1.2. 特权级别
在任何时候,一个RISC-V硬件线程(hart)都运行在某个特权级别,该级别被编码为一个或多个控制状态寄存器(CSR)中的模式。目前定义了三个RISC-V特权级别,如表1所示。
*表1. RISC-V特权级别。*

特权级别用于在软件栈的不同组件之间提供保护,尝试执行当前特权模式不允许的操作将导致引发异常。这些异常通常会导致陷入底层执行环境的陷阱。
在描述中,我们试图将代码为其编写的特权级别与其运行时所处的特权模式分开,尽管两者通常相关联。例如,一个监管者级别的操作系统可以在具有三个特权模式的系统上以监管者模式(S-mode)运行,也可以在具有两个或更多特权模式的系统上,在经典虚拟机监控程序下以用户模式(U-mode)运行。在这两种情况下,可以使用相同的监管者级别操作系统二进制代码,该代码针对监管者级SBI编写,因此期望能够使用监管者级特权指令和CSR。当以用户模式运行客户操作系统时,所有监管者级别的操作都将被捕获,并由在更高特权级别运行的SEE进行模拟。
机器级拥有最高特权,是RISC-V硬件平台唯一必需的特权级别。在机器模式(M-mode)下运行的代码通常是固有可信的,因为它具有对机器实现的低级访问权限。M模式可用于管理RISC-V上的安全执行环境。用户模式(U-mode)和监管者模式(S-mode)分别用于传统的应用程序和操作系统。
每个特权级别都有一个核心的特权ISA扩展集,并包含可选的扩展和变体。例如,机器模式支持一个用于内存保护的可选标准扩展。此外,如第21章所述,监管者模式可以扩展以支持Type-2型虚拟机监控程序的执行。
实现可能提供1到3个特权模式,以较低的实现成本换取较弱隔离性,如表2所示。

表2. 支持的特权模式组合。
所有硬件实现都必须提供M模式,因为这是唯一可以不受限制地访问整个机器的模式。最简单的RISC-V实现可能只提供M模式,但这无法防止错误或恶意的应用程序代码造成损害。
即使只实现了M模式,可选物理内存保护(PMP)设施的锁定功能也能提供一些有限的保护。
许多RISC-V实现还将至少支持用户模式(U-mode),以保护系统其他部分免受应用程序代码影响。可以添加监管者模式(S-mode)以在监管者级别操作系统和SEE之间提供隔离。
一个hart通常以U模式运行应用程序代码,直到某些陷阱(例如,监管者调用或定时器中断)强制切换到陷阱处理程序,后者通常在更高特权模式下运行。然后hart将执行陷阱处理程序,最终将在U模式下原被捕获的指令处或之后恢复执行。提升特权级别的陷阱称为垂直陷阱,而保持在同一特权级别的陷阱称为水平陷阱。RISC-V特权架构提供了灵活的陷阱路由到不同特权层的机制。
水平陷阱可以实现为垂直陷阱,该垂直陷阱将控制权返回到较低特权模式中的水平陷阱处理程序。
1.3. 调试模式
实现也可以包含一个调试模式,以支持片外调试和/或制造测试。调试模式(D-mode)可以被视为一个额外的特权模式,具有比M模式更高的访问权限。单独的调试规范提案描述了RISC-V hart在调试模式下的操作。调试模式保留了一些仅在D模式下可访问的CSR地址,并且可能还会在平台上保留物理地址空间的某些部分。