¿Qué sucederá si usamos más de 4 GB de memoria en un sistema de 32 bits? ¿El sistema podrá usar más de 4 GB? ¿En qué condiciones puede un sistema tener más de 4 GB de memoria?

Hay dos aspectos de su sistema a considerar aquí: memoria física y memoria virtual. Cubriré ambos.

Memoria física: un sistema de 32 bits generalmente no puede direccionar físicamente más de 4 GB de RAM ([matemática] 2 ^ {32} [/ matemática]). Sin embargo, los sistemas han adoptado extensiones que permiten que un procesador de 32 bits acceda físicamente a más de 4 GB de RAM. Esto generalmente se implementa a través de hacks de tablas de páginas. La arquitectura x86, por ejemplo, admite una característica llamada Extensión de dirección física ( PAE ) que (en su forma más común) extiende la memoria físicamente direccionable a 64 GB ([matemática] 2 ^ {36} [/ matemática]). PAE es bastante común. Si su sistema lo admite, puede tener más de 4 GB de RAM. De lo contrario, estás atascado en 4GB.

Memoria virtual: un proceso de 32 bits no puede abordar más de 4 GB de memoria virtual sin segmentación o espacios de direcciones no lineales. Dado que los sistemas operativos modernos emplean espacios de direcciones planas no segmentados, está atascado con <= 4 GB de espacio de direcciones de proceso. De hecho, si pudiera direccionar n-bits de espacio de direcciones, diría que tenía un sistema de n, no de 32 bits.

Estas publicaciones que describen la diferencia entre la memoria física y virtual son excelentes, pero no responden la pregunta.

Cuando la memoria virtual está llena, el sistema operativo matará el proceso. Simple como eso.

Agotar la memoria física, por otro lado, es una historia mucho más complicada. La mayoría de los sistemas operativos intentarán “intercambiar” páginas de memoria al disco cuando la memoria física esté llena. * Los sistemas NIX comúnmente tienen una partición de disco separada para usar como espacio de intercambio, mientras que Windows usa un gigantesco archivo binario llamado “archivo de página”. Cuando el sistema operativo intercambia, escribe una o más páginas de memoria en el disco en función de la probabilidad de que se utilicen (este es un gran tema de CS por sí solo: consulte los algoritmos de caché en Wikipedia), y luego proporciona las páginas. eso libera al proceso de solicitud. Si un proceso necesita datos en una página intercambiada y la memoria física aún está agotada, el sistema operativo debe encontrar otra página para intercambiar y poder volver a intercambiar la página deseada.
(Si no hay espacio de intercambio, ya sea porque también está lleno o porque nunca existió, el sistema operativo simplemente mata el proceso).

El problema con el intercambio es que las E / S de disco son extremadamente lentas en comparación con las E / S de memoria, por lo que cualquier proceso de uso intensivo de memoria que exceda la memoria generalmente se ralentizará. En la mayoría de los casos, el tiempo de ejecución esperado de tales procesos explotará, y vale la pena matarlo, reescribirlo para que sea más eficiente en memoria y reiniciarlo de lo que es para permitir que continúe.

En la era moderna de la informática, el intercambio se ve cada vez más como una práctica obsoleta, porque con las expectativas modernas de tiempo de procesamiento de incluso los cálculos más intensivos en CPU y memoria, el intercambio significa la muerte, y el proceso también podría haberse bloqueado.
El usuario final de hoy (es decir, ni un desarrollador ni un almacén de datos) tendría que hacer todo lo posible para explotar la RAM de una computadora moderna, e incluso entonces el costo de actualizar la RAM no es terriblemente costoso.
Y aquellos que se preocupan por cosas como el almacenamiento de datos ya estarán prestando mucha atención a qué datos se escriben en el disco y cuándo, y qué queda en la memoria.

Esto da lugar a algo que he llamado el dilema del usuario moderno de Linux (ya que la configuración de una partición de intercambio es a menudo una parte explícita de las instrucciones de instalación para Linux): demasiada RAM para esperar intercambiar, pero demasiado espacio en el disco para preocuparse espacio perdido para intercambiar. (Definitivamente lo consideraría un “problema del primer mundo”: p)

