当我肯定有 4.0 GiB 时,为什么我的系统只显示 3.2 GiB 的 RAM

Pet*_*r.O 12 linux memory pae x86

我安装了 2x2 GiB 内存条。从 grub 启动菜单
运行memtest86确认了这一点.. memtest86 没有报告错误。

然而,我在运行的 Ubuntu 10.04 系统中检查可用内存的每一种方式,它只报告大约 3.2 GiB。

  • cat /proc/meminfo == 3320132 KB
  • System Monitor == 3.2 GiB
  • htop == 3242 MB
  • free -m == 3242 MB

谁有我丢失的内存?

更新信息:我刚刚在同一硬件上启动到另一个版本的 Ubuntu 10.04(我忘记了几个月前我已经安装了它,以防万一):)....它报告 3.9 GiB,通过System Monitor...

我已/var/log/messageshttp://pastebin.ubuntu.com/629246/ 上发布了我的最新信息

Gil*_*il' 19

32 位地址空间意味着您有 4GB 的地址空间。理想情况下,内核希望能够映射所有物理内存、当前任务的所有内存以及它自己的所有内存。如果仅物理内存就占用了所有可用的 4GB,那将不起作用。所以物理内存分为低位内存,一直映射,高位内存,使用时必须映射。除非您运行的是打过补丁的内核,否则在 ix86 架构上,128MB 的地址空间专用于内核代码和数据结构,896MB 专用于映射物理内存(总共 1GB)。

当您的地址空间不比您的总内存大时,有关内存管理复杂性的背景阅读:

内核日志的摘录:

BIOS-provided physical RAM map:
BIOS-e820: 0000000000000000 - 000000000009f800 (usable)
BIOS-e820: 000000000009f800 - 00000000000a0000 (reserved)
BIOS-e820: 00000000000f0000 - 0000000000100000 (reserved)
BIOS-e820: 0000000000100000 - 00000000cdce0000 (usable)
BIOS-e820: 00000000cdce0000 - 00000000cdce3000 (ACPI NVS)
BIOS-e820: 00000000cdce3000 - 00000000cdcf0000 (ACPI data)
BIOS-e820: 00000000cdcf0000 - 00000000cdd00000 (reserved)
BIOS-e820: 00000000d0000000 - 00000000e0000000 (reserved)
BIOS-e820: 00000000fec00000 - 0000000100000000 (reserved)
BIOS-e820: 0000000100000000 - 0000000130000000 (usable)
2404MB HIGHMEM available.
887MB LOWMEM available.
Zone PFN ranges:
DMA      0x00000000 -> 0x00001000
Normal   0x00001000 -> 0x000377fe
HighMem  0x000377fe -> 0x000cdce0
Run Code Online (Sandbox Code Playgroud)

这里有 887MB 的低内存:理论最大值为 896MB 减去几 MB 的 DMA 缓冲区(用于与硬件设备通信的内存区域)。

在您的物理内存中,3328MB 映射到 4GB 以下的地址,768MB 映射到 4GB 以上的地址(0x100000000–0x130000000 范围)。您无法访问这些 768MB,这就解释了为什么您只有 3242MB 可用(4096MB 的 RAM 减去 768MB 不可访问的 9MB DMA 缓冲区减去内核本身用于代码和数据的 75MB)。我不知道为什么 BIOS 将一些 RAM 映射到 4GB 标记以上,但作为一个数据点,我从具有 4GB RAM 的 PC 上发布此信息,该 PC 同样将 RAM 映射到 0x100000000–0x130000000。

映射 4GB 以上的物理内存需要使用PAE。PAE 会产生很小的性能开销(特别是,它需要内存管理器中更大的数据结构),因此它没有被系统地启用。默认的 Ubuntu 内核是在没有 PAE 支持的情况下编译的。获取-generic-pae内核 安装 linux-image-generic-pae 能够访问高达 64GB 的 RAM。

TL,DR:Linux 按预期工作。固件不是那么有用。获取启用 PAE 的内核。