Las políticas de ubicación de caché son aquellas que determinan dónde se puede colocar un bloque de memoria específico cuando ingresa a la caché de la CPU . Un bloque de memoria no necesariamente puede colocarse en una ubicación arbitraria de la caché; puede estar restringido a una línea de caché específica o a un conjunto de líneas de caché [ 1 ] por la política de ubicación de la caché. [ 2 ] [ 3 ]
Existen tres políticas diferentes disponibles para la ubicación de un bloque de memoria en la caché: mapeo directo, totalmente asociativo y asociativo por conjuntos. Originalmente, este espacio de organizaciones de caché se describió utilizando el término "mapeo de congruencia". [ 4 ]
Caché de mapeo directo
En una estructura de caché de mapeo directo, la caché se organiza en múltiples conjuntos [ 1 ] con una única línea de caché por conjunto. Según la dirección del bloque de memoria, solo puede ocupar una única línea de caché. La caché se puede representar como una matriz columna de n × 1. [ 5 ]
Para colocar un bloque en la caché
- El conjunto está determinado por los bits de índice [ 1 ] derivados de la dirección del bloque de memoria.
- El bloque de memoria se coloca en el conjunto identificado y la etiqueta [ 1 ] se almacena en el campo de etiqueta asociado con el conjunto.
- Si la línea de caché está ocupada previamente, los nuevos datos reemplazan el bloque de memoria en la caché.
Para buscar una palabra en la caché
- El conjunto se identifica mediante los bits de índice de la dirección.
- Los bits de etiqueta derivados de la dirección del bloque de memoria se comparan con los bits de etiqueta asociados al conjunto. Si la etiqueta coincide, se produce un acierto de caché y el bloque de caché se devuelve al procesador. De lo contrario, se produce un fallo de caché y el bloque de memoria se obtiene de la memoria inferior ( memoria principal , disco ).
Ventajas
- Esta política de ubicación es energéticamente eficiente, ya que evita la búsqueda en todas las líneas de caché.
- La política de colocación y la política de reemplazo son sencillas.
- Se puede utilizar hardware sencillo y de bajo coste, ya que solo es necesario comprobar una etiqueta a la vez.
Desventaja
- Tiene una tasa de aciertos de caché menor, ya que solo hay una línea de caché disponible en un conjunto. Cada vez que se hace referencia a una nueva memoria del mismo conjunto, la línea de caché se reemplaza, lo que provoca fallos por conflicto. [ 6 ]
Ejemplo

