Categoría:Memoria Virtual

De Departamento de Informatica
Saltar a: navegación, buscar

Contenido

Introducción

Los procesos suelen necesitar recursos que ocupan mucho espacio, o los procesos mismos pueden ocupar mucho espacio, por lo que es posible que no puedan ser cargados completamente en la memoria principal. Por otro lado, siempre se busca tener una tasa de uso de la CPU lo más alta posible teneniendo más de un proceso en ejecución, haciendo necesario el uso eficiente de la memoria. El uso de la memoria virtual resulta una solución para los problemas provocados por el tamaño limitado de la memoria física. Además, que entrega otros beneficios como aumentar la seguridad en la ejecución de un proceso o el de ayudar con métodos más eficientes para crear procesos.

Memoria Virtual, ¿qué es?

La memoria virtual es una técnica que aumenta la capacidad de memoria usando espacio en el disco duro, es decir, se combina la memoria principal con un espacio en el disco asignado especialmente para este fin, dando la “ilusión” de que fuera una memoria más grande, la cual es utilizada de forma normal tanto por el SO como por los procesos de usuario. Con la memoria virtual es posible abstraer la memoria lógica de la memoria física, pudiendo disponer así de una memoria lógica mucho más grande que la memoria física.

La memoria virtual combina la Ram con el espacio asignado de disco duro o hdd

La idea principal consiste en tener parte de los procesos que no se necesita que estén cargados en la memoria principal, “guardada” en un espacio del disco designado (nombrado) normalmente como archivo de paginación. De esta forma, sólo se cargan en la memoria física algunas “partes” del proceso sin desperdiciar espacio con, como por ejemplo, rutinas que se necesiten muy rara vez o datos o tipos de datos que necesitan mucho espacio y que no se usaran por completo en el corto plazo.

En términos técnicos, la memoria virtual permite a un software correr en un espacio de memoria que no necesariamente pertenece a la memoria física de una computadora. Para esto se debe emular un CPU que trate a toda la memoria (virtual y principal) como un bloque igual, y determinar cuándo se requiere de una memoria u otra.

Beneficios

Ya que un proceso tiene en la memoria solo los recursos que necesita en el momento, se optimiza el uso de la memoria y esto permite que más procesos se puedan estar ejecutando al mismo tiempo (multiprogramación) aumentando la tasa de uso de la CPU. Sin embargo, se debe tener un mecanismo que evite que existan demasiados procesos corriendo y después no se tenga espacio suficiente para ellos en la RAM.

Se puede crear un espacio de direcciones virtual para cada proceso. Esto aumenta la seguridad en la ejecucion de los procesos, además, de que simplifica la tarea de programar ya que no es necesario ocuparse del tamaño del programa ni tampoco de las direcciones virtuales que se crean. El encargado de traducir las direcciones virtuales a direcciones reales es la unidad de gestión de memoria (MMU), un dispositivo formado por un conjunto de circuitos perteneciente a la CPU.

Con la memoria virtual se puede compartir espacio de memoria entre los procesos. Un proceso crea un espacio en el disco que puede ser accedido y utilizado por otros procesos. Esto también sirve para cargar en la memoria rutinas o librerias comunes para varios procesos una sola vez. Además, el uso de espacio comun para distintos procesos permite implementar un método de creación de nuevos procesos denominado Copia en escritura (COW), el cual consiste en usar el mismo espacio de direcciones tanto para el proceso padre como para el proceso hijo, creado con un fork(), mientras este ultimo no haga ninguna modificación de su código. Sólo cuando el proceso hijo necesite cambiar una página o un segmento, esta página o segmentos son copiados nuevamente a la memoria para que sea modificado por el proceso hijo.

Funcionamiento

El espacio lógico de direcciones de un proceso es dividido en “partes” (páginas o segmentos) las cuales se van cargando en memoria a medida que son necesarias para el proceso. El resto queda en la memoria virtual. Cuando el proceso necesita de una parte que no está cargada en memoria, el sistema operativo debe encargarse de cargar la página o segmento necesario en la memoria, y en caso de que no exista espacio, se debe recurrir a un algoritmo para escoger un espacio en la memoria para que sea desocupado. Una vez cargada esta parte del proceso, se corre nuevamente la rutina que originó este procedimiento.

La tarea de traducción de las direcciones lógicas a direcciones físicas recae en la Unidad de Manejo de Memoria (MMU), que como se mencionó más arriba es un dispositivo de hardware. La MMU se encarga de administrar el Buffer de Traducción Adelantada (TLB, Translation Lookaside Buffer), que mantiene una parte de la tabla de páginas, si la implementación de la memoria virtual es con paginación. Cuando la CPU requiere una dirección virtual, la MMU busca en el TLB una traducción directa a la memoria física correspondiente. Si no se encuentra, entonces se debe cargar la "parte" correspondiente del proceso a la memoria, iniciando el procedimiento descrito más arriba, en el que se debe buscar, o crear, un espacio en la memoria por medio de un algoritmo y cargar la página o segmento necesario en la memoria.

La parte del procedimiento en que se escoge el espacio en la memoria que se debe descargar a la memoria virtual para hacer espacio en la memoria virtual, corre por cuenta del sistema operativo. El algoritmo para determinar qué partes de los procesos se mantienen en la memoria física y qué partes son descargadas a la memoria virtual puede cambiar según el sistema operativo. Si la implementacion de la memoria virtual es con paginación, el algoritmo se demomina Algoritmo de reemplazo de página.

Implementación

Hay más de un método para implementar la memoria virtual, el más utilizado o el más común es el de paginación por demanda. También está el método de segmentación por demanda y hay un tercero que se puede considerar como un hibrido entre paginación y segmentación.

  • Paginación por demanda: Básicamente consiste en dividir los procesos en páginas del mismo tamaño y dividir la memoria física en frames de igual tamaño que las páginas. Luego se cargan las páginas del proceso que sean necesarias en el momento. A medida que se necesiten más páginas, estas se iran cargando en la memoria física mientras exista espacio, de lo contrario, se necesitara escoger un frame "victima" para desalojarlo y dejar espacio para la página que se neceista, el algoritmo para escoger el frame varía en cada sistema operativo.
  • Segmentación por demanda: En este método los procesos se dividen en segmentos. El tamaño de los segmentos es determinado por el sistema operativo, luego de definidos los segmentos, se debe determinar qué segmentos se cargarán a memoria principal y cuándo. Con este mecanismo hay menor fragmentación si existen procesos compartidos.
  • Paginación/segmentación: Este método busca aprovechar las ventajas de los anteriores. Consiste en dividir la memoria en frames de página del mismo tamaño, y los procesos, dividirlos en segmentos cuyos tamaños sean múltiplos del tamaño de un frame de página. Con este método se necesita implementar una estrategia de colocación (de carga de segmentos en memoria), pero suelen ser más simples que las del método de segmentación por demanda. No se evita la fragmentación (interna y externa) y se utilizan algoritmos de reemplazo similares a los usados en los métodos anteriores.

Memoria virtual en sistemas operativos

Ejemplos en Sistemas Operativos

La categoría no contiene actualmente ningún artículo o archivo multimedia.

Herramientas personales
Espacios de nombres
Variantes
Acciones
Navegación
Herramientas