高端内存
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
。
参考
- Linux内核高端内存