Memoria más grande de lo que hay
Dijimos que muchos procesos corren a la vez (lección 2). Cada uno de esos programas necesita memoria, un sitio para recordar. Pero la memoria real (RAM) viene en una cantidad fija y limitada. Si todos toman sitios reales directamente, se acaba y chocan. Así que el sistema operativo da a cada uno una 'memoria de mentira, más grande'.
Todos quieren memoria
Los programas que corren a la vez necesitan cada uno un sitio para recordar.
Pero la memoria real es un espacio pequeño y limitado.
Si todos intentan tener sitios reales directamente,
los sitios escasean rápido y sus áreas chocan.
Se vuelve una pelea por la memoria.
Añade más programas. La barra de memoria real se llena y desborda enseguida.
La memoria real sola no puede con todos.
Pero no podemos decirle a un programa 'cede tu memoria'.
Cada uno necesita usar de sobra.
Aquí el sistema operativo hace un truco ingenioso.
Dar a cada uno su propia memoria amplia
El sistema operativo da a cada programa una memoria de mentira.
Amplia, empezando limpia desde la casilla 0, como si la usara a solas.
La 'casilla 0' de A y la 'casilla 0' de B son en realidad sitios distintos.
Cada uno ve solo su memoria, y ni siquiera ve la de los otros.
Esta memoria de mentira y privada se llama memoria virtual.
Cambia entre los programas A y B. Cada uno tiene su 'mi memoria' desde la casilla 0.
Ambos la usan limpiamente desde la casilla 0, qué cómodo.
Pero las direcciones de mentira no son sitios reales, ¿verdad?
Cuando un programa dice 'mi casilla 3',
¿quién convierte eso en un sitio real, y cómo?
Traducir direcciones de mentira a sitios reales
Cada vez que un programa usa 'mi casilla 3',
el sistema operativo y el hardware lo convierten en secreto a un sitio real.
Un mapa pequeño conecta 'mi 3 -> real 27', y así.
El 'mi 0' de A es el real 5; el 'mi 0' de B es el real 40.
Mismo número de mentira, distinto sitio real, así nunca chocan.
Toca una dirección de mentira. Pasa por el mapa a un sitio real. A y B llegan a sitios distintos desde el mismo número.
El mapa vuelve real lo de mentira, así cada uno vive seguro y aparte.
Pero suma la memoria de mentira de todos
y puede ser mucho más grande que la real.
¿Cómo metes todo eso en la pequeña memoria real?
Más que la real: lo sin usar, al disco
Este es el secreto del sistema operativo.
Las partes que no se usan ahora se sacan al disco lento un rato.
Y en ese hueco entra la parte que hace falta ahora.
Luego, si la parte sacada vuelve a hacer falta, se trae de vuelta.
Así puedes usar una memoria más grande que la real.
Trae una parte nueva. Si la memoria real está llena, una parte sin usar va al disco y entra la que hace falta.
Sacar y traer de vuelta hace posible una memoria más grande que la real.
Pero el disco es mucho más lento que la memoria real, ¿verdad?
Ir hasta el disco cada vez sería lento.
El sistema operativo cuida una cosa más.
Lo muy usado, cerca
El sistema operativo deja las partes muy usadas en la memoria real cercana.
Solo las que se usan de vez en cuando van al disco lejano y lento.
Es la misma idea que la caché que vimos en estructura: 'lo frecuente, cerca'.
Así que casi siempre termina en la memoria real rápida,
y los viajes al disco son solo ocasionales, por eso apenas notas la lentitud.
Saca varias veces. Lo frecuente se queda en memoria real (cerca); lo raro, en disco (lejos).
En resumen, la memoria virtual es el arte de mapear direcciones de mentira a sitios reales,
mandar lo sin usar al disco, y mantener lo frecuente cerca.
Gracias a ella, cada proceso siente que usa a solas una memoria más grande que la real.
Pero el hecho de que cada uno vea solo 'sus sitios' y no los de otros
se vuelve en realidad el muro que separa y protege lo tuyo de lo mío. Esa es la próxima historia.