Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Memoria Caché
Conceptos y principios básicos
La palabra procede de la voz inglesa cache (/kæʃ/; «escondite secreto para guardar
mercancías, habitualmente de contrabando»), y esta a su vez de la francesa cache, (/kaʃ/;
«escondrijo o escondite»). A menudo, en español se escribe con tilde sobre la «e», del mismo
modo como se venía escribiendo con anterioridad el neologismo «caché» («distinción o
elegancia» o «cotización de un artista»), proveniente también del francés, pero no de la
misma palabra, sino de cachet, (/ka'ʃɛ/; «sello» o «salario»).
La Real Academia Española, en su Diccionario de la lengua española, sólo reconoce la
palabra con tilde, aunque en la literatura especializada en arquitectura de computadoras (por
ejemplo, las traducciones de libros de Andrew S. Tanenbaum, John L. Hennessy y David A.
Patterson) se emplea siempre la palabra sin tilde, por ser anglosajona, y debe por ello
escribirse en cursiva (cache)
En informática, la memoria caché es la memoria de acceso rápido de un microprocesador,
que guarda temporalmente los datos recientes de los procesados (información).
La memoria caché es un búfer especial de memoria que poseen las computadoras, que
funciona de manera semejante a la memoria principal, pero es de menor tamaño y de acceso
más rápido. Es usada por el microprocesador para reducir el tiempo de acceso a datos
ubicados en la memoria principal que se utilizan con más frecuencia.
La caché es una memoria que se sitúa entre la unidad central de procesamiento (CPU) y
la memoria de acceso aleatorio (RAM) para acelerar el intercambio de datos.
Cuando se accede por primera vez a un dato, se hace una copia en la caché; los accesos
siguientes se realizan a dicha copia, haciendo que sea menor el tiempo de acceso medio al
dato. Cuando el microprocesador necesita leer o escribir en una ubicación en memoria
principal, primero verifica si una copia de los datos está en la caché; si es así, el
microprocesador de inmediato lee o escribe en la memoria caché, que es mucho más rápido
que de la lectura o la escritura a la memoria principal.
RAM caché y caché de disco
La unidad caché es un sistema especial de almacenamiento de alta velocidad. Puede ser tanto
un área reservada de la memoria principal como un dispositivo de almacenamiento de alta
velocidad independiente.
Hay dos tipos de caché frecuentemente usados en computadoras personales: memoria caché
y caché de disco.
Una memoria caché, a veces llamada “RAM caché”, es una parte de RAM estática (SRAM) de
alta velocidad, más rápida que la RAM dinámica (DRAM) usada como memoria principal. La
memoria caché es efectiva dado que los programas acceden una y otra vez a los mismos datos
o instrucciones. Guardando esta información en SRAM, la computadora evita acceder a la lenta
DRAM.
Cuando se encuentra un dato en la caché, se dice que se ha producido un acierto, siendo un
caché juzgado por su tasa de aciertos (hit rate). Los sistemas de memoria caché usan una
tecnología conocida por caché inteligente en la cual el sistema puede reconocer cierto tipo de
datos usados frecuentemente. Las estrategias para determinar qué información debe ser
puesta en la caché constituyen uno de los problemas más interesantes en la informática.
Algunas memorias caché están construidas en la arquitectura de los microprocesadores. Por
ejemplo, el microprocesador Pentium II: tiene 32 KiB de caché de primer nivel (level 1 o L1)
repartida en 16 KiB para datos y 16 KiB para instrucciones; la caché de segundo nivel (level
2 o L2) es de 512 KiB y trabaja a mitad de la frecuencia del microprocesador. La caché L1 está
en el núcleo del microprocesador, y la L2 está en una tarjeta de circuito impreso junto a éste.
La caché de disco trabaja sobre los mismos principios que la memoria caché, pero en lugar de
usar SRAM de alta velocidad, usa la convencional memoria principal. Los datos más recientes
del disco duro a los que se ha accedido (así como los sectores adyacentes) se almacenan en
un búfer de memoria. Cuando el programa necesita acceder a datos del disco, lo primero que
comprueba es la caché de disco para ver si los datos ya están ahí. La caché de disco puede
mejorar notablemente el rendimiento de las aplicaciones, dado que acceder a un byte de datos
en RAM puede ser miles de veces más rápido que acceder a un byte del disco duro.
Composición interna
Los datos en la memoria caché se alojan en distintos niveles según la frecuencia de uso que
tengan, estos niveles son los siguientes:
Jerarquía de la Memoria
Capacidad
Velocidad
Coste por bit
La cuestión de la capacidad es simple, cuanto más memoria haya disponible, más podrá
utilizarse.
La velocidad óptima para la memoria es la velocidad a la que el microprocesador puede
trabajar, de modo que no haya tiempos de espera entre cálculo y cálculo, utilizados para
traer operandos o guardar resultados.
En suma, el coste de la memoria no debe ser excesivo, para que sea factible construir un
equipo accesible.
Los tres factores compiten entre sí, por lo que hay que encontrar un equilibrio.
Las siguientes afirmaciones son válidas:
A menor tiempo de acceso mayor coste.
A mayor capacidad menor coste por bit.
A mayor capacidad menor velocidad.
Se busca entonces contar con capacidad suficiente de memoria, con una velocidad que
sirva para satisfacer la demanda de rendimiento y con un coste que no sea excesivo.
Gracias a un principio llamado cercanía de referencias, es factible utilizar una mezcla de los
distintos tipos y lograr un rendimiento cercano al de la memoria más rápida.
Niveles jerárquicos
Decide dónde debe colocarse un bloque de memoria principal que entra en la memoria caché.
Las más utilizadas son:
Directa: al bloque i-ésimo de memoria principal le corresponde la posición i módulo n,
donde n es el número de bloques de la memoria caché. Cada bloque de la memoria
principal tiene su posición en la caché y siempre en el mismo sitio. Su inconveniente es
que cada bloque tiene asignada una posición fija en la memoria caché y ante continuas
referencias a palabras de dos bloques con la misma localización en caché, hay
continuos fallos habiendo sitio libre en la caché.
Asociativa: Los bloques de la memoria principal se alojan en cualquier bloque de la
memoria caché, comprobando solamente la etiqueta de todos y cada uno de los
bloques para verificar acierto. Su principal inconveniente es la cantidad de
comparaciones que realiza.
Asociativa por conjuntos: Cada bloque de la memoria principal tiene asignado un
conjunto de la caché, pero se puede ubicar en cualquiera de los bloques que
pertenecen a dicho conjunto. Ello permite mayor flexibilidad que la correspondencia
directa y menor cantidad de comparaciones que la totalmente asociativa.
Política de extracción
La política de extracción determina cuándo y qué bloque de memoria principal hay que traer a
memoria caché. Existen dos políticas muy extendidas:
Por demanda: un bloque sólo se trae a memoria caché cuando ha sido referenciado y
no se encuentre en memoria caché.
Con prebúsqueda: cuando se referencia el bloque i-ésimo de memoria principal, se
trae además el bloque (i+1)-ésimo. Esta política se basa en la propiedad de localidad
espacial de los programas.
Política de reemplazo
Determina qué bloque de memoria caché debe abandonarla cuando no existe espacio
disponible para un bloque entrante. Básicamente hay cuatro políticas:
Aleatoria: el bloque es reemplazado de forma aleatoria.
FIFO: se usa el algoritmo First In First Out (FIFO) (primero en entrar primero en salir)
para determinar qué bloque debe abandonar la caché. Este algoritmo generalmente es
poco eficiente.
Usado menos recientemente (LRU): Sustituye el bloque que hace más tiempo que no
se ha usado en la caché, traeremos a caché el bloque en cuestión y lo modificaremos
ahí.
Usado con menor frecuencia (LFU): Sustituye el bloque que ha experimentado menos
referencias.
Organización de la Cache
Las memorias caché son elementos básicos en cualquier CPU y GPU actual. Su
funcionamiento básico es muy sencillo. Se trata de una tabla. Consta de una serie de
marcos en los que se almacenan copias de bloques de la memoria principal. Cada uno de
estos marcos va asociado a una etiqueta que permite saber que bloque de memoria se ha
copiado en dicho marco. Los datos en una memoria caché pueden organizarse según varios
parámetros que afectan a su rendimiento de una manera u otra.
El primer factor importante es el tamaño. En general una caché grande tiene menos fallos
(es más probable que los datos pedidos estén en la caché), pero a cambio es lenta, además
de que una caché muy grande supone ocupar una superficie del chip considerable.
Otra decisión a tomar es el tamaño de los marcos de la caché. En una caché con marcos
pequeños es más fácil que el procesador según vaya pidiendo datos (por ejemplo
procesando un array) llegue a pedir alguno que no está en la caché, por lo que hay más
probabilidad de tener fallos. Sin embargo, en caso de tener un fallo, copiar un bloque a un
marco de la caché es una operación menos costosa que si el marco fuera más grande.
Como hemos visto, las cachés pueden alojar algunos bloques de memoria para poder
acceder a ellos rápidamente. Existen estrategias a la hora de emplazar un bloque memoria
en un marco de la caché:
Emplazamiento directo: A un bloque le corresponde un único marco. Esta estrategia
es sencilla, hace que la caché sea rápida, pero provoca más fallos de caché.
Emplazamiento asociativo: Un bloque puede almacenarse en cualquier marco. En
este caso se minimizan los fallos, pero la caché es más lenta.
Emplazamiento asociativo por conjuntos: A un bloque le corresponde un pequeño
conjunto de marcos. Es una solución intermedia entre las dos anteriores.
Lo ideal sería poder tener una caché lo más grande posible y lo más rápida posible al mismo
tiempo. Tecnológicamente no es posible por lo que se tiende a utilizar varios niveles de caché.
Pueden usarse varios niveles de caché que son cada vez más grandes y más lentas. De esta
manera el procesador accede a la caché de nivel 1, que es la más rápida, pero la más
pequeña. En caso de haber un fallo la información no se busca directamente en la memoria
principal, sino que se busca en la caché de nivel 2, que es más lenta, pero aun así
sensiblemente más rápida que la RAM. En la actualidad es muy común utilizar 3 niveles de
caché. El objetivo es que desde el punto del vista del procesador se vea una memoria del
tamaño de la memoria principal (GB) con la velocidad de acceso de la caché de nivel 1 (ns).
En general un procesador puede incluir diferentes cachés diseñadas especialmente para una
función específica, lo que hace que tengan sus peculiaridades. Por ejemplo es habitual que
existan cachés separadas para de datos y de instrucciones, al menos en el primer nivel, para
evitar los riesgos estructurales.
En resumen:
Tamaño: cuanto más grande se hace el sistema menor tasa de fallos pero por contra,
más lentas y caras se manifiestan. El tamaño estándar suele estar entre 1K y 512K
palabras.
Tamaño de la líneas: a medida que aumenta el tamaño de bloque la tasa de aciertos
primero aumenta debido al principio de localidad, pero más tarde decrecerá ya que
cada palabra adicional estará más lejos de la palabra requerida, y por tanto es más
improbable que sea necesaria a corto plazo. La relación entre tamaño de bloque y tasa
de aciertos es compleja, dependiendo de las características de localidad de cada
programa particular (entre 4 y 8 unidades direccionables).
Número de cachés: con el aumento de densidad de integración (ley de Moore) ha sido
posible tener una caché en el mismo chip del procesador: caché on-chip. Esto permite
tener un sistema basado en dos niveles de caché: Interna (L1): reduce el tiempo de
acceso pues elimina el acceso al bus. Es pequeña ya que debe caber en la CPU. Suele
utilizar emplazamiento directo. Externa (L2): grande (2MB) y suele utilizar
emplazamiento asociativo por conjuntos.
Con respecto a su contenido suele separarse la cache en dos:
1. Cache de instrucciones (solo lectura)
2. Cache de datos (lectura/escritura)
3. Ventaja: duplica el ancho de banda.
4. Desventaja: ofrece mayor tasa de fallos que la cache unificada.
Bibliografía:
Linkografía:
http://www.nebrija.es/~oruano/arquitectura/Tema4.pdf
https://es.wikipedia.org/wiki/Cach%C3%A9_(inform%C3%A1tica)
http://ajbeas.webcindario.com/asocon.html
http://ajbeas.webcindario.com/directa.html
http://www-2.dc.uba.ar/materias/oc1/files/teorica/TD10B.pdf
http://cacheyevolucion.blogspot.pe/2010/03/organizacion-de-la-cache.html
https://www.fdi.ucm.es/profesor/jjruz/WEB2/Temas/EC6.pdf
http://computadoras.about.com/od/Preguntas-Frecuentes-elegir-pc/a/Memoria-Cache-
Que-Es-Y-Para-Que-Sirve.htm
https://www.fdi.ucm.es/profesor/jjruz/WEB2/Temas/EC6.pdf
http://www.monografias.com/trabajos82/que-es-memoria-cache-procesador/que-es-
memoria-cache-procesador2.shtml#memoriacaa