RISCV特权架构

http://riscvbook.com/chinese/RISC-V-Reader-Chinese-v2p1.pdf

RICSV特权架构

 

机器模式和监管者模式

R sret

R mret

R wfi

R sfence.vma

 

硬件线程指的是处理器(CPU)上的物理核心(core)所支持的执行线程数量。

机器模式(缩写为 M 模式,M-mode)是 RISC-V harthardware thread,硬件线程)可以执行的最高权限模式。在 M 模式下运行的 hart 对内存,I/O 和一些对于启动和配置系统来说必要的底层功能有着完全的使用权。

 

RISCV中两种异常:同步异常和中断

同步异常:

访问错误异常 当物理内存的地址不支持访问类型时发生(例如尝试写入 ROM)。

断点异常 在执行 ebreak 指令,或者地址或数据与调试触发器匹配时发生。

环境调用异常 在执行 ecall 指令时发生。

非法指令异常 在译码阶段发现无效操作码时发生。

非对齐地址异常 在有效地址不能被访问大小整除时发生,例如地址为 0x12 amoadd.w

中断:软件、时钟和外部来源。软件中断通过向内存映射寄存器中存数来触发,并通常用于由一个 hart 中断另一个 hart(在其他架构中称为处理器间中断机制)。当 hart 的时间比较器(一个名为 mtimecmp 的内存映射寄存器)大于实时计数器mtime 时,会触发时钟中断。外部中断由平台级中断控制器(大多数外部设备连接到这个中断控制器)引发。不同的硬件平台具有不同的内存映射并且需要中断控制器的不同特性,因此用于发出和消除这些中断的机制因平台而异。

 

八个控制状态寄存器(CSR)是机器模式下异常处理的必要部分:

  • mtvecMachine Trap Vector)它保存发生异常时处理器需要跳转到的地址。
  • mepcMachine Exception PC)它指向发生异常的指令。
  • mcauseMachine Exception Cause)它指示发生异常的种类。
  • mieMachine Interrupt Enable)它指出处理器目前能处理和必须忽略的中断。
  • mipMachine Interrupt Pending)它列出目前正准备处理的中断。
  • mtvalMachine Trap Value)它保存了陷入(trap)的附加信息:地址例外中出错
  • 的地址、发生非法指令例外的指令本身,对于其他异常,它的值为 0
  • mscratchMachine Scratch)它暂时存放一个字大小的数据。
  • mstatusMachine Status)它保存全局中断使能,以及许多其他的状态。

CSR指令包括:

  • CSRR: CSR 中读取值到目标寄存器。
  • CSRW: 将目标寄存器的值写入 CSR
  • CSRS: CSR 执行位设置(set)操作,将 CSR 中的某些位设置为 1
  • CSRRC: CSR 执行位清除(clear)操作,将 CSR 中的某些位清除为 0
  • CSRRW: 先从 CSR 中读取值到目标寄存器,然后将目标寄存器的值写入 CSR
  • CSRRS: 先从 CSR 中读取值到目标寄存器,然后对 CSR 执行位设置操作。
  • CSRRCI: CSR 执行立即数位清除操作。

 

嵌入式系统中的用户模式和进程隔离:物理内存保护(PMPPhysical Memory Protection)。

PMP 方案对嵌入式系统的实现很有吸引力,因为它以相对较低的成本提供了内存保护,但它的一些缺点限制了它在通用计算中的使用。由于 PMP 仅支持固定数量的内存区域,因此无法对它进行扩展从而适应复杂的应用程序。而且由于这些区域必须在物理存储中连续,因此系统可能产生存储碎片化的问题。另外,PMP 不能有效地支持对辅存的分页。

 

现代操作系统的监管者模式:

默认情况下,发生所有异常(不论在什么权限模式下)的时候,控制权都会被移交到M 模式的异常处理程序。但是 Unix 系统中的大多数例外都应该进行 S 模式下的系统调用。M 模式的异常处理程序可以将异常重新导向 S 模式,但这些额外的操作会减慢大多数异常的处理速度。因此,RISC-V 提供了一种异常委托机制。通过该机制可以选择性地将中断和同步异常交给 S 模式处理,而完全绕过 M 模式。midelegMachine Interrupt Delegation,机器中断委托)CSR 控制将哪些中断委托给 S 模式。

 

基于页面的虚拟内存:

S 模式提供了一种传统的虚拟内存系统,它将内存划分为固定大小的页来进行地址转换和对内存内容的保护。启用分页的时候,大多数地址(包括 load store 的有效地址和PC 中的地址)都是虚拟地址。要访问物理内存,它们必须被转换为真正的物理地址,这通

过遍历一种称为页表的高基数树(字典树)实现。页表中的叶节点指示虚地址是否已经被映射到了真正的物理页面,如果是,则指示了哪些权限模式和通过哪种类型的访问可以操作这个页。

一个叫 satpSupervisor Address Translation and Protection,监管者地址转换和保护)的 S 模式控制状态寄存器控制了分页系统。当在 satp 寄存器中启用了分页时,S 模式和 U 模式中的虚拟地址会以从根部遍历页表的方式转换为物理地址。

 

RISC-V 的分页方案以 SvX 的模式命名,其中 X 是以位为单位的虚拟地址的长度。

RV32 的分页方案 Sv32 支持 4GiB 的虚址空间,这些空间被划分为 2^10 4 MiB 大小的巨页。每个巨页被进一步划分为 2^10 4 KiB 大小的基页(分页的基本单位)。因此,Sv32 的页表是基数为 2^10的两级树结构。页表中每个项的大小是四个字节,因此页表本身的大小是 4 KiB。页表的大小和每个页的大小完全相同,这样的设计简化了操作系统的内存分配。

RV64 支持多种分页方案,但我们只介绍最受欢迎的一种,Sv39Sv39 使用和 Sv32 相同的 4 KiB 大的基页。页表项的大小变成 8 个字节,所以它们可以容纳更大的物理地址。为了保证页表大小和页面大小一致,树的基数相应地降到 2^9,树也变为三层。Sv39 512GiB 地址空间划分为 2^9 1 GiB 大小的吉页。每个吉页被进一步划分为 2^9 个巨页。在Sv39 中这些巨页大小为 2 MiB,比 Sv32 中略小。每个巨页再进一步分为 2^9 4 KiB 大小的基页。Sv39要求虚拟地址位 63-39 是第 38 位的副本。


留言

此網誌的熱門文章

思维前进

再重游

15418