Arquitectura de Computadores: Memoria Caché, Memoria Virtual y Políticas de Escritura
Aciertos y fallos en la memoria caché
BloqueMulti: Aciertos y fallos. Necesitan tratamiento distinto de los de lectura. Write-through: se escriben los datos en caché mientras se comparan etiquetas. Si no coinciden, se trae el bloque de memoria principal y se reescribe la palabra que produjo el fallo.
La tasa de fallos desciende cuando se incrementa el tamaño del bloque. Política de early-restart: se reanuda la ejecución tan pronto como la palabra pedida llega al procesador. Es más útil en instrucciones de datos, porque el acceso a instrucciones es más secuencial. El acceso a datos es menos predecible.
Memoria caché asociativa
MemCaché Asociativa:
- Un bloque puede ser asignado a cualquier posición de la caché (totalmente asociativa).
- Para encontrar un bloque se debe buscar en todas las entradas de la caché. Se hace en paralelo, con un comparador asociado a cada entrada de la caché.
- Las memorias caché asociativas por conjuntos tienen un número fijo de posiciones donde puede estar un bloque.
- Cada bloque de memoria se asigna a un conjunto de la caché, y el bloque se puede situar en cualquier posición del conjunto.
Tiempo medio = (Acceso superior × Tasa de acierto) + (Acceso superior + Acceso inferior) × Tasa de fallos
AMAT: Tiempo para acierto + Tasa de fallos × Penalización por fallo
Ejercicios
- La caché corresponde a una correspondencia directa de 64 KB, con bloques de 1 palabra y direcciones de 32 bits. ¿Bits necesarios para implementarla? 64 KB = 16 K bloques = 214 bloques. 32 − 14 − 2 = 16. 214 × (32 + 16 + 1) = 98 KB.
- Dirección virtual de 32 bits. Memoria principal de 512 MB, páginas de 4 KB. ¿Formato? ¿Número de marcos por página? 4 KB → 12 bits (0-12 desplazamiento de página, el resto es el número de página virtual). 512 MB (229) / 4 KB (212) = 217 marcos.
- Paginación de 8 KB, direccionamiento por byte. Dirección 0x20018004. ¿Tamaño de la dirección virtual? ¿Número de páginas? ¿Desplazamiento de página? 8 KB → 213, por lo que el desplazamiento son 13 bits. 8 (número de direcciones virtuales) × 4 bits por número = 32 bits. 32 − 13 = 19 bits de número de página virtual. Pasar la dirección a binario, expresando el desplazamiento (13 bits) y el número de página virtual (19 bits).
- Tiempo = Tasa de acierto + Tasa de fallos × (Tiempo de fallo + Tiempo de acceso a memoria).
- Dirección virtual de 32 bits. Páginas de 8 KB. ¿Formato? 8 KB → 13 bits. ¿Número máximo de entradas? Marco de página = 19 bits. Número máximo de entradas = 219. ¿Número mínimo de fallos? int = 4 B. 890 000 × 4 = 3 560 000 B. 3 560 000 / (8 × 1024) = 435 páginas → 435 fallos por página + 1 por fallo de instrucción.
Memoria virtual
MV: gestiona automáticamente los dos niveles de la jerarquía de memoria implementada: memoria principal y almacenamiento masivo. Bloque = página. La CPU produce direcciones virtuales que se traducen a direcciones físicas. Simplifica la carga de problemas al aportar reubicación. El número de página virtual es la parte alta de la dirección física. El desplazamiento dentro de la página es la parte baja. El número de bits del desplazamiento determina el tamaño de la página.
Localización de páginas
Hay que asignar una página virtual a cualquier página física. Las páginas se localizan usando una tabla que indexa la memoria. Se indexa con el número de página de la dirección virtual y contiene el número de página física que le corresponde. Hay que ubicar la propia tabla en la memoria: su dirección de comienzo está en el registro de tablas de páginas. Cada entrada de la tabla tiene un bit de validez; contiene 1 si la página virtual está asignada a una posición de la memoria física. El índice es toda la dirección del bloque, es decir, el número de página virtual.
Escritura
Copy-back: se copia la página al disco cuando esta se reemplaza en memoria. Copiar una página entera es más eficiente que escribir una palabra. Muy costoso. Bit de suciedad (dirty bit).
TLB
Se encuentra en memoria principal. Incrementa el rendimiento al aprovechar el principio de localidad, al limitar las referencias a la tabla de páginas. Puede utilizarse una caché especial de traducción: el TLB (buffer de traducción de direcciones). La TLB contiene las correspondencias de tablas de páginas: cada etiqueta contiene una parte del número de página virtual; cada campo de datos contiene un número de página física. En cada referencia se busca el número de página virtual en la TLB. Hay acierto si el número de página física se usa como dirección y se activa el bit de referencia.
- Fallo de página en memoria: solo traducción no presente. Se carga la traducción en la TLB y se repite la referencia.
- Fallo de página: lo resuelve el sistema operativo.
Gestión de fallos
Si hay fallo de página se interrumpe la ejecución de la instrucción en la que se ha producido. Se encarga el sistema operativo, que busca la dirección virtual que ha causado el fallo. El SO debe buscar una entrada en la tabla de páginas usando la dirección virtual y encontrar la posición de la página en disco. Escoge la página física para reemplazar. Si se modifica, se debe escribir en disco. Inicia una lectura de disco para traer la página referenciada.
Ubicación de bloques
A mayor grado de asociatividad, menor tasa de fallos. Esto se debe a disminuir la competencia por ocupar cada posición.
Cómo se encuentra un bloque
- Grado de asociatividad: compara el coste de fallo con el coste de la asociatividad.
- Asociatividad total: coste excesivo, salvo que el tamaño sea muy reducido.
- Asociatividad total usando tabla de correspondencias: reducción de fallos. Permite algoritmos sofisticados por software. Fácil de indexar, sin circuitería ni búsquedas adicionales.
Qué bloque debe ser reemplazado
Correspondencia directa: solo hay un candidato. Asociativo por conjuntos: aleatorio y LRU (costoso). Con cachés grandes, el reemplazo aleatorio funciona bien. En memoria virtual se usa LRU.
Costo de los fallos
Escritura:
- Write-through: fallos menos costosos. No se escribe en el nivel inferior. Es más fácil de implementar, pero necesita un buffer de escritura para ser más rápido.
- Write-back: la palabra se puede escribir más rápido en el proceso. Múltiples escrituras en un mismo bloque son una única escritura en el nivel inferior.