Consideremos una memoria principal de 16 kilobytes, organizada en bloques de 4 bytes, y una caché de mapeo directo de 256 bytes con un tamaño de bloque de 4 bytes. Dado que la memoria principal es de 16 kB, necesitamos un mínimo de 14 bits para representar de forma única una dirección de memoria .
Dado que cada bloque de caché tiene un tamaño de 4 bytes, el número total de conjuntos en la caché es 256/4, lo que equivale a 64 conjuntos.
La dirección entrante a la caché se divide en bits para Offset , Index y Tag .
- El desplazamiento corresponde a los bits utilizados para determinar el byte al que se accederá desde la línea de caché. Como las líneas de caché tienen una longitud de 4 bytes, hay 2 bits de desplazamiento .
- El índice corresponde a los bits utilizados para determinar el conjunto de la caché. Hay 64 conjuntos en la caché y, dado que 2^6 = 64, hay 6 bits de índice.
- La etiqueta corresponde a los bits restantes. Esto significa que hay 14 – (6+2) = 6 bits de etiqueta , que se almacenan en el campo de etiqueta para coincidir con la dirección en la solicitud de caché.
A continuación se muestran las direcciones de memoria y una explicación de a qué línea de caché corresponden:
- La dirección
0x0000(etiqueta -0b00_0000, índice –0b00_0000, desplazamiento –0b00) corresponde al bloque 0 de la memoria y se asigna al conjunto 0 de la caché. - La dirección
0x0004(etiqueta -0b00_0000, índice –0b00_0001, desplazamiento –0b00) corresponde al bloque 1 de la memoria y se asigna al conjunto 1 de la caché. - La dirección
0x00FF(etiqueta –0b00_0000, índice –0b11_1111, desplazamiento –0b11) corresponde al bloque 63 de la memoria y se asigna al conjunto 63 de la caché. - La dirección
0x0100(etiqueta –0b00_0001, índice –0b00_0000, desplazamiento –0b00) corresponde al bloque 64 de la memoria y se asigna al conjunto 0 de la caché.
Caché totalmente asociativa
En una caché totalmente asociativa, la caché se organiza en un único conjunto de caché con múltiples líneas de caché. Un bloque de memoria puede ocupar cualquiera de las líneas de caché. La organización de la caché se puede representar como una matriz de filas de 1 × m . [ 5 ]
Para colocar un bloque en la caché
- La línea de caché se selecciona en función del bit válido [ 1 ] asociado a ella. Si el bit válido es 0, el nuevo bloque de memoria se puede colocar en la línea de caché; de lo contrario, debe colocarse en otra línea de caché con el bit válido 0.
- Si la caché está completamente ocupada, se desaloja un bloque y el bloque de memoria se coloca en esa línea de caché.
- La expulsión de un bloque de memoria de la caché se decide mediante la política de reemplazo . [ 7 ]
Para buscar una palabra en la caché
- El campo de etiqueta de la dirección de memoria se compara con los bits de etiqueta asociados a todas las líneas de caché. Si coincide, el bloque está presente en la caché y se produce un acierto. Si no coincide, se produce un fallo de caché y debe recuperarse de la memoria inferior.
- En función del desplazamiento, se selecciona un byte y se devuelve al procesador.

