Memoria Virtual

Es una manera de reducir el acceso constante a memoria por parte del procesador.
Cuando se está ejecutando un programa, y especialmente si se tienen varias aplicaciones abiertas, el ordenador tiene que cargar en memoria RAM los valores e instrucciones de dicho/s programa/s. Pero, ¿qué ocurre cuando el programa o programas que se están ejecutando requieren más memoria de la que tiene el equipo?
En este caso, el procesador toma una parte del disco duro y la convierte en memoria RAM. Es decir, se utiliza el disco duro para almacenar direcciones de memoria, y aunque el disco duro es mucho más lento que la memoria RAM (10-15 milisegundos para un disco duro moderno frente a 70-10 nanosegundos para la memoria actual), es mucho más rápido tomar los datos en formato de memoria virtual desde el disco duro que desde las pistas y sectores donde se almacenan los archivos de cada programa.
Los distintos modelos de memoria virtual se diferencian por sus políticas de solapamiento y por los métodos que emplean en la organización de la memoria. Los mas importantes son:
Memoria Paginada
Memoria Segmentada
Memoria de segmentos paginados
Todos estos sistemas encuentran como problema critico que los requerimientos de la memoria de algunos programas específicos son difíciles de predecir, y por ello, la fracción de memoria que debe asignarse a un programa es variable en cada caso.
Además, la política de solapamiento y compartición debe tener en cuenta ciertas características internas de los programas que, invariablemente, determinan la construcción modular y estructurada de los mismos. Dichas características son:
1.- Localización Temporal: Es la tendencia de un proceso a referirse, en un futuro próximo, a elementos utilizados recientemente. Las variables y los stacks del proceso son ejemplos de elementos que ejercitan esta característica.
2.- Localización espacial: es la tendencia que tiene los procesos a referirse a elementos próximos la espacio virtual antes recorrido.
3.- Localización Secuencial: tendencia de los procesos a referenciar elementos de la secuencia inmediata.

Para decidir que fracción de memoria principal ha de ser destruida o cargada en disco si ha sido modificada cuando se necesita leer otra, las reglas o criterios mas empleados son:
Regla FIFO. Se destruye la fracción que mas tiempo lleva en la memoria principal para dejar un hueco en esta.
Regla LRU. La porción que lleva mas tiempo sin haber sido usada o actualizada.
Regla LIFO. El hueco aparece en la memoria principal destruyendo o devolviendo a disco(si se ha modificado) la parte que lleva en memoria el menor tiempo.
Regla LFO. Deja hueco la porción que se ha pedido menos veces desde que comenzó el proceso.
Regla RAND. Se elige una porción al azar.
Regla CLOCK. Cuando se coloca un bit de uso en cada entrada de una cola FIFO y se establece un puntero que la convierte en circular. Es una aproximación al algoritmo LRU con una cola FIFO simple.

Memoria Paginada
Este método organiza el espacio virtual y el físico en bloques de tamaño fijo, llamados paginas. En un momento determinado la memoria principal contendrá algunos de los bloques lógicos. Como las distintas posiciones de un bloque lógico y uno físico están ordenadas de forma idéntica, simplemente hay que traducir el numero del bloque lógico al correspondiente del bloque físico.
Los métodos de traducción son diversos, desde el mas básico de correspondencia directa al mas complejo de correspondencia asociativa, donde la búsqueda se realiza mediante el contenido de una memoria asociativa que mantiene las correspondencias virtual - física mas recientemente utilizadas. En la practica se utiliza una técnica mixta en la que las paginas mas recientemente empleadas se encuentran en una memoria asociativa y todas ellas en una tabla de correspondencia directa.

Método de correspondencia directa:
La dirección virtual consta de dos campos: un numero de pagina virtual(npv) y un desplazamiento(d), dentro de la pagina indicada. Con el numero de la pagina virtual se accede a una entrada de una tabla de paginas(TP) que proporciona la dirección física de la pagina y una serie de información complementaria.
Localizada la pagina física, el desplazamiento(d) sirve para completar la posición concreta dentro de ella.
En el momento de arranque, cada proceso activo del sistema crea en la memoria principal una Tabla de Paginas(TP) que contiene una entrada por cada posible pagina virtual. La configuración de las entradas de TP consta de los siguientes campos:
1.- Bit de validación(V), que, cuando esta activado, indica que la pagina existe. Si V=0, la pagina no existe y se creara cuando haga falta.
2.- Bit de Modificación(M), que indica si la pagina ha sido modificada en memoria. Este bit se utiliza en los algoritmos de reemplazo y actualización de la memoria.
3.- Código de acceso autorizado a la pagina(CAA), que puede ser de lectura, escritura y/o ejecución; son 2 bits.
4.- Dirección de la Pagina(DP), que contiene la dirección de la pagina en memoria principal o la dirección de la misma en memoria virtual o disco, según que la pagina este activa o inactiva de acuerdo con el señalizador D.
La dirección donde comienza la Tabla de Paginas(TP) esta almacenada en el Registro de Base de la Tabla de Paginas(RBTP). Para acceder, sucesivamente, a las entradas de la TP se incrementa el valor correspondiente al numero de pagina virtual(npv) al que se guarda en RBTP.
Para calcular la dirección física en memoria se concatena DP(numero de pagina) con el desplazamiento d. Esto, si la pagina se encuentra en la memoria principal.
El problema de este método estriba en el que el numero de entradas a la Tabla de Paginas(TP) ha de coincidir con el numero de paginas virtuales, que es muy grande.

