Debido al bajo precio de la memoria y a las necesidades de las aplicaciones actuales, es muy común encontrar cada día mayor cantidad de computadoras con 4gb de RAM o aún más. La frustración viene cuando al iniciar la máquina el usuario se encuentra con que ésta le reconoce alrededor de 3gb de memoria RAM. La explicación a este inconveniente va más allá del sistema operativo (Linux, Windows o el que sea), pues radica en la propia arquitectura IA-32 (también conocida como i386, x86 o x86-32).
Básicamente, el problema de la arquitectura IA-32 consiste en lo siguiente:
- La memoria física (memoria RAM) se divide en fracciones más pequeñas denominadas celdas.
- Para acceder al contenido de una celda se necesita que la misma tenga una dirección.
- Las direcciones se representan con números de 32 bits.
- Con 32 bits el máximo número de direcciones que pueden obtenerse es 2^32, lo que permite direccionar como máximo 4gb.
Ahora bien, lo anterior explica el por qué los sistemas operativos de 32 bits no reconocen más de 4gb, pero aún no explica por qué ni siquiera reconocen los 4gb. Existe un segundo problema.
La arquitecura IA-32 se clasifica dentro de las arquitecturas de Von Neumann que tienen la característica de utilizar un mismo espacio de direcciones para direccionar tanto memoria física como dispositivos periféricos (discos rígidos, placas de video, grabadora de DVD, etc), a diferencia de la arquitectura Harvard que utiliza espacios de direcciones diferentes para memoria y para periféricos.
La conclusión de lo anterior es que la cantidad de direcciones que pueden formarse con 32 bits deben repartirse no sólo con la memoria sino también con los dispositivos periféricos. Eso explica entonces por qué se ven menos de 4gb en sistemas de 32 bits.
¿Cuál es la solución entonces a este problema? La primera de ellas es instalar un sistema operativo de 64 bits aunque puede terminar convirtiéndose en un dolor de cabeza, debido a que existen el software disponible para ellos es menor (lo que muchas veces implica incluso drivers) y muchos programas “compatibles” pueden volverse inestables; la otra solución es utilizar PAE, que es un parche que introdujo Intel a partir de sus procesadores Pentium Pro (hace un largo tiempo atrás) que permite direccionar hasta 64gb de memoria.
En sistemas operativos Linux la solución suele ser recompilar el kernel con soporte para memoria grande o instalar uno precompilado con dicho soporte (en el caso de Debian o Ubuntu se puede utilizar apt-get para obtener los kernels bigmem y server respectivamente). En el caso de Windows basta con agregar el parámetro PAE al archivo Boot.ini, aunque debo decir que esto último no lo hice nunca.
Para finalizar, dejo un par de lecturas que me resultaron interesantes. La primera de ellas hace especial hincapié en la utilización de memoria grande en Linux y la segunda habla más específicamente del límite de memoria en arquitecturas i386.Fuente:http://www.netstorming.com.ar/2009/06/11/4gb-de-ram-en-sistemas-operativos-de-32-bits/