Gestión de la memoria: memoria virtual y paginación

Existen ciertas reglas que se cumplen cuando se quiere ejecutar un programa:

  • Los programas para ser ejecutados tienen que estar en memoria principal.
  • No es posible ejecutar ningún programa desde el disco duro, unidad SSD u otra memoria secundaria.
  • Cuando un programa se traslada a memoria principal para ejecutarse pasa a llamarse proceso.
  • Los procesos cuando se están ejecutando tienen ubicados en memoria tanto el código que se está ejecutando como los datos.
  • 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:

  • No admitir a más procesos de los que se pueden ejecutar. Esta opción no tiene mucho sentido puesto que el sistema se quedaría como colgado, sin responder a las demandas.
  • Echar algunos de los procesos de la memoria. Esta opción provocaría un caos, mayor o menor dependiendo del criterio que tomara el gestor de descartes de procesos. Además este gestor sería un proceso y para que funcione el sistema no debería de echarse a sí mismo.
  • Utilizar memoria virtual. Esta es la función más sensata.
  • 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?

    mmu

    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:

  • Que al hacer la traducción, la dirección se encuentre en la memoria física. Con lo cual el proceso puede seguir ejecutándose sin problema.
  • Que al hacer la traducción, la dirección se encuentre en la memoria secundaria lo que provocaría una excepción. En ese caso si se quiere que el programa se siga ejecutando hay que traer a memoria principal el contenido de la dirección de memoria secundaria.
  • 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:

  • Decidir qué partes de la memoria del proceso se mantienen en memoria física y se encarga de gestionar las tablas de traducción de direcciones virtuales a físicas para que la MMU haga su trabajo.
  • En el momento de producirse una excepción es tarea del sistema operativo localizar una zona de memoria donde alojar el fragmento de proceso cuando se produce una excepción.
  • 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.

    El objetivo de este sistema de memoria virtual es tener en memoria principal aquellos fragmentos que más se utilicen y dejar en memoria secundaria los menos utilizados. De esta forma el sistema es eficiente y efectivo.

    ¿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:

  • No tienen que estar contiguos los marcos de páginas utilizados por un proceso.
  • No hace falta compactar la memoria.
  • Se puede ejecutar un programa sin que esté cargado completamente en memoria, se puede cargar parte al comienzo y luego se puede ir cargando más programa conforme se vaya necesitando.
  • One thought on “Gestión de la memoria: memoria virtual y paginación

    1. Pingback: MMU | marcodubon

    Deja una respuesta

    Tu dirección de correo electrónico no será publicada.

    Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.