9.7.2 Linux 虚拟内存系统
P580
“Linux 也将一组连续的虚拟页面(大小等于系统中 DRAM 的总量)映射到相应的一组连续的物理页面”
这句话的意思是,Linux 内核在其虚拟地址空间中,预留了一大段连续的虚拟内存地址。这段虚拟地址空间的大小正好等于你电脑上安装的物理内存(DRAM)的总容量。
更重要的是,内核将这段虚拟地址以线性的、一对一的方式映射到所有的物理内存页上。
为什么内核要这样做?(“便利的方法来访问”)
这种设计带来了巨大的便利性,主要体现在:
-
访问任何物理内存极其简单快速:
当内核需要访问任何物理内存位置时(例如你提到的访问页表或与设备通信),它不需要进行复杂的页表查询来计算虚拟地址。它只需要做一个非常简单的数学换算:
虚拟地址 = 直接映射区的起始地址 + 物理地址例如,直接映射区起始地址是
0xffff000000000000,内核想访问物理地址0x1000,它直接访问虚拟地址0xffff000000000000 + 0x1000就可以了。这种转换效率极高。
P581
每个进程的pgd都不同,因为每个进程的页表都是不同的

浙公网安备 33010602011771号