Estou usando o Ubuntu Linux de 64 bits. Recentemente, eu estava usando o Ubuntu 32 bits e descobri através do comando grep --color=always -iw lm /proc/cpuinfo
que meu processador é capaz de 64 bits. A saída do comando é:
flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc up pebs bts nopl pni dtes64 monitor ds_cpl tm2 cid cx16 xtpr
Porém, após limpar o disco e instalar o Ubuntu 11.10 de 64 bits, o sistema ainda detecta apenas 3,1 GB de RAM. Verifiquei na BIOS que tenho 4 gigabytes de RAM instalados, não 3.1. Por que o Ubuntu de 64 bits detecta apenas 3,1 GB de RAM?
Saída deuname -a
aaron@Aarons-Ubuntu-Computer:~$ uname -a
Linux Aarons-Ubuntu-Computer 3.0.0-12-generic #20-Ubuntu SMP Fri Oct 7 14:56:25 UTC 2011 x86_64 x86_64 x86_64 GNU/Linux
Saída defree -m
aaron@Aarons-Ubuntu-Computer:~$ free -m
total used free shared buffers cached
Mem: 3136 2960 175 0 233 1996
-/+ buffers/cache: 730 2405
Swap: 3189 0 3189
Responder1
Cerca de 80% das CPUs em uso hoje em dia (e quase todas as novas CPUs vendidas) suportam Ubuntu de 64 bits, então isso não é uma surpresa. Existem planos para sugerir o Ubuntu de 64 bits como padrão (da forma como o 32 bits é sugerido agora), já que o hardware da maioria das pessoas é capaz de executá-lo.
Ainda assim, para ver a memória total vista pelo kernel, bem como um relatório sobre como ela foi alocada inicialmente, você pode fazer o seguinte:
dmesg |grep "Memory: "
Isso mostrará uma linha como esta:
[ 0.000000] Memory: 3823988k/4849664k available (6109k kernel code, 874468k absent, 151208k reserved, 4876k data, 984k init)
Meu sistema tem 4 GB de RAM instalados, porém o total relatado é algo em torno de 4,7 GB (suponho que o BIOS reporte mais memória devido ao espaço de endereço para placas de vídeo, dispositivos PCI e IO e outros). No final, apenas 3,6 GB estão disponíveis para aplicativos devido a essas preocupações.
Observe a quantidade de memória "ausente", isso "reflete o espaço de endereçamento de memória perdido devido a falhas de memória no mapa de memória. Normalmente, são deixadas lacunas para espaço PCI, IO, etc. Cada sistema de modelo de fornecedor é diferente e cada sistema terá um valor diferente relatado para a memória ausente."
Veja também a questão apontada por fossfreedom, ela fornece mais explicações sobre onde o espaço de endereçamento pode estar sendo usado.