Los límites de memoria teóricos en máquinas de 16, 32 y 64 bits son los siguientes:
16 bit = 65,536 bytes (64 kilobytes)
32 bits = 4,294,967,296 bytes (4 Gigabytes)
64 bit = 18,446,744,073,709,551,616 (16 Exabytes)
Recuerdo de DOS / Windows 3.11 días, que la memoria de 16 bits se podía separar en segmentos, de modo que una máquina de 16 bits podía acceder a una mayor cantidad de memoria que 64 kilobytes.
Tengo una máquina con 16 GB de memoria y tengo un arranque dual de un sistema operativo de 32 bits y un sistema operativo de 64 bits. Puedo acceder a todos los 16 GB desde 64 bits, pero solo 3.21 GB en 32 bits.
Entonces, mi pregunta es, si los sistemas operativos de 16 bits permitieron un acceso de memoria mayor que 64 KB debido a la segmentación de la memoria, ¿por qué las máquinas de 32 bits no siguen el mismo pricipal?
En lugar de explicarlo yo mismo, dejaré que alguien que tenga que mantener un núcleo con soporte PAE hable de manera encantadora, Linus Torvalds
También tenga en cuenta que el soporte PAE en las versiones de Windows de 32 bits viene por mucho dinero. XP ni siquiera podrá hacer uso de 4 GiB completos de RAM normalmente, porque MS decidió no habilitar las funciones PAE en él. Un kernel que está estrechamente relacionado, Windows 2003 Server, admite PAE. Sin embargo, incluso allí, su "Edición estándar" solo admitirá hasta 4 GiB (pero trabajando alrededor del agujero de memoria del BIOS), mientras que las ediciones más caras permitirán hasta 64 GiB de RAM. Lo mismo vale para Vista de 32 bits .
Sin embargo, no en todos los casos es esta limitación impuesta por Windows. Si lo fuera, arrancar un kernel de Linux con PAE aún le permitiría usar los 4 GiB completos (o más). No es así, algunos fabricantes de hardware optaron por imponer esta limitación a nivel de BIOS, aunque la CPU y el conjunto de chips serían capaces de manejar PAE.
Solo una nota al margen: ninguno de los procesadores actuales de 64 bits basados en x86 puede abordar físicamente el rango completo del espacio de direcciones de 64 bits (para referencia, consulte esta pregunta y respuestas).
fuente
Las CPU de 8 bits generalmente tenían un bus de direcciones de 16 bits. (Motorola tenía un bus de direcciones unificado, RAM y periferia periférica compartían el mismo espacio de direcciones, Intel eligió dividir los dos. En el caso de Intel, los límites de dirección de E / S del 8088 y 8086 superaron los límites del 8080 y 8085 CPU.)
Los 8088 y 8086 de Intel tenían un bus de direcciones de memoria de 20 bits (1 MB), mientras que el 68000 de Motorola tenía un bus de direcciones de 24 bits (16 MB). IIRC, el [80] 286 saltó a un bus de direcciones de 24 bits. Ambos luego se expandieron a un bus de direcciones de 32 bits con [80] 386 y 68020 respectivamente.) Con los chips Pentium, el bus de direcciones se expandió a 64 bits. (Creo que los chips PowerPC de riesgo de Motorola / IBM también fueron bus de direcciones de 64 bits).
La memoria disponible a continuación y hasta el máximo al que la CPU podía acceder directamente solo estaba limitada por los chips de hardware compatibles (conjunto de chips) y el sistema operativo. Bill Gates fue famoso en el pasado por afirmar que nadie necesitaba más de 640K de RAM, por lo que DOS nunca evolucionó para acceder directamente a más RAM. Con HiMem.sys y EMM386, DOS se extendió para acceder a más memoria "superior", y se utilizó EMM386 para acceder directamente a toda la RAM disponible. HiMem.sys tenía menos flexibilidad y básicamente podía usar la RAM extra para el almacenamiento.
La memoria que excedía ese límite requería una MMU (Unidad de administración de memoria) para dividir la memoria en segmentos y asignarla al espacio de memoria direccionable de la CPU. Es así como el CoCo 3, el Commodore 128 y otras computadoras de 8 bits pueden acceder a más de 64K de RAM.
Más favorable ahora es usar memoria virtual para extender los límites de memoria física pasados, aunque con los límites impuestos por el sistema operativo.
fuente
Porque no hay una razón práctica para hacerlo. Las extensiones de dirección física permiten la misma funcionalidad y su uso aún es muy limitado entre los usuarios. En los días de Windows 3.1 había restricciones que simplemente no están presentes hoy.
fuente
La falla fundamental aquí es la noción de que el "ancho de bits" del procesador, que generalmente es el tamaño de los registros de propósito general de la máquina, es necesariamente el mismo que el ancho de las direcciones RAM.
En x86 con paginación habilitada, pero sin PAE, las direcciones que el programa y el código del sistema operativo usan son llamadas "direcciones lineales" por Intel, generalmente las llamamos "direcciones virtuales". Tienen 32 bits de ancho. Esto permite un espacio de direcciones virtuales de 4 GiB.
Pero es más o menos una coincidencia, simplemente un artefacto del formato de las entradas de la tabla de páginas que el tamaño de una dirección física (RAM) también es de 32 bits.
Con PAE, este último es de 36 bits (al principio ... más ancho en implementaciones posteriores). Entonces, el hecho de que sea, por ejemplo, una "máquina de 32 bits" no significa que las direcciones de memoria física estén limitadas a 32 bits.
La industria tiene una larga historia de máquinas cuyo "ancho de bits" no coincide con su tamaño máximo de dirección física. Por ejemplo, la arquitectura VAX define una máquina de 32 bits, y las direcciones virtuales (que son las direcciones utilizadas por el código una vez que se activa la traducción de direcciones) tienen de hecho 32 bits de ancho ... pero las direcciones físicas del VAX tienen solo 30 bits de ancho. y la mitad del espacio de direcciones físicas está dedicado a registros de dispositivos de E / S, por lo que la RAM máxima fue de solo 512 MiB.
Incluso sin el hardware de traducción de direcciones, no es necesariamente el caso que el "ancho de bits" de la máquina defina la dirección RAM máxima. Ejemplo: La serie "superior 3000" de CDC eran máquinas de 36 bits. ¿Crees que podrían abordar 64 GiB de RAM? ¡No es difícil! ¡Esas máquinas salieron a mediados de los años 60! Diablos, ni siquiera podíamos tener 64 GB de espacio en disco en esos días. (La serie CDC 6000 eran máquinas de 60 bits. ¿Necesito continuar?)
fuente