T E M A Sistema de Memoria 2 2-2 Sistema de Memoria Indice 3.- INTRODUCCIÓN AL TEMA.................................................................................................................... 2-3 3.1.- CONCEPTOS BÁSICOS......................................................................................................................... 2-3 3.2.- TECNOLOGÍAS DE MEMORIA............................................................................................................... 2-3 3.3.- LOCALIDAD ....................................................................................................................................... 2-4 3.3.1.- Localidad de referencia a los datos del programa ................................................................... 2-4 3.3.2.- Localidad de captación de instrucciones.................................................................................. 2-6 3.3.3.- Resumen de localidad ............................................................................................................... 2-7 3.4.- JERARQUÍA DE MEMORIA ................................................................................................................... 2-8 3.4.1.- Haciendo "caching" en la jeraquía de memoria..................................................................... 2-10 3.4.2.- Resumen de conceptos de jerarquía de memoria.................................................................... 2-12 3.5.- MEMORIA CACHE ............................................................................................................................ 2-13 3.5.1.- Tipos de cache ........................................................................................................................ 2-14 3.5.2.- Función de Correspondencia.................................................................................................. 2-16 3.5.3.- Algoritmos de Sustitución ....................................................................................................... 2-26 3.5.4.- Política de escritura................................................................................................................ 2-26 3.5.5.- Tamaño de Bloque .................................................................................................................. 2-29 3.5.6.- Número de Cache.................................................................................................................... 2-29 3.5.7.- Impacto en el desempeño de los parámetros de la caché ....................................................... 2-30 3.6.- MEMORIA VIRTUAL ......................................................................................................................... 2-32 3.6.1.- Conceptos Básicos .................................................................................................................. 2-32 3.6.2.- Direccionamiento físico y Virtual ........................................................................................... 2-33 3.6.3.- Espacio de direcciones ........................................................................................................... 2-34 3.6.4.- Memoria Virtual La memoria virtual como una herramienta para realizar caching ............ 2-35 3.6.5.- La memoria virtual como una herramienta para la administración de memoria .................. 2-41 3.6.6.- La memoria virtual como una herramienta para la protección de memoria ......................... 2-43 3.6.7.- Traducción de direcciones...................................................................................................... 2-44 Cronograma de Actividades Puntos Clase Organización y Estructura del Computador II -OyECII Sistema de Memoria 2-3 2.- Introducción al Tema - Conceptos básicos. - Tecnologías de memoria: Banco de registros del procesador (características básicas); Memorias RAM semiconductoras; Memorias de sólo-lectura; Memorias asociativas. - Localidad: Localidad de referencias en los datos del programa; Localidad en la captación de instrucciones; Resumen de la localidad. - Jerarquía de memoria: Velocidad, tamaño y costo; Haciendo “caching” en la jerarquía de memoria; Resumen de los conceptos de jerarquía de memoria. - Memoria caché: Organización genérica de la memoria cache; Tamaño de la caché; Función de correspondencia; Manejo de los fallos de cache; Algoritmos de sustitución; Política de escritura; Tamaño de la línea; Reducción de la penalización de fallos con el uso de caches multinivel; Caches en el chip del procesador; Cache unificada vs. cache de datos y cache de instrucciones; Impacto en el desempeño de los parámetros de la caché; Caso de estudio: organización de la caché en una máquina Pentium; Como escribir código que aproveche la cache. - Memoria virtual: Direccionamiento físico y virtual; Espacios de direcciones; La memoria virtual como una herramienta para realizar caching; La memoria virtual como una herramienta para la administración de memoria; La memoria virtual como 2.1.- Conceptos Básicos Ver Stalling 2.2.- Tecnologías de memoria Tarea: Banco de registros del procesador (características básicas); Memorias RAM semiconductoras; Memorias de sólo-lectura; Memorias asociativas. Organización y Estructura del Computador II – ER, JL 2-4 Sistema de Memoria 2.3.- Localidad - Localidad temporal: un elemento referenciado tiende a ser referenciado nuevamente pronto. - Localidad espacial: los elementos cercanos a uno referenciado tienden a ser referenciados pronto. 2.3.1.- Localidad de referencia a los datos del programa Organización y Estructura del Computador II -OyECII Sistema de Memoria 2-5 Organización y Estructura del Computador II – ER, JL 2-6 Sistema de Memoria 2.3.2.- Localidad de captación de instrucciones Organización y Estructura del Computador II -OyECII Sistema de Memoria 2-7 2.3.3.- Resumen de localidad Organización y Estructura del Computador II – ER, JL 2-8 Sistema de Memoria 2.4.- Jerarquía de memoria Organización y Estructura del Computador II -OyECII Sistema de Memoria 2-9 Organización y Estructura del Computador II – ER, JL 2-10 Sistema de Memoria 2.4.1.- Haciendo "caching" en la jeraquía de memoria Organización y Estructura del Computador II -OyECII Sistema de Memoria 2-11 Organización y Estructura del Computador II – ER, JL 2-12 Sistema de Memoria 2.4.2.- Resumen de conceptos de jerarquía de memoria Organización y Estructura del Computador II -OyECII Sistema de Memoria 2-13 2.5.- Memoria Cache Debido a la gran velocidad alcanzada por los procesadores, la Memoria Principal del computador no es lo suficientemente rápida para almacenar y transmitir los datos que el procesador necesita, por lo que tendría que esperar a que la memoria estuviera disponible y el trabajo se atrazaría. Para evitarlo, se usa una memoria muy rápida, estratégicamente situada entre el micro y la RAM: la memoria caché. Esta memoria es unas 5 o 6 veces más rápida que la RAM. Esto la encarece bastante, y ése es uno de los motivos por los cuales su capacidad es mucho menor que el de la RAM:. Además, se usa con una finalidad específica. Cuando una computadora trabaja, el microprocesador opera en ocasiones con un número reducido de datos, pero que tiene que traer y llevar a la memoria en cada operación. Si situamos en medio del camino de los datos una memoria intermedia que almacene los datos más usados, los que casi seguro necesitará el procesador en la próxima operación que realice, por lo tanto ahorrará mucho tiempo del tránsito y acceso a la lenta memoria RAM; esta es la segunda utilidad de la caché. Organización y Estructura del Computador II – ER, JL 2-14 Sistema de Memoria La utilización de este tipo de memorias no es sino la generalización de un principio de uso común en la vida diaria; poner más a mano las cosas de uso más frecuente. Y se basa en dos suposiciones que generalmente resultan ciertas: à Los procesadores tienden a utilizar las mismas instrucciones y (en menor medida), los mismos datos repetidamente. à La información necesitada se encuentra almacenada de forma adyacente, o cuando menos muy cercana, en memoria o disco. 2.5.1.- Tipos de cache Desde el punto de vista del hardware, existen dos tipos de memoria cache; interna y externa. La primera, denominada también cache primaria, caché de nivel 1 o simplemente caché L1 (Level one). La segunda se conoce también como cache secundaria, cache de nivel 2 o cache L 2. Desde el punto de vista funcional, existen cachés específicas de algunos dispositivos, por ejemplo, de disco. También se distingue entre caché de lectura y de escritura. a) .- Caché interna Es una innovación relativamente reciente; en realidad son dos, cada una con una misión específica: Una para datos y otra para instrucciones. Está incluida en el procesador junto con su circuitería de control, lo que significa tres cosas: Comparativamente es muy cara; extremadamente rápida y limitada en tamaño (los 386 tenían 8 KB, el 486 DX4 16 KB, y los primeros Pentium 8 KB en cada una de las cachés internas). Como puede suponerse, su velocidad de acceso es comparable a la de los registros, es decir, centenares de veces más rápida que la RAM. b) .- Caché externa Es más antigua que la interna, dado que hasta fecha "relativamente" reciente estas últimas eran impracticables. Es una memoria de acceso rápido incluida en la placa base que dispone de su propio bus y controlador independiente que intercepta las llamadas a memoria antes que sean enviadas a la RAM (Buses locales). La caché externa típica es un banco SRAM ("Static Random Access Memory") de entre 128 y 256 KB. Esta memoria es considerablemente más rápida que la DRAM ("Dynamic Random Access Memory") convencional, aunque también mucho más cara [5] (tenga en cuenta que un aumento de tamaño sobre los valores anteriores no incrementa proporcionalmente la eficacia de la memoria caché). Actualmente (2004) la tendencia es incluir esta caché en el procesador. Los tamaños típicos oscilan entre 256 KB y 1 MB. En 1.997, con la introducción del procesador Pentium II, Intel abandonó el denominado zócalo 7 utilizado hasta entonces en sus procesadores, en favor del denominado Slot-1. La razón argüida era precisamente la inclusión de la caché L 2 en la cápsula del procesador. c) .- Caché de disco Además de las anteriores, que son de propósito general, existe una caché de funcionalidad específica que se aloja en memoria RAM estándar; es la caché de disco (nos hemos referido a ella en la introducción de este epígrafe). Destinada a contener los datos Organización y Estructura del Computador II -OyECII Sistema de Memoria 2-15 de disco que probablemente sean necesitados en un futuro próximo y los que deben ser escritos. Si la información requerida está en chaché, se ahorra un acceso a disco, lo que es centenares de veces más rápido (recuerde que los tiempos de acceso a RAM se miden en nanosegundos y los de disco en milisegundos ( Unidades de medida). Nota: Existe un mecanismo parecido al de caché de disco que aquí se describe pero que funciona en sentido inverso. Es decir, aloja en disco los datos que no pueden ser almacenados en la memoria RAM. Es el sistema de memoria virtual, al que nos referiremos al tratar de la memoria. El funcionamiento de la caché de disco se basa en dos esquemas de operación. La lectura adelantada ("Read-ahead") y la escritura retrasada ("Write-behind"). La primera consiste en anticipar lo que se necesitará de forma inmediata y traerlo a la caché. Por su parte, la escritura retrasada consiste en mantener los datos en caché hasta que se producen momentos de desocupación del sistema de disco. En este caso la caché actúa como memoria tampón o "buffer" intermedio, y no se obliga al subsistema a realizar físicamente ninguna escritura, con lo que las cabezas quedan libres para nuevas lecturas. Puesto que los cachés de disco de escritura retrasada mantienen los datos en memoria volátil después que "supuestamente" se han escrito en el dispositivo, una caída accidental del sistema, por fallo de energía o apagado intempestivo, puede producir pérdidas de los datos alojados en la caché en ese momento (es esta una de las razones por las que los sistemas Windows y Linux exigen un proceso especial de apagado, que a veces tarda unos segundos, en los que observamos una intensa actividad del sistema de disco). Nota: La mayoría de los lenguajes disponen de métodos para forzar una escritura "real" de los datos vaciando la caché de disco; suelen ser sentencias del tipo commit, flush etc. Es una práctica de seguridad aconsejable, y señal de programación cuidadosa, realizar un vaciado de "buffers" después de cada transacción importante siempre que las circunstancias lo permitan Organización y Estructura del Computador II – ER, JL 2-16 Sistema de Memoria 2.5.2.- Función de Correspondencia a) .- Correspondencia Directa Esta técnica es la más simple y consiste en hacer corresponder cada bloque de memoria principal a sólo una línea posible de cache. El siguiente gráfico muestra el proceso de lectura de un dato. s+w Memoria Cache Etiqueta Etiqueta Línea s-r r Datos Memoria Principal Palabra W0 L0 w W1 B0 W2 1 W3 s + 2 L1 3 s-r w W4 W5 B1 W6 + W7 Comparador Acierto No Acierto . . . . . . 3 n W2 -4 Lm-1 n W2 -3 n W2 -2 n W2 -1 Donde: Primero (1): Se utilizan los bits de la dirección del dato a leer que corresponden a la línea de cache ® para ubicarnos en la línea de cache donde se supone esta el dato. Segundo (2): Se comparan los bits de la dirección del dato a leer que corresponden a la etiqueta de esa línea en particular de la caché (s-r). Con el fin de verificar sí el bloque de memoria esta en cache. Organización y Estructura del Computador II -OyECII Bj-1 Sistema de Memoria 2-17 Tercero (3): Si el bloque esta en cache, es decir la comparación resultó verdadera (acierto de cache), entonces esto implica que el dato a buscar esta en cache, luego con los bits que corresponden a la palabra (w) se direcciona el dato en cache y se entrega al CPU. Si el bloque no esta en cache, la comparación resultó falsa (fallo de cache), esto implica que el dato no esta en cache y debe buscarse en memoria principal. La idea ahora es buscar el bloque de memoria principal donde se encuentra el dato, esto lo hacemos comparando los bits que corresponden tanto a la etiqueta como a la línea de cache (s), una vez ubicados en el bloque se direcciona el dato en memoria principal, se entrega al CPU y el bloque de memoria principal es cargado en cache, en la línea que la dirección del dato especifica. Organización y Estructura del Computador II – ER, JL 2-18 Sistema de Memoria Ejemplo: Correspondencia Directa, suponemos que tenemos las siguientes especificaciones: 9 • Memoria principal de 32B (32 palabras de 8 bits) • La cache puede almacenar 8B • Los datos se transfieren entre la memoria principal y la cache en bloques de 2 bytes. Esto significa que la cache esta organizada en 4 líneas de 2 bytes cada una. Memoria Cache de 8 B Etiqueta Memoria Principal Datos Etiqueta # Línea 0 0 0 1 1 0 1 1 Solución del problema: a.- Cuantos bits necesitamos para cada byte dentro de las líneas de caché: 1 ya que solo tenemos dos bytes por línea. b.- Cuantos bits necesitamos para cada línea de cache: 2 ya que tenemos sólo 4 líneas en cache. c.- Como la cache puede contener sólo 4 bloques de memoria a la vez y tenemos 16 bloques de memoria en total, además cada bloque debe almacenarse en una línea especifica entonces: Cuantos bloques comparten la misma líneas? 16 bloques memoria/ 4 líneas = 4 bloques de memoria. Cuantos bits necesitamos para identificar cada conjunto de bloques: 2 Una vez obtenidos esto valores podemos realizar la correspondencia entre las líneas de cache y la dirección de memoria: Etiqueta Dirección del dato en Memoria Princiapal = Línea 2 2 Palabra 1 Lectura de un dato: Supongamos que queremos leer el dato A, esto implica que el CPU nos da la dirección: 01110 organizando esa dirección según el gráfico de arriba: Etiqueta Línea Palabra 01 1 11 0 Lo primero que tenemos que hacer es verificar si el bloque esta en cache, Aplicamos el primer paso de lectura de un dato: tomamos los bits de la dirección del dato que corresponden a la línea (110 y nos ubicamos en Memoria Cache de 8 B Etiqueta Datos # Línea 0 0 0 1 1 0 1 1 Línea Palabra Datos 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 0 0 0 0 1 0 0 1 0 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1 0 1 1 1 0 A 0 1 1 1 1 B 1 0 0 0 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1 1 1 0 1 0 0 1 0 1 0 1 1 0 1 1 0 C 1 0 1 1 1 D 1 1 0 0 0 1 1 0 0 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 Organización y Estructura del Computador II -OyECII B11 B12 B13 B14 B15 Sistema de Memoria 2-19 Memoria Principal Comaparamos el campo etiqueta de la dirección del dato con la etiqueta de esa línea en caché 2 Etiqueta Línea Palabra 11 01 0 Memoria Cache de 8 B Etiqueta 3 Datos # Línea Línea 1 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 1 1 B0 B1 B2 B3 0 1 0 0 0 0 1 0 0 1 1 0 0 1 0 1 0 1 1 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1 0 1 1 1 0 A 0 1 1 1 1 B 1 0 0 0 0 1 0 0 0 1 Palabra 1 0 0 1 0 0 1 0 0 1 1 1 0 1 0 0 1 0 1 0 1 1 0 1 1 0 C 1 0 1 1 1 D 1 1 0 0 0 1 1 0 0 1 1 1 0 1 0 Datos # Línea B 0 0 1 Memoria Cache de 8 B 0 0 Datos 0 Una vez que tenemos el bloque se direcciona el dato dentro de eses bloque usando el campo palabra y entrega al CPU, después el dato es cargado en memoria cache, en la línea que indica el campo línea de la dirección del dato, resultando el siguiente mapa de cache. Etiqueta Palabra 0 11 01 Línea 0 Como el bloque no esta en cache entonces se busca en memoria, comparamos ahora el campo etiqueta+ línea con las direcciones de memoria para conseguir el bloque Etiqueta Etiqueta A 0 0 1 1 0 1 1 0 1 1 1 1 0 0 1 0 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 B4 B5 B6 B7 B8 B9 B10 En general el número de la línea donde se almacenará el bloque de memoria se determina de la siguiente manera: # Línea = (# bloque memoria principal) MOD (# Líneas de caché) # Línea = 7 MOD 4 = 3; # Línea = 11 MOD 4 = 3; a.1.- Ventajas y Desventajas de la correspondencia directa: La ventaja de esta correspondencia es que es simple y poco costosa, pero si el programa intercambia datos entre los bloques B7 y B11, tendríamos en cada intercambio fallos de cache, accediendo a la memoria en cada fallo, con lo cual la tasa de aciertos sería baja y el Tiempo de acceso a un dato es igual al Tiempo de acceso de cache más el tiempo de acceso a memoria, y esto desmejora el rendimiento del sistema. Organización y Estructura del Computador II – ER, JL B11 B12 B13 B14 B15 2-20 Sistema de Memoria b) .- Correspondencia Asociativa Esta técnica permite que cada bloque de memoria principal pueda cargarse en cualquier línea de cache. El siguiente gráfico muestra el proceso de lectura de un dato. s+w Memoria Cache Etiqueta Etiqueta s Datos Memoria Principal Palabra W0 w L0 W1 B0 W2 W3 + L1 w … 2 Comparador No Acierto Acierto w W4 W5 B1 W6 + 1 s W7 . . . . . . 3 n W2 -4 Lm-1 n W2 -3 n W2 -2 W2n -1 Donde: Primero (1): Se utilizan los bits de la dirección del dato a leer que corresponden al campo etiqueta la se compara con cada etiqueta de cada bloque para verificar si el dato esta en cache. Segundo (2): Si el bloque esta en cache, es decir la comparación resultó verdadera (acierto de cache), entonces esto implica que el dato a buscar esta en cache, luego con los bits que corresponden a la palabra (w) se direcciona el dato en cache y se entrega al CPU. Si el bloque no esta en cache, se realiza el mismo procedimiento que en la correspondencia directa. Organización y Estructura del Computador II -OyECII Bj-1 Sistema de Memoria 2-21 Memoria Principal Memoria Cache de 8 B Etiqueta Etiqueta Línea 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 0 0 0 0 1 0 0 1 0 1 0 1 0 0 1 0 1 1 Palabra 0 1 1 0 0 1 0 1 1 0 1 0 1 1 1 0 A 0 1 1 1 1 B 1 0 0 0 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1 1 1 0 1 0 0 1 0 1 0 1 1 0 1 1 0 C 1 0 1 1 1 D 1 1 0 0 0 1 1 0 0 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 Datos # Línea 0 0 0 1 1 0 1 1 Solución del problema: a.- y b.- igual a correspondencia directa. c.- Como la cache puede contener sólo 4 bloques de memoria a la vez y tenemos 16 bloques de memoria en total, además un bloque de memoria puede estar en cualquier línea de caché, entonces tenemos que buscar la forma de identificar el bloque dentro de la cache. Cuantos bits necesitamos para identificar cada bloque: 4 Una vez obtenidos esto valores podemos realizar la correspondencia entre las líneas de cache y la dirección de memoria: Etiqueta Línea Dirección del dato en Memoria Princiapal 4 Lectura de un dato: Supongamos que queremos leer el dato A, esto implica que el CPU nos da la dirección: 01110 organizando esa dirección según el gráfico de arriba: Etiqueta Línea Palabra 0111 1 0 Lo primero que tenemos que hacer es verificar si el bloque esta en cache, Aplicamos el primer paso de lectura de un dato: tomamos los bits de la dirección del dato que corresponden a la etiqueta (0111) y lo Etiqueta Línea 0111 Palabra 0 Memoria Cache de 8 B Etiqueta Datos # Línea 0 0 0 1 1 0 1 1 Palabra Datos B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 Comparación simultánea. Organización y Estructura del Computador II – ER, JL B11 B12 B13 B14 B15 2-22 Sistema de Memoria Memoria Principal Etiqueta Línea 0 0 0 0 0 0 0 0 0 1 Palabra 0 0 0 1 0 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 0 0 0 0 1 0 0 1 0 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1 0 1 1 1 0 A 0 1 1 1 1 B 1 0 0 0 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1 1 1 0 1 0 0 1 0 1 0 1 1 0 1 1 0 C 1 0 1 1 1 D 1 1 0 0 0 1 1 0 0 1 1 1 0 1 0 1 1 0 1 1 1 1 1 0 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 Como el bloque no esta en cache entonces se busca en memoria, comparamos ahora el campo etiqueta con las direcciones de memoria para conseguir el bloque 2 Etiqueta Línea 0111 Una vez que tenemos el bloque se direcciona el dato dentro de eses bloque usando el campo palabra y entrega al CPU, después el dato es cargado en memoria cache, en la línea que indica el campo línea de la dirección del dato, resultando el siguiente mapa de cache. Memoria Cache de 8 B Etiqueta 0 1 0 Datos 1 B A El número de la línea donde se almacenará el bloque de memoria se determina mediante algoritmos de sustitución. Si queremos acceder a los datos del bloque B11, este puede ser cargado en cualquier otro bloque. Resultando el siguiente mapa de cache. Etiqueta Línea Palabra 0 1011 Memoria Cache de 8 B Etiqueta Datos 0 1 0 1 B A 1 0 1 1 D C Palabra Datos B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 b.1.- Ventajas y Desventajas de la correspondencia asociativa: La ventaja de esta correspondencia es que máximiza las tasas de aciertos. La principal desventaja es la compleja circuiteria necesaria para examinar en paralelo las etiquetas de todas las líneas de la cache. Organización y Estructura del Computador II -OyECII B11 B12 B13 B14 B15 Sistema de Memoria 2-23 c) .- Correspondencia por Conjunto Esta técnica es una solución que combina lo positivo de la correspondencia directa con lo de la correspondencia asociativa, sin presentar sus desventajas. En este caso la cache se divide en v conjuntos, cada uno de k líneas. El siguiente gráfico muestra el proceso de lectura de un dato. s+w Memoria Cache Etiqueta Etiqueta Conjunto s-d Datos Memoria Principal Palabra w d 1 Bo Conjunto 0 . . s-d s s-d + +w B1 3 + 2 Comparador Acierto Fallo . . . . . . Conjunto v-1 3 Bj-1 Donde: Primero (1): Se utilizan los bits de la dirección del dato a leer que corresponden al conjunto de cache para ubicarnos en el conjunto de cache donde se supone esta el dato (correspondencia directa por conjunto) Segundo (2): Se comparan los bits de la dirección del dato a leer que corresponden a la etiqueta de ese conjunto en particular con todas las etiquetas del conjunto (s-d) (asociativa). Con el fin de verificar sí el bloque de memoria esta en cache. Tercero (3): igual a correspondencia asociativa. Organización y Estructura del Computador II – ER, JL 2-24 Sistema de Memoria Memoria Cache de 8 B Etiq ueta Memoria Principal Datos # Conjunto Etiqueta Línea Palabra Datos 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 1 0 1 0 0 0 1 1 0 0 1 0 0 Solución del problema: a.- Cuantos bits necesitamos para cada byte dentro de las líneas de caché: 1 ya que solo tenemos dos bytes por línea. b.- Cuantos conjuntos vamos a tener?: La relación es la siguiente: # conjuntos = # Líneas de cache / # líneas del conjunto. Si asuminos que queremos 2 líneas por conjuntos entonces tenemos que: # conjuntos = 4/2 = 2 c.- Cuantos bits necesitamos para representar cada conjunto: 1 Un grupo de bloques va a compartir el mismo conjunto y pueden estar en cualquier línea dentro del conjunto. Cuantos bloques comparten el mismo conjunto? 16 bloques memoria/ 2 conjuntos = 8 bloques de memoria. Cuantos bits necesitamos para identificar cada bloque en el conjunto: 3 0 0 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 0 0 0 0 1 0 0 1 0 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1 Una vez obtenidos esto valores podemos realizar la correspondencia entre las conjuntos de cache y la dirección de memoria: 0 1 1 1 0 A 0 1 1 1 1 B 1 0 0 0 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1 1 1 0 1 0 0 1 0 1 0 1 1 0 1 1 0 C 1 0 1 1 1 D 1 1 0 0 0 1 1 0 0 1 Dirección del dato en Memoria Princiapal = Etiqueta 3 Conjunto Palabra 1 1 Lectura de un dato: Supongamos que queremos leer el dato A, esto implica que el CPU nos da la dirección: 01110 organizando esa dirección según el gráfico de arriba: 1 Lo primero que tenemos que hacer es verificar si el bloque esta en cache, Aplicamos el primer paso de lectura de un dato: tomamos los bits de la dirección del dato que corresponden al conjunto (1) y nos ubicamos en Etiqueta 011 Conjunto 1 1 0 1 0 Palabra 1 1 0 1 1 0 1 1 1 0 0 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 1 Memoria Cache de 8 B Etiqueta Datos # Conjunto B0 B1 B2 B3 B4 B5 B6 B7 B8 B9 B10 0 0 1 1 Organización y Estructura del Computador II -OyECII B11 B12 B13 B14 B15 Sistema de Memoria 2-25 Comaparamos el campo etiqueta de la dirección del dato con todas las etiqueta de ese conjunto caché 2 Etiqueta Conjunto 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0 1 1 0 0 1 0 0 0 0 1 0 1 0 0 1 1 0 0 0 1 1 1 0 1 0 0 0 0 1 0 0 1 0 1 0 1 0 0 1 0 1 1 0 1 1 0 0 0 1 1 0 1 0 1 1 1 0 A 0 1 1 1 1 B 1 0 0 0 0 1 0 0 0 1 1 0 0 1 0 1 0 0 1 1 1 0 1 0 0 1 0 1 0 1 1 0 1 1 0 C 1 0 1 1 1 D 1 1 0 0 0 1 1 0 0 1 0 1 1 0 1 0 0 1 1 0 1 1 1 1 1 1 0 0 1 1 1 1 0 1 1 1 1 1 0 1 1 1 1 1 # Conjunto 0 0 1 1 Como el bloque no esta en cache entonces se busca en memoria, comparamos ahora el campo etiqueta+ línea con las direcciones de memoria para conseguir el bloque 3 Etiqueta Conjunto Palabra 011 1 0 Una vez que tenemos el bloque se direcciona el dato dentro de ese bloque usando el campo palabra y entrega al CPU, después el dato es cargado en memoria cache, en el conjunto que indica el campo conjunto de la dirección del dato, resultando el siguiente mapa de cache. Memoria Cache de 8 B Etiqueta 0 1 Datos 1 B # Conjunto A Datos 0 0 Datos Palabra 0 Memoria Cache de 8 B Etiqueta Línea 0 Palabra 1 011 Memoria Principal Etiqueta En general el número del conjunto donde se almacenará el bloque de memoria se determina de la siguiente manera: # conjunto = (# bloque memoria principal) MOD (# conjuntos de caché) # conjunto = 7 MOD 2 = 1; # conjunto = 11 MOD 2 = 1; B0 B1 B2 B3 B4 B5 B6 B8 B9 B10 0 0 0 1 1 B A 1 1 0 1 D C 1 B7 En general el número de líneas por conjunto es el caso más común y mejora significativamente la tasa de aciertos. Si v=m y k=1 (v: # conjunto; m: # líneas, k: # líneas por conjunto) esta técnica se reduce a directa; si v=1 y k=m esta técnica se reduce a asociativa. Organización y Estructura del Computador II – ER, JL B11 B12 B13 B14 B15 2-26 Sistema de Memoria 2.5.3.- Algoritmos de Sustitución En la correspondencia Directa, no se aplica ningún algoritmo de sustitución. a) .- LRU (Least-Recently Used) Menos Recientemente Utilizado Esta técnica sustituye el bloque que se ha mantenido en la cache por más tiempo sin haber sido referenciado. Este algoritmo es probablemente el que tiene más tasa de aciertos. b) .- FIFO (First-in First-out) Primero en Entrar, Primero en Salir Este algoritmo sustituye aquel bloque que ha estado más tiempo en cache. Sí la organización de la cache es asociativa por conjunto se sustituye la línea en cada conjunto. Esto se puede implementar con una técnica de Round-Robin o buffer circular. c) .- LFU (Least- Frecuently Used) Menos Frecuentemente Utilizado: Sustituye aquel bloque que ha experimentado menos referencias. Se implementa asociando un contador a cada línea. d) .- Aleatoria Esta técnica no se basa en el grado de utilización del bloque, consiste simplemente en escoger una línea al azar(aleatoria) entre las posibles candidatas. 2.5.4.- Política de escritura Antes de que pueda ser reemplazado un bloque que esta en la cache, es necesario considerar si ha sido o no alterado en cache pero no en memoria principal. Si ha sido modificado, esto significa que se ha realizado al menos una operación de escritura sobre una palabra de la línea de cache. Hay dos problemas: 1).- Un módulo de E/S puede leer/escribir directamente de/en memoria. 2).- Si se tiene varios CPU conectados al mismo bus con caches independiente. a) .- Escritura Inmediata Con esta técnica todas las operaciones de escritura se hacen tanto en cache como en memoria principal, asegurando que el contenido de la memoria principal siempre es válido. Cualquier otro módulo CPU-Cache puede monitorear el tráfico a memoria principal para mantener la coherencia con su propia cache. Desventaja Alto tráfico a memoria principal que puede originar cuellos de botella. Organización y Estructura del Computador II -OyECII Sistema de Memoria 2-27 b) .- Post-Escritura: Con esta técnica, las actualizaciones se hacen sólo en cache, cuando tiene lugar una actualización, se activa un bit ACTUALIZAR asociado a la línea. Después cuando el bloque es sustituido, es (post)escrito en memoria principal sí y sólo sí el bit ACTUALIZAR esta activo. Desventaja Los módulos de E/S acceden a la cache en vez de a memoria principal, lo que origina cuello de botella en cache. c) .- Coherencia de Cache Entre las posibles aproximaciones a la coherencia de cache se incluyen: Vigilancia del Bus en escritura inmediata Cada controlador de cache monitoriza las líneas de dirección para detectar operaciones e escritura en memoria por parte de otros maestros del bus. Si otro maestro escribe en una posición de memoria compartida que también reside en la memoria cache, el controlador de cache invalida el elemento de la cache. Esta estrategia depende del uso de una política de escritura inmediata por parte de todos los controladotes de cache. Transparencia de Hardware Se utiliza hardware adicional para asegurar que todas las actualizaciones de memoria principal, vía cache, quedan reflejadas en todas las cache. Así, si un procesador modifica una palabra de su cache, esta actualización se escribe en memoria principal, además de manera similar se actualizan todas las palabras coincidentes de otras cache. Memoria Excluida de Cache Sólo una porción de memoria principal se comparte por más de un procesador, y ésta se diseña como no transferible a cache. En un sistema de este tipo, todos los accesos a la memoria compartida son fallos de cache, porque la memoria compartida nunca se copia en la cache. La memoria excluida de cache puede ser identificada utilizando lógica de selección de chip o bits de direcciones altas. La coherencia de cache es un campo activo de investigación, y es probable que se desarrollen en lo próximos años formas más sencillas y efectivas de asegurar la coherencia. Organización y Estructura del Computador II – ER, JL 2-28 Sistema de Memoria d) .- Cuestiones en las escrituras Organización y Estructura del Computador II -OyECII Sistema de Memoria 2-29 2.5.5.- Tamaño de Bloque Bloques más grandes reducen el número de bloques que caben en la cache. Dado que cada bloque captado se escribe sobre contenidos anteriores de la cache, un número reducido de bloques da lugar a que se sobreescriba sobre datos pocos después de haber sido captado. A medida que un bloque se hace más grande, cada palabra adicional esta más lejos de la requerida, y por tanto es más improbable que sea necesaria a corto plazo. 2.5.6.- Número de Cache a) .- Cache de uno o dos Niveles La cache de un nivel significa tener una cache en el chip del procesador, a esto se le denomina cache “on-chip”. En la cache de dos niveles se tienen dos cache una “on-chip”, siendo esta el nivel uno y otra externa al procesador la que define el segundo nivel. La razón por la cual se agrega otra cache es la siguiente: si el procesador pide un dato que no esta en cache, entonces se tiene que acceder a la memoria DRAM o ROM a través de bus, lo cual incrementa el tiempo de espera. En cambio si tenemos una cache de dos niveles, si no esta en la cache de nivel uno, entonces con frecuencia la información que falta se puede recuperar de la cache de segundo nivel fácilmente, debido a que la cache de segundo nivel usa SRAM lo que permite que el acceso sea más rápido. b) .- Cache unificada y partida La cache unificada almacena tanto datos como instrucciones. La cache partida separa los datos de las instrucciones, es decir tenemos una cache para almacenar datos y otra para almacenar instrucciones. Ventajas y Desventajas: 1. Par aun tamaño dado de cache, una unificada tiene una tasa de aciertos mayor que una partida. Ya que nivela automáticamente la carga entre captación de instrucciones y de datos. 2. En la cache unificada sólo se necesita diseñar e implementar una cache. 3. En la cache compartida no existe disputa entre el pre-cargador de instrucciones y la unidad de ejecución. En la unificada se degradan las prestaciones. Organización y Estructura del Computador II – ER, JL 2-30 Sistema de Memoria 2.5.7.- Impacto en el desempeño de los parámetros de la caché Organización y Estructura del Computador II -OyECII Sistema de Memoria 2-31 Organización y Estructura del Computador II – ER, JL 2-32 Sistema de Memoria 2.6.- Memoria Virtual 2.6.1.- Conceptos Básicos La memoria virtual es una técnica para proporcionar la simulación de un espacio de memoria mucho mayor que la memoria física de una máquina. Esta "ilusión" permite que los programas se hagan sin tener en cuenta el tamaño exacto de la memoria física. La ilusión de la memoria virtual está soportada por el mecanismo de traducción de memoria, junto con una gran cantidad de almacenamiento rápido en disco duro. Así en cualquier momento el espacio de direcciones virtual hace un seguimiento de tal forma que una pequeña parte de él, está en memoria real y el resto almacenado en el disco, y puede ser referenciado fácilmente. Debido a que sólo la parte de memoria virtual que está almacenada en la memoria principal, es accesible a la CPU, según un programa va ejecutándose, la proximidad de referencias a memoria cambia, necesitando que algunas partes de la memoria virtual se traigan a la memoria principal desde el disco, mientras que otras ya ejecutadas, se pueden volver a depositar en el disco (archivos de paginación). La memoria virtual ha llegado a ser un componente esencial de la mayoría de los S.O actuales. Y como en un instante dado, en la memoria sólo se tienen unos pocos fragmentos de un proceso dado, se pueden mantener más procesos en la memoria. Es más, se ahorra tiempo, porque los fragmentos que no se usan no se cargan ni se descargan de la memoria. Sin embargo, el S.O debe saber cómo gestionar este esquema. La memoria virtual también simplifica la carga del programa para su ejecución llamado reubicación, este procedimiento permite que el mismo programa se ejecute en cualquier posición de la memoria física. a) .- Hiperpaginación En un estado estable, prácticamente toda la memoria principal estará ocupada con fragmentos de procesos, por lo que el procesador y el S.O tendrán acceso directo a la mayor cantidad de procesos posibles, y cuando el S.O traiga a la memoria un fragmento, deberá expulsar otro. Si expulsa un fragmento justo antes de ser usado, tendrá que traer de nuevo el fragmento de manera casi inmediata. Demasiados intercambios de fragmentos conducen a lo que se conoce como hiperpaginación: donde el procesador consume más tiempo intercambiando fragmentos que ejecutando instrucciones de usuario. Para evitarlo el S.O intenta adivinar, en función de la historia reciente, qué fragmentos se usarán con menor probabilidad en un futuro próximo. b) .- Principio de Localidad Los argumentos anteriores se basan en el principio de cercanía o principio de localidad que afirma que las referencias a los datos y el programa dentro de un proceso tienden a agruparse. Por lo tanto, es válida la suposición de que, durante cortos períodos de tiempo, se necesitarán sólo unos pocos fragmentos de un proceso. Organización y Estructura del Computador II -OyECII Sistema de Memoria 2-33 Una manera de confirmar el principio de cercanía es considerar el rendimiento de un proceso en un entorno de memoria virtual. El principio de cercanía sugiere que los esquemas de memoria virtual pueden funcionar. Para que la memoria virtual sea práctica y efectiva, se necesitan dos ingredientes. Primero, tiene que existir un soporte de hardware y, en segundo lugar, el S.O debe incluir un software para gestionar el movimiento de páginas o segmentos entre memoria secundaria y memoria principal. Justo después de obtener la dirección física y antes de consultar el dato en memoria principal se busca en memoria-cache, si esta entre los datos recientemente usados la búsqueda tendrá éxito, pero si falla, la memoria virtual consulta memoria principal , ó, en el peor de los casos se consulta de disco (swapping). 2.6.2.- Direccionamiento físico y Virtual Organización y Estructura del Computador II – ER, JL 2-34 Sistema de Memoria 2.6.3.- Espacio de direcciones Organización y Estructura del Computador II -OyECII Sistema de Memoria 2-35 2.6.4.- Memoria Virtual La memoria virtual como una herramienta para realizar caching Organización y Estructura del Computador II – ER, JL 2-36 Sistema de Memoria Organización y Estructura del Computador II -OyECII Sistema de Memoria 2-37 Organización y Estructura del Computador II – ER, JL 2-38 Sistema de Memoria Organización y Estructura del Computador II -OyECII Sistema de Memoria 2-39 Organización y Estructura del Computador II – ER, JL 2-40 Sistema de Memoria Organización y Estructura del Computador II -OyECII Sistema de Memoria 2.6.5.- La memoria virtual administración de memoria 2-41 como una herramienta para la Organización y Estructura del Computador II – ER, JL 2-42 Sistema de Memoria Organización y Estructura del Computador II -OyECII Sistema de Memoria 2-43 2.6.6.- La memoria virtual como una herramienta para la protección de memoria Organización y Estructura del Computador II – ER, JL 2-44 Sistema de Memoria 2.6.7.- Traducción de direcciones Organización y Estructura del Computador II -OyECII Sistema de Memoria 2-45 Organización y Estructura del Computador II – ER, JL 2-46 Sistema de Memoria Organización y Estructura del Computador II -OyECII Sistema de Memoria 2-47 Organización y Estructura del Computador II – ER, JL