特权级别
RISC-V 共有6个特权级别:
机器模式(M模式)
M模式 全称为Machine mode(机器模式) 运行在这个模式下的程序为最高权限,它属于RISC-V 里的最高权限模式,它具有访问所有资源的权限,它的代码是百分百可信的,通常运行在这个模式下的为固件 和操作系统内核。
监管者模式(S模式)
S模式 全称**"Supervisor mode"(监管者模式)**
监管者模式 通常是用来运行操作系统内核 ,它的权限要比M模式低 ,它无法直接操作特殊寄存器 和某些资源 ,但内核通常会运行在S和M两个模式之间 ,在最初系统启动阶段内核是运行在M模式 下的,在这个模式下内核需要初始化所有的硬件资源 和进行内存管理 等等,当初始化完成之后会切换到S模式 下,通常内核里有一段代码是运行在M模式下和S模式下,M模式下的代码为S模式下的代码提供访问硬件资源 的能力。而S模式下的内核主要是为应用程序提供系统调用 以及上下文切换。
虽然说S模式 下可以访问部分硬件 ,但是硬件资源受限 这样会导致内核受到限制 比如MIE (Machine Interrupt Enable)寄存器,这个寄存器负责设置一些安全性较高的中断 ,所以内核里分两部分并运行在不同的模式下。
为什么内核不能全部运行在M模式下?
因为指令集 的不同,在不同的模式 下所对应的指令集不同 ,在RISC-V 里不同的模式下指令集是不同的,不能互相调用,M模式 下的指令集较少编写难度较大 ,所以内核分两部分,运行在M模式下的代码为内核提供访问硬件资源的能力,而S模式下的代码则更加灵活负责上下文调度 ,进程切换 、系统服务调用 、驱动管理。
除此之外也是为了防止用户态直接切换到M模式 下,这样直接切换到最高级别可能存在一定安全隐患被黑客利用。
用户模式(U模式)
U模式 全称为**"User Model"(用户模式)** 为级别最低 的模式,它不能访问硬件资源 ,只能访问某些通用寄存器 和通用指令 ,一般用于执行应用程序。
HS模式
HS模式 全称**"Hypervisor mode"(虚拟监管者模式)** ,在这个模式下具有和S模式 一样的权限 ,可以访问所有资源 ,在这个模式下VMM 可以不通过宿主机 的操作系统内核 直接访问硬件资源 ,为虚拟操作系统提供服务。
当然S模式 下也可以实现虚拟机 的功能,但需要特定的驱动 与宿主机操作系统 的支持。
VS模式
VS模式 全称**"Virtual Symmetric Multiprocessing mode"(虚拟对称多处理模式)** ,在这个模式下为VMM 提供多个虚拟处理器 的功能,VMM可以利用这个让每个虚拟处理器 具有S模式的权限。
VU模式
VU模式 全称**"Virtual User mode"(虚拟用户模式)** ,在这个模式下为不同虚拟操作系统 的虚拟用户态应用程序 提供虚拟内存 支持、特权操作 支持、操作系统隔离 和虚拟化支持等功能,从而满足不同的应用需求。
Tips
在虚拟化 中VMM 会处于不同的虚拟特权模式 下,简单点来说就是VMM在执行虚拟化操作系统 时会将宿主机的CPU切换 置不同的虚拟特权 模式下,比如执行虚拟操作系统 的部分CPU特权会切换置HS ,而虚拟处理器 功能则为VS 模式,执行虚拟应用程序 时为VU模式。
特权模式的应用场景
一般这些特权模式应用场景如下:
特权 | 使用场景 |
---|---|
1. M模式 | 嵌入式系统 |
1. M模式 2. U模式 | 具有安全特性的嵌入式系统 |
1. M模式 2. S模式 3. U模式 | 通用操作系统 |
1. M模式 2. U模式 3. HS模式 4. VS模式 5. VU模式 | 虚拟化操作系统 |