El muro entre lo mío y lo tuyo
En la memoria virtual, cada programa veía su propia memoria (lección 9). Ni siquiera veía la de los otros. Pero en realidad, los datos de todos están mezclados en una memoria real. Entonces, ¿qué impide que lo mío y lo tuyo se toquen? Sorprendentemente, no hay ningún muro que bloquee.
Muchos viven mezclados en una memoria
En la vista de mentira cada uno parece usar lo suyo,
pero dentro de la memoria real todos están mezclados.
Los trozos de A y los de B están uno al lado del otro.
Si A pudiera tocar el sitio de B, justo al lado,
un error de A podría arruinar a B, e incluso espiar sus secretos.
Mezclados así en un espacio, parece arriesgado.
Pero en realidad A nunca puede tocar a B.
¿Hay alguna partición sólida que bloquee a los dos?
No. El secreto está en aquel mapa de la lección 9.
No es un muro, solo no hay camino
Recuerda el mapa de la lección 9.
El mapa de A apunta solo a los sitios reales de A.
Sencillamente no hay en él ningún camino hacia los sitios de B.
Así que A ni siquiera tiene forma de nombrar 'la dirección de B'.
No es que un muro bloquee a los dos, sino que no hay camino que tomar.
Elige A. El mapa de A lleva solo a los sitios de A; no hay flecha hacia B.
Sin camino en el mapa, no puedes ir allí.
Pero ¿y si algún programa, por error
o a propósito, llama a una dirección fuera de su mapa?
Entonces se activa otra salvaguarda.
Si intentas cruzar la línea, te atrapan
Cuando un programa llama a una dirección que no está en su mapa,
no hay sitio real al que mapear, así que la traducción falla.
En ese instante el hardware lo nota y avisa al sistema operativo.
El sistema operativo dice 'tocaste un sitio que no es tuyo'
y detiene solo a ese programa. El acceso malo nunca llega.
Prueba la dirección de A, luego la de B. La tuya pasa (verde); la otra es atrapada y detenida (rojo).
La tuya pasa; la del otro es atrapada ahí mismo.
Un intento de cruzar el límite nunca logra pasar.
Gracias a esto, llega un resultado muy tranquilizador.
Aunque un programa se rompa, no se contagia a los demás.
Uno falla, el resto sigue bien
Como cada programa está encerrado en su propio espacio,
un programa que falla solo puede desordenar su sitio.
No puede tocar la memoria de otros, ni el sistema operativo.
El sistema operativo limpia en silencio solo al que se rompió,
y el resto de programas siguen corriendo como si nada.
Haz fallar un programa. Solo ese se detiene; el resto sigue corriendo.
Sin protección, un programa roto arrastraría todo consigo.
Como están separados, el accidente se queda en una caja.
La estabilidad y la seguridad salen de aquí, juntas.
Y debajo no hay un 'muro', sino 'mapas separados'.
La separación misma es protección
En resumen, la protección de memoria no es un muro hecho a propósito.
Dar a cada proceso un mapa separado significa que no hay camino entre ellos,
y cruzar la línea es atrapado, deteniendo solo a ese.
Así viven mezclados sin chocar, y un fallo no se propaga.
La separación misma es la protección.
Apaga y enciende la protección. Encendida, el accidente queda en una caja; apagada, se propaga a todos.
Hasta aquí el sistema operativo ha gobernado el interior: la CPU y la memoria.
Dejándolos turnarse (tiempo compartido, planificación), manteniéndolos aparte (memoria virtual, protección).
Pero una computadora también debe hablar con el exterior.
Teclados, pantallas, discos, hasta aparatos nuevos que nunca ha visto.
¿Cómo reconoce el sistema operativo todos esos dispositivos? Esa es la próxima historia.