Cómo funciona la memoria virtual
En la lección 2 vimos que varios procesos funcionan a la vez. Cada uno de esos programas necesita un lugar donde recordar cosas: memoria. Pero la memoria real (la RAM) tiene una cantidad fija, así que si todos ocuparan directamente sitio real, se agotaría enseguida y chocarían entre sí. Por eso el sistema operativo le da a cada uno una «memoria falsa y grande».
Todos quieren memoria
Cada programa que funciona a la vez necesita un lugar donde recordar cosas. Pero la memoria real es un espacio pequeño y de tamaño fijo.
Si todos intentaran quedarse directamente con sitio real, pronto faltaría espacio y sus zonas chocarían.
Sería una pelea por la memoria.
Cuantos más programas añades, antes se llena y se desborda la barra de memoria real.
La memoria real sola no da abasto. Pero tampoco se les puede decir a los programas «cede algo de memoria», porque cada uno necesita usar mucha.
Aquí el sistema operativo usa un truco ingenioso.
Dar a cada uno su propia memoria grande
El sistema operativo da a cada programa su propia memoria falsa: amplia, que empieza limpiamente en la casilla 0 y que parece usar él solo.
La «casilla 0» de A y la «casilla 0» de B son en realidad sitios distintos. Cada uno ve solo su propia memoria y ni siquiera puede ver la de los demás.
A esta memoria falsa y propia se le llama memoria virtual.
Mira A y B por turnos: cada uno tiene su propia «mi memoria» que empieza en la casilla 0.
Los dos empiezan limpiamente en la casilla 0, lo cual es muy cómodo. Pero una dirección falsa no es un sitio real.
Cuando un programa dice «mi casilla 3», ¿quién la convierte en un sitio real, y cómo?
Llevar las direcciones falsas a sitios reales
Cada vez que un programa usa «mi casilla 3», el sistema operativo y el hardware la convierten en secreto en un sitio real.
Un pequeño mapa las conecta, como «mi 3 → real 27». El «mi 0» de A es la casilla real 5, y el «mi 0» de B es la casilla real 40.
Aunque el número falso sea el mismo, el sitio real es distinto, así que no chocan.
Pulsa una dirección falsa y verás cómo pasa por el mapa hasta un sitio real. A y B llegan a lugares distintos aunque tengan el mismo número.
Como el mapa convierte lo falso en real, cada uno vive seguro y por separado.
Pero si sumas la memoria falsa de todos, puede ser mucho mayor que la memoria real. ¿Cómo cabe todo eso en una memoria real pequeña?
Más grande que la real: lo que no se usa, al disco
Este es el secreto del sistema operativo: las partes que no se están usando ahora se sacan un rato al disco, que es lento, y en su lugar se cargan las partes que hacen falta ahora.
Más tarde, si se vuelve a necesitar algo que se sacó, se trae de vuelta.
Así se puede usar más memoria de la que hay en la memoria real.
Carga una parte nueva: cuando la memoria real está llena, algo que no se usaba sale al disco y entra lo que hace falta.
Sacar y volver a traer hace posible una memoria más grande que la real. Pero el disco es mucho más lento que la memoria real.
Ir hasta el disco cada vez sería exasperante, así que el sistema operativo se ocupa de una última cosa.
Lo que se usa a menudo, cerca
El sistema operativo deja las partes que se usan a menudo en la memoria real, que está cerca, y solo manda al disco, lejano y lento, lo que se usa de vez en cuando.
Es la misma idea que la caché que vimos en la estructura del computador: «lo que se usa a menudo, cerca».
Así, la mayor parte del trabajo termina enseguida en la memoria real, que es rápida, y las visitas al disco son solo ocasionales, de modo que apenas se nota la lentitud.
Cuantas más veces sacas cosas, más se quedan las de uso frecuente en la memoria real (cerca) y las de uso ocasional en el disco (lejos).
En resumen, la memoria virtual es el arte de llevar direcciones falsas a sitios reales, mandar al disco lo que no se usa y tener cerca lo que se usa a menudo. Gracias a ello, cada programa siente que tiene para él solo una memoria más grande que la real.
Pero que cada uno vea solo «su propio sitio» y no el de los demás se convierte, en realidad, en la pared que separa y protege lo mío de lo tuyo. Esa es la próxima historia.