seegongsik
Mis palabras
Sistemas operativos

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'.

01

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.

Memoria real

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.

02

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.

Programa A : Mi memoria
0
1
2
3
4
5
0 de A != 0 de B (sitios reales distintos)

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?

03

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.

Sitios reales
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

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?

04

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.

Memoria real
P1
P2
P3
P4
Disco
P5
P6

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.

05

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.

Memoria real
Disco

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.

En una líneaEl sistema operativo da a cada proceso sus propias 'direcciones virtuales', así cada uno parece usar una memoria amplia a solas. Las direcciones virtuales se traducen en secreto a sitios reales, y cuando la memoria real se llena, las partes sin usar se sacan al disco lento y se traen cuando hacen falta. Las partes muy usadas se quedan en la memoria real cercana. Gracias a esto, cada proceso usa una memoria más grande que la real, en privado y rápido.
Sistemas operativos
¿Te fue útil? Apoyar seegongsik