Hecho de la diversión:
Los fanáticos del editor de texto vi solían decir que un editor rival, EMACS, significaba “Ocho megas e intercambio constante”. Esto se dijo cuando 8 MB se consideraban una cantidad extravagante de memoria para un editor, y su propósito era burlarse de lo innecesariamente intensiva que era la memoria.

[Respuesta movida de ¿Por qué es que usar una memoria de más de 4 GB es inútil en un sistema operativo de 32 bits?]

Comenzaré explicando el concepto de Flip-Flop
En términos muy simples, un Flip Flop es un circuito digital que almacena un estado binario, ya sea 1 o 0.

Cuando conectamos pocos flip-flops, el nuevo circuito digital que obtenemos se llama Registrarse
Entonces, por ejemplo, si conectamos 8 flip flop obtendremos un registro de 8 bits.
Si conectamos 32 flip flops, obtendremos un registro de 32 bits.
El procesador consta de múltiples registros.

Ahora suponga que tiene un registro de 4 bits.
Cada bit puede ser 1 o 0. Por lo tanto, habrá 2 estados en un solo nivel.
Cuatro bits juntos tendrán 2x2x2x2 = [matemática] 2 ^ {4} [/ matemática] estados diferentes
0000,0001,0010,0011,0100,0101,0110,0111
1000,1001,1010,1011,1100,1101,1110,1111

Del mismo modo, 8 bits juntos tendrán 2x2x2x2x2x2x2x2 = [matemática] 2 ^ {8} [/ matemática] estados diferentes
Del mismo modo, 32 bits juntos tendrán [matemáticas] 2 ^ {32} [/ matemáticas] estados diferentes

Puede pensar en la memoria como una colección de muchos fragmentos y cada fragmento almacena un solo byte. Ahora, para diferenciar entre diferentes fragmentos de memoria, les dio etiquetas (o direcciones).
Entonces, si tiene 16 fragmentos, puede abordar:
Primer trozo como 0000
Segundo trozo como 0001
Tercer fragmento como 0010
…(continuar)
Decimosexto trozo como 1111

Un procesador accede a cualquier fragmento específico (byte) utilizando un registro de dirección de memoria.
Por lo tanto, un registro de 4 bits puede acceder a hasta 16 ubicaciones de memoria diferentes, fragmentos o bytes.
Del mismo modo, un registro de 8 bits puede acceder hasta 256 o [matemática] 2 ^ {8} [/ matemática] bytes.
Del mismo modo, un registro de 32 bits puede acceder hasta [math] 2 ^ {32} [/ math] bytes o 4GB como máximo.

[1 KB = 1024 Bytes = [matemática] 2 ^ {10} [/ matemática] Bytes
1 MB = 1024 KB = [matemática] 2 ^ {20} [/ matemática] Bytes
1 GB = 1024 MB = [matemática] 2 ^ {30} [/ matemática] Bytes
4GB = [matemática] 4 * 2 ^ {30} [/ matemática] Bytes = [matemática] 2 ^ {32} [/ matemática] Bytes]
Por lo tanto, un sistema operativo de 32 bits que funciona en 32 bits (como máximo) en cada operación no puede acceder a más de 2 ^ 32 bytes.

Nota: Aquí, cuando decimos memoria, estamos hablando de memoria primaria (RAM).
Como ya sabe, un sistema informático puede tener un almacenamiento en disco duro de un tamaño aún mayor, como 250 GB o 1 TB.
Los datos se cargan en la RAM desde el disco duro. Luego de RAM a caché, y luego de caché a registros de procesador (la arquitectura real es más compleja)

En sistemas operativos de 32 bits y 64 bits
En términos simples, un sistema operativo de 32 bits puede funcionar con 32 bits como máximo en cada operación (incluso si el procesador en el que se ejecuta tiene registros de tamaño de 64 bits). Del mismo modo, un sistema operativo de 64 bits puede funcionar con 64 bits como máximo en cada operación.
Espero que esto ayude

No lo son Las arquitecturas de 32 bits no se limitan a 4 GB de RAM física.

