Skip to content

Commit 6165b9b

Browse files
update lec3/p2
1 parent 439081e commit 6165b9b

File tree

1 file changed

+119
-8
lines changed

1 file changed

+119
-8
lines changed

lec3/p2-osviewrv.md

Lines changed: 119 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -294,7 +294,7 @@ backgroundColor: white
294294
##### 通过CSR寄存器实现的隔离
295295
OS通过硬件隔离手段(三防)来保障计算机的安全可靠
296296
- 设置 CSR(控制状态寄存器) 实现隔离
297-
- 权力:防止应用访问系统管控相关寄存器
297+
- 控制:防止应用访问系统管控相关寄存器
298298
- **地址空间控制**寄存器:mstatus/sstatus CSR(中断及状态)
299299
- 时间:防止应用长期使用 100%的 CPU
300300
- **中断配置**寄存器:sstatus/stvec CSR(中断跳转地址)
@@ -794,13 +794,13 @@ scause 寄存器
794794

795795

796796
---
797-
##### mtvec & stvec 寄存器
797+
##### stvec 寄存器
798798
中断/异常向量(trap-vector)基地址寄存器stvec CSR用于配置**trap_handler地址**
799799
- 包括向量基址(BASE)和向量模式(MODE):BASE 域中的值按 4 字节对齐
800800
- MODE = 0 表示一个trap_handler处理所有的中断/异常
801801
- MODE = 1 表示每个中断/异常有一个对应的trap_handler
802802

803-
mtvec & stvec 寄存器
803+
stvec 寄存器
804804
![w:1000](figs/rv-tvec.png)
805805

806806

