Uno de los problemas importantes a la hora de la velocidad de trabajo de un ordenador son los retardos por accesos a
memoria. La CPU tiene que trabajar con datos, pero estar continuamente accediendo a la memoria principal es costoso en tiempo. Por ello en los ordenadores de hoy en día existe la
Jerarquía de Memorias:
Esta
jerarquía nos ayuda a agilizar los accesos a memoria. Pero hay que tener en cuenta que el rendimiento que esta
jerarquía (el caso que estudiamos el de la cache) depende totalmente de la
organización de ellas.
Podemos pensar en la caché como una tabla dividida en filas, que serán las unidades básicas de almacenamiento. Cada vez que traemos información de le memoria principal a la caché, traemos como mínimo una línea, funcionando del mismo modo a la hora de escribir desde caché a memoria principal.
La idea principal que debemos tener en cuenta para organizar la cache, es como se va a comunicar la caché con la
memoria principal. Es decir, como vamos a traducir las direcciones de la
memoria principal en caché. Existen tres técnicas:
1) Caché completamente asociativa:
Este tipo de caché puede almacenar en cualquiera de sus filas cualquier posición de
memoria principal. Esto quiere decir que no se realizan
búsquedas para seleccionar en que parte de la caché se almacenará (en la primera línea vacía que tengamos) y que el acierto es muy alto. Pero por el contrario, el tiempo de acceso a la caché es muy alto, ya que al buscar cualquier dato nos encontramos con que puede
estar en cualquier parte.
2) Caché de mapeado directo:En este caso cada dirección de memoria principal
tendrá una posición en caché concreta donde se debe almacenar. Esto nos da la ventaja de saber de antemano que al acceder a caché encontraremos la
dirección que estamos buscando en esa linea, es decir, velocidad de acceso muy alta.
Pero por otro lado tenemos el inconveniente de que a una linea de caché corresponden varias posiciones de memoria principal, o lo que es lo mismo, que hay muchas
posibilidades que cada vez que busquemos los datos en caché de cierta
posición de memoria, encontremos datos referentes a otra posición, tendremos una alta tasa de fallos.
3) Caché asociativa por conjuntos:Si ninguno de los
métodos de
organización anteriores son eficientes, podemos mezclarlos para dar una
organización mixta. Esta es la idea de la "asociativa por conjuntos"
. La caché estará dividida por bloques o conjuntos con más de una linea, cada dirección de memoria principal corresponderá a un bloque y dentro del bloque se
distribuirá de manera asociativa.
En este caso particular la eficiencia dependerá del tamaño del bloque que decidamos utilizar. Mientras mayor sea el tamaño de bloque la
memoria parecerá más asociativa, y si es menor más de
mapeado directo, cada una con sus ventajas e inconvenientes.