1125c0d0bSYanteng Si.. SPDX-License-Identifier: GPL-2.0
2125c0d0bSYanteng Si.. include:: ../disclaimer-zh_CN.rst
3125c0d0bSYanteng Si
4125c0d0bSYanteng Si:Original: Documentation/riscv/vm-layout.rst
5125c0d0bSYanteng Si
6125c0d0bSYanteng Si:翻译:
7125c0d0bSYanteng Si
8125c0d0bSYanteng Si 司延腾 Yanteng Si <siyanteng@loongson.cn>
9*f41c74afSBinbin Zhou        Binbin Zhou <zhoubinbin@loongson.cn>
10125c0d0bSYanteng Si
11125c0d0bSYanteng Si============================
12125c0d0bSYanteng SiRISC-V Linux上的虚拟内存布局
13125c0d0bSYanteng Si============================
14125c0d0bSYanteng Si
15125c0d0bSYanteng Si:作者: Alexandre Ghiti <alex@ghiti.fr>
16125c0d0bSYanteng Si:日期: 12 February 2021
17125c0d0bSYanteng Si
18125c0d0bSYanteng Si这份文件描述了RISC-V Linux内核使用的虚拟内存布局。
19125c0d0bSYanteng Si
20125c0d0bSYanteng Si32位 RISC-V Linux 内核
21125c0d0bSYanteng Si======================
22125c0d0bSYanteng Si
23125c0d0bSYanteng SiRISC-V Linux Kernel SV32
24125c0d0bSYanteng Si------------------------
25125c0d0bSYanteng Si
26125c0d0bSYanteng SiTODO
27125c0d0bSYanteng Si
28125c0d0bSYanteng Si64位 RISC-V Linux 内核
29125c0d0bSYanteng Si======================
30125c0d0bSYanteng Si
31125c0d0bSYanteng SiRISC-V特权架构文档指出,64位地址 "必须使第63-48位值都等于第47位,否则将发生缺页异常。":这将虚
32125c0d0bSYanteng Si拟地址空间分成两半,中间有一个非常大的洞,下半部分是用户空间所在的地方,上半部分是RISC-V Linux
33125c0d0bSYanteng Si内核所在的地方。
34125c0d0bSYanteng Si
35125c0d0bSYanteng SiRISC-V Linux Kernel SV39
36125c0d0bSYanteng Si------------------------
37125c0d0bSYanteng Si
38125c0d0bSYanteng Si::
39125c0d0bSYanteng Si
40125c0d0bSYanteng Si  ========================================================================================================================
41125c0d0bSYanteng Si      开始地址       |   偏移      |     结束地址      |  大小    | 虚拟内存区域描述
42125c0d0bSYanteng Si  ========================================================================================================================
43125c0d0bSYanteng Si                    |            |                  |         |
44125c0d0bSYanteng Si   0000000000000000 |    0       | 0000003fffffffff |  256 GB | 用户空间虚拟内存,每个内存管理器不同
45125c0d0bSYanteng Si  __________________|____________|__________________|_________|___________________________________________________________
46125c0d0bSYanteng Si                    |            |                  |         |
47125c0d0bSYanteng Si   0000004000000000 | +256    GB | ffffffbfffffffff | ~16M TB | ... 巨大的、几乎64位宽的直到内核映射的-256GB地方
48125c0d0bSYanteng Si                    |            |                  |         |     开始偏移的非经典虚拟内存地址空洞。
49125c0d0bSYanteng Si                    |            |                  |         |
50125c0d0bSYanteng Si  __________________|____________|__________________|_________|___________________________________________________________
51125c0d0bSYanteng Si                                                              |
52125c0d0bSYanteng Si                                                              | 内核空间的虚拟内存,在所有进程之间共享:
53125c0d0bSYanteng Si  ____________________________________________________________|___________________________________________________________
54125c0d0bSYanteng Si                    |            |                  |         |
55125c0d0bSYanteng Si   ffffffc6fee00000 | -228    GB | ffffffc6feffffff |    2 MB | fixmap
56125c0d0bSYanteng Si   ffffffc6ff000000 | -228    GB | ffffffc6ffffffff |   16 MB | PCI io
57125c0d0bSYanteng Si   ffffffc700000000 | -228    GB | ffffffc7ffffffff |    4 GB | vmemmap
58125c0d0bSYanteng Si   ffffffc800000000 | -224    GB | ffffffd7ffffffff |   64 GB | vmalloc/ioremap space
59125c0d0bSYanteng Si   ffffffd800000000 | -160    GB | fffffff6ffffffff |  124 GB | 直接映射所有物理内存
60125c0d0bSYanteng Si   fffffff700000000 |  -36    GB | fffffffeffffffff |   32 GB | kasan
61125c0d0bSYanteng Si  __________________|____________|__________________|_________|____________________________________________________________
62125c0d0bSYanteng Si                                                              |
63125c0d0bSYanteng Si                                                              |
64125c0d0bSYanteng Si  ____________________________________________________________|____________________________________________________________
65125c0d0bSYanteng Si                    |            |                  |         |
66125c0d0bSYanteng Si   ffffffff00000000 |   -4    GB | ffffffff7fffffff |    2 GB | modules, BPF
67125c0d0bSYanteng Si   ffffffff80000000 |   -2    GB | ffffffffffffffff |    2 GB | kernel
68125c0d0bSYanteng Si  __________________|____________|__________________|_________|____________________________________________________________
69*f41c74afSBinbin Zhou
70*f41c74afSBinbin Zhou
71*f41c74afSBinbin ZhouRISC-V Linux Kernel SV48
72*f41c74afSBinbin Zhou------------------------
73*f41c74afSBinbin Zhou
74*f41c74afSBinbin Zhou::
75*f41c74afSBinbin Zhou
76*f41c74afSBinbin Zhou ========================================================================================================================
77*f41c74afSBinbin Zhou      开始地址       |   偏移      |     结束地址      |  大小    | 虚拟内存区域描述
78*f41c74afSBinbin Zhou ========================================================================================================================
79*f41c74afSBinbin Zhou                    |            |                  |         |
80*f41c74afSBinbin Zhou   0000000000000000 |    0       | 00007fffffffffff |  128 TB | 用户空间虚拟内存,每个内存管理器不同
81*f41c74afSBinbin Zhou  __________________|____________|__________________|_________|___________________________________________________________
82*f41c74afSBinbin Zhou                    |            |                  |         |
83*f41c74afSBinbin Zhou   0000800000000000 | +128    TB | ffff7fffffffffff | ~16M TB | ... 巨大的、几乎64位宽的直到内核映射的-128TB地方
84*f41c74afSBinbin Zhou                    |            |                  |         |     开始偏移的非经典虚拟内存地址空洞。
85*f41c74afSBinbin Zhou                    |            |                  |         |
86*f41c74afSBinbin Zhou  __________________|____________|__________________|_________|___________________________________________________________
87*f41c74afSBinbin Zhou                                                              |
88*f41c74afSBinbin Zhou                                                              | 内核空间的虚拟内存,在所有进程之间共享:
89*f41c74afSBinbin Zhou  ____________________________________________________________|___________________________________________________________
90*f41c74afSBinbin Zhou                    |            |                  |         |
91*f41c74afSBinbin Zhou   ffff8d7ffee00000 |  -114.5 TB | ffff8d7ffeffffff |    2 MB | fixmap
92*f41c74afSBinbin Zhou   ffff8d7fff000000 |  -114.5 TB | ffff8d7fffffffff |   16 MB | PCI io
93*f41c74afSBinbin Zhou   ffff8d8000000000 |  -114.5 TB | ffff8f7fffffffff |    2 TB | vmemmap
94*f41c74afSBinbin Zhou   ffff8f8000000000 |  -112.5 TB | ffffaf7fffffffff |   32 TB | vmalloc/ioremap space
95*f41c74afSBinbin Zhou   ffffaf8000000000 |  -80.5  TB | ffffef7fffffffff |   64 TB | 直接映射所有物理内存
96*f41c74afSBinbin Zhou   ffffef8000000000 |  -16.5  TB | fffffffeffffffff | 16.5 TB | kasan
97*f41c74afSBinbin Zhou  __________________|____________|__________________|_________|____________________________________________________________
98*f41c74afSBinbin Zhou                                                              |
99*f41c74afSBinbin Zhou                                                              | 从此处开始,与39-bit布局相同:
100*f41c74afSBinbin Zhou  ____________________________________________________________|____________________________________________________________
101*f41c74afSBinbin Zhou                    |            |                  |         |
102*f41c74afSBinbin Zhou   ffffffff00000000 |   -4    GB | ffffffff7fffffff |    2 GB | modules, BPF
103*f41c74afSBinbin Zhou   ffffffff80000000 |   -2    GB | ffffffffffffffff |    2 GB | kernel
104*f41c74afSBinbin Zhou  __________________|____________|__________________|_________|____________________________________________________________
105