¿Puede una máquina con sistema operativo de 32 bits usar todos los archivos de página de 8GB RAM + 20GB?

98

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?

athos
fuente
2
Como nota al margen, si tiene más de 4 GB de RAM y solo un sistema operativo de 32 bits, puede crear un disco RAM. Este es un disco duro en su RAM, y puede usar la RAM no utilizada / sin dirección para colocarlo.
Simon Verbeke
10
No puedes Todavía debe crearse un ramdisk a través del sistema operativo; si el sistema operativo no puede usar la memoria, tampoco puede crear un ramdisk allí. (A menos que su BIOS pueda crear un disco RAM, lo cual es raro).
AVee
1
La respuesta corta es sí". Aunque generalmente un proceso tiene un espacio de direcciones de 32 bits para usar, el sistema operativo en sí puede usar más que eso (ya sea por cambio de banco como lo hicimos en los años 80 o por trucos de extensión de dirección de la escuela como PAE de Intel. Además, recuerde que ejecuta más de un programa a la vez, que puede estar compuesto por más de un proceso (Chrome pone pestañas en diferentes procesos). Y el sistema operativo en sí utilizará la memoria para cosas como el almacenamiento en caché de datos de discos fijos locales para que ya tenga un acceso más rápido a los datos utilizado
rbanffy

Respuestas:

145

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 = 4 GB de espacio de memoria

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.

¿Esto significa cualquier sistema operativo de 32 bits, ya sea Windows o Unix, si la máquina tiene un archivo de página RAM + en el disco duro de más de 4 GB, por ejemplo 8 GB de RAM y un archivo de página de 20 GB, nunca habrá "memoria agotada"?

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.

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?

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?

Eric Lippert
fuente
26
Encuentro esta respuesta para no abordar la pregunta en cuestión y casi es engañosa en algunos puntos.
Rig
48
@Rig: Impresionante, me alegra escuchar tu crítica constructiva. Ahora es tu oportunidad de escribir una mejor respuesta y mostrarnos el tipo de respuesta que crees que es menos engañosa y más pertinente.
Eric Lippert
44
@BlueRaja: Sospecho que estás confundiendo la memoria física con la memoria . La memoria física es solo una optimización que permite un acceso más rápido a la memoria. Así como los cachés de procesador son una optimización que permite un acceso más rápido a la memoria. La memoria es para todos los efectos espacio reservado en el archivo de página. Si una página determinada en el archivo de página está (1) asignada a una dirección de memoria virtual o (2) copiada del disco a la memoria física es irrelevante para la cuestión de si está asignada o no.
Eric Lippert
44
@BlueRaja: el artículo de Raymond Chen sobre el tema podría ayudar. Muestra cómo asignar 4 GB del archivo de la página; esa es la memoria que posee el proceso . El proceso no puede abordar todo de una vez, por supuesto, pero puede abordar cualquier página asignando una página a una página VM no utilizada, usándola durante un tiempo y luego descartándola. blogs.msdn.com/b/oldnewthing/archive/2004/08/10/211890.aspx
Eric Lippert
3
Esta respuesta habría sido más clara, Eric, si hubieras declarado explícitamente que Windows (y otros sistemas operativos) te permiten "reservar" memoria sin tenerla realmente en tu espacio de direcciones virtuales, y luego responder la pregunta obvia "¿cómo lo haces? ¿abordarlo?". Creo que la respuesta a eso es "hay algún tipo de ID de página que utilizas para referirte a él para ubicarlo en el espacio de dirección virtual, y luego puedes dirigirlo allí", pero no sé, y tu respuesta no dice :)
Timwi
67

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.

