Los sistemas modernos de memoria de computadora son bastante complicados. Sin embargo, a los fines de su pregunta, es importante saber acerca de tres cosas:
- Memoria física
- Memoria virtual
- Almacén de respaldo
La memoria física es probablemente la más fácil de entender. Hay chips físicos reales que implementan la memoria física. Conceptualmente, la memoria física es bastante simple. La memoria se divide en un montón de pequeñas piezas, cada una de las cuales puede contener una pequeña cantidad de datos, generalmente 8 bits, es decir, un byte. Cada ubicación tiene una dirección . La dirección es simplemente un número. Finalmente, tiene una entrada para decirle si leer o escribir datos. Para que la memoria funcione, le das una dirección y luego un comando de lectura o escritura. Si le da un comando de lectura, se emiten los datos en esa dirección; si le da un comando de escritura, los datos que le da se escriben en la memoria en esa dirección. Cuando dice que su computadora tiene 8 gigabytes de RAM, esta es la memoria de la que está hablando.
En los primeros sistemas informáticos, esto era casi todo con lo que tenía que trabajar. Si deseaba ejecutar varios programas u otro software, como controladores de hardware, los cargaba en diferentes partes de la memoria y esperaba que no se escribieran en la memoria del otro. No hace falta decir que esto podría ser muy poco confiable.
- ¿Vale la pena actualizar la RAM de mi computadora portátil de 8 a 16 GB?
- ¿Se puede agregar memoria RAM a una computadora usando una memoria USB?
- ¿Cuál debería ser la velocidad de la CPU y el tamaño de la RAM? ¿De qué factores depende la velocidad de la CPU? ¿De qué factores depende la velocidad de RAM?
- ¿Es posible para mí tener 2 GB de tarjeta gráfica y 1 GB de RAM?
- ¿Cuánto dura la memoria RAM promedio?
Ingrese memoria virtual . Hay un viejo dicho que dice: “Cualquier problema en la programación de computadoras (ciencia) puede resolverse con otro nivel de indirección”. La memoria virtual es exactamente eso. El subsistema de memoria virtual de una computadora se ubica (conceptualmente) entre la CPU y la memoria física. Consiste en algunos bits de hardware y algún software en el sistema operativo para administrar el hardware. El propósito principal de esta combinación de hardware / software es mapear las direcciones (virtuales) que el programa usa con las direcciones (físicas) utilizadas por la memoria física. En este esquema, cada proceso que se ejecuta en el sistema tiene un espacio de direcciones virtual con direcciones que comienzan en un número bajo y que suben al rango de gigabytes. Cada proceso ahora tiene su propia tabla de asignación única que controla cómo sus direcciones de memoria virtual se asignan a la memoria física. Para aclarar, la memoria no se traduce byte a byte. La memoria se divide en páginas , generalmente de 4 kilobytes u 8 kilobytes de tamaño y la asignación se realiza página por página. (Otra forma de expresar esto es que el espacio de memoria se divide en páginas).
Usando este mapeo, la memoria de diferentes procesos se mantiene separada y los programas pueden ejecutarse sin interferir con la memoria del otro.
¡Pero espera! ¡Hay más! Ahora que el sistema operativo controla la asignación de memoria, puede hacer una cosa más. Aquí es donde entra en juego la tienda de respaldo . Suponga que el sistema está ejecutando un montón de programas y necesita ejecutar uno más, pero se está utilizando toda la memoria física. En esta situación, el sistema operativo puede tomar los datos en una o más de las páginas de memoria física y escribirlos en un almacén de respaldo, generalmente un disco duro o hoy en día un SSD. El sistema ahora puede cargar el nuevo proceso y darle parte de la memoria física recién liberada para usar. Si el proceso anterior necesita usar esa memoria nuevamente, el sistema puede cambiar alguna otra memoria del proceso al almacén de respaldo, volver a cargar los datos del proceso anterior desde el almacén de respaldo, girar la tabla de mapeo y el proceso anterior ahora está listo para funcionar. El almacén de respaldo suele ser mucho, mucho más grande que la memoria física. Ocho gigabytes de RAM es (actualmente) una cantidad decente de RAM pero un disco duro de un terabyte, aproximadamente 100 veces el almacenamiento es bastante promedio y económico.
Recuerde que tanto las instrucciones del programa como los datos del programa se almacenan en la memoria para que el sistema de memoria virtual trabaje para mapear tanto las instrucciones del programa como los datos del programa.
Ese es el sistema básico. La memoria virtual se asigna a la memoria física y, cuando es necesario, los datos de la memoria física se intercambian dentro y fuera del almacén de respaldo.
PRIMA:
Todo esto parece muy simple. ¿Cuál es el truco? Hay dos principales:
- Es mucho más complicado en la vida real que lo que se acaba de describir.
- La tienda de respaldo es de mil a cientos de miles o incluso millones de veces más lenta que la RAM
¿Entonces, cómo funciona?
Primero, los programadores del sistema operativo suelen ser bastante inteligentes y muy orientados a los detalles. Tal vez no sea tan inteligente como los compiladores de C ++, pero a la altura. Realizan un seguimiento de todos estos detalles y generalmente se centran en este tipo de programación.
La segunda parte es un poco más complicada. Depende de una característica de ejecutar programas llamada localidad . La localidad a veces se divide en dos conceptos, localidad de datos y localidad de ejecución (a veces llamada localidad de tiempo). Básicamente, la localidad de los datos significa que si el programa está trabajando en un poco de datos, probablemente también estará trabajando en los datos a su alrededor. En otras palabras, el programa no solo accede de manera involuntaria a todos sus datos todo el tiempo. Tiende a trabajar en fragmentos de datos en algunas ubicaciones y luego puede pasar a otras ubicaciones. La localidad de ejecución significa que si el programa está ejecutando un poco de código, probablemente también estará ejecutando código a su alrededor. En otras palabras, el programa no solo ejecuta todo su código todo el tiempo. Probablemente esté ejecutando el código en cuatro, cinco o seis ubicaciones en cualquier etapa en particular. (La descripción de la localidad del tiempo proviene de la idea de que si un programa está haciendo algo ahora, probablemente seguirá haciéndolo un poco más).
El resultado del comportamiento de la localidad es que un programa solo accederá a una pequeña parte de toda su memoria disponible en cualquier momento. En otras palabras, solo usa unos pocos bloques de su espacio de direcciones en cualquier momento. Esto a su vez significa que el acceso más lento a la tienda de respaldo no ocurre con mucha frecuencia, al menos no en un sistema que funcione bien. Controlar cómo se realiza la paginación hacia y desde el disco es otro de los “detalles” que el programador del sistema operativo debe gestionar. El dicho es: “Si haces bien la memoria virtual, obtienes una memoria que es tan grande como tu disco y tan rápida como tu RAM. Si lo haces mal, obtienes una memoria que es tan grande como tu RAM y tan rápida como tu disco “.