Bitácora C1 16/06/2015

Memoria Caché

La memoria caché es una memoria intermedia (entre la uc y la memoria principal) donde se guardan los valores o instrucciones mas accedidas. Se compone de celdas de almacenamiento que reciben el nombre de líneas (slots, ranuras). Una línea almacena un bloque de celdas de memoria principal y un tag (etiqueta)  que permite identificar al bloque.
Los bloques son divisiones conceptuales de las celdas de memoria. Por ejemplo, si tenemos una memoria principal de 256 celdas (8 bits de dirección) y una memoria caché con bloques de 4 celdas, entonces se usarán 6 bits como tag de los bloques y los 2 bits restantes se usarán como índice al querer acceder a una celda dentro del bloque almacenado en la línea de caché.
Cómo funciona:
  Para lectura de celda de memoria:
  1. La unidad de control pide el contenido de una celda.
  2. La caché verifica si tiene el contenido de esa celda. Para hacerlo, verifica que tenga guardado el bloque en el que se encuentra esa celda. Si no lo tiene (ocurre un fallo), le pide a la memoria principal el bloque y lo almacena junto con un tag que indica el número de bloque.
  3. Finalmente, es la caché la que devuelve el valor. Tomando el bloque, accede al valor de la celda a través del índice o palabra. Éste lo saca de los últimos bits de la dirección de memoria solicitada.
Para escritura en celda de memoria:
  1. La unidad de control pide una escritura de un valor en una celda de memoria.
  2. La caché verifica si está cacheada. Si no lo está, cachea el bloque correspondiente y luego lo actualiza.
  3. La caché pide la escritura del valor en la celda de memoria.

Función de correspondencia completamente asociativa

En una caché con esta función de correspondencia, cualquier bloque puede estar en cualquier línea y por lo tanto se necesita tener un tag que identifique absolutamente el contenido de esa línea.

Para verificar si una celda de memoria está cacheada, la memoria caché compara el tag de cada línea con la dirección enviada desde la UC (o parte de esa dirección), y lo hace de manera simultánea. Esta simultaneidad requiere que esté implementada con circuitos comparadores para cada línea, característica que puede resultar costosa. Existen otros enfoques (otras funciones de correspondencia) que mejoran este aspecto, pero que sacrifican otros, y que describiremos en la próxima bitácora…