Dave Webb
fuente
¿significa que si no es compatible, entonces lo que dije arriba es correcto?
10
Windows XP admite PAE (a partir de SP2, creo), pero ignora la RAM más allá de 4 GB, incluso cuando la máquina admite PAE; ver aquí . Se utiliza para la Prevención de ejecución de datos basada en hardware: el bit NX / XD está disponible solo en una entrada de tabla de página PAE, no en una entrada de tabla de página "normal".
Wyzard
El conjunto de chips también puede ser un factor limitante de la cantidad de memoria que se puede admitir / usar, independientemente del sistema operativo o pirateo que elija.
Moab
55
Agregaría que la razón por la cual las versiones para consumidores de ventanas de 32 bits no admiten> 4 GB de RAM es que se encontró que un número significativo de unidades de hardware no funciona correctamente con tanta memoria; y dado que en ese momento> 4 GB de RAM eran extremadamente raros fuera de los servidores / estaciones de trabajo de ultra alta gama, la mayoría de las compañías que mantenían los controladores no estaban interesadas en gastar dinero para actualizar los controladores que solo serían utilizados por el 0.1% de su base de clientes.
Dan Neely
66
@DanNeely el sistema operativo hace tener soporte para la memoria, está limitado debido a problemas de licencia . Si bien estoy de acuerdo en que este es un hack de terceros, es solo para las variantes de Windows de los consumidores. Las distribuciones de Windows basadas en servidor, a partir de Windows 2000 , han tenido soporte para más de 4 GB de memoria (ref. El primer enlace).
Avance el
15

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.

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?

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

Gran descubrimiento o desarrollo, progreso, ruptura, penetracion
fuente
De los 4 GB de espacio de direcciones que obtiene cada proceso, solo 2 GB están realmente disponibles para que el programa los use; los otros 2 GB están reservados para uso del núcleo. La opción de arranque / 3GB puede permitir que algunos programas utilicen más RAM.
Wyzard
1
@Breakthrough: "Aumentar el tamaño del archivo de página nunca aumentará el rendimiento" No creo que esto sea cierto. Por ejemplo, si hay más intercambio, el sistema operativo puede intercambiar de manera más agresiva los datos del programa no utilizados y usar la RAM libre para, por ejemplo, el almacenamiento en caché del disco. En algunas configuraciones, esto puede producir un mejor rendimiento. Hay una buena respuesta en ServerFault sobre por qué es importante un archivo de paginación, que toca estos temas: serverfault.com/questions/23621/…
sleske
2
Tenga cuidado con las declaraciones generales como "Aumentar el tamaño del archivo de página nunca aumentará el rendimiento" , ¡es perfectamente posible que un archivo de página sea demasiado pequeño para generar más agitación en el disco que tener un archivo de página más grande! Ver respuestas y comentarios en esta pregunta .
Mark Booth
1
@sleske Buen punto, lo actualicé para que sea más de un tipo "generalmente no". Si bien estoy de acuerdo en que puede hacer una gran diferencia en un servidor, para la mayoría de las personas, el punto que estaba tratando de transmitir es que sería mejor obtener más RAM (ya que cuando estás paginación, el rendimiento es bastante lento como puede llegar)
Avance el
-1

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.

Dmitry Grigoryev
fuente
Esto es incorrecto, como se señaló en otras respuestas anteriores anteriores.
ChrisInEdmonton
¿Podría señalar un hecho en particular que me equivoqué?
Dmitry Grigoryev
1
Un solo proceso puede usar más de 4 GB. Específicamente, las respuestas anteriores señalan que "Un proceso puede tener más memoria que espacio de direcciones".
ChrisInEdmonton
2
Vea, por ejemplo, blog.superuser.com/2011/04/23/… Ahora, ciertamente, no puede usar más de 4 GB simultáneamente, pero un solo proceso puede desasignar y reasignar la memoria, por lo que puede usar más de 4 GB en un solo proceso, solo hay un poco de contabilidad. Esa publicación de blog es bastante específica de Windows. He ejecutado servidores de bases de datos con> 4 GB de memoria asignada, en instalaciones de Linux de 32 bits. En estos días, por supuesto, simplemente ejecutaste Linux de 64 bits.
ChrisInEdmonton
1
Ok, mis disculpas. No pensé en la posibilidad de tener mmapmemoria extra.
Dmitry Grigoryev