



























Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Prepara tus exámenes
Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity
Prepara tus exámenes con los documentos que comparten otros estudiantes como tú en Docsity
Encuentra los documentos específicos para los exámenes de tu universidad
Estudia con lecciones y exámenes resueltos basados en los programas académicos de las mejores universidades
Responde a preguntas de exámenes reales y pon a prueba tu preparación
Consigue puntos base para descargar
Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium
Comunidad
Pide ayuda a la comunidad y resuelve tus dudas de estudio
Ebooks gratuitos
Descarga nuestras guías gratuitas sobre técnicas de estudio, métodos para controlar la ansiedad y consejos para la tesis preparadas por los tutores de Docsity
Introducción a la memoria cache explicacion y resumen.
Tipo: Apuntes
1 / 35
Esta página no es visible en la vista previa
¡No te pierdas las partes importantes!




























Arquitectura de Computadores Memoria Caché - 1
En el capítulo anterior comenzamos a ver cómo mejorar las prestaciones de un ordenador convencional. Lo hicimos empezando por ver la forma de aumentar el ritmo de ejecución de instrucciones en la CPU.
Ahora vamos a ocuparnos de cómo mejorar el tiempo de acceso a los datos que están en memoria principal. Para ello incorporaremos la memoria caché , un nuevo nivel en la jerarquía de memorias situado entre la CPU y la memoria principal.
Veremos cómo una memoria tan pequeña (en comparación con la memoria principal) puede ser tan útil, y las maneras en que se puede organizar para aprovecharla de la mejor manera posible.
Arquitectura de Computadores Memoria Caché - 2
Registros
Caché N1-N
Memoria Principal
Disco Magnético
Cinta Magnética Disco Óptico
Quién se ocupa del transvase
Como vimos en el capítulo de la memoria principal, un ordenador debe construirse con diversos niveles de memoria organizados en una jerarquía, de tal manera que se pueda obtener, como conjunto, una memoria de mucha capacidad, rápida y barata.
Recordemos la pirámide de memoria en la que, a medida que se va de arriba hacia abajo, sucede lo siguiente:
La clave de la solución está en este último punto: la decreciente frecuencia de acceso. Esto simplemente quiere decir que no se accede a todos los datos con la misma frecuencia; obviamente se accede más a los datos del programa en ejecución que a los de uno que no se ejecuta desde hace un año; y de igual manera, en un momento dado se accede más a los datos de una expresión que se está evaluando en ese preciso instante que a otros datos del programa.
En este capítulo vamos a ocuparnos de la memoria caché. Comenzaremos por ver cómo una memoria tan pequeña (en comparación con la memoria principal) puede ser tan útil.
Arquitectura de Computadores Memoria Caché - 4
Es muy probable repetir instrucciones (bucles)
Localidad Temporal
Localidad Espacial
Principio de Localidad de Referencia
Es muy probable ejecutar instrucciones cercanas
Unidad de transferencia: BLOQUE
El principio de localidad se manifiesta en dos aspectos: temporal y espacial.
La localidad de referencia temporal se debe a la naturaleza repetitiva de los programas o de porciones de los programas, y significa que, tal y como hemos visto en la página anterior, una instrucción que se acaba de ejecutar recientemente es muy probable que se vuelva a ejecutar en un futuro muy próximo. Ahora, la secuencia detallada de la ejecución de las instrucciones no es significativa, lo que realmente nos importa es que muchas instrucciones localizadas en áreas concretas del programa, debido a los bucles que las encierran, se ejecutan repetidamente durante un periodo de tiempo, mientras que al resto del programa o del resto de la memoria solo se accede muy de vez en cuando.
El aspecto espacial quiere decir que las instrucciones que se encuentran en la proximidad de una instrucción recientemente ejecutada (en cuanto a sus direcciones en memoria) también es muy probable que se ejecuten muy pronto. A los datos u operandos de un programa les sucede lo mismo, no están dispersos por toda la memoria, sino que están agrupados en una zona de la misma, y ocupando direcciones contiguas.
Dado que el tiempo de acceso a la memoria principal es muy costoso y teniendo en cuenta lo que nos dice la localidad espacial, parece conveniente que cuando se accede a ella para obtener un byte o una palabra necesitada por la CPU, en lugar de transferir solamente el dato solicitado por la CPU, se aproveche “el viaje” para transferir, no solamente ese byte o palabra, sino un bloque contiguo de información que contenga dicho byte y unos pocos más que estén en las direcciones cercanas. Así, cuando se utiliza una memoria caché, la unidad de transferencia entre ésta y la memoria principal es el bloque.
El tamaño de un bloque suele ser el ancho del bus de datos o un múltiplo de él, es decir, 2, 4, 8, … bytes.
Arquitectura de Computadores Memoria Caché - 5
CPU (bytes)
Caché (Kbytes)
Memoria Principal (Mbytes)
Bloque
Palabra
El espacio de la memoria principal está dividida en bloques.
El espacio de la memoria caché está dividido en líneas
Conceptualmente el funcionamiento de una memoria caché es muy simple. La circuitería de control de la memoria está diseñada para aprovechar la localidad de referencia. De acuerdo con el aspecto temporal de la localidad de referencia, siempre que un dato se necesita por primera vez, se debe traer a la memoria caché, en la que permanece, de tal forma que cuando se le vuelva a necesitar, se podrá obtener muy rápidamente.
Por su parte, la localidad espacial aconseja que en lugar de traer a la caché solamente el dato referenciado, se traiga el grupo de datos que reside en direcciones adyacentes a dicho dato. En el contexto de las cachés, se emplea el término bloque para referirse a un conjunto de datos con direcciones contiguas que se utiliza como unidad de transferencia entre la memoria principal y la caché. El espacio que tiene una caché para albergar un bloque de memoria principal se denomina línea.
Como se muestra en la figura, cuando se recibe una petición de lectura de la CPU, el contenido del bloque completo de memoria principal que contiene la dirección especificada se transfiere a la caché. Posteriormente, cuando el programa referencia cualquiera de las direcciones del bloque, el contenido correspondiente se lee directamente de la caché (solamente la palabra o parte de la palabra referenciada, no el bloque completo).
Arquitectura de Computadores Memoria Caché - 7
“Acierto de caché”
Política de Ubicación (función de correspondencia)
Política de Sustitución
Política de Actualización ¡ Es una escritura!
Si está llena ¿Cuál se sustituye?
“Falta de caché”
No está en la caché
¿Dónde se coloca?
Bloque en la caché
Como se muestra en la figura, cuando se recibe una petición de lectura de la CPU, el contenido del bloque completo de memoria principal que contiene la dirección especificada se transfiere a la caché. Posteriormente, cuando el programa referencia cualquiera de las direcciones del bloque, el contenido correspondiente se lee directamente de la caché. Normalmente la memoria caché puede almacenar un número de bloques de memoria que es muy pequeño comparado con el número de bloques de la memoria principal. La correspondencia entre los bloques de la memoria principal y los que se encuentran en la caché se denomina “función de correspondencia”. La función de correspondencia a utilizar se establece mediante la política de ubicación. Cuando la caché está llena, y se referencia una dirección cuyo bloque no está en la caché, el hardware de la caché debe decidir qué bloque deberá ser expulsado para dejar espacio al bloque que se acaba de referenciar. El conjunto de reglas que se utilizan para tomar esta decisión se denominan algoritmos o políticas de sustitución. Obsérvese que la CPU no necesita conocer explícitamente la existencia de la caché, sino que genera una petición de lectura o escritura utilizando direcciones de memoria principal, y la circuitería de la caché determina si la palabra solicitada está o no está en ese momento en la caché. Si está (se dice que se ha producido un acierto de caché), la operación de lectura o escritura se realiza sobre la dirección correspondiente en la caché, y si la operación es de lectura, la memoria principal no se ve implicada en la ejecución. Si la operación es una escritura, la palabra afectada en la memoria caché deberá actualizarse, en algún momento, en la memoria principal, para que el contenido de un bloque en la caché sea idéntico al de su correspondiente en memoria principal. En estos casos, la actualización en memoria principal de los bloques modificados en la caché se realiza según una política de escritura o de actualización. Cuando el dato referenciado por una lectura de la CPU no está en la caché, se produce una falta o fallo de caché. En este caso, el bloque que contiene la palabra referenciada se copia de la memoria principal a la caché, y a continuación, la palabra solicitada se envía a la CPU. Otra opción consiste en enviarle la palabra directamente de la memoria principal a la CPU y al mismo tiempo cargarla en la caché. Esta última técnica, denominada “carga directa” ( load through), aunque reduce el tiempo de espera de la CPU, requiere un hardware más complejo. Más adelante, al comentar las políticas de escritura, veremos las opciones a tomar cuando se produce una falta de caché en una operación de escritura. En la operación de la caché se nos plantean, por tanto, estas tres preguntas: P1 : ¿Dónde situar un bloque en la caché? (Política de ubicación). P2 : ¿Qué bloque reemplazar ante una caché llena? (Política de sustitución). P3 : ¿Qué hacer ante una operación de escritura? (Política de actualización).
Arquitectura de Computadores Memoria Caché - 8
Efectividad de la Memoria Caché
Tacceso = T (^) C ·P (^) A + T (^) MP · (1 - Pa )
P (^) A : Probabilidad de acierto
T (^) C : Tiempo de acceso a caché
T (^) MP : Tiempo de acceso a M. P.
EJEMPLO
T (^) MP =500 ηs
T (^) C = 50 ηs
P (^) A = 0,
Tacceso = 50 · 0,99 + 500 · 0,01 = 54,5 ηs
¿ Merece la pena la caché?
Tiempo medio de acceso a memoria
Índice de mejora
T sin caché T con caché
= = (^) 9,
Hemos comentado que cuando se hace referencia a una palabra cuyo bloque está en la caché, tenemos un acierto de caché, mientras que si no lo está, se produce una falta de caché.
Ya sabemos que cuando se produce un acierto de caché, el tiempo de acceso a la palabra referenciada es mucho menor que si hubiera que traerla desde memoria principal, pero si se produce una falta de caché, el tiempo de acceso puede ser mayor que en un sistema de memoria sin caché. (Depende de si tiene carga directa o no). Por esto, se debe evaluar el comportamiento o efectividad del diseño de la caché para saber si el tiempo medio de acceso a memoria realmente mejora y justifica la presencia de la memoria caché.
Veamos un ejemplo. Supongamos una memoria principal con un tiempo de acceso de 500 ηs, y una caché con un tiempo de acceso de 50 ηs, y con una tasa de aciertos del 99%.
¿Cuál es el tiempo medio de acceso a memoria en este sistema? ¿Merece la pena la instalación de la memoria caché?
Arriba se muestra la solución.
Para este ejemplo supondremos que cuando se produce una falta de caché, la carga del bloque en la caché se produce al mismo tiempo que se lleva la palabra referenciada a la CPU, es decir , que se realiza con carga directa, con lo que la sobrecarga por el tiempo de carga del bloque resulta nula.
Si dividimos el tiempo medio de acceso sin caché, por el tiempo medio de acceso con caché, se obtiene el índice de mejora, el cual da una idea del orden de magnitud en la mejora del tiempo de acceso.
Arquitectura de Computadores Memoria Caché - 10
Función de correspondencia
etiqueta
Ya que hay menos entradas o líneas de caché que bloques en memoria principal, se nos plantea un problema cuando traemos un bloque de memoria a la caché: ¿Dónde ponemos el bloque? es decir ¿en qué entrada de la caché ponemos el bloque? De igual manera, al buscar un bloque en la caché, debemos saber dónde podría estar ubicado este bloque.
Este problema se resuelve según una política de ubicación. Cada política de ubicación utiliza una función de correspondencia entre las direcciones de los bloques en memoria principal y sus direcciones en la caché. Así, diremos que las diferentes políticas de ubicación simplemente utilizan distintas funciones de correspondencia.
Arquitectura de Computadores Memoria Caché - 11
En qué línea de la caché se coloca cada bloque
POLÍTICA DE UBICACIÓN (Función de Correspondencia)
¿?
Las tres funciones de correspondencia que se suelen utilizar son las siguientes:
A continuación vamos a tratar con cierto detalle cada una de estas funciones de correspondencia. Para cada una de ellas veremos su estructura general acompañada de un ejemplo, que en los tres casos supondrá lo siguiente:
1. El tamaño de la caché es de 4 Kbytes. 2. Los datos se transfieren entre la memoria principal y la caché en bloques de 4 bytes. Esto quiere decir que la caché está organizada en 1024 líneas de 4 bytes cada una. 3. La memoria principal es de 64 Kbytes, pudiendo direccionar a nivel de byte mediante direcciones de 16 bits. Esto quiere decir que, a efectos de la caché, la podemos considerar como una memoria de 16 Kbloques de 4 bytes cada uno.
Arquitectura de Computadores Memoria Caché - 13
... ... ... ... ...
Caché
Dir. de memoria
B (^0)
Memoria principal
B (^) J
Este algoritmo se implementa fácilmente a partir de las direcciones que genera la CPU. En lo que concierne a la caché, cada dirección de memoria consta de tres campos: Desplazamiento : Los d bits menos significativos identifican una única celda de memoria dentro de un bloque de memoria principal. Es decir, es el desplazamiento de la celda dentro de su bloque. Los restantes b bits de la dirección indican uno de los 2 b^ bloques de memoria principal. Como todos los bloques de memoria principal no caben en las L líneas de la caché, ésta interpreta estos b bits como una composición de dos campos: la línea y la etiqueta. Línea : Este campo indica la línea en la que debe ubicarse o localizarse un bloque de memoria principal. Está formado por los l bits menos significativos de los b bits de mayor peso de la dirección, e indica una de las L líneas de la caché, pues 2 l^ = L. Pero claro, va a haber muchos bloques a los que les corresponda la misma línea de caché. Concretamente, los restantes b-l bits, los de mayor peso de la dirección, indican a cuántos bloques les corresponde la misma línea en la caché. En la figura de la diapositiva anterior se puede ver que en una caché con L líneas, a la línea 0 le corresponden los bloques número 0, L, 2L, 3L, ...; a la línea 1 le corresponden los bloques 1, L+1, 2L+1, 3L+1, ... ; y a la línea L-1 le corresponden los bloques L-1, 2L-1, 3L-1, ... Etiqueta : Lo que va a diferenciar a todos los bloques a los que les corresponda la misma línea son los b-l bits de mayor peso, esto es, el campo de “etiqueta”. Obsérvese que aunque una línea de caché puede corresponder a varios bloques, todos esos bloques tendrán una etiqueta distinta. Cuando la CPU realiza una lectura, la dirección se divide en estos tres campos. Tomando los b bits del campo de bloque se obtiene el número de bloque de memoria principal. Con el algoritmo arriba indicado se obtiene la línea que le corresponde al bloque. Si la línea no está ocupada, se trae el bloque desde memoria principal a esa línea, y con el desplazamiento que indican los d bits de menor peso de la dirección se obtiene la celda dentro del bloque. Los b-l bits de mayor peso de la dirección deben ponerse en el campo de etiqueta de la línea correspondiente de la caché. En una referencia posterior, cuando se compruebe si el bloque referenciado está en la caché, si la entrada correspondiente está ocupada, hay que comprobar si el bloque de esa entrada es el que corresponde a la dirección que se está referenciando. Para ello simplemente hay que comprobar que el campo de etiqueta de la dirección es igual a la etiqueta de la línea que corresponde a ese bloque. Si no es así, habrá que traer el bloque de memoria y sustituir al que estaba en esa línea. Esto puede representar un problema.
Arquitectura de Computadores Memoria Caché - 14
Tamaño caché: 4 Kbytes
Tamaño bloque: 4 bytes
Memoria principal: 64 Kbytes (16 Kbloques de 4 bytes)
Línea caché Bloques de memoria principal
0 0, 400, 800, C00, ..., 3C 1 1, 401, 801, C01, ..., 3C
...... 3FF 3FF, 7FF, BFF, ..., 3FFF
Número de bloque despl.
etiqueta línea
4 10 2
Veamos un ejemplo de ubicación mediante correspondencia directa. Para ello, supondremos los siguientes valores:
1. El tamaño de la caché es de 4 Kbytes. 2. Los datos se transfieren entre la memoria principal y la caché en bloques de 4 bytes. Esto quiere decir que la caché está organizada en 1024 líneas de 4 bytes cada una. 3. La memoria principal es de 64 Kbytes, pudiendo direccionar a nivel de byte mediante direcciones de 16 bits. Esto quiere decir que, a efectos de la caché, la podemos considerar como una memoria de 16 Kbloques de 4 bytes cada uno.
Veamos el formato de las direcciones. Los 16 Kbloques de la memoria principal se referencian mediante los 14 bits de más peso de la dirección; los dos bits de menor peso constituyen el desplazamiento de la palabra dentro del bloque. En la caché, por su parte, el número de línea se expresa mediante 10 bits. La ejecución del algoritmo de la función de correspondencia para averiguar la línea que le corresponde a un bloque de memoria (dividir un número de 14 bits entre otro de 10 y tomar el resto) es lo mismo que tomar directamente los 10 bits de menor peso del dividendo, es decir, del número de bloque.
En la parte inferior de la transparencia podemos ver las correspondencias entre bloques y líneas para este ejemplo.
Arquitectura de Computadores Memoria Caché - 16
El bloque puede ubicarse en cualquier línea de la caché
Falta de caché
Caché llena
Visto el problema de las colisiones que presenta la correspondencia directa, veamos otras alternativas
Con la correspondencia asociativa (o completamente asociativa) se solventan los problemas de la correspondencia directa, pues aquí se permite que cada bloque de memoria pueda estar en cualquier línea de la caché, por lo que mientras la memoria caché no esté llena, no habrá que hacer ninguna sustitución. Cuando esté llena y haya que traer un nuevo bloque, habrá que sustituir alguno de los bloques según la política de sustitución más apropiada, es decir, la que genere menos faltas de caché.
Arquitectura de Computadores Memoria Caché - 17
... ...
z
z
z
z
z
z
Con la correspondencia asociativa, la caché ve cada dirección de memoria formada solamente por dos campos: el desplazamiento dentro del bloque (los bits menos significativos) y el número de bloque o etiqueta (los más significativos). Ahora cada bloque de memoria principal tiene una única etiqueta posible, que es precisamente el número de bloque.
Así, para saber si un bloque está en la caché, su lógica de control debe comparar la etiqueta de la dirección generada por la CPU con todas las etiquetas de la caché. Para que estas comparaciones puedan realizarse rápidamente, cada entrada de la caché cuenta con un comparador, de tal manera que las comparaciones de la etiqueta de la dirección de memoria con todas las etiquetas de las líneas de la caché se realizan en paralelo. (Este tipo de memorias se denominan memorias asociativas ).
Con este esquema hay flexibilidad para ubicar un bloque en cualquier línea de la caché, y su espacio se puede aprovechar más eficientemente, pues cuando se trae un bloque a la caché nunca habrá que reemplazar a ninguno de los que ya estaban cargados a menos que todas las líneas estén ocupadas. Con esta técnica ya no deben producirse las repetidas expulsiones mutuas de dos bloques que teníamos con la correspondencia directa. Los algoritmos de sustitución que veremos más adelante se diseñarán precisamente para mejorar lo más posible la tasa de aciertos.
La desventaja obvia de la correspondencia asociativa es el incremento económico que genera la electrónica adicional necesaria.
Arquitectura de Computadores Memoria Caché - 19
0000 13579246 000
0001 11223344 001
0400 12233445 002
... ... ...
334A 11223344 3FE
3FFF 22222222 3FF
Caché
Num. bloque desp. datos
Como hemos dicho, la dirección de 16 bits ahora solamente se descompone en dos campos: el desplazamiento, que tiene que seguir siendo de 2 bits, pues lo impone el tamaño del bloque; y el número de bloque, de 14 bits, que se utiliza como etiqueta.
Esto quiere decir que en cada línea de la caché, junto con cada bloque de 4 bytes deben almacenarse también los 14 bits de su etiqueta correspondiente.
Ya que esta correspondencia no fuerza ninguna ubicación concreta para cada bloque de memoria principal, ya no hay colisiones como en la correspondencia directa, sino que al traer un bloque a la caché, si ésta está totalmente ocupada, simplemente debe sustituirse alguno de los bloques que ya estaban por el recién traído. Puesto que no se fija de antemano cuál debe ser el bloque a sustituir, no se corre el peligro de la correspondencia directa, en la que podía darse el caso de tener que sustituir un bloque que se estaba referenciando muy a menudo. La política de sustitución se encargará de elegir el bloque que al ser sustituido genere el menor perjuicio posible a la tasa de aciertos de la caché.
Como se muestra en el ejemplo, con esta correspondencia se consigue que, normalmente, los últimos bloques referenciados por la CPU se encuentren en la caché, sin que uno de ellos haya tenido que expulsar a otro recientemente referenciado para cargarse en la caché.
Arquitectura de Computadores Memoria Caché - 20
La caché se divide enC conjuntos deL líneas cada uno
Política de sustitución dentro de cada conjunto
A muchos bloques les corresponderá el mismo conjunto
Num_Conjunto = Num_bloque módulo Num_Conjuntos
El bloque se ubica en cualquier línea del conjunto
La correspondencia asociativa de conjuntos combina la economía de la correspondencia directa con la tasa de aciertos de la correspondencia asociativa. Consiste en agrupar las líneas de la caché en conjuntos, de tal forma que la función de correspondencia permita que un bloque de la memoria principal pueda ubicarse en cualquier línea de un conjunto concreto.
Con esta política, la memoria caché se divide en C conjuntos de L líneas cada uno. Así, el número M de líneas de la caché es M = C x L.
De forma similar a la correspondencia directa, para averiguar el conjunto c de la caché que le corresponde a un cierto bloque b de memoria principal, se aplica la siguiente correspondencia:
c = b módulo C
Una vez averiguado el conjunto c de la caché que le corresponde al bloque b , éste puede ubicarse en cualquiera de las líneas del conjunto c.