在Linux内核开发(LKD) 第 3 版,区域下第 12 章,Robert Love 说:
特别是,Linux 必须解决硬件在内存寻址方面的两个缺点:
某些硬件设备只能对某些内存地址执行 DMA(直接内存访问)。
某些架构可以物理寻址比虚拟寻址更大的内存量。因此,某些内存不会永久映射到内核地址空间。
我的问题:
- 第一个没问题,他说的2是什么意思?
- 他的意思是说:某些体系结构可以寻址的物理内存量大于它们可以寻址的虚拟地址吗?
- 这怎么可能?我认为虚拟地址空间大于物理内存或至少(如果有)等于物理内存。
- 还有,不是因为VAS(虚拟地址空间)比物理内存大,所以有些内存并没有永久映射到KAS(内核地址空间)中。
但我猜测只有物理内存被映射到 KAS 中。让我知道他上面第 2 点的意思以及我在这里做出的错误假设。
答案1
物理地址扩展 (PAE)听起来和他指的一模一样。
32 位 CPU 只能映射 ~4GB 内存,即使系统有更多内存。但使用 PAE,您可以使用 >4gb,尽管在任何一次只能映射其中 4gb(单个进程永远无法使用 >4gb)。
因此,基本上,当内核更改活动运行的进程时,它会将虚拟内存重新映射到该进程当前正在使用的物理内存。