Lo que entiendo sobre el sistema operativo de 32 bits es que la dirección se expresa en 32 bits, por lo que a lo sumo el sistema operativo podría usar 2 32 = 4G de espacio de memoria.
¿Significa esto que si una máquina con un sistema operativo de 32 bits (ya sea Windows o Unix) tiene más de 4 GB de RAM + archivo de página en el disco duro, por ejemplo 8 GB de RAM y 20 GB de archivo de página, su memoria nunca se "agotará" "?
Por "agotado" quiero decir que aumentar la RAM o el archivo de página no ayudará al rendimiento; por supuesto, siempre es posible que una aplicación siga solicitando memoria del sistema operativo pero falla.
Del mismo modo, si esta máquina con sistema operativo de 32 bits tiene 2 GB de RAM y 2 GB de archivo de página, aumentar el tamaño del archivo de página no ayudará al rendimiento. ¿Es esto cierto?
Respuestas:
Lo máximo que el proceso puede abordar es 4 GB. Está potencialmente confundiendo la memoria con el espacio de direcciones . Un proceso puede tener más memoria que espacio de direcciones. Eso es perfectamente legal y bastante común en el procesamiento de video y otras aplicaciones de uso intensivo de memoria. A un proceso se le pueden asignar docenas de GB de memoria e intercambiarlo dentro y fuera del espacio de direcciones a voluntad. Solo 2 GB pueden ingresar al espacio de direcciones de usuario a la vez.
Si tienes un garaje para cuatro autos en tu casa, aún puedes tener cincuenta autos. Simplemente no puede mantenerlos a todos en su garaje. Debe tener almacenamiento auxiliar en otro lugar para almacenar al menos 46 de ellos; Depende de usted qué automóviles guarda en su garaje y cuáles guarda en el estacionamiento de la calle.
Absolutamente no significa eso. ¡Un solo proceso podría usar más memoria que eso! Nuevamente, la cantidad de memoria que usa un proceso no tiene relación alguna con la cantidad de espacio de direcciones virtuales que usa un proceso. Al igual que la cantidad de autos que tiene en su garaje no tiene relación alguna con la cantidad de autos que posee.
Además, dos procesos pueden compartir páginas de memoria no privadas . Si veinte procesos cargan la misma DLL, todos los procesos comparten las páginas de memoria para ese código. No comparten espacio de direcciones de memoria virtual , comparten memoria .
Mi punto, en caso de que no esté claro, es que debes dejar de pensar en la memoria y el espacio de direcciones como la misma cosa, porque no son lo mismo en absoluto.
Tienes cincuenta autos y un garaje para cuatro autos, y un estacionamiento para 100 autos en la calle. Aumenta el tamaño del estacionamiento a 200 lugares. ¿Alguno de sus autos se vuelve más rápido porque ahora tiene 150 espacios de estacionamiento adicionales en lugar de 50 espacios de estacionamiento adicionales?
fuente
Es cierto que la CPU solo puede direccionar un máximo de 4 Gb de RAM. Sin embargo, las CPU actuales usan una MMU ( unidad de administración de memoria ) para traducir direcciones de memoria específicas del proceso en direcciones de memoria física.
Esta MMU se usa para todo tipo de trucos diferentes, desde el aislamiento de la memoria (el proceso A no puede manipular la memoria del proceso B) hasta el intercambio de memoria (el proceso A puede acceder a la misma región de memoria física que el proceso B y puede intercambiar datos de esta manera).
Aunque las CPU de 32 bits solo admiten 4 Gb de memoria por proceso, puede direccionar hasta 64 Gb de RAM cuando se usa la Extensión de dirección física . Esto permite que el proceso A use los primeros 4 Gb de memoria, mientras que el proceso B usa los siguientes 4 Gb. En total, se utilizan más de 4 Gb de memoria física, pero la cantidad total de memoria que utiliza un solo proceso todavía tiene un límite de 4 Gb .
PAE es compatible con Linux desde la versión del kernel 2.3.23 y en algunos tipos de Windows Server de 32 bits, pero no en Windows XP, Vista o 7 de 32 bits.
Si su CPU no admite PAE, estará limitado a 4 GB de memoria física (o menos, según otros factores).
Tenga en cuenta que su sistema operativo aún puede expulsar partes de la memoria física al disco (archivo de página) independientemente de la CPU que admita PAE. Esto asegura que puede iniciar múltiples procesos que usan más de 4 Gb combinados. El único impacto que tiene PAE es si puede mantener los 4 Gb del proceso B en la memoria física mientras ejecuta el proceso A.
fuente
Hablando específicamente sobre las variantes de Windows de 32 bits, han tenido soporte para más de 4 GB de RAM desde las variantes de Windows 2003 (y también puede obtener un truco del kernel para Windows 7 para permitirle usar toda su RAM en 32 bits). Sin embargo, esto tiene un costo, como lo describió en la primera parte de su pregunta.
En un sistema operativo de 32 bits, el tamaño de un puntero (dirección de memoria) es el mismo que la longitud de palabra de la CPU, 32 bits, lo que permite (como mencionó) un espacio de memoria de 2 ^ 32 = 4 GB. Windows también adopta un enfoque de "memoria virtual" para las aplicaciones, por lo que cada aplicación tiene su propio espacio de memoria.
Dado que cada puntero tiene solo 32 bits de ancho, los punteros de cada aplicación solo pueden direccionar hasta 4 GB de memoria, aunque el sistema puede soportar más de 4 GB de RAM. Hasta donde yo sé, esta es la única advertencia para usar más de 4 GB de RAM en un sistema operativo de 32 bits. En total, puede tener muchas aplicaciones que usan más de 4 GB de RAM combinados, pero cualquier proceso en particular solo puede asignar / acceder hasta 4 GB.
Volviendo a su pregunta, supongamos que tiene un programa que utiliza 2 GB de RAM. Si tiene 10 instancias de este programa, son 20 GB. Se usarán todos los 8 GB de RAM, así como otros 12 GB del archivo de paginación. Entonces, sí, en sistemas operativos de 32 bits, es más que posible usar esta memoria.
Aumentar el tamaño del archivo de paginación generalmente no aumentará el rendimiento (a menos que la RAM y el archivo de paginación estén configurados en el mínimo absoluto, o en un nivel tan bajo que su computadora se agite constantemente). Sin embargo, evitará que su computadora se quede sin memoria (virtual). Cada vez que se necesita purgar algo en el archivo de paginación, ya está recibiendo un gran impacto en el rendimiento (ya que el disco duro es mucho más lento que su RAM).
fuente
Cuando se dice que un procesador es de 32 bits, significa que puede operar con números de 32 bits utilizando una sola instrucción. Esto tiene poco que ver con el ancho de su bus de direcciones, que en la arquitectura Intel es de 36 bits desde el lanzamiento de Pentium Pro en 1995.
La famosa limitación de 4 GB proviene del hecho de que la mayoría del software de PC utiliza el modelo de memoria plana donde cada byte de memoria puede ser abordado por un puntero. Dado que un puntero debe caber en un registro para ser utilizado, y los registros tienen un ancho de 32 bits, está limitado a 4 GB.
fuente
mmap
memoria extra.