1. Memoria Caché
Jerarquía de memoria
Registros
Cache nivel 1
Cache nivel 2
Memoria principal
Cache de disco
Disco
Memoria óptica
Cintas
1
2. Localidad de las referencias
En el curso de la ejecución de un programa, las
referencias a memoria tienden a estar
agrupadas.
Ejemplo: bucles, matrices, vectores.
Cache
Cantidad pequeña de memoria rápida.
Está entre la memoria principal normal y la CPU.
Puede localizarse en el chip o módulo de la CPU.
Transferencia de bloques
Transferencia de palabras
Memoria
principal
2
3. Operación de la cache:
resumen
La CPU solicita contenidos de la localización de
memoria.
Comprueba la cache para estos datos.
Si está, la obtiene de la cache (rápidamente).
Si no está, lee el bloque requerido a partir de la
memoria principal hasta la cache.
Después, de la cache los entrega a la CPU.
La cache incluye etiquetas para identificar qué
bloque de la memoria principal está en cada
ranura de la cache.
Diseño de la cache
Tamaño
Función de correspondencia
Algoritmo de sustitución
Política de escritura
Tamaño del bloque
Número de caches
3
4. El tamaño importa
Coste
Una cache grande es costosa.
Velocidad
Cuanto más cache, más rapidez (hasta cierto punto).
Comprobar la cache para acceder a los datos, lleva
tiempo.
Organización típica de cache
Direcciones
Buffer
de direcciones
Bus del sistema
Procesador
Buffer
de datos
Datos
4
5. Función de correspondencia
Cache de 64 kbytes.
Los datos se transfieren en la cache en bloques
de 4 bytes.
Ejemplo: la cache es de 16k (214) líneas de 4 bytes.
Memoria principal de 16Mbytes.
Dirección de 24 bits:
(224=16M).
Correspondencia directa
Cada bloque de memoria principal se corresponde a
sólo una línea de cache.
Ejemplo: si un bloque se encuentra en la cache,
debería estar en un lugar específico.
La dirección está en dos partes.
Los w bits menos significativos identifican una sóla
palabra.
La mayoría de los s bits significativos especifican un
bloque de la memoria.
Los s bits significativos se distribuyen en un campo de
línea r en la cache y en una etiqueta de s - r (los más
significativos).
5
6. Correspondencia directa:
Estructura de la dirección
Etiqueta s-r Línea o ranura r Palabra w
8 14 2
Dirección de 24 bits.
Identificador de palabra de 2 bits (bloques de 4 bytes).
Identificador de bloque de 22 bits.
Etiqueta de 8 bits (=22-14).
Ranura o línea de 14 bits.
Ninguno de los dos bloques en la misma línea tiene el
mismo campo de etiqueta.
Compruebe los contenidos de la cache mediante la
búsqueda de la línea y la comprobación de la etiqueta.
Correspondencia directa:
Tabla de la línea de cache
Línea de cache Bloques de memoria
principal asignados
0 0, m, 2m, 3m, …, 2s-m
1 1, m+1, 2m+1, …, 2s-m+1
m-1 m-1, 2m-1, 3m-1, …, 2s-1
6
7. Correspondencia directa:
Organización de cache
Memoria
Cache principal
Etiqueta Datos
Dirección de memoria
Etiqueta Línea Palabra
Comparación
(Acierto de cache)
(Fallo de cache)
Ejemplo de correspondencia
directa
Línea +
Etiqueta Palabra Datos
Número
Etiqueta Datos de línea
Cache de 16K palabras
Memoria principal de 16 Mbytes
7
8. Correspondencia directa:
ventajas y desventajas
Simple.
Poco costosa.
Hay una posición concreta para cada bloque
dado:
Si un programa accede a dos bloques que se
corresponden a la misma línea de forma repetida, las
pérdidas de cache son muy grandes.
Correspondencia asociativa
Un bloque de memoria principal pueda cargarse
en cualquier línea de la cache.
La dirección de memoria se interpreta como una
etiqueta y una palabra.
La etiqueta identifica unívocamente un bloque
de memoria.
Todas las etiquetas de líneas se examinan para
buscar una coincidencia.
La búsqueda de cache es costosa.
8
9. Organización de cache
totalmente asociativa
Memoria principal
Etiqueta Datos
Dirección de memoria
Etiqueta Palabra
Comparación
(Acierto de cache)
(Fallo de cache)
Ejemplo de correspondencia
asociativa
Dirección Datos
Número
Etiqueta Datos de línea
Cache de 16K palabras
Memoria principal de 16 MBytes
9
10. Correspondencia asociativa:
Estructura de la dirección
Palabra
Etiqueta 22 bits 2 bits
La etiqueta de 22 bits está almacenada con cada bloque
de datos de 32 bits.
Compare el campo de etiqueta con la entrada de
etiqueta en la cache para comprobar si ha tenido éxito.
La dirección de 2 bits menos significativa identifica qué
palabra de 16 bits se necesita en un bloque de datos de
32 bits.
Ejemplo:
Dirección Etiqueta Datos Línea de cache
FFFFFC FFFFFC 24682468 3FFF
Correspondencia asociativa por
conjuntos
La cache se divide en un número de conjuntos.
Cada conjunto contiene un número de líneas.
Un bloque determinado se hace corresponder a
cualquier línea en un conjunto determinado.
Ejemplo: El bloque B puede asignarse en cualquiera
de las líneas del conjunto i.
Ejemplo: 2 líneas por conjunto.
Correspondencia asociativa de 2 vías.
Un bloque determinado puede asignarse en una de
las dos líneas en un único conjunto.
10
11. Correspondencia asociativa por
conjuntos
Número de conjunto de 13 bits.
El número del bloque de memoria principal es
módulo 213.
000000, 00A000, 00B000, 00C000 … se hacen
corresponder al mismo conjunto.
Estructura de cache asociativa
por conjuntos
Memoria principal
Etiqueta Datos
Dirección de memoria
Etiqueta Conjunto Palabra
Conjunto 0
Comparación
Conjunto 1
(Acierto de cache)
(Fallo de cache)
11
12. Correspondencia asociativa por
conjuntos: Estructura de la
dirección
Etiqueta Palabra
de 9 bits Conjunto de 13 bits de 2 bits
Utilice los campos de conjunto a la hora de determinar el
conjunto de cache que necesita para poder verlo.
Compare los campos de etiqueta para ver si tenemos
éxito:
Ejemplo:
Dirección Etiqueta Datos Número de conjuntos
1FF 7FFC 1FF 12345678 1FFF
001 7FFC 001 11223344 1FFF
Correspondencia asociativa por
conjuntos de dos vías
Etiqueta
Conj. +palabra Datos
N.º de
Etiqueta Datos Etiqueta Datos
conjunto
Cache de 16K palabras
Memoria principal de 16Mbytes
12
13. Algoritmos de sustitución (1):
Correspondencia directa
No hay elección posible.
Sólo hay una posible línea para cada bloque.
Se necesita una sustitución de esa línea.
Algoritmos de sustitución (2):
Correspondencias asociativas y
asociativas por conjuntos
Los algoritmos deben implementarse en hardware (para
conseguir velocidad).
“Utilizado menos recientemente” (LRU).
Ejemplo: en correspondencias asociativas por conjuntos
de 2 vías.
¿Cúal de los 2 bloques es LRU?
“Primero en entrar-primero en salir” (FIFO).
Se sustituye aquel bloque que ha estado más tiempo
en la cache.
“Utilizado menos frecuentemente” (LFU).
Se sustituye aquel bloque que ha experimentado
menos referencias.
Aleatoria (coger una línea al azar)
13
14. Política de escritura
No se debe escribir sobre un bloque de cache, a
no ser que la memoria principal esté
actualizada.
Las CPU múltiples pueden tener caches
individuales.
Un módulo E/S puede tener acceso directo a la
memoria principal.
Escritura inmediata
Todas las operaciones de escritura se hacen,
tanto en memoria principal como en cache.
Las CPU pueden monitorizar el tráfico a
memoria principal para mantener actualizada la
cache local (CPU).
Genera mucho tráfico.
Retrasa la escritura.
Recuerde los caches de falsa escritura
inmediata.
14
15. Post-escritura
Las actualizaciones se hacen sólo en la cache.
Cuando tiene lugar la actualización, se activa un bit
actualizar en la ranura de cache.
Cuando un bloque es sustituido, es escrito en
memoria principal, si el bit actualizar está activo.
Las otras caches no son síncronas.
Los módulos de E/S sólo pueden acceder a la
memoria principal a través de la cache.
El porcentaje de referencias a memoria para
escritura es del orden del 15%.
Otros elementos de diseño
Caché de dos niveles: Puedo definir dos niveles de
caché.
Caché unificada frente a partida: Puedo definir una
caché para datos y otra para instrucciones o bien
una única caché dónde se almacena todo.
Longitud de la línea. Cuanto mayor longitud tenga
la línea, menos fallos tendremos, pero un fallo
supone un coste muy alto (hay que trasvasar
muchos datos de la memoria principal a la caché).
15