Existem várias razões pelas quais uma parte da RAM não seria usada pelo Linux:
- Se o Linux o detectar como pertencente a um periférico de hardware. A maioria dos computadores precisa de RAM para o monitor e, portanto, reserva alguma RAM para a placa gráfica. Também é possível que a placa gráfica contenha sua própria RAM; como as placas gráficas têm requisitos de memória relativamente altos, elas tendem a não ser empacotadas com RAM própria (mas há exceções). Pelo menos o VMware e o VirtualBox contam a memória de vídeo como parte da memória alocada para uma máquina virtual. O tamanho da memória de vídeo é uma configuração na configuração da VM.
- O intervalo de endereços de memória que o Linux usará pode ser restrito com os parâmetros
mem=…
admemmap=…
na linha de comando do kernel. - Às vezes, o kernel pode não conseguir usar parte da memória. Como as interfaces de RAM são bastante padrão, isso quase nunca acontece, exceto quando você executa um kernel de 32 bits não-LPAE e tem 4 GB ou mais de RAM.
- Com a memória ECC, alguns intervalos nos quais um erro foi detectado podem ser marcados como inutilizáveis.
Na prática, na maior parte do tempo, a memória que o Linux pode usar é a RAM disponível menos a memória de vídeo (e possivelmente a memória usada por outros periféricos de hardware). O próprio Linux divide a memória em duas partes: a memória usada pelo kernel e a memória disponível para os processos. A maioria das ferramentas, como free
, reporta como o total da memória disponível para os processos.
Portanto, se free
mostrar um total de 3832MB e você tiver 4096MB de RAM nessa máquina (física ou virtual), isso significa que
4096MB - 3832MB = video memory (+ other hardware memory) + kernel memory
264MB para hardware e sons de kernel plausíveis. Você tem 3832MB disponíveis para aplicativos porque o restante é usado pelo hardware e pelo kernel.