Ventajas
- La estructura de caché totalmente asociativa nos brinda la flexibilidad de colocar bloques de memoria en cualquiera de las líneas de caché y, por lo tanto, una utilización completa de la caché.
- La política de ubicación proporciona una mejor tasa de aciertos de caché.
- Ofrece la flexibilidad de utilizar una amplia variedad de algoritmos de reemplazo si se produce un fallo de caché.
Desventajas
- La política de ubicación consume mucha energía, ya que el circuito de comparación tiene que recorrer toda la caché para localizar un bloque.
- Es el método más caro de todos, debido al elevado coste del hardware de comparación asociativa.
Ejemplo
Consideremos una memoria principal de 16 kilobytes, organizada en bloques de 4 bytes, y una caché totalmente asociativa de 256 bytes con un tamaño de bloque de 4 bytes. Dado que la memoria principal es de 16 kB, necesitamos un mínimo de 14 bits para representar de forma única una dirección de memoria.
El número total de conjuntos en la caché es 1, y el conjunto contiene 256/4=64 líneas de caché, ya que el bloque de caché tiene un tamaño de 4 bytes.
La dirección entrante a la caché se divide en bits para el desplazamiento y la etiqueta.
- El desplazamiento corresponde a los bits utilizados para determinar el byte al que se accederá desde la línea de caché. En el ejemplo, hay 2 bits de desplazamiento, que se utilizan para direccionar los 4 bytes de la línea de caché.
- La etiqueta corresponde a los bits restantes. Esto significa que hay 14 – (2) = 12 bits de etiqueta , que se almacenan en el campo de etiqueta para coincidir con la dirección en la solicitud de caché.
Dado que cualquier bloque de memoria puede asignarse a cualquier línea de caché, el bloque de memoria puede ocupar una de las líneas de caché según la política de reemplazo.
caché asociativa por conjuntos
La caché asociativa por conjuntos es un punto intermedio entre la caché de mapeo directo y la caché totalmente asociativa.
Una caché asociativa por conjuntos puede imaginarse como una matriz n × m . La caché se divide en 'n' conjuntos, y cada conjunto contiene 'm' líneas de caché. Un bloque de memoria se asigna primero a un conjunto y luego se coloca en cualquier línea de caché de dicho conjunto.
El rango de cachés, desde las de mapeo directo hasta las totalmente asociativas, constituye un continuo de niveles de asociatividad de conjuntos. (Una caché de mapeo directo es asociativa de conjuntos unidireccional, y una caché totalmente asociativa con m líneas de caché es asociativa de conjuntos m -direccional).
Muchas cachés de procesador en los diseños actuales son de mapeo directo, asociativas por conjuntos de dos vías o asociativas por conjuntos de cuatro vías. [ 5 ]
Para colocar un bloque en la caché
- El conjunto se determina mediante los bits de índice derivados de la dirección del bloque de memoria.
- El bloque de memoria se coloca en una línea de caché disponible en el conjunto identificado, y la etiqueta se almacena en el campo de etiqueta asociado a la línea. Si todas las líneas de caché del conjunto están ocupadas, los nuevos datos reemplazan el bloque identificado mediante la política de reemplazo .
Para localizar una palabra en la caché
- El conjunto se determina mediante los bits de índice derivados de la dirección del bloque de memoria.
- Los bits de la etiqueta se comparan con las etiquetas de todas las líneas de caché presentes en el conjunto seleccionado. Si la etiqueta coincide con alguna de las líneas de caché, se produce un acierto y se devuelve la línea correspondiente. Si la etiqueta no coincide con ninguna de las líneas, se produce un fallo de caché y se solicitan los datos del siguiente nivel de la jerarquía de memoria.
Ventajas
- La política de ubicación supone un compromiso entre la caché de mapeo directo y la caché totalmente asociativa.
- Ofrece la flexibilidad de utilizar algoritmos de reemplazo en caso de que se produzca un fallo de caché.
Desventajas
- La política de ubicación no utilizará eficazmente todas las líneas de caché disponibles en la caché y sufrirá de fallos por conflicto .
Ejemplo
Consideremos una memoria principal de 16 kilobytes, organizada en bloques de 4 bytes, y una caché asociativa bidireccional de 256 bytes con un tamaño de bloque de 4 bytes. Dado que la memoria principal es de 16 kB, necesitamos un mínimo de 14 bits para representar de forma única una dirección de memoria.
Dado que cada bloque de caché tiene un tamaño de 4 bytes y es asociativo por conjuntos de 2 vías, el número total de conjuntos en la caché es 256/(4 * 2), lo que equivale a 32 conjuntos.

