MEMORIA VIRTUAL La memoria virtual utiliza dos niveles de la jerarquía de memoria: la memoria principal y una memoria de respaldo (que usualmente es el disco duro, aunque también puede ser una memoria expandida). Sobre memoria de respaldo se establece un mapa uniforme de memoria virtual. Las direcciones generadas por el procesador se refieren a este mapa virtual, pero, sin embargo, los accesos reales se realizan sobre la memoria principal. Para su funcionamiento, la memoria virtual exige una gestión automática según la jerarquía de memoria formada por los niveles de memoria principal y de disco. La gestión de memoria es automática y la realiza el sistema operativo con ayuda del hardware de la maquina. Los métodos más comunes para poner en práctica el almacenamiento virtual son: Paginación Segmentación Paginación En este método las páginas se transfieren de almacenamiento secundario al primario y se colocan dentro de los bloques llamados marcos de página, que tiene el mismo tamaño que las páginas entrantes. Una página entrante puede colocarse en cualquier marco de página disponible. En la paginación cada proceso tiene su tabla de páginas y cada que carga todas sus paginas en memoria principal, se crea y carga en memoria principal una tabla de páginas. Cada entrada de dicha tabla contiene el número de marco de la página correspondiente en memoria principal. Es normal asociar a una única tabla de páginas con cada proceso. En este caso, las entradas de la tabla de páginas pasan a ser más complejas. Puesto que sólo algunas de las páginas de un proceso pueden estar en memoria principal, se necesita un bit en cada entrada de la tabla para indicar si la página correspondiente esta presente en memoria principal o no lo está. Si el bit indica que la página esta en memoria, la entrada incluye también el marco para esa página. A continuación se presenta un diagrama que muestra la Traducción de direcciones de un sistema de paginación: Segmentación El método de segmentación cuenta con las siguientes características: Los bloques pueden tener tamaños diferentes y se denominan Segmentos. Un programa y sus datos pueden ocupar varios bloques. Estos pueden estar separados (no contiguos) en almacenamiento real. Los segmentos se transfieren del almacenamiento al secundario como unidades completas. Un segmento entrante puede colocarse en cualquier área disponible de almacenamiento primario cuyo tamaño sea suficiente para contenerlo. En esta manera de administración de la memoria virtual cada proceso tiene su propia tabla de segmentos, cuando todos los segmentos se encuentran en memoria principal, la tabla de segmentos del proceso se crea y carga en memoria. Cada entrada de la tabla de segmentos contiene la dirección de comienzo del segmento correspondiente en memoria principal así como su longitud. La misma estructura, una tabla de segmentos se necesitara al hablar de un esquema de memoria virtual vasado en segmentación. Nuevamente, es normal asociar una única tabla de segmentos a cada proceso. En este caso las entradas de la tabla de segmentos pasan a ser más complejas. Puesto que solo algunos de los segmentos de un proceso estarán en memoria principal, se necesitara de un bit en cada entrada de la tabla de segmentos para indicar si el segmento correspondiente está presente en memoria principal. Si el bit indica que el segmento está en memoria, la entrada incluye también la dirección de comienzo y la longitud del segmento. Otro bit de control necesario en la entrada de la tabla de segmentos es un bit de modificación que indique si el contenido del segmento correspondiente ha sido modificado desde que se cargó por última vez en memoria principal. A continuación se presenta un cuadro que contiene las características de Paginación y segmentación (No esta muy claro ya que el escaneo es de poca calidad pero es entendible): Objetivos de la Memoria Virtual Permite disponer de un espacio de direcciones superior al real Los programas pueden tener un tamaño mayor que el espacio disponible en memoria física. La gestión de la memoria virtual es transparente al programador/usuario. Permite compartir eficientemente la memoria (principalmente en entornos multiproceso) La memoria física se reparte entre los proceso que se ejecutan en la máquina. Cada proceso puede tener su propio espacio de direcciones virtuales independiente del resto de procesos.