我正在 Linux 系统(32 位,4GB RAM)上工作,发现一些有关 Linux 中内存寻址的矛盾信息。
我这样说对吗:
只有虚拟内存才有内核空间和用户空间的区别。虚拟内存在32位系统中为4GB大。 3 GB 用于用户空间,1 GB 用于内核空间。
但也有物理内存的地址或未定位的地址 - 参考ZONE_NORMAL 及其与内核/用户页面的关联?。
答案1
两者都有用户和核心Linux 中的虚拟内存映射到物理内存。
可能存在分配的物理内存不是从用户或内核虚拟空间映射的。例如,映射虚拟 -> 物理的页表。
BIOS 可以通过操作系统无法使用的物理内存在启动时提供可用内存的映射。
PCI基址寄存器引用内存提供路由到 PCI(e) 设备的可寻址内存范围。从某种意义上说,这从物理内存中窃取了这些可寻址内存范围。在包含 4GB RAM 的 32 位系统上,此创建一个洞在物理 RAM 中,整个可寻址空间也是可寻址的物理 RAM。系统利用PAE可以重新安排事物以利用“丢失的”RAM。
某些设备可能会将其内存映射到系统内存,例如板载 GPU。他们利用 PCIe加特将一组连续的 MMIO 地址映射到物理 RAM。 BIOS 会将这些范围标记为操作系统无法使用的内存。