Gestión de la memoria: memoria virtual y paginación
Existen ciertas reglas que se cumplen cuando se quiere ejecutar un programa:
Imaginemos que siempre la memoria existente fuese mayor que la necesaria para ejecutar los programas tanto de usuario como el sistema operativo: En ese caso no haría falta escribir este artículo.
El problema surge cuando se necesita más memoria que la realmente existente. En ese caso se puede optar por:
La memoria virtual es una técnica que permite hacer ver a un sistema que dispone de más memoria de la que verdaderamente tiene. Los sistemas lo que hacen es utilizar parte de la memoria secundaria (el disco duro) para compensar la falta de memoria RAM. El objetivo del sistema es ubicar en memoria los procesos o parte de los procesos que se están ejecutando en ese mismo momento y llevar a memoria secundaria aquellas partes de procesos que sean menos necesarias.
Toda esta tarea hay que realizarla de forma transparente a los procesos. Los procesos lo único que ven es que hay mucha memoria disponible y es el hardware y el sistema operativo el que internamente gestiona el paso de zonas de memoria RAM a memoria secundaria y viceversa.
Por ejemplo, en un sistema de 32 bits, el máximo de memoria que se podría utilizar es 232 que es equivalente a 4 Gigabytes, si el sistema es de 64 bits el máximo sería mucho mayor, 18,4 Zettabytes.
¿Cómo funciona la memoria virtual?
Como se puede ver en la figura anterior, el sistema operativo trabaja con direcciones virtuales mientras que los dispositivos como la memoria RAM o los discos duros trabajan con direcciones reales. Esta correspondencia o traducción de direcciones virtuales a direcciones reales la hace la Unidad de Manejo de Memoria o MMU (Memory Management Unit).
Cuando un proceso necesita acceder a una dirección de memoria virtual pueden pasar dos cosas:
Con este sistema tenemos la ventaja de poder ejecutar más procesos de los que se podrían ejecutar sin memoria virtual. Los programas se dividen en fragmentos y se depositan en memoria secundaria aquellos fragmentos que no se utilizan, por lo tanto también se está ahorrando tiempo ya que no se carga en memoria lo que no se necesita.
Generalmente la MMU es un dispositivo hardware pero esta traducción también tiene que estar supervisada por el sistema operativo. Estos dos son los que se encargan de mover estos fragmentos entre memoria secundaria y memoria principal.
El sistema operativo se encarga de:
A la MMU se le puede indicar de los fragmentos qué propiedades tienen (lectura, escritura y o ejecución) y de esa manera por ejemplo el sistema operativo puede proteger tanto su código como las tablas de traducción de memoria virtual. Este mecanismo de protección impide corromper el sistema operativo y proteger también los procesos entre sí.
Otra posibilidad que ofrece la memoria virtual es la reubicación. Con este sistema es posible mover los procesos de zona de memoria y seguir ejecutándolos sin problema.
¿Qué es la paginación?
Aparte de la memoria virtual, hay otro sistema que puede también ser complementario llamado paginación. La paginación consiste en trocear los programas en partes del mismo tamaño llamadas páginas.
Asimismo, la memoria se divide en trozos del mismo tamaño y en vez de páginas se llaman marcos.
Las páginas, al tener el mismo tamaño se pueden cargar en cualquier marco que quede libre (los marcos puede que no estén contiguos).
Es un sistema muy sencillo de comprender, es como si en un almacén de ferretería utilizamos cajas para colocar los tornillos, tuercas, etc. y tenemos unas estanterías con unos huecos del mismo tamaño de la caja para colocarlas. Las cajas serían las páginas y los huecos serían los marcos.
Estas páginas se pueden transferir entre la memoria secundaria y la RAM con la importancia que las páginas no tienen que estar necesariamente contiguas en memoria. Eso implica que tiene que existir un sistema/mecanismo para conocer el lugar de las páginas en memoria real. Osea dada la dirección de una página conocer su ubicación en la memoria (dirección real).
También el sistema operativo tiene que tener unos mapas de página o sistema para controlar las páginas utilizadas por cada proceso. Además tiene que tener una lista de marcos libres.
En el caso que el sistema operativo quiera colocar un proceso en memoria basta con asignarle X marcos que tenga libre y cargar el programa en ellos.
Como puedes comprender este sistema es muy flexible y práctico pero por contra va a consumir mucha memoria y CPU por lo tanto tiene que estar optimizado y ser muy eficiente.
Algunas de las ventajas de este sistema son:
One thought on “Gestión de la memoria: memoria virtual y paginación”