我安装了 2x2 GiB 内存条。从 grub 启动菜单
运行证实了这一点。memtest86 没有报告任何错误。memtest86
然而,无论我以何种方式检查正在运行的 Ubuntu 10.04 系统中的可用内存,它都只报告大约 3.2 GiB。
cat /proc/meminfo
== 3320132 kBSystem Monitor
== 3.2 GiBhtop
== 3242 MBfree -m
== 3242 MB
谁有我的丢失的内存 ?
更新信息:我刚刚双重的-在同一硬件上启动到另一个版本的 Ubuntu 10.04(我忘记了几个月前我已经安装了它,以应对紧急情况):)....它报告 3.9 GiB,通过System Monitor
...
我已将最新/var/log/messages
信息发布于http://pastebin.ubuntu.com/629246/
答案1
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
这里有 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
核心 能够访问高达 64GB 的 RAM。
TL,DR:Linux 正在按预期工作。固件没那么有用。获取启用 PAE 的内核。
答案2
可能是因为你的Ubuntu架构是i386(32位版本)。当你跑步时,结果是什么uname -a
?