RISC-V 的特权指令¶
Control Status Registers (CSRs)¶
状态控制寄存器域的规范¶
大致有以下几种对控制状态寄存器域的行为的定义
- WPRI: Reserved Writes Preserve Values, Reads Ignore Values
- 针对保留的 CSR 域
- 应当忽略从中读出的值并且在写入时保留
- WLRL: Write/Read Only Legal Values
- WARL: Write Any Values, Reads Legal Values
Supervisor Scratch sscratch Register¶
sscratch 寄存器为一个长度为 SXLEN 比特的可读写寄存器。官方标准的描述为
Typically,
sscratchis used to hold a pointer to the hart-local supervisor context while the hart is executing user code. At the beginning of a trap handler,sscratchis swapped with a user register to provide an initial working register.
+--------------------------------+
| sscratch |
+--------------------------------+
(SXLEN bits)
Supervisor Exception Program Counter sepc¶
Supervisor Cause Register scause¶
Supervisor Trap Value stval Register¶
Supervisor Address Translation and Protection satp Register¶
在 RISCV 的特权指令集中,satp 寄存器长度为 SXLEN 位比特,当 SXLEN 为 32 位时,satp 的布局如下:
+-+---------+----------------------+
| | ASID | PPN |
+-+---------+----------------------+
| (9 bits) (22 bits)
|
`- MODE (1bit)
当 SXLEN 为 64 位时,satp 的布局如下:
+----+----------------+--------------------------------------------+
|MODE| ASID | PPN |
+----+----------------+--------------------------------------------+
| (16 bits) (44 bits)
|
`- (4 bits)
其中 MODE 域 可以表示如下:
| Value | Name | Description |
|---|---|---|
SXLEN = 32 |
||
0 |
Bare | 直接访问物理地址 |
1 |
Sv32 | Sv32 分页模式 |
SXLEN = 63 |
||
0000 |
Bare | 直接访问物理地址 |
0001 - 0111 |
- | 保留 |
1000 |
Sv39 | Sv39 分页模式 |
1001 |
Sv48 | Sv48 分页模式 |
1010 |
Sv57 | Sv57 分页模式 |
1011 |
Sv64 | 保留给 Sv64 分页模式 |
1100 - 1101 |
- | 保留给标准 |
1110 - 1111 |
- | 保留给自定义 |
PPN 域记录了页表根节点开始的物理页号,将 PPN 左移 12 位可得到页表根节点的物理地址。