这节课讲的主是为了区分低端内存和高端内存的是如何区分的?内核空间的划分是可以配置的。为了查看现象,通过qemu设置物理内存为不同情况。
结论:线性映射区的大小,和page_offset(内核起始地址0x80000000还是0xc0000000)和物理内存有关系。如果配置3:1,3GB+760MB为线性映射区。如果2:2划分,2+1760MB为线性映射区。高端内存没啥用,都没人用了,64位地址的虚拟空间特别大,再大的物理内存也能直接映射。
重点是啥:观察配置内核和用户空间的比例为不同值,设置ddr的大小为不同值的情况下。
当ddr为256MB时,256MB都是低端内存。vmalloc区为啥是1776MB?这里基本上就把2GB占住了。此时没有高端内存的概念了。剩下的1776MB虚拟内存即使访问了,本质上还是被映射到了低端内存。
当ddr为512MB时,512还是全部都是低端内存。但是vmalloc区变成了1520MB。基本上就把2GB占住。
当ddr为1GB时,低端内存为1024GB,vmalloc区别变成1008MB
注意:vmalloc的结束地址是固定的。0xff80 0000.但是起始地址是动态变化的。vmalloc区最小是240MB。vmalloc_min = vmalloc_end - 240<<20 - vmalloc_offset(这里是8MB的隔离空间)