Tanto velocidad como funcionalidad.
La historia de la memoria virtual
Todos los sistemas operativos modernos como Windows, Linux y MacOS usan memoria virtual . La memoria virtual es una forma ordenada y asistida por hardware de mentirle a su computadora sobre cuánta memoria hay. Su CPU tiene una Unidad de administración de memoria (MMU), que asigna la memoria utilizada por cada programa en la memoria física real. Esto ofrece dos ventajas instantáneas: cada programa comienza en la misma ubicación en la memoria, desde el punto de vista de ese programa, y todos los programas están aislados unos de otros. El programa A no tendrá acceso a la memoria del programa B.
- ¿Cómo funciona DRAM?
- ¿Cuál es la computadora portátil más barata que viene con 16 GB de RAM?
- Cómo verificar si la RAM de mi computadora portátil ha sido reemplazada
- ¿Son prioritarias la velocidad del procesador (GHZ), el tipo de procesador (como i5) o la amplitud de RAM al comprar computadoras?
- ¿Cuánta RAM libre tiene Xiaomi Redmi Note 3 en promedio?
Pero supongamos que tiene una computadora de 8GB y que tanto el programa A como el programa B asignan un búfer de memoria de 4GB. Eso es demasiado, por supuesto, pero también es el caso que los diseñadores de sistemas operativos saben que, a veces, los programadores piden mucho más de lo que nunca necesitarán. Por lo tanto, cada uno de esos bloques de 4 GB se asignará en la memoria virtual, pero no necesariamente se asignará realmente. Cada programa (cada proceso) tiene su propia asignación de memoria, dividida en pequeñas “páginas” de memoria. La tabla MMU se puede actualizar para estas asignaciones, pero algunas o todas esas páginas están marcadas como no asignadas.
Entonces, a medida que se ejecutan los programas, la memoria que no está en la memoria marcará una trampa del procesador cuando un procesador intente acceder a ella. Esa trampa salta al administrador de memoria del sistema operativo. Si todavía hay memoria disponible, parte de eso se asignará en la RAM física y se asignará a la página que quedó atrapada, y por razones de eficiencia, probablemente algunas más. Un beneficio inmediato de esto es que el programa, gracias a la administración de memoria, puede obtener un bloque contiguo de memoria, hasta los 4 GB solicitados en este caso, incluso si no existe un bloque contiguo en la memoria física real.
Pero, ¿qué sucede si no queda memoria? Una opción sería, por supuesto, marcarlo como un error de falta de memoria y finalizar el programa. Pero hace mucho tiempo, los diseñadores de sistemas operativos se dieron cuenta de que muchos programas cargan código que solo se usa una vez o rara vez. Los usuarios pueden cargar programas que pueden estar inactivos, consumiendo recursos por poco valor. Entonces, las tablas de administración de memoria en el sistema también rastrean qué páginas MMU se han utilizado en absoluto, cuáles se han utilizado recientemente, etc. Y esto permite que el sistema operativo descargue algo de memoria no utilizada, para satisfacer esta necesidad de más RAM para el programa A.
Ahora, si las páginas de memoria que se reclaman contienen código ejecutable, ese es el código que se cargó desde la imagen en el disco del programa. Esa página simplemente se puede marcar como no en memoria, y esa RAM se vuelve a reclamar. Sin embargo, si la memoria contiene datos, eso debe colocarse en algún lugar. Que en algún lugar es casi siempre un disco en alguna parte. Los sistemas Windows tienen un “archivo de intercambio”, mientras que el sistema Linux generalmente tiene una “partición de intercambio”. De cualquier manera, hay un trozo de disco en alguna parte, ya sea que use HDD o SSD, que está ahí para virtualizar su RAM.
El golpe de rendimiento de VM
Por lo tanto, hay una pequeña sobrecarga en la gestión básica de la memoria, o eso parece. Después de todo, cada vez que su programa cae en una trampa en el administrador de memoria, es una parte de tiempo consumida que habría sido una sola instrucción. Entonces, en cierto modo, sí, está haciendo las cosas más lentas.
Pero la verdadera desaceleración va más al disco que a la RAM. No importa si tiene una vieja unidad IDE paralela o la última SSD M.2 en cuatro canales PCIe, su unidad es mucho, mucho más lenta que su DRAM. Y así, la primera victoria de tener más memoria es evitar fallas de página, estas trampas para el administrador de memoria que deben intercambiarse en el disco.
El rendimiento ganado de VM
Considere también que la memoria virtual no apareció mágicamente un día en un sistema operativo moderno. Los diseñadores de sistemas operativos, los programadores de aplicaciones, etc. han estado viviendo con memoria virtual durante más de cincuenta años. Hay enormes beneficios de rendimiento con la memoria virtual.
Una es simplemente exprimir esa aplicación que de otro modo no encajaría. En la década de 1990, estaba trabajando en una empresa que hizo una aplicación de presentación multimedia. Esta aplicación se ejecutó en MS-DOS, pero mezclar muchas fotos y videos, podría ser un desafío. MS-DOS, por supuesto, no tenía memoria virtual. Pero en esos días, si ejecutabas un programa MS-DOS en el OS / 2 de IBM, ¡usaba el administrador de memoria OS / 2 y listo! Memoria virtual con paginación. Por lo tanto, las presentaciones que no se ejecutarían en MS-DOS se ejecutarían en OS / 2 en la misma plataforma informática limitada en esos días.
Se utilizan algunas otras características, ya sea paginación o no. Como el administrador de memoria sabe qué memoria se asignó, puede reclamarlo todo sin la necesidad de que las aplicaciones dediquen esfuerzos de codificación a reclamarlo. Esa no es una excusa para una programación descuidada, pero va junto con ese factor de protección: los recursos de un programa inactivo se pueden encontrar y devolver al sistema. Otros aspectos del diseño del programa evolucionaron para aprovechar también los sistemas de memoria virtual.
Y los propios sistemas operativos evolucionaron. Dado que un sistema gestionado por memoria puede adaptarse a la RAM disponible, los sistemas operativos modernos no simplemente dejan la RAM no utilizada, sino que la asignan cuando no se usa de otra manera para acelerar el sistema. Se pueden asignar buffers de memoria más grandes, fragmentos de código que podrían necesitarse más adelante, etc. sin temor a asfixiar los programas de usuario.
Esto no es ilimitado, por supuesto. Tengo un sistema aquí con DRAM de 64 GB, un navegador, un programa CAD y algunas utilidades, y estoy usando 21.8 GB. Esto funcionaría fácilmente en un sistema de 16 GB, funcionaría lo suficientemente bien en un sistema de 8 GB. Pero las optimizaciones que está haciendo el sistema operativo para acelerar las cosas se perderían, por lo que tendría un sistema más lento. Es posible que en el caso de 8GB vea suficiente paginación de memoria que notablemente disminuya aún más.
Más RAM, más capacidad … al margen
Naturalmente, al hablar de memoria grande, estamos hablando de sistemas de 64 bits. La “regla de oro” común para la memoria es de al menos 2 GB por núcleo de CPU, por lo que hoy, 8 GB en un sistema de 4 núcleos, 16 GB en un sistema de 6 núcleos como el mío (12 GB no es una opción). Eso se basa en el viejo límite de 32 bits en la mayoría de los sistemas operativos de 2 a 3 GB por proceso de usuario y en alguna suposición de que no está ejecutando demasiados programas diferentes a la vez que realmente consumen tiempo de CPU (los que están inactivos, por supuesto, puede arrancarse sin memoria sin mucha desaceleración). Pero eso es solo una pauta mínima.
Y algunas cosas simplemente no funcionan en fragmentos de memoria más pequeños, pero dado el tamaño de la RAM en las computadoras promedio en estos días, la cantidad de estas aplicaciones se reduce regularmente. Antes de mi última actualización de PC, en 2013, tenía una PC con 16 GB de RAM, y me estaba frenando. Una de las cosas que hago son grandes composiciones fotográficas, y el programa principal que utilizo para esto tiene mucha memoria. Estoy uniendo docenas de imágenes de 16Mpixel o 20Mpixel, y estaba golpeando una pared, quedando sin memoria incluso con un archivo de página bastante grande.
Así que construí mi nueva PC con 64 GB de DRAM, lo máximo que podía manejar la placa principal, y procedí a ejecutar algunos de esos compuestos fotográficos … e inmediatamente se quedó sin memoria. Así que eso estaba en mí: intenté por dos al mismo tiempo. Yendo uno a la vez, estoy bastante bien en estos días.