La limitación es de 32 bits (o 4 GB) de espacio de direcciones VIRTUAL en un solo proceso. Es muy posible que un procesador y un sistema operativo de 32 bits admitan más de 4 GB de memoria FÍSICA.

Modo PAE en procesadores x86: (Extensión de dirección física) es el ejemplo más común. Por lo tanto, puede tener más de 4 GB de RAM, simplemente no puede verlo todo al mismo tiempo.

La respuesta de Robert Love es absolutamente precisa en términos de procesadores modernos de 32 bits que ejecutan sistemas operativos modernos, que es presumiblemente lo que el OP preguntó, por lo que no pretendo que esto sea una crítica.

Pero antes de tener procesadores con soporte de hardware para memoria virtual, todavía teníamos técnicas para extender el tamaño de RAM física más allá del espacio de direcciones del procesador. Por ejemplo, cambio de banco.

Entonces, para una respuesta más general, lo pondría en términos de tamaño de memoria física y tamaño de espacio de direcciones.

El tamaño de la memoria física es la cantidad de memoria que tiene. Está determinado por su presupuesto y por los límites físicos del diseño del sistema.

El tamaño del espacio de direcciones es a cuántos bytes puede acceder un programa en ejecución a través de valores de dirección únicos. Esto está determinado por el tamaño lógico de una dirección como se define en el conjunto de instrucciones de la CPU.

El cambio de banco era una forma que permitía a los programas usar direcciones no únicas y, por lo tanto, acceder a más RAM física que el espacio de direcciones permitido. Un programa enviaría una señal de hardware que desconectaba un banco de memoria y conectaba otro. Entonces, si tuviera dos bancos para un rango particular de direcciones, un puntero con un valor dentro de ese rango en realidad podría referirse a la memoria en el banco A o el banco B. Por supuesto, el programa tuvo que hacer un seguimiento muy cuidadoso de qué banco estaba conectado en todo momento.

La memoria virtual, por supuesto, es una forma mucho más elegante de “desconectar” las direcciones de memoria física de los valores de puntero que los programas usan para acceder a ellas. Una de las cosas interesantes sobre la memoria virtual es que se introdujo para permitir que los programas accedan a un espacio de direcciones que era más grande que la memoria física, luego, durante un período de tiempo con procesadores de 32 bits y PAE, los espacios de direcciones virtuales a menudo eran más pequeño que el tamaño de la memoria física, pero con los procesadores de 64 bits ahora volvemos a los espacios de direcciones virtuales que (en la mayoría de los casos) son más grandes que el tamaño de la memoria física.

Si un sistema no admite más de 4 GB de RAM, ¿cómo puede usarlo ? Solo puede usar el soporte que la BIOS / placa base reconoce. Entonces su pregunta está mal formada. Debería ser “¿qué sucederá si instalamos más de 4 GB de RAM en un sistema de 32 bits?” o “¿qué sucederá si declaramos / asignamos más de 4 GB de RAM en un sistema de 32 bits?”

Para el primer caso, si el BIOS puede reconocer más de 4 GB de RAM, puede usarlo todo si el sistema operativo puede.

Para el caso de la memoria asignada dinámica, tal vez no suceda nada o solo se devuelva un error de asignación o algún otro error en otro sistema. Y tenga en cuenta que malloc acepta una entrada size_t, y si size_t es de 32 bits, no puede especificar que se asignen más de 4GB también. Para la memoria estática, tampoco puede declarar más de 4 GB porque un proceso de 32 bits solo puede direccionar 2 GB de RAM (3 GB si el programa es compatible con direcciones grandes). Incluso si el sistema operativo admite más de 4 GB, debe usar explícitamente algún truco complejo para usar más de 4 GB para su proceso, ya que solo proporciona 2 / 3GB de espacio.

