Back to home page

OSCL-LXR

 
 

    


0001 .. SPDX-License-Identifier: GPL-2.0
0002 .. include:: ../disclaimer-zh_CN.rst
0003 
0004 :Original: Documentation/riscv/vm-layout.rst
0005 
0006 :翻译:
0007 
0008  司延腾 Yanteng Si <siyanteng@loongson.cn>
0009         Binbin Zhou <zhoubinbin@loongson.cn>
0010 
0011 ============================
0012 RISC-V Linux上的虚拟内存布局
0013 ============================
0014 
0015 :作者: Alexandre Ghiti <alex@ghiti.fr>
0016 :日期: 12 February 2021
0017 
0018 这份文件描述了RISC-V Linux内核使用的虚拟内存布局。
0019 
0020 32位 RISC-V Linux 内核
0021 ======================
0022 
0023 RISC-V Linux Kernel SV32
0024 ------------------------
0025 
0026 TODO
0027 
0028 64位 RISC-V Linux 内核
0029 ======================
0030 
0031 RISC-V特权架构文档指出,64位地址 "必须使第63-48位值都等于第47位,否则将发生缺页异常。":这将虚
0032 拟地址空间分成两半,中间有一个非常大的洞,下半部分是用户空间所在的地方,上半部分是RISC-V Linux
0033 内核所在的地方。
0034 
0035 RISC-V Linux Kernel SV39
0036 ------------------------
0037 
0038 ::
0039 
0040   ========================================================================================================================
0041       开始地址       |   偏移      |     结束地址      |  大小    | 虚拟内存区域描述
0042   ========================================================================================================================
0043                     |            |                  |         |
0044    0000000000000000 |    0       | 0000003fffffffff |  256 GB | 用户空间虚拟内存,每个内存管理器不同
0045   __________________|____________|__________________|_________|___________________________________________________________
0046                     |            |                  |         |
0047    0000004000000000 | +256    GB | ffffffbfffffffff | ~16M TB | ... 巨大的、几乎64位宽的直到内核映射的-256GB地方
0048                     |            |                  |         |     开始偏移的非经典虚拟内存地址空洞。
0049                     |            |                  |         |
0050   __________________|____________|__________________|_________|___________________________________________________________
0051                                                               |
0052                                                               | 内核空间的虚拟内存,在所有进程之间共享:
0053   ____________________________________________________________|___________________________________________________________
0054                     |            |                  |         |
0055    ffffffc6fee00000 | -228    GB | ffffffc6feffffff |    2 MB | fixmap
0056    ffffffc6ff000000 | -228    GB | ffffffc6ffffffff |   16 MB | PCI io
0057    ffffffc700000000 | -228    GB | ffffffc7ffffffff |    4 GB | vmemmap
0058    ffffffc800000000 | -224    GB | ffffffd7ffffffff |   64 GB | vmalloc/ioremap space
0059    ffffffd800000000 | -160    GB | fffffff6ffffffff |  124 GB | 直接映射所有物理内存
0060    fffffff700000000 |  -36    GB | fffffffeffffffff |   32 GB | kasan
0061   __________________|____________|__________________|_________|____________________________________________________________
0062                                                               |
0063                                                               |
0064   ____________________________________________________________|____________________________________________________________
0065                     |            |                  |         |
0066    ffffffff00000000 |   -4    GB | ffffffff7fffffff |    2 GB | modules, BPF
0067    ffffffff80000000 |   -2    GB | ffffffffffffffff |    2 GB | kernel
0068   __________________|____________|__________________|_________|____________________________________________________________
0069 
0070 
0071 RISC-V Linux Kernel SV48
0072 ------------------------
0073 
0074 ::
0075 
0076  ========================================================================================================================
0077       开始地址       |   偏移      |     结束地址      |  大小    | 虚拟内存区域描述
0078  ========================================================================================================================
0079                     |            |                  |         |
0080    0000000000000000 |    0       | 00007fffffffffff |  128 TB | 用户空间虚拟内存,每个内存管理器不同
0081   __________________|____________|__________________|_________|___________________________________________________________
0082                     |            |                  |         |
0083    0000800000000000 | +128    TB | ffff7fffffffffff | ~16M TB | ... 巨大的、几乎64位宽的直到内核映射的-128TB地方
0084                     |            |                  |         |     开始偏移的非经典虚拟内存地址空洞。
0085                     |            |                  |         |
0086   __________________|____________|__________________|_________|___________________________________________________________
0087                                                               |
0088                                                               | 内核空间的虚拟内存,在所有进程之间共享:
0089   ____________________________________________________________|___________________________________________________________
0090                     |            |                  |         |
0091    ffff8d7ffee00000 |  -114.5 TB | ffff8d7ffeffffff |    2 MB | fixmap
0092    ffff8d7fff000000 |  -114.5 TB | ffff8d7fffffffff |   16 MB | PCI io
0093    ffff8d8000000000 |  -114.5 TB | ffff8f7fffffffff |    2 TB | vmemmap
0094    ffff8f8000000000 |  -112.5 TB | ffffaf7fffffffff |   32 TB | vmalloc/ioremap space
0095    ffffaf8000000000 |  -80.5  TB | ffffef7fffffffff |   64 TB | 直接映射所有物理内存
0096    ffffef8000000000 |  -16.5  TB | fffffffeffffffff | 16.5 TB | kasan
0097   __________________|____________|__________________|_________|____________________________________________________________
0098                                                               |
0099                                                               | 从此处开始,与39-bit布局相同:
0100   ____________________________________________________________|____________________________________________________________
0101                     |            |                  |         |
0102    ffffffff00000000 |   -4    GB | ffffffff7fffffff |    2 GB | modules, BPF
0103    ffffffff80000000 |   -2    GB | ffffffffffffffff |    2 GB | kernel
0104   __________________|____________|__________________|_________|____________________________________________________________