MAPEO
 

    Al pasar los datos desde la memoria principal a la memoria cache estos se traen por bloques. El motivo de llevar los datos por bloques se debe a que, por ejemplo, si el procesador pide el dato de la dirección n entonces es muy probable que después pida el dato de la dirección n+1, por lo tanto, se ahorra tiempo al llevar los datos por bloques a la cache. Por otro lado como ya hemos visto en los párrafos anteriores la memoria Cache es de poca capacidad, en relación con la memoria principal, por lo tanto cobra importancia el tema de que y como pongo datos en la memoria Cache. Es necesario entonces contar con un proceso de conversión de las direcciones, que se llama MAPEO.

 Mapeo Directo

    Para explicar, el mapeo directo es mejor comenzar con un ejemplo, que por el momento, es sólo, ilustrativo y no tiene relación con la realidad (es de mentira)  

El Mapeo Directo funciona de la siguiente forma :  Si por ejemplo se quiere acceder a la posición de memoria 405 se ocupa la siguiente tabla de ubicación.

 
TAG
BIC
WIB
1
1
0
0
1
0
1
0
1
= 405
 
El WIB es de 3 bit por que con estos se pueden distinguir entre 8 alternativas, es decir las que corresponden a las divisiones de un bloque.
El BIC es de 2 bit porque se pueden distinguir cuatro alternativas, o sea los cuatro bloques de la cache.
El TAG, finalmente distingue entre las 16 alternativas que corresponden a los diferentes bloques de la memoria principal que pueden ir a parar a un bloque determinado de la cache.

    El diagrama de la fig  ilustra el mapeo directo. Aquí se puede apreciar como las posiciones de la memoria principal son asignadas a los bloques de la cache, por otro lado la flecha que apunta desde la posición cero de la MM indica como cada bloque de la memoria principal esta dividido en otros ocho sub bloques.
 
 


 

 
    Finalmente no sólo basta con llevar los datos a las posiciones de la cache, además el procesador de alguna forma debe ubicar los datos, ya sea que los encuentre o no, en la cache.
NOTA : Cabe destacar que el procesador pide datos al mismo tiempo tanto a la cache como a la memoria principal, por lo tanto si el dato esta en la cache esta responderá más rápido que la MM.  

El siguiente hardware permite al procesador ubicar los datos que requiere.

 

Ejemplo
Un procesador 80386 tiene 32b de direcciones, lo que quiere decir que puede direccionar 4GB de memoria. Obviamente es difícil que un procesador con las características del 386 pueda direccionar tal cantidad de memoria. Supondremos (la suposición en este caso es muy real) entonces, el siguiente detalle.

8 MB = 8.388.608 / 16 = 524.288 (19 b) Número de bloques de la MM

128 KB = 131.072 / 16 = 8.192 (BIC = 13 b) Número de bloques de la MC

524.288 / 8192 =64 Este número corresponde al TAG (6 bit). Dicho de otra forma hay 64 bloques de 16 unidades cada uno compitiendo por un determinado bloque de la cache.
Si el procesador pide la dirección 6938732 (0069E06C) entonces resultara la siguiente tabla de ubicación

 
TAG = 6
BIC = 13
WIB = 4
22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
1 1 0 1 0 0 1 1 1 1 0 0 0 0 0 0 1 1 0 1 1 0 0
 
    Eventualmente el TAG podría haber sido de hasta 15 bit debido a que el bus de direcciones es de 32 bit, pero como ya dijimos esto no es posible, por otro lado si la memoria TAG tuviera que manejar estos 15 bits debería ser muy grande lo cual tampoco es conveniente.

NOTA : En los procesadores, el tamaño del TAG determina la cantidad de memoria que se puede direccionar, por lo tanto, aún cuando el TAG del problema anterior resulto de 6 bit, normalmente pueden ser un poco mas grandes. No olvidemos que actualmente las memorias de 64 MB son normales y las hay aún mas grandes.

VENTAJAS: Este método es rápido, fácil de implementar y sencillo de usar.

DESVENTAJA : Con este sistema se produce un efecto llamado Contención que se produce cuando dos cosas quieren usar un mismo elemento. Este efecto reduce drásticamente el rendimiento del procesador.
 
 Mapeo Totalmente Asociativo  

    La fig  explica la diferencia que existe entre una memoria asociativa y una memoria común.
 

    En el mapeo Totalmente Asociativo un bloque de la memoria Principal puede estar en cualquier bloque de la cache. Para buscar un dato en la cache se hace necesario entonces revisar todos los bloques de la cache, lo cual es muy lento, razón por la cual este tipo de mapeo no se utiliza en la práctica.

Mapeo Asociativo Por Conjunto (De tamaño 4)  

    En el mapeo Asociativo por Conjunto un determinado bloque de la memoria principal puede estar en cualquier bloque de la memoria cache, que sea parte del conjunto que le corresponde. La siguiente figura, gráfica esta situación

  

    Como se puede ver la memoria cache tiene dividido sus bloques en dos nuevos bloques (0 y 1) que reciben el nombre de SET. Esta nueva distribución significa que para buscar un dato se debe acceder a tantos subconjuntos como tenga cada SET (en este caso 2). En la práctica esto se traduce en duplicar el hardware de búsqueda (solo para este caso). Cabe destacar que la mayoría de las memorias tienen TAG de tamaño 4.  

El tamaño del SIC es igual a N / S donde N = Tamaño del cache en bloques, S = Tamaño del conjunto.
SIC = SET in cache  

Ejemplo Buscar la dirección 333 suponiendo las siguientes condiciones :

 
TAG
SIC WIB
1 0 1 0 0
1
1 0 1
 

WIB es de tamaño 3 porque distingue entre las 8 palabras de cada bloque.
SIC es de tamaño 1 porque debe distinguir entre 2 alternativas o en este caso conjuntos.
TAG es de tamaño 5 porque debe distinguir las 32 alternativas que pueden encontrarse en un determinado conjunto. Cabe recordar que estas 32 alternativas se buscan simultáneamente en los dos bloques que tienen, en este caso, cada conjunto.

Ejemplo: Un procesador 80386 tiene 32b de direcciones, lo que quiere decir que puede direccionar 4GB de memoria. Buscar la dirección 5382196Dec (00522034 Hex)

8 MB = 8.388.608 / 16 = 524.288 Número de bloques de la MM
128 KB = 131.072 / 16 = 8.192 Número de bloques de la cache
8192 / 4 = 2048 (SIC = 11 bit) Numero de conjuntos de tamaño 4 que hay en la cache.
Para ahorrar espacio en la fig. solo se graficaron 9 de los bit del TAG

 
TAG = 17
SIC = 11
WIB = 4
23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 1 1 0 1 0 0
 

    Finalmente para encontrar un dato se debe comparar el TAG que viene del procesador con los 4 TAG del conjunto 515 (número que corresponde al SIC)