Pero hay muchas formas de direccionar más memoria con un tamaño de dirección específico. Por ejemplo, los microcontroladores de 8 bits a menudo usan bancos de memoria para superar el límite de direcciones de 8 bits. X86 de 16 bits utiliza memoria segmentada. Algunos sistemas de 32 bits también utilizan bancos de memoria o memoria segmentada. Pero la mayoría implementa un tipo de dirección más amplia. Eso es PAE en x86 o LPAE en ARM. Todavía necesita soporte del sistema operativo para acceder a la dirección por encima de 4 GB y, por supuesto, el espacio de direcciones para cada proceso sigue siendo de 32 bits.

Debido a que la potencia de dos a treinta segundos equivale a 4 mil millones de bytes, puede direccionar con un registro de direcciones de treinta y dos bits.

El límite de 64 bits es de dos a sesenta y cuatro, lo que genera unos exabytes de cambio de 18 puntos.

Si el MMU del procesador (TLB y cachés) admite direcciones físicas de más de 32 bits, las direcciones físicas de más de 2 ^ 32 se pueden usar para aplicaciones de espacio de usuario. Algunos procesadores, como la serie Freescale e500 / e500mc, proporcionan un bit de espacio de direcciones que se puede utilizar para direccionar más de 4 GB de espacio de direcciones para un proceso creando un nuevo espacio de direcciones (AS = 0 es el espacio de direcciones predeterminado. Cree uno nuevo con AS = 1) y creando un mapeo TLB para algunos ese espacio de direcciones. No hace falta decir que el bit AS se usa en el cálculo de la dirección virtual y también tiene presencia en los TLB.

Como dijo John, puede usar PAE para sobrepasar la marca de 4GB, pero Windows solo permite 4GB oficialmente. En realidad, esto se reduce a un poco más de 3 si incluye todas las direcciones consumidas por los otros periféricos.
Hay parches de kernel no oficiales disponibles que pueden evitar la limitación, pero pueden causar inestabilidad.

En realidad, hay dos límites: uno basado en la arquitectura del procesador y la placa base y otro basado en el sistema operativo. Con el procesador, el conjunto de chips y el sistema operativo correctos, puede direccionar hasta 64G de RAM en un sistema de 32 bits. Sin embargo, las versiones de 32 bits de las versiones para consumidores de Windows estaban limitadas a 4G o menos.

Depende de qué sistema está utilizando Windows que se ejecuta en modo de 32 bits no puede abordar más de 4 Gb – 2 ^ 32 = 4 Gb, por lo que si tuviera 8 Gb en una máquina Windows de 32 bits solo vería la memoria máxima como 4 Gb. (¡64 bits tiene un límite de 16777215 TiB!)

Sin embargo, hay algunas formas de usar esta memoria adicional: dependiendo de cómo esté configurada la máquina, algunas de ellas le permiten usar la memoria adicional como memoria de video, y hay otras soluciones que permiten que las computadoras de 32 bits se dirijan más allá de 4 Gb a través de cosas como PAE

Aunque este es el verdadero inconveniente: en el arranque inicial, las PC solo pueden abordar los primeros 640k de memoria. Utilizan los primeros 640k para poder acceder al resto, razón por la cual cuando inicia por primera vez una computadora dice aproximadamente 640k de memoria base en la pantalla del BIOS (si tiene la pantalla de su BIOS mostrando).

si Windows XP debe instalar una versión XP de 64 bits
en Windows 7 y 8 Versión de 32 bits, busque en google ramfix y ram patch (su propio riesgo)
o msconfig -> pestaña de arranque -> opciones avanzadas -> Haga clic en la casilla de verificación Memoria máxima 2 veces (en este clip Haga clic solo 1)
para reloj msconfig

y lo que pasa es más ram utilizable O no pasa nada

Si tiene un sistema de 32 bits sin modificaciones, que son extensiones, no se detectará la memoria de +4 gb y la CPU no podrá solucionarlo ni siquiera detectarlo. Sin embargo, algunos sistemas tienen extensiones de memoria que permiten que una CPU de 32 bits direccione más memoria

En pocas palabras, simplemente no hay un rango suficiente de números en un sistema operativo de 32 bits para poder indexar más de 4 gb de memoria, 64 bits no tiene ese límite, bueno, no hay uno que importe de todos modos, es demasiado grande como para importar

Mira el video en mi canal de YouTube