📖
Esta estrategia consiste en dividir la caché en grupos (conjuntos), y a cada bloque se le asigna uno de estos conjuntos donde puede ocupar cualquiera de las líneas del conjunto.
🟢 Ventajas
  • Híbrido entre las estragias anteriores
  • Cierta flexibilidad
🔴 Inconvenientes
  • Cierta complejidad
notion image

Asignación de la línea a un bloque


📖
Cada uno de los conjuntos de la memoria principal se hace corresponder con un conjunto de la caché usando el método de correspondencia directa, una vez asignada la correspondencia del conjunto, ahora cada bloque del conjunto (memoria) se hace corresponder con cada línea del conjunto (caché) usando la estrategia de correspondencia totalmente asociativa
Asignación de un bloque (memoria) a un conjunto de la caché
nc=nb % nc_total\boxed{nc = nb\ \%\ nc\_total}
  • ncnc → Número de conjunto (caché)
  • nbnb → Número de bloque (memoria principal)
  • nc_totalnc\_total → Número total de conjuntos (caché)
💡
Los conjuntos comienzan desde 00

Consulta de un dato en base a su dirección


📖
Para consultar una dirección, dividiremos esta en partes para saber: donde mirar en la caché (en qué conjunto), si el dato almacenado es efectivamente el que buscamos (etiqueta) y también en caso afirmativo, a partir de que word y byte queremos leer (desplazamientos de word y byte)
  • Etiqueta → Se usa para comprobar si lo que está guardado en la línea es el bloque que buscamos, o es otro. Para lograr esto compararemos la etiqueta calculada a partir de la dirección con la etiqueta almacenada en la caché
  • Índice de conjunto → Este parámetro nos indica en que conjunto de la caché debemos buscar nuestro dato
  • Desplazamiento de palabra → En caso de encontrar el dato, qué palabra desamos extraer
  • Desplazamiento de byte → En caso de encontrar el dato, a partir de que byte (de la palabra seleccionada) deseamos comenzar a leer
 
ℹ️
Distribución de los nn bits de una dirección entre los diferentes los diferentes parámetros
💡
Para poder calcular la cantidad de bits que abarca cada parámetro debemos conocer las siguientes características del sistema
  • Tamaño de las direcciones de memoria (en bits) → nn
  • Número de conjuntos de la caché → s=log2(x)s = \log_2(x)
  • Tamaño de los bloques (en words) → q=log2(x)q = \log_2(x)
  • Tamaño de palabra (en bytes) → p=log2(x)p = \log_2(x)
Etiqueta
Índice de conjunto
Desplazamiento de palabra
Desplazamiento de palabra
nsqpn - s - q -p
ss
qq
pp

Ejemplo
📖
Enunciado
Sabiendo que los parámetros de la memoria y la caché son:
  • Caché con 64 conjuntos
  • Bloques de 16 palabras
  • Palabras de 4 bytes
  • Direcciones de 32 bits
Hallar todos los parámetros a partir de la dirección 0x12345678 según la estrategia de correspondencia directa
Bits del desplazamiento de byte (p)(p)
Sabiendo que el tamaño de palabra es de 4 bytes
p=log2(4)=2 (bits)p = \log_2(4) = 2\small\ (bits)
Bits del desplazamiento de palabra (q)(q)
Sabiendo que el tamaño de los bloques es de 16 palabras
q=log2(16)=4 (bits)q = \log_2(16) = 4\small\ (bits)
Bits del índice de conjunto (s)(s)
Sabiendo que la caché cuenta con 64 conjuntos
s=log2(64)=6 (bits)s = \log_2(64) = 6\small\ (bits)
Bits de la etiqueta
Sabiendo que las direcciones son de 32-bits y tambien sabiendo pp, qq y ss
etiqueta=32642=20 (bits)etiqueta = 32 - 6 - 4 - 2 = 20\small\ (bits)
La distribución de los bits de la dirección sale así
notion image