¡Linux se come mi RAM!

Linux se come mi RAM


Este artículo se ha revisado y movido a Cómo se usa la RAM


Falta memoria RAM

La pregunta difícil de la semana (menos mal que no me ha tocado directamente): «El Windows de mi flamante nuevo PC con 4 GB de RAM (más vale que zozobre y no que zofalte) dice que sólo hay algo más de 3 GB… ¿Qué pasa?». Posiblemente, se deba a un fallo en una de las memorias y por eso no se detecta. Se abre el equipo y empieza el test: cambio memoria arriba, cambio memoria abajo y parece que todas funcionan. Tras probar diversas combinaciones resultan que sólo falla al meter los 4 juntos 😦 y tenemos un bonito expediente X.

La explicación es sencilla. En la actualidad, los sistemas operativos tienen versiones de 32 y 64 bits. Este número indica el tamaño máximo de una dirección de memoria y, por lo tanto, la cantidad máxima de memoria que puede manejar el sistema. Suponiendo un sistema operativo de 32 bits, el tamaño máximo de memoria es 232 direcciones = 4Gb. Según esto, cualquier sistema de 32 bits debería ser capaz de «ver» los 4Gb de RAM.

Sin embargo, no todas esas direcciones pueden utilizarse. Una parte de ellas permiten acceder a las tarjetas conectadas a la máquina: son los denominados dispositivos proyectados en memoria. Cuando se accede a una dirección de memoria reservada a estos dispositivos (habitualmente, las más altas) se redirigen al dispositivo en lugar de a la memoria RAM aunque realmente exista. En los ordenadores actuales, esta técnica es empleada por múltiples dispositivos que reservan rangos disjuntos. Debido a esto, de los 4GB gestionables por un sistema operativo de 32 bits, parte de ellos (algo más de medio GB) están reservados para acceder a los dispositivos. Esto deja algo menos de 3’5Gb de memoria RAM accesibles.

Mapa de memoria para un SO de 32 y 64 bits

Un ejemplo es la tarjeta gráfica. Las actuales son de 256 ó 512 Mb. El sistema necesita direcciones para acceder a esa información y asigna ese espacio entre los 4Gb disponibles reduciendo las direcciones disponibles para la memoria RAM. Esto no significa que la memoria no esté sino que no puede accederse por el límite de direcciones.

[ Publicado originalmente el 25 de junio de 2007 ]
 
Imagen vía:
The Inquirer ES