Límites de memoria en sistemas de 16, 32 y 64 bits.

17

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?

Matthew Layton
fuente

Respuestas:

15

Lo hacen, el sistema se llama Extensión de dirección física (PAE) . Aquí hay una lista de los sistemas operativos Windows y su memoria máxima, cualquier sistema de 32 bits que permita más de 4 GB de RAM está utilizando PAE para acceder a la memoria (por ejemplo, Windows 2003 R2 Datacenter de 32 bits permite 128 GB de RAM).


De hecho, Windows 8 requiere una CPU con capacidad PAE en sus requisitos mínimos .


Para responder a su pregunta "no formulada" sobre por qué su sistema operativo de 32 bits no puede acceder al RAM si existe: Licencias. Eligen no permitir que la RAM supere los 4 GB para sus sistemas operativos de 32 bits a menos que pague por una edición de centro de datos (es por eso que venden una edición de centro de datos, si necesita tanta memoria RAM, es probable que pueda gastar más dinero en un sistema operativo).

Scott Chamberlain
fuente
Ah, he oído hablar de PAE antes, pero nunca lo he investigado. Parece que se usa en gran medida en la arquitectura del servidor, por lo que no parece aplicarse a una instalación de Windows 7 de 32 bits, ya que la lista especifica que W7x86 solo permite hasta 4 GB
Matthew Layton
1
@ 0xC0000022L para ser justos, agregué la parte de la licencia como una edición después de su comentario, pero debido a la ventana de edición de 4 minutos parece que lo publiqué antes de que publicara el comentario.
Scott Chamberlain
1
PAE requiere el cambio de tabla de páginas para funcionar, y eso es costoso en términos de rendimiento.
vonbrand
3
Eso es un mito. La sobrecarga debida a PAE es pequeña. Y si no le gusta PAE, realmente debería odiar x64, porque la estructura de la tabla de páginas en x64 se parece a PAE, solo con otro nivel de tabla agregado en la parte superior y más bits para PFN en los PxE.
Jamie Hanrahan
1
PAE no se "eliminó en Windows 7 porque ya no es necesario", todavía está presente en Windows 7 x86: está ahí de manera predeterminada en lugar de tener que ser activado.
Jamie Hanrahan
13

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).

0xC0000022L
fuente
Hmm, ¿por qué tengo la impresión de que Linus realmente odia a HIGHMEM.SYS y PAE? : P
Karan
2
Entiendo que PAE sería una molestia para cualquier código que necesitara más de un par de presentaciones de trabajo, y para el código de nivel de sistema que necesita administrar múltiples tareas de 2 presentaciones cada una, pero a menos que una sola aplicación necesite más de 2 conciertos Espero que PAE sea transparente. Además, creo que PAE también sería mejor que el uso global de punteros de 64 bits en los casos que necesitaban 3 gigas de RAM de uso general más una memoria caché de disco grande o una unidad de almacenamiento temporal.
supercat
Los comentarios de Linus son extraños. No hay relación entre cómo funciona himem.sys y cómo funciona PAE. Es muy divertido ver a la gente discutir a favor de x64 y en contra del direccionamiento PAE ... ¡cuando el modo largo x64 simplemente toma el esquema PAE y agrega un nivel más de tabla de páginas!
Jamie Hanrahan
@JamieHanrahan: ... al menos dos en sistemas más nuevos (debido a la virtualización), lo que abre algunas posibilidades interesantes. Sus comparaciones (de Linus) no son completamente correctas, pero si es un concepto extraño, las metáforas pueden ayudar :) ... Supongo que por eso lo eligió para hacer su punto.
0xC0000022L
2

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.

William
fuente
1

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.

OCDtech
fuente
1
Esto realmente no tiene suficiente información para respaldar sus declaraciones. Windows 3.1 es un sistema operativo de 16 bits. Hay que recordar que en 1992 2 MB de memoria superaron los $ 300.
Ramhound
Eres el comentario del 22 de febrero, y la explicación de Scott Chamberlin prácticamente cubre lo que estaba conduciendo. Dejan de lado las descripciones de por qué se utilizó la paginación segmentada extensible en DOS / Win16, pero no en Windows posterior. No incluí eso, porque no contribuiría directamente a responder la pregunta del OP.
OCDtech
Es mi opinión que las respuestas deberían estar solas. Su comentario agrega suficiente información para resolver mis problemas con su respuesta.
Ramhound
1
@OCDtech: el modelo segmentado 8086 permitiría que un lenguaje orientado a objetos use referencias de objetos de 2 bytes para identificar objetos alineados en límites de 16 bytes, pero los idiomas no estaban bien equipados para usar segmentos de manera efectiva. El modelo 80286 impone una sobrecarga monstruosamente mayor a tales programas, y la forma en que se extendió en el 80386 haría que un esquema de segmento por objeto sea totalmente inútil.
supercat
0

Los límites de memoria teóricos en máquinas de 16, 32 y 64 bits son los siguientes ...

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?)

Jamie Hanrahan
fuente
Y no se olvide de los sistemas que no usan 8 bits por celda RAM. (EG: 16/16 = 128K max, 32/32 = 16G Max, 32/64 = 32G Max)
SkyCharger