MEMORIA VIRTUAL Objetivo de la memoria virtual Hacer que parezca que la máquina tiene una cantidad de memoria prácticamente ilimitada. Razones de su uso: •- Las máquinas (sobre todo las multiproceso y multiusuario) pueden tener una carga de trabajo tal que la cantidad de memoria que necesiten sea mayor que la que tienen. •- Sin embargo (como indica el principio de localidad), cada programa utiliza en cada instante una cantidad de memoria bastante inferior inferior a la que usa en toda su ejecución. •- Por otro lado, la mayoría de las máquinas pueden direccionar mucha más memoria (32b de direcciones = 4GB) que la que tienen. Funcionamiento de la memoria virtual. •- Los programas usan todos los bits de direcciones, direcciones, como si realmente existiera existiera toda esa memoria. •- Se implementa un mecanismo (generalmente gestionado por el sistema operativo) para que sólo los bloques de memoria en uso en cada momento residan en memoria principal. •- El resto se guarda en memoria secundaria. •- El programa ve una memoria enorme, pero que realmente no existe como tal (virtual). Es necesario: •- averiguar la dirección de memoria real (física) en la que se encuentra la información que pide el programa con las direcciones que usa (virtual) => traducción virtual-física. virtual-física. •- cuando los datos no están en memoria física, interrumpir el programa, traerlos, y reanudarlo (=>excepciones). •- De forma parecida a la caché, la memoria virtual se divide en bloques, para aprovechar la localidad espacial. - El intercambio entre memoria secundaria y principal se realiza únicamente por bloques. Analogías con la caché: - División del mapa de direcciones en bloques. - La memoria contiene un subconjunto del total de bloques => se dan fallos. Diferencias: - La gestión es por software (SO). - El siguiente nivel (memoria (memoria secundaria) no contiene sólo bloques, también el sistema de ficheros. - La tasa de fallos es mucho menor (los bloques son mayores). En memoria virtual, a veces se usan bloques de tamaño fijo (páginas) y a veces de tamaño variable (segmentos).
Memoria Virtual Paginada Divide la memoria física y la vi rtual en bloques de tamaño constante (páginas). Igual que en caché, sólo es necesaria una porción de la dirección para identificar la página, el resto es el desplazamiento dentro de la página.
Dirección
número de página desplazamiento
La traducción consiste en sustituir el número de página virtual por el físico (el que dice en qué marco de memoria física está la página). Ubicación A diferencia de la caché, la penalización por fallo es enorme (acceso a disco). La política de ubicación suele ser totalmente asociativa (es la que menos fallos genera). Identificación Para saber si una página de memoria virtual está en memoria física, y e n ese caso, dónde está, se usa una estructura de datos Llamada tabla de páginas. •- Esta tabla tiene una entrada por cada página virtual del programa. •- Si la página está en memoria fí sica, además indica en qué marco
-Solamente la traducción supone un acceso a memoria, que es donde está está la tabla de páginas. - Para acelerar la traducción, se implementa una pequeña tabla en memoria, con un subconjunto de todas las entradas de la tabla de página. - Se suele llamar TLB (Translation Lookaside Buffer, Búffer de consulta para la traducción) o caché de traducciones. - El algoritmo de sustitución e n el TLB suele ser una variación del LRU. El modo de funcionamiento es el siguiente: La CPU genera una referencia a memoria (dirección virtual). Se busca la traducción en el TLB Si no está, se busca en la tabla de páginas y se actualiza el TLB >> si la traducción no está en la tabla de páginas, eso es que la pagina no está en memoria física Se genera una excepción para el S.O. El S.O carca la página en memoria física y actualiza la tabla de paginas Se repite el acceso. Una vez hecha la traducción, se realiza el acceso a memoria con la dirección física Sustitución La gestión de páginas la lleva el SO (es software). Esto permite diseñar algoritmos algo más complejos pero más eficientes. Algunos algoritmos usados son LRU, FIFO, Working Set… Escritura Como los discos no permiten accesos a unidades menores que el sector, e s necesario usar postescritura con ubicación. Tamaño de página Igual que en caché, el tamaño de bloque influye en el rendimiento. Si la página es de mayor tamaño: La tabla de páginas es menor (porque hay menos páginas). Se da más eficiencia en las transferenci as con mem. Secundaria. Si la página es de menor tamaño: Se da menos desperdicio por fragmentación interna. Es n ecesario menos ancho de banda con mem. Secundaria.
Memoria Virtual Segmentada •- En este caso, la memoria física no se divide en bloques de tamaño fijo, sino variable (segmentos). •- Un segmento tiene una significació n lógica (una zona de datos, de código, etc). •- La dirección ahora consta de dos valores: Identificador del segmento (típicamente su dirección de inicio). La posición del dato en ese segmento.
Ubicación - Ahora es necesario tener en cuenta que los segmentos no caben en cualquier hueco. - Existen varias técnicas: mejor ajuste, peor ajuste, el primero que se encuentre, etc. Identificación •- Análogamente a la MV paginada, existe una tabla d e traducciones, llamada tabla de segmentos. •- Además, se puede incluir también el TLB para acelerar Sustitución •- Se usa un mecanismo análogo al de la pagi nación. •- Si embargo, hay que tener en cuenta que no sirve con desalojar cualquier segmento (el nuevo puede no caber). •- Puede ser necesario desalojar varios segmentos o recolocar los que quedan para hacer un hueco mayor. Escritura •- En memoria segmentada, por las mismas razones que en paginada, se usa post-escritura con ubicación.