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,
sscratch
is 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,sscratch
is 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 位可得到页表根节点的物理地址。