1.2 RISC-V体系结构介绍
1.2.1 RISC-V体系结构
RISC-V体系结构包括指令集规范和体系结构规范以及众多的扩展规范,这些都由RISC-V基金会审阅与发布。RISC-V体系结构具有如下特点。
● 对学术界和工业界完全开放。
● 真正适合硬件实现的指令集体系结构,而不是一个模拟或者二进制翻译的指令集体系结构。
● 属于通用的指令集体系结构,而不是针对某个特定微体系结构的实现。
● 拥有实现最小整数的指令集,作为基础指令集,可以用于教学。在此基础上还能实现众多可选扩展指令,以支持通用软件的开发。
● 支持IEEE 754浮点标准。
● 支持众多扩展指令集。
● 支持32位及64位地址空间。
● 支持多核及异构体系结构。
● 支持可选的压缩指令编码,用以提高性能和能源效率并优化静态代码。
● 支持虚拟化扩展。
● 支持可伸缩矢量指令扩展(参见GitHub上的“Working draft of the proposed RISC-V V vector extension”)。
RISC-V支持32位指令集和64位指令集。本书重点介绍64位指令集。
1.2.2 采用RISC-V体系结构的常见处理器
下面介绍市面上常见的采用RISC-V体系结构的处理器。
1.SiFive FU740处理器
SiFive公司基于RISC-V体系结构开发了商业化64位处理器芯片,广受RISC-V开发者喜爱的HiFive Unmatched开发板便基于该处理器芯片。
FU740处理器内置1个S7处理器内核以及4个U7处理器内核。其中,S7处理器内核用于系统监控,U7处理器内核用于计算和应用。FU740处理器框架如图1.1所示。
FU740处理器具有如下特性。
● 完全兼容RISC-V体系结构规范。
● 属于64位RISC-V处理器内核。
● 具有32KB L1指令高速缓存。
● 具有32KB L1数据高速缓存。
● 支持8个物理内存保护区。
● 支持128KB大小的L2高速缓存。
● 内置处理器内核本地中断控制器(Core-Local Interrupt Controller,CLINT)。
● 支持平台级别的中断控制器(Platform-Level Interrupt Controller,PLIC),最多支持128个外设中断和7级中断优先级。
图1.1 FU740处理器框架
2.香山处理器
香山处理器是由中国科学院计算技术研究所的香山处理器团队推出的高性能64位开源处理器。它的体系结构以湖的名称命名,第一版体系结构代号是“雁栖湖”,第二版体系结构代号是“南湖”。
1.2.3 RISC-V体系结构中的基本概念
本小节介绍RISC-V体系结构中的一些基本概念。
● 执行环境接口(Execution Environment Interface,EEI):包括程序的初始状态、CPU的类型和数量、支持的S(Supervisor)模式、内存和I/O区域的可访问性与属性、在每个CPU上执行指令的行为以及任何异常(包括中断、系统调用)的处理等。常见的RISC-V执行环境接口包括Linux应用程序二进制接口(Application Binary Interface,ABI)以及RISC-V管理员二进制接口(Supervisor Binary Interface,SBI)。一个RISC-V执行环境接口可以由纯硬件、纯软件或者软硬件结合实现,示例如下。
◇ 裸机程序:程序直接通过ABI访问硬件资源,如图1.2(a)所示。
◇ 操作系统:提供U(User)模式的执行环境并复用到物理处理器线程中,同时提供虚拟内存机制。它在操作系统与管理员执行环境(Supervisor Execution Environment,SEE)之间提供一层SBI,对所有RISC-V硬件平台中共性的功能做了抽象,为操作系统访问M(Machine)模式的硬件资源提供服务,如图1.2(b)所示。
◇ 虚拟化:为客户操作系统提供多个特权模式的执行环境。每个客户操作系统通过SBI访问虚拟化管理程序,如图1.2(c)所示。此外,虚拟化管理程序可以通过虚拟机监控程序二进制接口(Hypervisor Binary Interface,HBI)访问虚拟机监控程序执行环境(Hypervisor Execution Environment,HEE)中的硬件资源。
● 模拟器:在主机上模拟RISC-V的用户模式以及特权模式的执行环境。
● 硬件线程(Hart):一个处理器执行线程,在执行环境中自主获取和执行RISC-V指令资源的硬件单元,类似于x86体系结构中的超线程(Hyper-Threading,HT)以及ARMv8体系结构中的处理机(processing element)。SMT(Surface Mount Technology, 表面安装技术)让同一个处理器内核上的多个线程同步执行并共享处理器的执行资源。假设一个RISC-V处理器实现了超线程技术,那么一个处理器内核就有多个硬件线程,不过目前商用的RISC-V处理器还没有实现超线程技术。
图1.2 执行环境接口
特权级别(privilege level)包括RISC-V处理器提供的3种模式。
● 机器模式(M模式):以M模式运行的代码通常在本质上是可信的,因为它具有对机器实现的全部访问权限,常用于管理RISC-V上的安全执行环境。通常在M模式下运行SBI固件,为操作系统提供服务。
● 特权模式(S模式):通常用来运行操作系统的内核,为应用程序提供服务。
● 用户模式(U模式):特权级别最低,通常用来运行应用程序。
使能了虚拟化扩展后,新增如下特权模式。
● HS模式:把原有的S模式扩展为HS模式,用来运行虚拟化管理程序。
● VS模式:通常用来运行虚拟机操作系统内核。
● VU模式:通常用来运行虚拟机操作系统中的应用程序。
所有硬件的实现必须提供M模式,因为这是唯一可以不受限制地访问整个机器的资源。简单的RISC-V系统(如嵌入式系统)只提供M模式,表1.2所示为特权级别使用场景。
表1.2 特权级别使用场景
1.2.4 SBI服务
在RISC-V软件生态中,RISC-V规范定义了一个SBI规范。SBI对所有RISC-V硬件平台中共性的功能做了抽象,为运行在S模式下的操作系统或者虚拟机监控程序扩展的特权(Hypervisor- extended Supervisor,HS)模式的虚拟化管理软件提供统一的服务接口。通常把提供SBI服务的软件称为SBI固件,RISC-V软件生态中比较流行的SBI固件有OpenSBI等。
在现代操作系统体系结构中,内核空间和用户空间之间多了一个中间层,即系统调用层,它为用户空间中的应用程序提供硬件抽象接口。SBI与操作系统中的系统调用层非常类似,有如下几个优点。
● 为运行在低级别的处理器模式提供访问M模式下的硬件资源(如S模式下的操作系统或者U模式下的应用程序)的抽象接口。
● 保证系统稳定和安全。因为M模式下的处理器具有对系统资源的全部访问权限,如果某些硬件资源直接开放给S模式和U模式,可能会造成系统的安全问题。
● 可移植性。在不修改源代码的情况下,让不同的操作系统或者不同厂商设计的RISC-V系统都能运行。
在没有使能虚拟化扩展的RISC-V系统(见图1.3)中,SBI固件运行在M模式下,它为运行在S模式下的操作系统提供SBI调用服务,而运行在S模式下的操作系统则为应用程序提供系统调用服务。
图1.3 没有使能虚拟化扩展的RISC-V系统
在使能了虚拟化扩展的RISC-V系统(见图1.4)中,系统内分成了两个世界:一个是虚拟化世界,另一个是主机世界。在虚拟化世界中,M模式下的SBI固件可以为虚拟化管理程序提供SBI调用服务。另外, HS模式下的虚拟化管理程序也可以为虚拟机的操作系统提供SBI调用服务。在主机世界中,运行在U模式下的主机的应用程序可以通过系统调用来访问虚拟化管理程序提供的服务。
图1.4 使能了虚拟化扩展的RISC-V系统