@@ -921,6 +921,19 @@ ASID 减少了 TLB 刷新需求
921921
922922
频繁的 TLB 刷新会导致显著的性能开销。这是因为新的内存访问将无法命中已缓存的 TLB 条目,导致更多时间花费在查找和加载新的映射上。
923923
-->
924+
---
925+
##### S-Mode虚存机制
926+
RISC-V 64 支持以下 **虚拟地址转换方案**
927+
928+
| **模式** | **虚拟地址位宽** | **页表级数** | **每级索引位数** | **物理地址位宽** |
929+
| --- | --- | --- | --- | --- |
930+
| **Sv39** | 39 位 | 3 级 | 9-9-9 | 56 位 |
931+
| **Sv48** | 48 位 | 4 级 | 9-9-9-9 | 56 位 |
932+
| **Sv57** | 57 位 | 5 级 | 9-9-9-9-9 | 56 位 |
933+
934+
**注意**:不同的模式仅影响 **虚拟地址的解析**,物理地址仍然受处理器实现的物理地址宽度(通常为 **56 位**
935+
936+
924937
---
925938
##### S-Mode虚存机制
926939

@@ -932,20 +945,117 @@ ASID 减少了 TLB 刷新需求
932945

933946
---
934947
##### S-Mode虚存的地址转换
935-
S、U-Mode中虚拟地址会以从根部遍历页表的方式转换为物理地址:
936948

937-
- satp.PPN 给出了**一级页表基址**, VA [31:22] 给出了一级页号,CPU会读取位于地址(satp. PPN × 4096 + VA[31: 22] × 4)页表项。
938-
- PTE 包含**二级页表基址**,VA[21:12]给出了二级页号,CPU读取位于地址(PTE. PPN × 4096 + VA[21: 12] × 4)叶节点页表项。
939-
- **叶节点页表项的PPN字段**和页内偏移(原始虚址的最低 12 个有效位)组成了最终结果:物理地址(LeafPTE.PPN×4096+VA[11: 0])
949+
```
950+
38 30 29 21 20 12 11 0
951+
+------------+------------+------------+------------- +
952+
| VPN[2] | VPN[1] | VPN[0] | Page Offset |
953+
+------------+------------+------------+------------- +
954+
9 bits 9 bits 9 bits 12 bits
955+
```
940956

957+
- VPN[2], VPN[1], VPN[0](共 27 位):L2/1/0三级页表索引。
958+
- Page Offset(12 位):页内偏移(4 KiB 页大小)。
941959

942960
---
943961
##### S-Mode虚存的地址转换
962+
(1) 读取 satp CSR
963+
- satp.PPN 给出了**L2页表基地址的 物理页号(Physical Page Number, PPN)。**
964+
- satp.MODE(4 bits):8(Sv39)、9(Sv48)、10(Sv57)。
965+
```
966+
L2页表基地址 = PPN × 4 KiB
967+
```
968+
---
969+
##### S-Mode虚存的地址转换
970+
(2) 解析 VPN(Virtual Page Number)
971+
根据虚拟地址提取 VPN[2], VPN[1], VPN[0],并进行 3 级页表查询。
972+
每个页表项(PTE,Page Table Entry)大小为 64-bit,其结构如下:
973+
```
974+
63 10 9 8 7 6 5 4 3 2 1 0
975+
+---------------+-----+---+------------ +
976+
| PPN (44 bits) | RSW | D | A | X W R V |
977+
+---------------+-----+---+------------ +
944978
945-
![w:650](figs/satp2.png)
979+
```
980+
- PPN(物理页号):映射到下一级页表或最终物理页。V(Valid):有效位,1 表示 PTE 有效。R/W/X(读/写/执行):页的权限。A/D(Access/Dirty):访问和修改位。
981+
982+
---
983+
##### S-Mode虚存的地址转换
984+
三级地址翻译步骤:
985+
1. VPN[2] = VA [38:30], 给出了L2页表的索引号
986+
```
987+
L2页表的页表项(L2-PTE)地址= (satp.PPN × 4 KiB) + (VPN[2] × 8)
988+
L2-PTE.PPN = L1页表基址的物理页号
989+
990+
63 10 9 8 7 6 5 4 3 2 1 0
991+
+---------------+-----+---+------------ +
992+
| PPN (44 bits) | RSW | D | A | X W R V |
993+
+---------------+-----+---+------------ +
994+
995+
```
996+
---
997+
##### S-Mode虚存的地址转换
998+
三级地址翻译步骤:
999+
2. VPN[1] = VA [29:21], 给出了L1页表的索引号
1000+
```
1001+
L1页表的页表项(L1-PTE)地址= (L2-PTE.PPN × 4 KiB) + (VPN[1] × 8)
1002+
L1-PTE.PPN = L0页表基址的物理页号
1003+
1004+
63 10 9 8 7 6 5 4 3 2 1 0
1005+
+---------------+-----+---+------------ +
1006+
| PPN (44 bits) | RSW | D | A | X W R V |
1007+
+---------------+-----+---+------------ +
1008+
1009+
```
1010+
---
1011+
##### S-Mode虚存的地址转换
1012+
三级地址翻译步骤:
1013+
3. VPN[0] = VA [20:12], 给出了L0页表的索引号
1014+
```
1015+
L0页表的页表项(L0-PTE)地址= (L1-PTE.PPN × 4 KiB) + (VPN[1] × 8)
1016+
L0-PTE.PPN = 最终物理地址的物理页号
1017+
1018+
63 10 9 8 7 6 5 4 3 2 1 0
1019+
+---------------+-----+---+------------ +
1020+
| PPN (44 bits) | RSW | D | A | X W R V |
1021+
+---------------+-----+---+------------ +
1022+
1023+
```
9461024

1025+
---
1026+
##### S-Mode虚存的地址转换
1027+
4. 计算物理地址
1028+
```
1029+
虚地址对应的最终物理地址 = (L0 PTE.PPN × 4 KiB) + Page Offset
1030+
```
1031+
假设: satp.PPN = 0x12345,
1032+
即L2页表基地址 = 0x12345 × 4 KiB = 0x12345000。
9471033

1034+
虚拟地址: 0x1234_5678
1035+
VPN[2] = 0x091(9 bits)
1036+
VPN[1] = 0x234(9 bits)
1037+
VPN[0] = 0x567(9 bits)
1038+
Page Offset = 0x078
1039+
1040+
---
1041+
##### S-Mode虚存的地址转换
1042+
4. 计算物理地址
1043+
- 经过三级页表查询:
1044+
- L2 PTE 指向 L1 页表(PPN = 0x20000)。
1045+
- L1 PTE 指向 L0 页表(PPN = 0x30000)。
1046+
- L0 PTE 指向物理页(PPN = 0x40000)。
1047+
1048+
最终 物理地址计算:
1049+
```
1050+
物理地址 = (0x40000 × 4 KiB) + 0x078
1051+
= 0x40000000 + 0x078
1052+
= 0x40000078
1053+
```
9481054
<!-- ---
1055+
![w:650](figs/satp2.png)
1056+
1057+
1058+
9491059
## RISC-V 系统编程:S-Mode下的隔离
9501060
- S-Mode比 U-Mode权限更高,但是比 M-Mode权限低
9511061
- S-Mode下运行的软件不能使用 M-Mode的 CSR 和指令,并受到 PMP 的限制
@@ -961,4 +1071,5 @@ S、U-Mode中虚拟地址会以从根部遍历页表的方式转换为物理地
9611071
- 了解 RISC-V 的 M-Mode 和 S-Mode 的基本特征
9621072
- 了解OS在 M-Mode 和 S-Mode 下如何访问控制计算机系统
9631073
- 了解不同软件如何在 M-Mode<–>S-Mode<–>U-Mode 之间进行切换
1074+
- 了解虚实地址转换
9641075

0 commit comments

Comments
 (0)