为什么使用 AMD64 时无法识别超过 3 GB 的 RAM?

为什么使用 AMD64 时无法识别超过 3 GB 的 RAM?

为什么 Ubuntu 10.10 amd64 (Maverick Meerkat) 无法处理超过 3 GB 的 RAM?

我的机器是东芝 P205-S6287 Intel Centrino Duo 64 位处理器和 4 GB RAM,频率为 667 MHz。

根据详细规格,该笔记本运行64位Core 2 Duo T5300处理器,并配有945GM Express芯片组。

答案1

这是由于移动式英特尔 945GM Express在你的笔记本电脑中。

我有一台 Thinkpad T60,它使用相同的芯片组。它是英特尔为 Core2Duo 64 位 CPU 设计的首批北桥之一。他们在设计它时失败了。

芯片组理论上只能寻址 4GB RAM,但还必须寻址其他硬件(I/O 内存)。它为此保留了 1GB 内存范围的上限。Linux 内核中的 64 位逻辑内存地址支持无济于事,因为主板和北桥仅为 CPU 提供 32 位物理地址总线。而且没有解决方法。
http://forums.lenovo.com/t5/T61-and-prior-T-series-ThinkPad/Thinkpad-s-and-N100-sw-945PM-chipset-can-t-address-gt-3G-Ram/mp/2730

在设计内存库切换方面,理论上存在一种选择。然而,内核并不支持它,而且在 x86 架构上也没有意义。945GM 的 i810 内存控制器可能太懒了,无法实现这一点。

答案2

我的简短回答是:可能是因为 BIOS 设计师太粗心了。

详细答案是:

尽管你安装了 4GB RAM,您不能指望英特尔 945GM 芯片组能有 4GB 的可用 RAM。这是芯片组的限制。你可以从芯片组的规格中看出这一点:

http://www.intel.com/content/www/us/en/intelligent-systems/navy-pier/mobile-945-express-chipset-datasheet.html

引自第 9.2 节:“埃默里C控制器Hubs 提供的最大 DRAM 地址解码空间为 4 GB。MCH 不会重新映射 APIC 或 PCI Express 内存空间。这意味着,当系统中填充的物理内存量达到 4 GB 时,将存在无法寻址的物理内存,因此系统无法使用。

BIOS 必须为多个资源保留地址范围,即 BIOS 本身、PCI 和 PCI Express 内存映射空间、内部图形、APIC 内存空间和其他用于 I/O 访问的内存窗口。所有这些地址范围都必须位于 4GB 地址空间内,因此占用了系统内存不再可用的地址范围。您可以说这些资源“窃取”了物理 RAM 内存空间。

话虽如此,如果你安装了 4GB预计有超过 3GB 的系统内存可用

系统可用的物理内存量取决于 BIOS 设计人员在安排这些地址范围方面投入了多少精力。例如,BIOS 可以为每个资源分配所需的最少内存量。或者,它可以根据系统对 PCI Express 设备的使用情况,允许禁用或限制 PCI Express 的地址分配。

即使您安装了 4GB,系统的 BIOS 设计人员也可能将可用 RAM 的上限设置为静态最大值 3GB。这种方法为 BIOS 设计人员提供了 1GB 的静态地址窗口,从而简化了 BIOS 设计人员分配资源地址范围的任务,使它们不会与任何其他地址范围发生冲突。

答案3

可能的原因有多种。

一个原因是您实际上没有运行 amd64 版本。另一个原因是您的主板和/或 BIOS 已损坏,并且未报告正确的 RAM 数量。

另一个原因是您的视频内存和其他硬件资源占用了 3-4 GB 内存区域的空间,而您的主板/BIOS 无法将影子 RAM 提升到更高的地址以便访问。

要弄清楚哪个需要查看你的dmesg输出。

答案4

psusi 是对的。

我这里有同样的情况:

尽管他们称之为“64 位 CPU”,但您通常无法寻址 4 GB+ 内存。

大多数旧主板的地址只有 32 位,显卡也需要从这个池中获取其地址。

= 4 GB - 显卡内存(1 GB)= 3 GB。

我担心不可能通过修补或升级任何东西的固件来解决这个问题。

如果您对细节感兴趣我推荐:物理地址扩展

相关内容