如果 PCI 设备具有如此多的内存,以至于 BIOS 无法找到合适的空物理地址区域来分配它,会发生什么情况?

如果 PCI 设备具有如此多的内存,以至于 BIOS 无法找到合适的空物理地址区域来分配它,会发生什么情况?

32 位系统的物理内存最大可达 4GiB。正确的?哦不,只有虚拟地址有 4GB 的限制,并且因为 MMU 可以向页号添加更多的地址位,所以可以使用更多的物理地址。例如,在 sparc32 架构中,页表条目中添加了 4 位,因此最多可以使用 16*4GB = 64GB。
在 PCI 系统中,BIOS 为 BAR(基地址寄存器)分配一个偏移量,以便在某些物理地址处看到 PCI 设备后面的内存区域。如果 PCI 设备的内存太多,无法为其分配给定最大 64GB 的合适的空白物理区域,该怎么办? (或者很多PCI设备有很多区域,以致总和太大?)。地址空间与总线无关吗?

答案1

那么,BIOS 可以决定要做什么:要么只映射设备的一部分,要么不映射,让操作系统中的设备驱动程序来解决。

但你说的是物理地址扩展(简称PAE)。它可以帮助您超越 4 GiB 限制,但代价是内存管理变得更加复杂,并且您将无法同时看到所有内存:每个单独的进程都可以有自己的内存映射,呈现不同的内存映射。 64 GiB 物理地址空间的一部分。

如果您需要超过 64 GiB,理论上可以进一步扩展 PAE 方案,但此时确实会带来更多麻烦,因此制造商还没有这样做。此时使用 64 位系统架构通常更有意义。

相关内容