Mientras trato de entender el problema de memoria alta para CPU de 32 bits y Linux, ¿por qué no hay problema de memoria alta para CPU de 64 bits?
En particular, ¿cómo se cambia la división de la memoria virtual en espacio del kernel y espacio del usuario, de modo que no exista el requisito de memoria alta para la CPU de 64 bits?
Gracias.
Un sistema de 32 bits solo puede direccionar 4 GB de memoria. En Linux, esto se divide en 3 GB de espacio de usuario y 1 GB de espacio de kernel. Este 1 GB a veces no es suficiente, por lo que el kernel podría necesitar mapear y desasignar áreas de memoria, lo que incurre en una penalización de rendimiento bastante significativa. El espacio del kernel es el 1 GB "alto", de ahí el nombre "problema de memoria alta".
Un sistema de 64 bits puede manejar una gran cantidad de memoria (16 EB), por lo que este problema no ocurre allí.
Con direcciones de 32 bits, solo puede direccionar 2^32 bytes de memoria (4 GB). Entonces, si tiene más de eso, debe abordarlo de alguna manera especial. Con direcciones de 64 bits, puede direccionar 2^64 bytes de memoria sin un esfuerzo especial, y ese número es mucho mayor que toda la memoria que existe en el planeta.
Ese número de bits se refiere al tamaño de palabra del procesador. Entre otras cosas, el tamaño de palabra es el tamaño de una dirección de memoria en su máquina. El tamaño de la dirección de memoria afecta a cuántos bytes se pueden hacer referencia de forma única. Entonces, haciendo algunas matemáticas simples, encontramos que en un sistema de 32 bits existen como máximo 2 ^ 32 = 4294967296 direcciones de memoria, lo que significa que tiene una limitación matemática de aproximadamente 4 GB de RAM.
Sin embargo, en un sistema de 64 bits tiene 2^64 = 1.8446744e+19 direcciones de memoria disponibles. Esto significa que, en teoría, su computadora puede hacer referencia a casi 20 exabytes de RAM, que es más RAM de la que nadie ha necesitado en la historia de la informática.