162306a36Sopenharmony_ci.. SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci.. include:: ../disclaimer-zh_CN.rst
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci:Original: Documentation/riscv/vm-layout.rst
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci:翻译:
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci 司延腾 Yanteng Si <siyanteng@loongson.cn>
962306a36Sopenharmony_ci        Binbin Zhou <zhoubinbin@loongson.cn>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci============================
1262306a36Sopenharmony_ciRISC-V Linux上的虚拟内存布局
1362306a36Sopenharmony_ci============================
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci:作者: Alexandre Ghiti <alex@ghiti.fr>
1662306a36Sopenharmony_ci:日期: 12 February 2021
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_ci这份文件描述了RISC-V Linux内核使用的虚拟内存布局。
1962306a36Sopenharmony_ci
2062306a36Sopenharmony_ci32位 RISC-V Linux 内核
2162306a36Sopenharmony_ci======================
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ciRISC-V Linux Kernel SV32
2462306a36Sopenharmony_ci------------------------
2562306a36Sopenharmony_ci
2662306a36Sopenharmony_ciTODO
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ci64位 RISC-V Linux 内核
2962306a36Sopenharmony_ci======================
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_ciRISC-V特权架构文档指出,64位地址 "必须使第63-48位值都等于第47位,否则将发生缺页异常。":这将虚
3262306a36Sopenharmony_ci拟地址空间分成两半,中间有一个非常大的洞,下半部分是用户空间所在的地方,上半部分是RISC-V Linux
3362306a36Sopenharmony_ci内核所在的地方。
3462306a36Sopenharmony_ci
3562306a36Sopenharmony_ciRISC-V Linux Kernel SV39
3662306a36Sopenharmony_ci------------------------
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci::
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci  ========================================================================================================================
4162306a36Sopenharmony_ci      开始地址       |   偏移      |     结束地址      |  大小    | 虚拟内存区域描述
4262306a36Sopenharmony_ci  ========================================================================================================================
4362306a36Sopenharmony_ci                    |            |                  |         |
4462306a36Sopenharmony_ci   0000000000000000 |    0       | 0000003fffffffff |  256 GB | 用户空间虚拟内存,每个内存管理器不同
4562306a36Sopenharmony_ci  __________________|____________|__________________|_________|___________________________________________________________
4662306a36Sopenharmony_ci                    |            |                  |         |
4762306a36Sopenharmony_ci   0000004000000000 | +256    GB | ffffffbfffffffff | ~16M TB | ... 巨大的、几乎64位宽的直到内核映射的-256GB地方
4862306a36Sopenharmony_ci                    |            |                  |         |     开始偏移的非经典虚拟内存地址空洞。
4962306a36Sopenharmony_ci                    |            |                  |         |
5062306a36Sopenharmony_ci  __________________|____________|__________________|_________|___________________________________________________________
5162306a36Sopenharmony_ci                                                              |
5262306a36Sopenharmony_ci                                                              | 内核空间的虚拟内存,在所有进程之间共享:
5362306a36Sopenharmony_ci  ____________________________________________________________|___________________________________________________________
5462306a36Sopenharmony_ci                    |            |                  |         |
5562306a36Sopenharmony_ci   ffffffc6fee00000 | -228    GB | ffffffc6feffffff |    2 MB | fixmap
5662306a36Sopenharmony_ci   ffffffc6ff000000 | -228    GB | ffffffc6ffffffff |   16 MB | PCI io
5762306a36Sopenharmony_ci   ffffffc700000000 | -228    GB | ffffffc7ffffffff |    4 GB | vmemmap
5862306a36Sopenharmony_ci   ffffffc800000000 | -224    GB | ffffffd7ffffffff |   64 GB | vmalloc/ioremap space
5962306a36Sopenharmony_ci   ffffffd800000000 | -160    GB | fffffff6ffffffff |  124 GB | 直接映射所有物理内存
6062306a36Sopenharmony_ci   fffffff700000000 |  -36    GB | fffffffeffffffff |   32 GB | kasan
6162306a36Sopenharmony_ci  __________________|____________|__________________|_________|____________________________________________________________
6262306a36Sopenharmony_ci                                                              |
6362306a36Sopenharmony_ci                                                              |
6462306a36Sopenharmony_ci  ____________________________________________________________|____________________________________________________________
6562306a36Sopenharmony_ci                    |            |                  |         |
6662306a36Sopenharmony_ci   ffffffff00000000 |   -4    GB | ffffffff7fffffff |    2 GB | modules, BPF
6762306a36Sopenharmony_ci   ffffffff80000000 |   -2    GB | ffffffffffffffff |    2 GB | kernel
6862306a36Sopenharmony_ci  __________________|____________|__________________|_________|____________________________________________________________
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ciRISC-V Linux Kernel SV48
7262306a36Sopenharmony_ci------------------------
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci::
7562306a36Sopenharmony_ci
7662306a36Sopenharmony_ci ========================================================================================================================
7762306a36Sopenharmony_ci      开始地址       |   偏移      |     结束地址      |  大小    | 虚拟内存区域描述
7862306a36Sopenharmony_ci ========================================================================================================================
7962306a36Sopenharmony_ci                    |            |                  |         |
8062306a36Sopenharmony_ci   0000000000000000 |    0       | 00007fffffffffff |  128 TB | 用户空间虚拟内存,每个内存管理器不同
8162306a36Sopenharmony_ci  __________________|____________|__________________|_________|___________________________________________________________
8262306a36Sopenharmony_ci                    |            |                  |         |
8362306a36Sopenharmony_ci   0000800000000000 | +128    TB | ffff7fffffffffff | ~16M TB | ... 巨大的、几乎64位宽的直到内核映射的-128TB地方
8462306a36Sopenharmony_ci                    |            |                  |         |     开始偏移的非经典虚拟内存地址空洞。
8562306a36Sopenharmony_ci                    |            |                  |         |
8662306a36Sopenharmony_ci  __________________|____________|__________________|_________|___________________________________________________________
8762306a36Sopenharmony_ci                                                              |
8862306a36Sopenharmony_ci                                                              | 内核空间的虚拟内存,在所有进程之间共享:
8962306a36Sopenharmony_ci  ____________________________________________________________|___________________________________________________________
9062306a36Sopenharmony_ci                    |            |                  |         |
9162306a36Sopenharmony_ci   ffff8d7ffee00000 |  -114.5 TB | ffff8d7ffeffffff |    2 MB | fixmap
9262306a36Sopenharmony_ci   ffff8d7fff000000 |  -114.5 TB | ffff8d7fffffffff |   16 MB | PCI io
9362306a36Sopenharmony_ci   ffff8d8000000000 |  -114.5 TB | ffff8f7fffffffff |    2 TB | vmemmap
9462306a36Sopenharmony_ci   ffff8f8000000000 |  -112.5 TB | ffffaf7fffffffff |   32 TB | vmalloc/ioremap space
9562306a36Sopenharmony_ci   ffffaf8000000000 |  -80.5  TB | ffffef7fffffffff |   64 TB | 直接映射所有物理内存
9662306a36Sopenharmony_ci   ffffef8000000000 |  -16.5  TB | fffffffeffffffff | 16.5 TB | kasan
9762306a36Sopenharmony_ci  __________________|____________|__________________|_________|____________________________________________________________
9862306a36Sopenharmony_ci                                                              |
9962306a36Sopenharmony_ci                                                              | 从此处开始,与39-bit布局相同:
10062306a36Sopenharmony_ci  ____________________________________________________________|____________________________________________________________
10162306a36Sopenharmony_ci                    |            |                  |         |
10262306a36Sopenharmony_ci   ffffffff00000000 |   -4    GB | ffffffff7fffffff |    2 GB | modules, BPF
10362306a36Sopenharmony_ci   ffffffff80000000 |   -2    GB | ffffffffffffffff |    2 GB | kernel
10462306a36Sopenharmony_ci  __________________|____________|__________________|_________|____________________________________________________________
105