Método de correspondencia asociativa
En este caso se dispone de una tabla inversa en tecnología asociativa, esto es, con memoria tipo CAM, que se encarga ella misma de soportar el proceso de búsqueda a muy alta velocidad, suministrando el numero de pagina física o indicación de que la palabra lógica direccionada no se encuentra en memoria, en cuyo caso se elimina una pagina de la memoria principal(si no se ha modificado) y se trae la nueva al hueco que deja.
La memoria asociativa es aquella en la que se producen múltiples accesos de forma simultanea. En un simple acceso se pueden direccionar todas las posiciones que satisfacen un criterio de selección. Dado el elevado coste de las memorias asociativas, la tabla CAM suele ser incompleta, albergando el conjunto de paginas “activas” en un momento determinado. Si la CAM origina falta, hay que acudir a la TP para comprobar si esta en la memoria principal y, en su caso, actualizar la CAM. Si da falta la TP, hay que proceder a un cambio de pagina entre memoria principal y CAM.

Memoria Segmentada
Este método explota el concepto de modularidad de los programas construidos estructuralmente. Los módulos son conjuntos de informaciones que pueden tratarse independientemente y que se relacionan mediante llamadas interprocedimientos, constituyendo programas que se denominan segmentos.
La segmentación es una técnica que organiza el espacio virtual en bloques de tamaño variable, que reciben el nombre de segmentos y que se colocan en memoria mediante algoritmos de localización de espacio libre.
Los elementos de un segmento se identifican mediante la dirección del segmento al que pertenecen y un desplazamiento dentro del mismo. A semejanza con el modelo anterior, existe un Registro Base de la Tabla de Segmentos(RBTS), que direcciona el comienzo de la Tabla de Segmentos(TS), de las que existe una por cada proceso activo. Cada entrada de la Tabla de Segmentos se compone de los siguientes campos:
1.- Código de Acceso Autorizado(CAA), que indica el modo de acceso permitido al segmento.
2.- Campo de Longitud(L), que indica la longitud del segmento.
3.- Bit de Memoria/Disco(D), que indica si el segmento esta o no en memoria.
4.- Campo de Dirección de Segmento (DS), que contiene la dirección absoluta del segmento en memoria o la posición del segmento en disco, según el valor del señalizador D.
Dada la naturaleza variable en cuanto a longitud de los segmentos, se precisa algún algoritmo que localice espacio libre para que resida el segmento apropiado, ya que no es corriente encontrar un bloque continuo en la memoria, para colocarlo completo. Estos algoritmos forman parte del mecanismo de interrupción de falta de pagina y los más relevantes son:
a) De mejor ajuste: Minimiza el desperdicio, seleccionando el mejor agujero o fragmento inútil en el que se puede colocar el segmento.
b) De peor ajuste: Localiza el agujero que maximiza el desperdicio al colocar el segmento.
c) De primer ajuste: Localiza el agujero con una dirección inicial inferior en el que se puede colocar el segmento.
d) Algoritmo Buddy: Utiliza técnicas de compactación de memoria, fusionando espacios inútiles, de forma que se configuran bloques continuos del tamaño adecuado.
Evidentemente los segmentos pueden ser compartidos por muchos procesos. Algunos sistemas utilizan tablas auxiliares, que apoyan la búsqueda de segmentos compartidos, como la Tabla de Segmentos Activos(TSA), que indica cuales son los segmentos activos en memoria en cada instante y la Tabla de Segmentos Conocidos(TSC), que contiene en cada entrada un nombre-segmento/numero segmento por cada segmento ya utilizado en el proceso.
Uno de los procedimientos mas aceptados para la gestión de la memoria virtual es el que utilizan los minicomputadores PDP-II de Digital Equpiment Corporation. Por ej. la dirección virtual de 16 bits, se divide en un campo de 3 bits, que selecciona uno de los 8 registros basa de 12 bits existentes, y otro campo de 13 bits de desplazamiento. La dirección física de 18 bits se calcula sumando el registro base, los 7 bits de mas peso del desplazamiento precedidos de cinco ceros, y concatenando al resultado los 6 bits menos peso del desplazamiento. Se logra variar la longitud de los segmentos entre 64 bytes y 8 Kbytes.

Memoria de Segmentos Paginados
Esta memoria combina las ventajas de los dos modelos anteriores. Cada segmento se divide en paginas, de forma que, para acceder a cualquier elemento de un segmento, el sistema acude a la Tabla de Paginas(TP) de dicho segmento.
Si se aplica la técnica asociativa, para realizar la traducción, el tratamiento de las interrupciones de “fallo en el acceso” debe contemplar los siguientes aspectos:
Ausencia en el numero de pagina en la memoria asociativa, en cuyo caso se obtendrá la dirección de pagina de la TP correspondiente.
Ausencia de l numero de segmento en la memoria asociativa, supone una búsqueda en la Tabla de Segmentos activos(TSA), en el peor de los casos, en el directorio de ficheros del disco, para recuperar el segmento y/o los atributos.
En sistemas multiprogramados, la activación de un nuevo proceso que genera su propio espacio de dirección invalida las entradas anteriores de la memoria asociativa