¿Cómo usan las aplicaciones la RAM?

Las computadoras de hoy virtualizan su espacio de memoria, lo que significa que cada página (típicamente) de 4K de memoria física puede reasignarse a una dirección “virtual” diferente, utilizando tablas de búsqueda almacenadas en otra parte de la memoria y controladas por el núcleo del sistema operativo. Entre otras cosas, esto permite que el sistema operativo mueva las páginas de memoria no utilizadas al archivo de intercambio en el disco duro del sistema (o SSD) para liberar espacio para otros programas que puedan necesitar espacio. Si un programa intenta acceder a la página cuando se intercambia, esto desencadena un “error de página” que permite que el sistema operativo lo obtenga del HD y luego reanude el funcionamiento normal del programa.

En resumen, las direcciones que está viendo en el depurador no están relacionadas con las direcciones físicas de la RAM real.

En realidad no usan RAM directamente. Cada aplicación puede acceder a hasta 4 GB de RAM virtual en una computadora de 32 bits. Creo que 16 EB (1 EB = 1,048,576GB) es el número de 64 bits.

La RAM virtual se divide en páginas de 4096 bytes, y en algún lugar de la RAM real hay una tabla que le dice a la CPU cómo asignarla a la memoria real. Cada página puede tener una dirección (que no tiene que ser la misma que su dirección virtual) y una bandera que indique si es válida o no.

El sistema operativo inicialmente solo le dará al programa unos pocos megabytes para trabajar. Cuando el programa necesita más, le pregunta al sistema operativo, que asigna un número apropiado de páginas y le da la dirección al programa.

Ahora, a su pregunta real: ¿Cómo encaja todo en la RAM?

No lo hace. El sistema operativo mueve las páginas que no cree que se utilizarán en el disco duro y las marca como no válidas. Cuando el programa accede a esa página, la CPU le dice al sistema operativo: “Oye, algo está mal aquí”.

El sistema operativo mira la dirección a la que el programa intentó acceder. Si se le ha dado previamente al programa, el sistema operativo lo carga desde el disco duro y vuelve a asignar la página. De lo contrario (problema de seguridad), el programa se bloquea.

PD: esta es la razón por la que se recomienda mantener el 10% o 10 GB de espacio libre en el disco duro.

¿Entonces cada proceso usa 4 GB? ¿Cómo es posible cuando mi RAM es de solo 8 GB y SSD es de 268 GB? Me confunde.

Las CPU y sistemas operativos modernos usan memoria virtual, lo que permite que cada proceso se comporte como si tuviera acceso a 2-4GB (en modo de 32 bits) o muchos, muchos TB (en modo de 64 bits) de RAM. Cada proceso solo ve su propio conjunto de direcciones virtuales, que el controlador de memoria en la CPU traduce sobre la marcha a direcciones físicas.

Cuando un proceso solicita memoria del sistema operativo, el sistema operativo reservará un bloque de RAM (física) y la asignará al espacio de direcciones virtuales de ese proceso. Si un proceso (o conjunto de procesos) sigue solicitando RAM hasta que su RAM física se agote, el sistema operativo comenzará a “intercambiar” bloques de RAM física en su disco duro para hacer espacio. Esto es extremadamente lento, pero permite que sus programas continúen funcionando si necesitan más RAM de la que ha instalado físicamente.

Si su sistema operativo se queda sin RAM + espacio de intercambio, las asignaciones de memoria adicionales por parte de sus procesos fallarán hasta que se libere algo de memoria. Dependiendo de cómo se escriba un programa, puede bloquearse cuando esto sucede (lo que permitirá que el sistema operativo libere su memoria), o puede tener un manejo de errores para esta situación. Por ejemplo, puede liberar parte de la memoria que asignó anteriormente.

Puede probar esto fácilmente con un programa que simplemente se encuentra en un bucle que asigna trozos de memoria; eventualmente no se asignará o tomará algún tipo de excepción. (Es posible que también necesite escribir en los bloques de memoria que asigna, a veces el sistema operativo engaña y no * realmente * asignará RAM física hasta que realmente escriba en una de las páginas que asignó a su proceso).

Los procesos de pestaña de Administrador de tareas, ̶ grupos determinados procesos relacionados ̶t̶o̶g̶e̶t̶h̶e̶r̶.̶ por ejemplo aquellos cromo ̶p̶r̶o̶c̶e̶s̶s̶e̶s̶.̶ al menos desde W8 lo hace, ̶ previamente ̶ (es decir W7 y antes) ̶ mostró ellos como ̶I̶t̶ ̶d̶o̶e̶s̶ ̶i̶n̶ ̶t̶h̶e̶ ̶D̶e̶t̶a̶i̶l̶s̶ ̶t̶a̶b̶.̶

Ves esto, ̶ Debido a ̶C̶h̶r̶o̶m̶e̶.̶ Se inicia un nuevo proceso con su propia RAM para cada ficha HAS ̶o̶p̶e̶n̶e̶d̶.̶ otros navegadores comparten un proceso entre pestañas, ̶ por ejemplo Firefox tiene un solo proceso ̶ (con múltiples ̶T̶h̶r̶e̶a̶d̶s̶) ̶ ̶n̶o̶ ̶m̶a̶t̶t̶e̶r̶ ̶h̶o̶w̶ ̶m̶a̶n̶y̶ ̶t̶a̶b̶s̶.̶

Viendo que la pregunta cambió después de haber respondido. Estoy revisando la respuesta.

Efectivamente, lo que está viendo allí es el espacio de direcciones de “memoria virtual” que el sistema operativo le da a cualquier proceso. No todo se usa realmente, son solo las posibles ubicaciones que el proceso ve como RAM disponible. Sin embargo, no son ubicaciones físicas, es una memoria “virtual” asignada al proceso, lo que le da al sistema operativo la capacidad de “decidir” dónde se ubica físicamente en el intercambio de RAM / disco. También permite que el sistema operativo “proteja” un proceso al acceder inadvertidamente o de otra manera a la memoria de otro proceso.

Algunas de las respuestas posteriores entran en más detalles sobre esto.

Chrome es un poco extraño en la forma en que usa RAM. Chrome separa y ejecuta cada pestaña, extensión y una variedad de otras funciones como programas separados. Esto se hace para aumentar la estabilidad y aprovechar múltiples núcleos donde están disponibles. Estas son las 8 instancias de Chrome.exe que estás viendo.