La dirección entrante a la caché se divide en bits para el desplazamiento, el índice y la etiqueta.
- El desplazamiento corresponde a los bits utilizados para determinar el byte al que se accederá desde la línea de caché. Como las líneas de caché tienen una longitud de 4 bytes, hay 2 bits de desplazamiento .
- El índice corresponde a los bits utilizados para determinar el conjunto de la caché. Hay 32 conjuntos en la caché y, dado que 2^5 = 32, hay 5 bits de índice.
- La etiqueta corresponde a los bits restantes. Esto significa que hay 14 – (5+2) = 7 bits , que se almacenan en el campo de etiqueta para coincidir con la dirección en la solicitud de caché.
A continuación se muestran las direcciones de memoria y una explicación de a qué línea de caché pertenecen y en qué conjunto:
- La dirección
0x0000(etiqueta -0b000_0000, índice –0b0_0000, desplazamiento –0b00) corresponde al bloque 0 de la memoria y se asigna al conjunto 0 de la caché. El bloque ocupa una línea de caché en el conjunto 0, determinada por la política de reemplazo de la caché. - La dirección
0x0004(etiqueta -0b000_0000, índice –0b0_0001, desplazamiento –0b00) corresponde al bloque 1 de la memoria y se asigna al conjunto 1 de la caché. El bloque ocupa una línea de caché en el conjunto 1, determinada por la política de reemplazo de la caché. - La dirección
0x00FF(etiqueta –0b000_0001, índice –0b1_1111, desplazamiento –0b11) corresponde al bloque 63 de la memoria y se asigna al conjunto 31 de la caché. El bloque ocupa una línea de caché en el conjunto 31, determinada por la política de reemplazo de la caché. - La dirección
0x0100(etiqueta –0b000_0010, índice –0b0_0000, desplazamiento –0b00) corresponde al bloque 64 de la memoria y se asigna al conjunto 0 de la caché. El bloque ocupa una línea de caché en el conjunto 0, determinada por la política de reemplazo de la caché.
Caché asociativa sesgada bidireccional
Se han sugerido otros esquemas, como la caché sesgada , [ 8 ] donde el índice para la vía 0 es directo, como se indicó anteriormente, pero el índice para la vía 1 se forma con una función hash . Una buena función hash tiene la propiedad de que las direcciones que entran en conflicto con el mapeo directo tienden a no entrar en conflicto cuando se mapean con la función hash, por lo que es menos probable que un programa sufra una cantidad inesperadamente grande de fallos de conflicto debido a un patrón de acceso patológico. La desventaja es la latencia adicional que supone el cálculo de la función hash. [ 9 ] Además, cuando llega el momento de cargar una nueva línea y desalojar una antigua, puede ser difícil determinar qué línea existente se usó menos recientemente, porque la nueva línea entra en conflicto con datos en diferentes índices en cada vía; el seguimiento LRU para cachés no sesgadas generalmente se realiza por conjunto. Sin embargo, las cachés asociativas sesgadas tienen grandes ventajas sobre las asociativas de conjuntos convencionales. [ 10 ]
Caché pseudoasociativa
Una caché asociativa verdadera prueba todas las posibles combinaciones simultáneamente, utilizando algo similar a una memoria direccionable por contenido . Una caché pseudoasociativa prueba cada combinación posible de forma individual. Una caché hash-rehash y una caché asociativa por columnas son ejemplos de una caché pseudoasociativa.
En el caso común de encontrar un acierto en la primera forma probada, una caché pseudoasociativa es tan rápida como una caché de mapeo directo, pero tiene una tasa de fallos por conflicto mucho menor que una caché de mapeo directo, más cercana a la tasa de fallos de una caché totalmente asociativa. [ 9 ]
Véase también
Referencias
- 1 2 3 4 5 "Los fundamentos del almacenamiento en caché" (PDF) .
- ↑ "Políticas de ubicación de caché" . Archivado del original el 21 de febrero de 2020.
- ↑ "Políticas de colocación" . Archivado del original el 14 de agosto de 2020.
- ↑ Mattson, RL ; Gecsei, J.; Slutz, DR; Traiger, I (1970). "Técnicas de evaluación para jerarquías de almacenamiento". IBM Systems Journal . 9 (2): 78– 117. doi : 10.1147/sj.92.0078 .
- ^ Solihin , Yan (2015) . Fundamentos de la arquitectura paralela multinúcleo . Taylor y Francisco. págs. 136-141 . ISBN 978-1482211184.
- ↑ "Tipos de fallos de caché" (PDF) . Archivado del original (PDF) el 30-11-2016 . Consultado el 24-10-2016 .
- ↑ "Caché totalmente asociativa" . Archivado del original el 24 de diciembre de 2017.
- ↑ André Seznec (1993). "Un argumento a favor de las cachés asociativas sesgadas bidireccionales" . ACM SIGARCH Computer Architecture News . 21 (2): 169– 178. doi : 10.1145/173682.165152 .
- 1 2 C. Kozyrakis . "Lección 3: Técnicas avanzadas de almacenamiento en caché" (PDF) . Archivado del original (PDF) el 7 de septiembre de 2012.
- ↑ Microarquitectura : "Las cachés asociativas sesgadas tienen... ventajas importantes sobre las cachés asociativas de conjuntos convencionales."
- Caché (informática)