高端内存
Linux 高端内存是针对物理内存来说的,虚拟内存没有高端这个概念。Linux 系统将虚拟内存分为两个部分,即用户地址空间
和内核地址空间
,对于 32 位系统来说,虚拟地址空间为 4GB,其中用户空间范围为 0-3GB,内核空间范围为 3-4GB。Linux 将 3GB 开始的内核虚拟地址空间的 896M
地址直接映射到物理地址空间的 0-896M,这部分是永久性映射,剩下的 128M
则可根据需要进行动态映射,也称临时性映射。如果没有动态映射,那么 1GB 的内核虚拟地址空间最多只能访问 1GB 的物理内存,那么如果物理内存大于 1GB,就会有一部分物理内存无法被内核访问到,显然不是我们想要的。因此,对于 32 位系统来说,高端物理内存是内核虚拟地址空间后 128M 可动态映射使内核得以访问的物理内存,用户空间虚拟地址也是映射到这部分物理内存
1 | ________________ _____ ________________ |
启动参数”mem=”
1 | mem=255M@0x0 mem=256M@0x30000000 |
内核解析:
1 | early_param("mem", early_parse_mem); |
file:arch/mips/kernel/setup.c
mem 参数由 early_parse_mem 函数处理。每一个 mem=size@addr
格式的参数,表示从 addr地址(物理地址)
开始的 size 大小的内存区域。如果没有”@addr” 则默认起始地址为 0
。