Memoria Cache (Autoguardado)

Introducción En el presente trabajo de acabaremos el estudio de una de las memorias internas más utilizadas dentro de un

Views 85 Downloads 4 File size 1MB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

Introducción En el presente trabajo de acabaremos el estudio de una de las memorias internas más utilizadas dentro de un computador denominada “Memoria Caché”, conoceremos desde sus características principales, su funcionalidad, hasta su diseño de jerarquía. La memoria es un búfer especial de memoria que poseen las computadoras, la cual es utilizada por el microprocesador para reducir el tiempo de acceso a datos ubicados en la memoria principal, las cuales son utilizadas con más frecuencia. Para finalizar comprenderemos lo que sucede cuando el microprocesador necesita leer o escribir dentro de una ubicación en la memoria principal, donde primero debe verificar si una si una copia de los datos se encuentra en el caché. Con el objetivo de conocer más sobre este hardware, el trabajo consistirá en la recopilación, el análisis, y la selección de datos para la formulación de una hipótesis y una conclusión final.

Memoria En informática, la memoria es el dispositivo que retiene, memoriza o almacena datos informáticos durante algún período de tiempo.1 La memoria proporciona una de las principales funciones de la computación moderna: el almacenamiento de información y conocimiento. Es uno de los componentes fundamentales de la computadora, que interconectada a la unidad central de procesamiento (CPU, por las siglas en inglés de Central Processing Unit) y los dispositivos de entrada/salida, implementan lo fundamental del modelo de computadora de la arquitectura de von Neumann. En la actualidad, «memoria» suele referirse a una forma de almacenamiento de estado sólido, conocida como memoria RAM (memoria de acceso aleatorio; RAM por sus siglas en inglés, de random access memory), y otras veces se refiere a otras formas de almacenamiento rápido, pero temporal. De forma similar, se refiere a formas de almacenamiento masivo, como discos ópticos, y tipos de almacenamiento magnético, como discos duros y otros tipos de almacenamiento, más lentos que las memorias RAM, pero de naturaleza más permanente. Estas distinciones contemporáneas son de ayuda, porque son fundamentales para la arquitectura de computadores en general. Además, se refleja una diferencia técnica importante y significativa entre «memoria» y «dispositivos de almacenamiento masivo», que se ha ido diluyendo por el uso histórico de los términos «almacenamiento primario» (a veces «almacenamiento principal»), para memorias de acceso aleatorio, y «almacenamiento secundario», para dispositivos de almacenamiento masivo. Esto se explica en las siguientes secciones, en las que el término tradicional «almacenamiento» se usa como subtítulo, por conveniencia.

Jerarquía de almacenamiento Los componentes fundamentales de las computadoras de propósito general son la CPU, el espacio de almacenamiento y los dispositivos de entrada/salida. La habilidad para almacenar las instrucciones que forman un programa de computadora y la información que manipulan las instrucciones es lo que hace versátiles a las computadoras diseñadas según la arquitectura de programas almacenados Una computadora digital representa toda la información usando el sistema binario. Texto, números, imágenes, sonido y casi cualquier otra forma de información puede ser transformada en una sucesión de bits, o dígitos binarios, cada uno de los cuales tiene un valor de 1 ó 0. La unidad de almacenamiento más común es el byte, igual a 8 bits. Una determinada información puede ser manipulada por cualquier computadora cuyo espacio de almacenamiento sea suficientemente grande como para que quepa el dato correspondiente o la representación binaria de la información. Por ejemplo, una computadora con un espacio de almacenamiento de ocho millones de bits, o un megabyte, puede ser usada para editar una novela pequeña. Se han inventado varias formas de almacenamiento basadas en diversos fenómenos naturales. No existen ningún medio de almacenamiento de uso práctico universal y todas

las formas de almacenamiento tienen sus desventajas. Por tanto, un sistema informático contiene varios tipos de almacenamiento, cada uno con su propósito individual.

Almacenamiento primario La memoria primaria, está directamente conectada a la CPU del ordenador. Debe estar presente para que la CPU efectúe cualquier función. El almacenamiento primario consta de la memoria primaria del sistema; contiene los programas en ejecución y los datos con que operan. Se puede transferir información muy rápidamente (típicamente en menos de 100 ciclos de reloj2 ) entre un registro del microprocesador y localizaciones del almacenamiento principal. En las computadoras modernas se usan memorias de acceso aleatorio basadas en electrónica del estado sólido, que está directamente conectada a la CPU a través de buses de direcciones, datos y control. El almacenamiento lleva por principal requisito que cualquiera de sus localidades debe ser directamente direccionable, esto es, todo dato contenido en memoria debe poder encontrarse basándose en su dirección. Es por esto que los registros del procesador no pueden considerarse almacenamiento primario. Las referencias a éstos se efectúan por nombre, de forma directa, y no por dirección. Los registros representan el estado actual del cómputo y los datos utilizados inmediatamente, pero no pueden almacenar un programa (sólo apuntar al lugar de ejecución actual). La gran diferencia de velocidad entre el procesador y la memoria primaria dio origen a la memoria caché. Esta es una memoria de muy alta velocidad, típicamente entre 10 y 100 veces más que la memoria primaria, y se emplea para mejorar la eficiencia o rendimiento del CPU. Parte de la información de la memoria principal se duplica en la memoria caché. Comparada con los registros, la caché es ligeramente más lenta, pero de mayor capacidad. Sin embargo, es más rápida, aunque de mucha menor capacidad que la memoria principal. Algunos autores3 presentan a la memoria caché como una jerarquía aparte, sin embargo, al no ser memoria directamente direccionable (guarda estrictamente copias de la información disponible en la memoria principal), es común presentarla como parte funcional del almacenamiento primario.

Almacenamiento secundario La memoria secundaria requiere que la computadora use sus canales de entrada/salida para acceder a la información y se utiliza para almacenamiento a largo plazo de información persistente. Sin embargo, la mayoría de los sistemas operativos usan los dispositivos de almacenamiento secundario como área de intercambio para incrementar artificialmente la cantidad aparente de memoria principal en la computadora (a esta utilización del almacenamiento secundario se le denomina memoria virtual). La memoria secundaria también se llama de «almacenamiento masivo». Un disco duro es un ejemplo de almacenamiento secundario. Habitualmente, la memoria secundaria o de almacenamiento masivo tiene mayor capacidad que la memoria primaria, pero es mucho más lenta. En las computadoras

modernas, los discos duros suelen usarse como dispositivos de almacenamiento masivo. El tiempo necesario para acceder a un byte de información dado almacenado en un disco duro de platos magnéticos es de unas milésimas de segundo (milisegundos). En cambio, el tiempo para acceder al mismo tipo de información en una memoria de acceso aleatorio (RAM) se mide en mil-millonésimas de segundo (nanosegundos). Esto ilustra cuan significativa es la diferencia entre la velocidad de las memorias de estado sólido y la velocidad de los dispositivos rotantes de almacenamiento magnético u óptico: los discos duros son del orden de un millón de veces más lentos que la memoria (primaria). Los dispositivos rotantes de almacenamiento óptico (unidades de CD y DVD) son incluso más lentos que los discos duros, aunque es probable que su velocidad de acceso mejore con los avances tecnológicos. Por lo tanto, el uso de la memoria virtual, que es cerca de un millón de veces más lenta que memoria “verdadera”, ralentiza apreciablemente el funcionamiento de cualquier computadora. Muchos sistemas operativos implementan la memoria virtual usando términos como memoria virtual o «fichero de caché». La principal ventaja histórica de la memoria virtual es el precio; la memoria virtual resultaba mucho más barata que la memoria real. Esa ventaja es menos relevante hoy en día. Aun así, muchos sistemas operativos siguen implementándola, a pesar de provocar un funcionamiento significativamente más lento.

Almacenamiento terciario La memoria terciaria es un sistema en el que un robot industrial brazo robótico, montará, conectará o desmontará (desconectará) un medio de almacenamiento masivo fuera de línea (véase el siguiente punto) según lo solicite el sistema operativo de la computadora. La memoria terciaria se usa en el área del almacenamiento industrial, la computación científica en grandes sistemas informáticos y en redes empresariales. Este tipo de memoria es algo que los usuarios de computadoras personales normales nunca ven de primera mano.

Almacenamiento fuera de línea El almacenamiento fuera de línea (off-line) es un sistema donde el medio de almacenamiento puede ser extraído fácilmente del dispositivo de almacenamiento. Estos medios de almacenamiento suelen usarse para transporte y archivo de datos. En computadoras modernas son de uso habitual para este propósito los disquetes, discos ópticos y las memorias flash, incluyendo las unidades USB. También hay discos duros USB que se pueden conectar rápidamente. Los dispositivos de almacenamiento fuera de línea usados en el pasado son cintas magnéticas en muchos tamaños y formatos diferentes, y las baterías extraíbles de discos Winchester.

Almacenamiento de red El almacenamiento de red es cualquier tipo de almacenamiento de computadora que incluye el hecho de acceder a la información a través de una red informática. Discutiblemente, el almacenamiento de red permite centralizar el “control de información” en una organización y reducir la duplicidad de la información. El almacenamiento en red incluye:

El almacenamiento asociado a red es una memoria secundaria o terciaria que reside en una computadora a la que otra de éstas puede acceder a través de una red de área local, una red de área extensa, una red privada virtual o, en el caso de almacenamiento de archivos en línea, internet. Las redes de computadoras son computadoras que no contienen dispositivos de almacenamiento secundario. En su lugar, los documentos y otros datos son almacenados en un dispositivo de la red.

Características de las memorias La división entre primario, secundario, terciario, fuera de línea, se basa en la jerarquía de memoria o distancia desde la CPU. Hay otras formas de caracterizar a los distintos tipos de memoria.

Volatilidad de la información La memoria volátil requiere energía constante para mantener la información almacenada. La memoria volátil se suele usar sólo en memorias primarias. La memoria RAM es una memoria volátil, ya que pierde información en la falta de energía eléctrica. La memoria no volátil retendrá la información almacenada incluso si no recibe corriente eléctrica constantemente, como es el caso de la memoria ROM. Se usa para almacenamientos a largo plazo y, por tanto, se usa en memorias secundarias, terciarias y fuera de línea. La memoria dinámica es una memoria volátil que además requiere que periódicamente se refresque la información almacenada, o leída y reescrita sin modificaciones.

Accesibilidad secuencial o aleatoria a información Dependiendo de la habilidad para acceder a información contigua o no, se puede clasificar en: *Acceso aleatorio: significa que se puede acceder a cualquier localización de la memoria en cualquier momento en el mismo intervalo de tiempo, normalmente pequeño. *Acceso secuencial: significa que acceder a una unidad de información tomará un intervalo de tiempo variable, dependiendo de la unidad de información que fue leída anteriormente. El dispositivo puede necesitar buscar (posicionar correctamente el cabezal de lectura/escritura de un disco), o dar vueltas (esperando a que la posición adecuada aparezca debajo del cabezal de lectura/escritura en un medio que gira continuamente).

Habilidad para cambiar la información Las memorias de lectura/escritura o memorias cambiables permiten que la información se reescriba en cualquier momento. Una computadora sin algo de memoria de lectura/escritura como memoria principal sería inútil para muchas tareas. Las computadoras modernas también usan habitualmente memorias de lectura/escritura como memoria secundaria. *La memoria de sólo lectura (Read-Only Memory, ROM) retiene la información almacenada en el momento de fabricarse y.

*La memoria de escritura única lectura múltiple (Write Once Read Many, WORM) permite que la información se escriba una sola vez en algún momento tras la fabricación. También están las memorias inmutables, que se utilizan en memorias terciarias y fuera de línea. Un ejemplo son los CD-ROM. *Las memorias de escritura lenta y lectura rápida son memorias de lectura/escritura que permite que la información se reescriba múltiples veces pero con una velocidad de escritura mucho menor que la de lectura. Un ejemplo son los CD-RW.

Direccionamiento de la información En la memoria de localización direccionable, cada unidad de información accesible individualmente en la memoria se selecciona con su dirección de memoria numérica. En las computadoras modernas, la memoria de localización direccionable se suele limitar a memorias primarias, que se leen internamente por programas de computadora ya que la localización direccionable es muy eficiente, pero difícil de usar para los humanos. En las memorias de sistema de archivos, la información se divide en archivos informáticos de longitud variable y un fichero concreto se localiza en directorios y nombres de archivos «legible por humanos». El dispositivo subyacente sigue siendo de localización direccionable, pero el sistema operativo de la computadora proporciona la abstracción del sistema de archivos para que la operación sea más entendible. En las computadora modernas, las memorias secundarias, terciarias y fuera de línea usan sistemas de archivos. En las memorias de contenido direccionable (content-addressable memory), cada unidad de información legible individualmente se selecciona con una valor hash o un identificador corto sin relación con la dirección de memoria en la que se almacena la información. La memoria de contenido direccionable pueden construirse usando software o hardware; la opción hardware es la opción más rápida y cara.

Capacidad de memoria Memorias de mayor capacidad son el resultado de la rápida evolución en tecnología de materiales semiconductores. Los primeros programas de ajedrez funcionaban en máquinas que utilizaban memorias de base magnética. A inicios de 1970 aparecen las memorias realizadas por semiconductores, como las utilizadas en la serie de computadoras IBM 370. La velocidad de los computadores se incrementó, multiplicada por 100.000 aproximadamente y la capacidad de memoria creció en una proporción similar. Este hecho es particularmente importante para los programas que utilizan tablas de transposición: a medida que aumenta la velocidad de la computadora se necesitan memorias de capacidad proporcionalmente mayor para mantener la cantidad extra de posiciones que el programa está buscando. Se espera que la capacidad de procesadores siga aumentando en los próximos años; no es un abuso pensar que la capacidad de memoria continuará creciendo de manera impresionante. Memorias de mayor capacidad podrán ser utilizadas por programas con tablas de Hash de mayor envergadura, las cuales mantendrán la información en forma permanente. * Minicomputadoras: se caracterizan por tener una configuración básica regular que

puede estar compuesta por un monitor, unidades de disquete, disco, impresora, etc. Su capacidad de memoria varía de 16 a 256 KiB. *Macrocomputadoras: son aquellas que dentro de su configuración básica contienen unidades que proveen de capacidad masiva de información, terminales (monitores), etc. Su capacidad de memoria varía desde 256 a 512 KiB, también puede tener varios megabytes o hasta gigabytes según las necesidades de la empresa. *Microcomputadores y computadoras personales: con el avance de la microelectrónica en la década de los 70 resultaba posible incluir todos los componente del procesador central de una computadora en un solo circuito integrado llamado microprocesador. Ésta fue la base de creación de unas computadoras a las que se les llamó microcomputadoras. El origen de las microcomputadoras tuvo lugar en los Estados Unidos a partir de la comercialización de los primeros microprocesadores (INTEL 8008, 8080). En la década de los 80 comenzó la verdadera explosión masiva, de los ordenadores personales (Personal Computer PC) de IBM. Esta máquina, basada en el microprocesador INTEL 8008, tenía características interesantes que hacían más amplio su campo de operaciones, sobre todo porque su nuevo sistema operativo estandarizado (MS-DOS, Microsoft Disk Operating Sistem) y una mejor resolución óptica, la hacían más atractiva y fácil de usar. El ordenador personal ha pasado por varias transformaciones y mejoras que se conocen como XT(Tecnología Extendida), AT(Tecnología Avanzada) y PS/2...

Tecnologías, dispositivos y medios Memoria de semiconductor La memoria de semiconductor usa circuitos integrados basados en semiconductores para almacenar información. Un chip de memoria de semiconductor puede contener millones de minúsculos transistores o condensadores. Existen memorias de semiconductor de ambos tipos: volátiles y no volátiles. En las computadoras modernas, la memoria principal consiste casi exclusivamente en memoria de semiconductor volátil y dinámica, también conocida como memoria dinámica de acceso aleatorio o más comúnmente RAM, su acrónimo inglés. Con el cambio de siglo, ha habido un crecimiento constante en el uso de un nuevo tipo de memoria de semiconductor no volátil llamado memoria flash. Dicho crecimiento se ha dado, principalmente en el campo de las memorias fuera de línea en computadoras domésticas. Las memorias de semiconductor no volátiles se están usando también como memorias secundarias en varios dispositivos de electrónica avanzada y computadoras especializadas y no especializadas.

Memoria magnética Las memorias magnéticas usan diferentes patrones de magnetización sobre una superficie cubierta con una capa magnetizada para almacenar información. Las memorias magnéticas son no volátiles. Se llega a la información usando uno o más cabezales de lectura/escritura. Como el cabezal de lectura/escritura solo cubre una parte de la superficie, el almacenamiento magnético es de acceso secuencial y debe buscar, dar vueltas o las dos cosas. En ‘computadoras modernas’, la superficie magnética es de alguno de estos tipos:

*Disco magnético. *Disquete, usado para memoria fuera de línea. *Disco duro, usado para memoria secundario. *Cinta magnética, usada para memoria terciaria y fuera de línea. En las ‘primeras computadoras’, el almacenamiento magnético se usaba también como memoria principal en forma de memoria de tambor, memoria de núcleo, memoria en hilera de núcleo, memoria película delgada, memoria de Twistor o memoria de burbuja. Además, a diferencia de hoy, las cintas magnéticas se solían usar como memoria secundaria.

Memoria de disco óptico Las memorias en disco óptico almacenan información usando agujeros minúsculos grabados con un láser en la superficie de un disco circular. La información se lee iluminando la superficie con un diodo láser y observando la reflexión. Los discos ópticos son no volátil y de acceso secuencial. Los siguientes formatos son de uso común: *CD, CD-ROM, DVD: Memorias de simplemente solo lectura, usada para distribución masiva de información digital (música, vídeo, programas informáticos). *CD-R, DVD-R, DVD+R: Memorias de escritura única usada como memoria terciaria y fuera de línea. *CD-RW, DVD-RW, DVD+RW, DVD-RAM: Memoria de escritura lenta y lectura rápida usada como memoria terciaria y fuera de línea. *Blu-ray: Formato de disco óptico pensado para almacenar vídeo de alta calidad y datos. Para su desarrollo se creó la BDA, en la que se encuentran, entre otros, Sony o Phillips.

Memoria de disco magneto-óptico Los discos magneto-ópticos son discos de memoria óptica donde la información se almacena en el estado magnético de una superficie ferromagnética. La información se lee ópticamente y se escribe combinando métodos magnéticos y ópticos. Las memorias de discos magneto ópticos son de tipo no volátiles, de acceso secuencial, de escritura lenta y lectura rápida. Se usa como memoria terciaria y fuera de línea. La memoria de cambio de fase: usa las fases de un material de cambio de fase para almacenar información. Dicha información se lee observando la resistencia eléctrica variable del material. La memoria de cambio de fase sería una memoria de lectura/escritura no volátil, de acceso aleatorio podría ser usada como memoria primaria, secundaria y fuera de línea. La memoria holográfica almacena ópticamente la información dentro de cristales o fotopolímeros. Las memorias holográficas pueden utilizar todo el volumen del medio de almacenamiento, a diferencia de las memorias de discos ópticos,

que están limitadas a un pequeño número de superficies en capas. La memoria holográfica podría ser no volátil, de acceso secuencial y tanto de escritura única como de lectura/escritura. Puede ser usada tanto como memoria secundaria como fuera de línea. La memoria molecular: almacena la información en polímeros que pueden almacenar puntas de carga eléctrica. La memoria molecular puede ser especialmente interesante como memoria principal. Recientemente se ha propuesto utilizar el spin de un electrón como memoria. Se ha demostrado que es posible desarrollar un circuito electrónico que lea el spin del electrón y lo convierta en una señal eléctrica.

Asignación de memoria La asignación de memoria consiste en el proceso de asignar memoria para propósitos específicos, ya sea en tiempo de compilación o de ejecución. Si es en tiempo de compilación es estática, si es en tiempo de ejecución es dinámica y si son variables locales a un grupo de sentencias se denomina automática.

Asignación estática de memoria La asignación estática de memoria consiste en el proceso de asignar memoria en tiempo de compilación antes de que el programa asociado sea ejecutado, a diferencia de la asignación dinámica o la automática donde la memoria se asigna a medida que se necesita en tiempo de ejecución. Una aplicación de esta técnica conlleva que un módulo de programa (por ejemplo función o subrutina) declara datos estáticos de forma local, de forma que estos datos son inaccesibles desde otros módulos a menos que se les pasen referenciados como parámetros o que les sean devueltos por la función. Se mantiene una copia simple de los datos estáticos, accesible a través de llamadas a la función en la cual han sido declarados. El uso de variables estáticas dentro de una clase en la programación orientada a objetos permite que una copia individual de tales datos se comparta entre todos los objetos de esa clase. Las constantes conocidas en tiempo de compilación, como literales de tipo cadena, se asignan normalmente de forma estática. En programación orientada a objetos, el método usual para las tablas de clases también es la asignación estática de memoria.

Asignación automática de memoria

Las variables automáticas son variables locales a un bloque de sentencias (subrutina, función o procedimiento). Pueden ser asignadas automáticamente en la pila de datos cuando se entra en el bloque de código. Cuando se sale del bloque, las variables son automáticamente desasignadas. Las variables automáticas tendrán un valor sin definir cuando son declaradas, por tanto es buena práctica de programación inicializarlas con un valor válido antes de usarlas.

Asignación dinámica de memoria

En ciencia de la computación, asignación dinámica de la memoria es la asignación de almacenamiento de memoria para utilización por parte de un programa de computador durante el tiempo de ejecución de ese programa. Es una manera de distribuir la propiedad de recursos de memoria limitada entre muchas piezas de código y datos. Un objeto asignado dinámicamente permanece asignado hasta que es desasignado explícitamente, o por el programador o por un recolector de basura; esto es notablemente diferente de la asignación automática de memoria y de la asignación estática de memoria (la de las variables estáticas). Se dice que tal objeto tiene tiempo de vida dinámico.

Soluciones para los problemas de asignación

La tarea de satisfacer una petición de asignación, la cual conlleva encontrar un bloque de memoria sin usar de cierto tamaño en el heap, es un problema complicado. Se han propuesto una amplia variedad de soluciones, incluyendo listas de bloques libres, Paginación, y Asignación buddy de memoria. El problema principal para la mayoría de algoritmos de asignación de memoria dinámica es evitar la fragmentación interna y externa mientras se mantiene la eficiencia del algoritmo. También, la mayoría de algoritmos en uso tienen el problema de que un número grande de pequeñas asignaciones pueden causar el desaprovechamiento del espacio debido a la recolección de metadatos; así la mayoría de los programadores intentan evitar esto, a veces usando una estrategia llamada chunking.

Asignación de bloques de tamaño fijo

Una solución es tener una lista enlazada LIFO de bloques de memoria de tamaño fijo. Esto funciona bien para sistemas empotrados simples.

Algoritmo Buddy

Otra solución es tener un asignador buddy de bloques binarios. En este sistema, la memoria se asigna desde un gran bloque de memoria que es tamaño potencia de dos. Si el bloque es más del doble de grande de lo necesario, se parte en dos. Se selecciona una de las dos mitades, y el proceso se repite (comprobando el tamaño otra vez y partiendo si se necesita) hasta que el bloque sea justamente el necesitado. Todos los segmentos de memoria de un tamaño particular son guardados en una lista enlazada ordenada o una estructura de datos en árbol. Cuando se libera un bloque, se compara con su buddy(vecino). Si los dos están libres, son combinados y colocados en la lista de bloques buddy de siguiente mayor tamaño. (Cuando un bloque es asignado, el asignador empezará con el bloque grande suficientemente pequeño para evitar romper bloques innecesariamente). Nótese que los asignadores buddy de bloques no son únicamente para los Sistemas Operativos de Tiempo-Real (RTOS); ellos también son usados en sistemas operativos de propósito general (tales como Microsoft Windows y Linux).

Asignación de memoria basada en Heap

En la asignación de memoria basada en heap, la memoria es asignada desde un gran área común de memoria libre (sin usar) llamada heap (también llamada almacén de libres o 'memoria del montón'). "El heap" no tiene nada que ver con la estructura de datos Heap (o Montículo). El tamaño de la asignación de memoria puede ser determinado en tiempo de ejecución, y el tiempo de vida de la asignación no es dependiente del procedimiento actual o del marco de pila. La región de memoria asignada es accedida indirectamente, normalmente por medio de una referencia. El algoritmo preciso usado para organizar el área de memoria y asignar y desasignar los trozos está oculto detrás de una interfaz abstracta y puede usar cualquiera de los métodos descritos antes. En contraste, la memoria de la pila de llamadas es normalmente de tamaño limitado y el tiempo de vida de la asignación depende de la duración de las funciones correspondientes.

Caché (informática)

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.

Etimología y ortografía

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,1 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).

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: Memoria caché nivel 1 (Caché L1) También llamada memoria interna, se encuentra en el núcleo del microprocesador. Es utilizada para acceder a datos importantes y de uso frecuente, es el nivel en el que el

tiempo de respuesta es menor. Su capacidad es de hasta 256 kb. Este nivel se divide en dos: Nivel 1 Data Cache: Se encarga de almacenar datos usados frecuentemente y cuando sea necesario volver a utilizarlos, accede a ellos en muy poco tiempo, por lo que se agilizan los procesos. Nivel 1 Instrucción Cache: Se encarga de almacenar instrucciones usadas frecuentemente y cuando sea necesario volver a utilizarlas, inmediatamente las recupera, por lo que se agilizan los procesos. Memoria caché nivel 2 (Caché L2) Se encarga de almacenar datos de uso frecuente. Es más lenta que la caché L1, pero más rápida que la memoria principal (RAM). Se encuentra en el procesador, pero no en su núcleo. Genera una copia del nivel Caché Exclusivo: Los datos solicitados se eliminan de la memoria caché L2. Caché Inclusivo: Los datos solicitados se quedan en la memoria caché L2. Memoria caché nivel 3 (Caché L3) Esta memoria se encuentra en algunos procesadores modernos y genera una copia a la L2. Es más rápida que la memoria principal (RAM), pero más lenta que L2. En esta memoria se agiliza el acceso a datos e instrucciones que no fueron localizadas en L1 o L2. Es generalmente de un tamaño mayor y ayuda a que el sistema guarde gran cantidad de información agilizando las tareas del procesador.

Memoria Caché Concepto fundamental. Terminología. Características. Función específica. Cuando se habla de memoria caché se está hablando de aquella cantidad de información que permanece de manera temporal en la computadora y que ayuda a la adquisición de velocidad y eficiencia cuando es necesario recurrir a determinado tipo de datos. El nombre proviene del francés, que significa “escondido” u “oculto”. Es una clase de memoria RAM estática (SRAM). El sistema de memoria caché está diseñado especialmente para servir al apropiado y organizado almacenamiento de información en una computadora. Su función es básicamente mantener de manera temporal y accesible aquellos datos que son requeridos para realizar determinadas funciones o tareas. Esta disponibilidad permite que cada programa o archivo tenga inmediato acceso a la información necesaria y pueda así dedicarse a subir el nivel de eficiencia de las funciones normales. De tal modo, la memoria principal cuenta con una gran ayuda que le permite adquirir mayor velocidad de desempeño y mejores resultados por fuera de sus limitadas capacidades. Existen tres tipos de caché:   

La que está incluida en el interior del microprocesador, llamada interna o de primer nivel (L1) La caché externa o de segundo nivel (L2), la cual se puede añadir a la tarjeta madre. El caché (L3) es una memoria de gran velocidad y depende de la comunicación entre el procesador y la placa base.

Caché de 1er nivel (L1) 





Integrada en el núcleo del procesador. La cantidad de memoria varía, estando entre los 64kb y los 256kb. Suele estar dividida en dos partes, una para instrucciones y otra para datos.

Caché de 2do nivel (L2) 



Puede llegar a superar los 2Mb de memoria. A diferencia de la caché L1, no está dividida y su utilización está más encaminada a programas que al sistema.

Caché de 3er nivel (L3) 



En un principio estaba incorporada a la placa base, no al procesador. Es una memoria de gran rapidez que agiliza el acceso a datos e instrucciones que no fueron localizados en L1

o L2.

Características generales de la memoria SRAM:     

Son memorias caras y por lo tanto de muy poco uso Cuentan generalmente con 80 pines que se insertan en una ranura especial Tienen por lo general muy poca capacidad de almacenamiento, pero son muy veloces Puede convivir con otros tipos de memorias en la misma motherboard Actualmente se las clasifica en niveles, por lo que se les identifica como L1, L2, L3.

Partes de la memoria SRAM: Los componentes son visibles, ya que no cuenta con cubierta protectora; son básicamente los siguientes: 1. Tarjeta: placa plástica sobre la cual están soldados los componentes de la memoria. 2. Chips: son módulos de memoria volátil SRAM. 3. Conector (80 terminales): base de la memoria que se inserta en la ranura especial para SRAM. 4. Muesca: indica la posición correcta dentro de la ranura de memoria.

Figura 1. Esquema de la memoria SRAM.

Capacidades de almacenamiento SRAM: La unidad práctica para medir la capacidad de almacenamiento de una memoria SRAM es el kilobyte (kb) y el megabyte (mb). Actualmente en los discos duros y microprocesadores viene integrada con las siguientes capacidades: Tipo de memoria

Capacidad en kb/mb

Tarjeta de memoria

256kb, 512kb y 1mb

Discos duros

Hasta 8mb

Microprocesadores

Hasta 12mb

Conceptos básicos sobre sistemas de memorias de computadores. Características de los sistemas de memoria. Características claves de los sistemas de memoria de computadores. Ubicación   

Procesador Interna (principal) Externa (secundaria)

Capacidad  

Tamaño de la palabra Número de palabras

Método de acceso    

Acceso secuencial Acceso directo Acceso aleatorio Acceso asociativo

Prestaciones   

Tiempo de acceso Tiempo de ciclo Velocidad de transferencia

Dispositivo físico    

Semiconductor Soporte magnético Soporte óptico Magneto óptico

Características físicas  

Volátil/no volátil Borrable/no borrable

Organización El término “ubicación” indica si la memoria es interna o externa al computador. La memoria interna suele identificarse con la memoria principal. Sin embargo hay además otras formas de memoria interna. El procesador necesita su propia memoria local en forma de registros. Además, la unidad de control del procesador también puede necesitar su propi memoria interna. La memoria caché es también otro tipo de memoria interna. La memoria externa consta de dispositivos periféricos de almacenamiento, tales como discos y cintas, que son accesibles por el procesador a través de controladores de E/S. Una característica obvia de las memorias es su “capacidad”. Para memorias internas se expresa normalmente en términos de bytes (1 byte=8 bits) o de palabras. Longitudes de palabras comunes son 8, 16 y 32 bits. La capacidad de las memorias externas se suele expresar en bytes. Un concepto relacionado es la “unidad de transferencia”. Para memorias internas, la unidad de transferencia es igual al número de líneas de E/S de datos del módulo de memoria. A menudo es igual a la longitud de palabra, pero suele ser mayor, por ejemplo 64, 128 o 256 bits.



Palabra: es la unidad natural de organización de la memoria. El tamaño de la palabra suele coincidir con el número de bits utilizados para representar números y con la longitud de las instrucciones.

Otro dispositivo entre tipos de memorias es el “método de acceso”, que incluye las siguientes variables: 

Acceso secuencial: la memoria se organiza en unidades de datos llamados registros. El acceso debe realizarse con una secuencia lineal específica. Se hace uso de información almacenada de direccionamiento que permite separar los registros y ayudar en el proceso de recuperación de datos. Se utiliza un mecanismo de lectura/escritura compartida que debe ir trasladándose desde su posición actual a la deseada, pasando y obviando cada registro intermedio. Así pues, el tiempo necesario para acceder a un registro dado es muy variable.

Figura 2. Esquema del acceso secuencial



Acceso directo: como en el caso de acceso secuencial, el directo tiene asociado un mecanismo de lectura/escritura. Sin embargo, los bloques individuales o registros tienen una dirección única basada en su dirección física. El acceso se lleva a cabo mediante un acceso directo a una vecindad dada, seguido de una búsqueda secuencial, bien contando, o bien esperando hasta alcanzar la posición final. De nuevo el tiempo de acceso es variable.





Figura 3. Esquema del acceso directo

Acceso aleatorio: cada posición direccionalmente de memoria tiene un único mecanismo de acceso cableado físicamente. El tiempo para acceder a una posición dada es constante e independiente de la secuencia de accesos previos. Por tanto, cualquier posición puede seleccionarse aleatoriamente y ser direccionada y accedida directamente.

Figura 4. Esquema del acceso aleatorio

Asociativa: permite hacer una comparación de ciertas posiciones de bits dentro de una palabra buscando que coincidan con unos valores dados, y hacer esto para todas las palabras simultáneamente. Una palabra es por tanto recuperada basándose en una porción de su contenido en lugar de su dirección.

Figura 5. Asignación de bloques de la Mp en la Mca con correspondencia totalmente asociativa.

Se utilizan tres parámetros de medida de prestaciones: 



Tiempo de acceso: para memorias de acceso aleatorio es el tiempo que tarda en realizarse una operación de escritura o de lectura, es decir, el tiempo que transcurre desde el instante en el que se presenta una dirección a la memoria hasta que el dato, o ha sido memorizado, o está disponible para su uso. Para memorias de otro tipo, el tiempo de acceso es el que tarda en situar el mecanismo de lectura/escritura en la posición deseada.

Figura 6. Esquema tiempo de acceso

Tiempo de ciclo de memoria: este concepto se aplica principalmente a las memorias de acceso aleatorio y consiste en el tiempo de acceso y algún tiempo más que se requiere antes de que pueda iniciarse un segundo acceso a memoria.



Velocidad de transferencia: es la velocidad a la que se pueden transferir datos a, o desde, una unidad de memoria. Para memorias de acceso aleatorio coincide con el inverso del tiempo del ciclo. Para otras memorias se utiliza la siguiente relación:  TN: TN= TA+N/R tiempo de medio de escritura o lectura de N bits.  TA: tiempo de acceso medio.  R: velocidad de transferencia, en bits por segundo (bps)

Se han empleado soportes físicos muy diversos para las memorias. Las más comunes en la actualidad son las memorias “semiconductoras”, las memorias de “superficie magnífica”, utilizadas para discos y cintas, y las memorias “ópticas” y “magneto-ópticas”. Del almacenamiento de datos son importantes varias características físicas. En memorias volátiles la información se va perdiendo o desaparece cuando se desconecta la alimentación. En las memorias no volátiles la información, una vez grabada, permanece sin deteriorarse hasta que se modifique intencionalmente, no se necesita la fuente de alimentación para retener la información. En memorias de acceso aleatorio, su organización o estructura física en bits para formas palabras.

Jerarquía de memoria Las restricciones de diseño de la memoria de un computador se pueden resumir en tres cuestiones: ¿Cuánta capacidad?, ¿Cómo de rápida?, ¿De qué coste?  



La cuestión del tamaño: si se consigue hasta una cierta capacidad, probablemente se desarrollaran aplicaciones que la utilicen. La cuestión de la rapidez: para conseguir las prestaciones óptimas, la memoria debe seguir al procesador. Es decir, cuando el procesador ejecuta instrucciones, no es deseable que tenga que detenerse a la espera de instrucciones o de operandos. La cuestión del coste: en la práctica, el coste de la memoria debe ser razonable con relación a los otros componentes.

Existe un compromiso entre las tres características claves de coste, capacidad, y tiempo de acceso. En todo el espectro de posibles tecnologías se cumplen las siguientes relaciones:   

A menor tiempo de acceso, mayor coste por bit. A mayor capacidad, menor coste por bit. A mayor capacidad, mayor tiempo de acceso.

Figura 7. Ilustra una jerarquía típica

El dilema con que se enfrenta el diseñador está claro. El diseñador desearía utilizar tecnologías de memoria que proporcionan gran capacidad, tanto porque ésta es necesaria como porque el coste por bit es bajo. Sin embargo, para satisfacer las prestaciones requeridas, el diseñador necesita utilizar memorias costosas, de capacidad relativamente baja y con tiempos de acceso reducidos. La respuesta a este dilema es no contar con un solo componente de memoria, sino emplear una jerarquía de memoria. Cuando se desciende en la jerarquía ocurre lo siguiente: a) b) c) d)

Disminuye el coste por bit. Aumenta la capacidad. Aumenta el tiempo de acceso. Disminuye la frecuencia de accesos a la memoria por parte del procesador.

Así pues, memorias más pequeñas, más costosas y más rápidas, se complementan con otras más grandes, más económicas y más lentas. La clave del éxito de esta organización está en el ítem (d): la disminución de la frecuencia de acceso. En principio, el uso de dos niveles de memoria para reducir el tiempo de acceso medio funciona, pero solo si se aplican las condiciones (a) a (d) anteriores. Empleando diversas tecnologías se tiene todo un espectro de sistemas de memoria que satisfacen las condiciones (a) a (d). Afortunadamente, la condición (d) es también generalmente válida. La base para la validez de la condición (d) es el principio conocido como “localidad de las referencias”. En el curso de la ejecución de un programa, las referencias a memoria por parte del procesador, tanto para instrucciones como para datos, tienden a estar agrupadas. Los programas normalmente contienen un número de bucles interactivos y subrutinas. Cada vez que se entra en bucle o una subrutina, hay repetidas referencias a un pequeño conjunto de instrucciones. De manera similar, las operaciones con tablas o con matrices conllevan accesos a un conjunto de palabras de datos agrupados. En periodos de tiempo corto, el procesador trabaja principalmente en agrupaciones fijas de referencias a memoria. De acuerdo con lo anterior, es posible organizar los datos a través de la jerarquía de tal manera que el porcentaje de accesos a cada nivel siguiente más bajo, sea sustancialmente menos que al nivel anterior. Considérese el ejemplo de dos niveles ya presentado, y que la memoria del nivel 2 contiene todos los datos e instrucciones de programa. Las agrupaciones actuales pueden ubicarse temporalmente en el nivel 1. De vez en cuando, una de las agrupaciones del nivel 1 tendrá que ser devuelta al nivel 2 a fin que deje sitio para que entre otra nueva agrupación al nivel 1. En general, sin embargo, la mayoría de las referencias serán a instrucciones y datos contenidos en el nivel 1. Este principio puede aplicarse a través de más de dos niveles de memoria.

Figura 8. Prestaciones de una memoria de dos niveles sencilla. Fracción de accesos que implican solo al nivel 1 (tasa de aciertos).

El tipo de memoria más rápida, pequeña y costosa, lo constituyen los registros internos al procesador. Descendiendo dos niveles, la memoria principal es el principal sistema de memoria interna del computador. Cada posición de memoria principal tiene una única dirección. La memoria principal es normalmente ampliada con una caché, que es más pequeña y rápida. La caché no suele estar visible al programador, y realmente tampoco al procesador. Es un dispositivo para escalonar las transferencias de datos entre la memoria principal y los registros del procesador a fin de mejorar las prestaciones. Las tres formas de memoria que acabamos de describir son, normalmente, volátiles y de tecnología semiconductora. El uso de tres niveles aprovecha la variedad existente de tipos de memorias semiconductoras, que difieren en velocidad y coste. En la jerarquía pueden incluirse otras formas de memoria. Por ejemplo, los grandes computadores de 1Mb incluyen una forma de memoria interna conocida como almacenamiento extendido. Este utiliza una tecnología semiconductora que es más lenta y menos costosa que la de la memoria principal, estrictamente hablando, esta memoria no encaja en la jerarquía sino que es una ramificación lateral: los datos pueden transferirse entre la memoria principal y el almacenamiento extendido pero no entre este y la memoria externa. Otras formas de memoria secundaria incluyen los discos ópticos y los magneto-ópticos. Finalmente, mediante software se pueden añadir más niveles a la jerarquía. Una parte de la memoria principal puede utilizarse como almacén intermedio (buffer) para guardar temporalmente datos que van a ser volcados en disco. Esta técnica, a veces denominada caché de disco, mejora las prestaciones de dos maneras: 



Las escrituras en disco se hacen por grupo. En lugar de muchas transferencias cortas de datos, tenemos pocas transferencias largas. Esto mejora las prestaciones del disco y minimiza la participación del procesador. Algunos datos destinados a ser escritos como salidas pueden ser referenciados por un programa antes de que sean volcados en disco. En ese caso, los datos se recuperan rápidamente desde la caché software en lugar de hacerlo lentamente de disco.

Principios básicos de la memoria caché El objetivo de la memoria caché es lograr que la velocidad de la memoria sea lo más rápida posible, consiguiendo al mismo tiempo un tamaño grande al precio de memorias semiconductoras menos costosas

Figura 9. Concepto de la memoria

La caché contiene una copia de partes de la memoria principal. Cuando el procesador intenta leer una palabra de memoria, se hace una comprobación para determinar si la palabra está en la caché. Si es así, se entrega dicha palabra al procesador. Si no, un bloque de memoria principal, consistente en un cierto número de palabras, se transfiere a la caché y después la palabra es entregada al procesador.

Figura 10. Indica la estructura memoria caché/principal

El procesador genera la dirección, RA, de una palabra a leer. Si la palabra está en la caché, es entregada al procesador. Si no, el bloque que contiene dicha palabra se carga en la caché, y la palabra después es llevada al procesador. La operación se realiza en paralelo.

Figura 11. Operación de lectura de caché

La caché conecta con el procesador mediante líneas de datos, de control y de direcciones. Las líneas de datos y de direcciones conectan también con buffers de datos y de direcciones que las comunican con un bus del sistema a través del cual se accede a la memoria principal. Cuando ocurre un acierto de caché, los buffers de datos y de direcciones se inhabilitan, y la comunicación tiene lugar solo entre procesador y caché, sin tráfico en el bus. Cuando ocurre un fallo de caché, la dirección deseada se carga en el bus del sistema y el dato es llevado, a través del buffer de datos, tanto a la caché como al procesador. En otras formas de organización, la caché se interpone físicamente entre el procesador y la memoria principal para todas las líneas de datos, direcciones y control. En este caso, frente a un fallo de caché, la palabra deseada es primero leída por la caché y después transferida desde ésta al procesador.

Figura 12. Organización típica de caché

Elementos de diseño de la caché En esta sección se revisan los parámetros de diseño de la caché y se muestran algunos resultados típicos. Aunque hay muy diversas implementaciones de caché, existen unos cuantos criterios de diseño que sirven para clasificar y diferenciar entre arquitecturas de caché. Tamaño de caché

Política de escritura   

Función de correspondencia

Escritura inmediata Postescritura Escritura única

Tamaño de línea

Directa Asociativa Asociativa por conjuntos Algoritmo de sustitución  

Utilizado menos recientemente (LRU) Primero en entrar-primero en

Número de cachés  

Uno o dos niveles Unificada o partida

 

salir (FIFO) Utilizado frecuentemente (LFU) Aleatorio

menos

Tamaño de caché Nos gustaría que el tamaño fuera lo suficientemente pequeño como para que el coste total medio por bit se aproxime al de la memoria principal sola, y que fuera lo suficientemente grande como para que el tiempo de acceso medio total sea próximo al de la caché sola. El tamaño de caché está también limitado por las superficies disponibles de chip y de tarjeta. Como las prestaciones de la caché son muy sensibles al tipo de tarea, es imposible predecir un tamaño óptimo.

Figura 13. Tamaños de caché de algunos procesadores.

Función de correspondencia. Ya que hay menos líneas de caché que bloques de memoria principal, se necesita un algoritmo que haga corresponder bloques de memoria principal a líneas de caché. Además, se requiere algún medio para determinar qué bloque de memoria principal

ocupa actualmente una línea dada de caché. Pueden utilizarse tres técnicas: directa, asociativa y asociativa por conjuntos.

Figura 14. Ejemplo para los tres casos



Correspondencia directa: la técnica más sencilla; consiste en hacer corresponder cada bloque de memoria principal a solo una línea posible de caché. La correspondencia se expresa como:

i=j módulo m i=número de línea de caché j=número de bloque de memoria principal

La función de correspondencia se implementa fácilmente utilizando la en dirección. m=número de líneas la caché Desde el punto de vista del acceso a caché, cada dirección de memoria principal puede verse como dividida en tres campos. Los w bits menos significativos identifican cada palabra dentro de un bloque de memoria principal; en la mayoría de las máquinas actuales, el direccionamiento es a nivel de bytes. La lógica de la caché interpreta estos s bits como un etiqueta de s-r bits (parte más significativa) y un campo de línea de r bits; este último campo identifica una de las m=2r líneas de la caché. El resultado es que se hacen corresponder bloques de memoria principal a líneas de caché de la siguiente manera: Línea de caché

Bloques de memoria principal asignados

0

0,m,2m,…,25-m

1

1,m+1,2m+1,…,25-m+1

.

.

m-1

m-1,2m-1,3m-1,…,25-1

Por tanto, el uso de una parte de la dirección como número de línea proporciona una correspondencia o asignación única de cada bloque de memoria principal en la caché. Cuando un bloque es realmente escrito en la línea que tiene asignada, es necesario

etiquetarlo para distinguirlo del resto de los bloques que pueden introducirse en dicha línea. Para ello se emplean los s-r bits más significativos. Obsérvese que no hay dos bloques que se asignen en la misma línea que tengan el mismo número de etiqueta. Así, los bloques 000000, 010000..., FF0000 tienen respectivamente los números de etiqueta 00, 01..., FF. Refiriéndonos de nuevo a la Figura 4.5, una operación de lectura se lleva a cabo de la siguiente manera. Al sistema de caché se presenta una dirección de 24 bits. El número de línea, de 14 bits, se utiliza como índice para acceder a una línea particular dentro de la caché. Si el número de etiqueta, de 8 bits, coincide con el número de etiqueta almacenado actualmente en esa línea, el número de palabra de 2 bits se utiliza para seleccionar uno de los cuatro bytes de esa línea. Si no, el campo de 22 bits de etiqueta+línea se emplea para captar un bloque de memoria principal. La dirección real que se utiliza para la captación consta de los mencionados 22 bits concatenados con dos bits 0, y se captan 4 bytes a partir del comienzo del bloque.

Figura 16. Ejemplo de correspondencia directa.

La técnica de correspondencia directa es sencilla y poco costosa de implementar. Su principal desventaja es que hay una posición concreta de caché para cada bloque dado. Por ello, si un programa referencia repetidas veces a palabras de dos bloques diferentes asignados en la misma línea, dichos bloques se estarían intercambiando continuamente en

la caché, y la tasa de aciertos sería baja [un fenómeno conocido con el nombre de vapuleo (thrashing)\. 

Correspondencia asociativa: la correspondencia asociativa supera la desventaja de la directiva, permitiendo que cada bloque de memoria principal puede cargarse en cualquier línea de la caché. En este caso, la lógica de control de la caché interpreta una dirección de memoria simplemente como una etiqueta y un campo de palabra. El campo de etiqueta identifica únicamente un bloque de memoria principal. Para determinar si un bloque está en la caché´, su lógica de control debe examinar simultáneamente todas las etiquetas de líneas para buscar una coincidencia.

Figura 17. Organización de caché totalmente asociativa.

• Longitud de las direcciones = (s + w) bits • Número de unidades direccionables = 2S+W palabras o bytes • Tamaño de bloque = tamaño de línea = 2W palabras o bytes 2 s+w • Número de bloques en memoria principal = — = 2S • Número de líneas en caché = indeterminado • Tamaño de la etiqueta = s bits



Correspondencia asociativa por conjuntos: es una solución de compromiso que recoge lo positivo de las correspondencias directa y asociativa, sin presentar sus desventajas. En este caso la caché se divide en v conjuntos, cada uno de k líneas. Las relaciones que se tienen son: m=vxk i=j módulo v

En este caso se denomina correspondencia asociativa por conjuntos de k vías. Con la asignación asociativa por conjuntos, el bloque B, puede asignarse en cualquiera de las k líneas del conjunto i. En este caso, la lógica de control de la caché interpreta una dirección de memoria como tres campos: etiqueta, conjunto y palabra. Los d bits de conjunto especifican uno de los 25 bloques de memoria principal. Con la correspondencia asociativa por conjuntos de k vías, la etiqueta de una dirección de memoria es mucho más corta y se compara solo con las k etiquetas dentro de un mismo conjunto.

Algoritmos de sustitución Una vez que se ha llenado la caché, para introducir un nuevo bloque debe sustituirse uno de los bloques existentes. Se han probado diversos algoritmos; mencionaremos cuatro de los más comunes. El más efectivo es probablemente el denominado “utilizado menos recientemente” (LRU, least-recently used): se sustituye el bloque que se ha mantenido en la caché por más tiempo sin haber sido referenciado. Otra posibilidad es el “primero en entrar-primero en salir” (FIFO, firts-In-firts-Out: se sustituye aquel bloque del conjunto que ha experimentado menos referencias. Y otra posibilidad es la “aleatoria”, técnica basad en el grado de utilización que consiste simplemente en coger un línea al azar entre las posibles candidatas. POLÍTICA DE ESCRITURA Hay dos casos a considerar cuando se ha de reemplazar un bloque de la caché. Si el bloque antiguo de la caché no debe ser modificado, puede sobrescribirse con el nuevo bloque sin necesidad de actualizar el antiguo. Si se ha realizado al menos una operación de escritura sobre una palabra de la línea correspondiente de la caché, entonces la memoria principal debe actualizarse, rescribiendo la línea de caché en el bloque de memoria antes de transferir el nuevo bloque. Son posibles varias políticas de escritura con distintos compromisos entre prestaciones y coste económico. Hay dos problemas contra los que luchar. En primer lugar, más de un dispositivo puede tener acceso a la memoria principal.

Por ejemplo, un módulo de E/S puede escribir/leer directamente en/de memoria. Si una palabra ha sido modificada solo en la caché, la correspondiente palabra de memoria no es válida. Además, si el dispositivo de E/S ha alterado la memoria principal, entonces la palabra de caché no es válida. Un problema más complejo ocurre cuando varios procesadores se conectan al mismo bus y cada uno de ellos tiene su propia caché local. En tal caso, si se modifica una palabra en una de las cachés, podría presumiblemente invalidar una palabra de otras cachés. La técnica más sencilla se denomina escritura inmediata. Utilizando esta técnica, todas las operaciones de escritura se hacen tanto en caché como en memoria principal, asegurando que el contenido de la memoria principal siempre es válido. Cualquier otro módulo procesador-caché puede monitorizar el tráfico a memoria principal para mantener la coherencia en su propia caché. La principal desventaja de esta técnica es que genera un tráfico sustancial con la memoria que puede originar un cuello de botella. Una técnica alternativa, conocida como postescritura, minimiza las escrituras en memoria. Con la postescritura, las actualizaciones se hacen solo en la caché. 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 si y solo si el bit ACTUALIZAR está activo. El problema de este esquema es que se tienen porciones de memoria principal que no son válidas, y los accesos por parte de los módulos de E/S tendrán que hacerse solo a través de la caché. Esto complica la circuitería y genera un cuello de botella potencial. La experiencia ha demostrado que el porcentaje de referencias a memoria para escritura es del orden del 15 por ciento [SMIT82]. Sin embargo, en aplicaciones de HPC, este porcentaje puede aproximarse al 33 por ciento (multiplicación de vectores) e incluso superar el 50 por ciento (en transposición de matrices). En una estructura de bus en la que más de un dispositivo (normalmente un procesador) tiene una caché y la memoria principal es compartida, se tropieza con un nuevo problema. Si se modifican los datos de una caché, se invalida no solamente la palabra correspondiente de memoria principal, sino también la misma palabra en otras cachés (si coincide que otras cachés tengan la misma palabra). Incluso si se utiliza una política de escritura inmediata, las otras cachés pueden contener datos no válidos. Un sistema que evite este problema se dice que mantiene la coherencia de caché. Entre las posibles aproximaciones a la coherencia de caché se incluyen: • Vigilancia del bus con escritura inmediata: cada controlador de caché monitoriza las líneas de direcciones para detectar operaciones de 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 caché, el controlador de caché invalida el elemento de la caché. Esta estrategia depende del uso de una política de escritura inmediata por parte de todos los controladores de caché. • Transparencia hardware: se utiliza hardware adicional para asegurar que todas las actualizaciones de memoria principal, vía caché, quedan reflejadas en todas las cachés. Así, si un procesador modifica una palabra de su caché, esta actualización se escribe en memoria principal. Además, de manera similar se

actualizan todas las palabras coincidentes de otras cachés. • Memoria excluida de caché: solo una porción de memoria principal se comparte por más de un procesador, y esta se diseña como no transferible a caché. En un sistema de este tipo, todos los accesos a la memoria compartida son fallos de caché, porque la memoria compartida nunca se copia en la caché. La memoria excluida de caché puede ser identificada utilizando lógica de selección de chip o los bits más significativos de la dirección. La coherencia de caché es un campo activo de investigación y será tratado con más detalle en el Capítulo 18. TAMAÑO DE LÍNEA Otro elemento de diseño es el tamaño de línea. Cuando se recupera y ubica en caché un bloque de datos, se recuperan no sólo la palabra deseada sino además algunas palabras adyacentes. A medida que aumenta el tamaño de bloque, la tasa de aciertos primero aumenta debido al principio de localidad, el cual establece que es probable que los datos en la vecindad de una palabra referenciada sean referenciados en un futuro próximo. Al aumentar el tamaño de bloque, más datos útiles son llevados a la caché. Sin embargo, la tasa de aciertos comenzará a decrecer cuando el tamaño de bloque se haga aún mayor y la probabilidad de utilizar la nueva información captada se haga menor que la de reuti- lizar la información que tiene que reemplazarse. Dos efectos concretos entran enjuego: • Bloques más grandes reducen el número de bloques que caben en la caché. Dado que cada bloque captado se escribe sobre contenidos anteriores de la caché, un número reducido de bloques da lugar a que se sobrescriban datos poco después de haber sido captados. • A medida que un bloque se hace más grande, cada palabra adicional está más lejos de la 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, no habiéndose encontrado un valor óptimo definitivo. Un tamaño entre 8 y 64 bytes parece estar razonablemente próximo al óptimo [SMIT87, PRZY88, PRZY90, HAND98]. Para sistemas de HPC es más frecuente usar tamaños de línea de caché de 64 y 128 bytes. NÚMERO DE CACHÉS Cuando se introdujeron originalmente las cachés, un sistema tenía normalmente solo una caché. Más recientemente, se ha convertido en una norma el uso de múltiples cachés. Hay dos aspectos de diseño relacionados con este tema que son el número de niveles de caché, y el uso de caché unificada frente al de cachés separadas. Cachés m ultinivel. Con el aumento de densidad de integración, ha sido posible tener una caché en el mismo chip del procesador: caché on-chip. Comparada con la accesible a través de un bus extemo, la caché on-chip reduce la actividad del bus extemo del procesador y por tanto reduce los tiempos de ejecución e incrementa las prestaciones

globales del sistema. Cuando la instrucción o el dato requeridos se encuentran en la caché on-chip, se elimina el acceso al bus. Debido a que los caminos de datos internos al procesador son muy cortos en comparación con la longitud de los buses, los accesos a la caché on-chip se efectúan apreciablemente más rápidos que los ciclos de bus, incluso en ausencia de estados de espera. Además, durante este periodo el bus está libre para realizar otras transferencias. La inclusión de una caché on-chip deja abierta la cuestión de si es además deseable una caché externa u off-chip. Normalmente la respuesta es afirmativa, y los diseños más actuales incluyen tanto caché on-chip como externa. La estructura más sencilla de este tipo se denomina caché de dos niveles, siendo la caché interna el nivel 1 (Ll), y la externa el nivel 2 (L2). La razón por la que se inclu ye una caché L2 es la siguiente. Si no hay caché L2 y el procesador hace una petición de acceso a una posición de memoria que no está en la caché Ll, entonces el procesador debe acceder a la DRAM o la ROM a través del bus. Debido a la lentitud usual del bus y a los tiempos de acceso de las memorias, se obtienen bajas prestaciones. Por otra parte, si se utiliza una caché L2 SRAM (RAM estática), entonces con frecuencia la información que falta puede recuperarse fácilmente. Si la SRAM es suficientemente rápida para adecuarse a la velocidad del bus, los datos pueden accederse con cero estados de espera, el tipo más rápido de transferencia de bus. En la actualidad son destacables dos características de diseño de las cachés multinivel. En primer lugar, para el caso de una caché L2 externa, muchos diseños no usan el bus del sistema como camino para las transferencias entre la caché L2 y el procesador, sino que se emplea un camino de datos aparte para reducir el tráfico en el bus del sistema. En segundo lugar, gracias a la continua reducción de dimensiones de los componentes de los procesadores, es fácil encontrar procesadores que incorporan la caché L2 en el propio chip, con la consiguiente mejora de prestaciones. La mejora potencial del uso de una caché L2 depende de las tasas de aciertos en ambas cachés Ll y L2. Varios estudios han demostrado que, en general, el uso de un segundo nivel de caché mejora las prestaciones (véase por ejemplo [AZIM92], [NOVI93], [HAND98]). No obstante, el uso de cachés multinivel complica todos los aspectos de diseño de la caché, incluyendo el tamaño, el algoritmo de sustitución y la política de escritura; en [HAND98] y [PEIR99] se discuten estos temas. Con la creciente disponibilidad de superficie para caché en el propio chip, en la mayoría de los microprocesadores modernos se ha llevado la caché L2 al chip del procesador, y se añade una caché L3. Inicialmente, la caché L3 era accesible a través del bus extemo, pero más recientemente los microprocesadores han incorporado una L3 on-chip En cualquiera de los casos, añadir un tercer nivel de caché parece suponer una mejora de las prestaciones (véase por ejemplo [GHAI98]). Caché unificada frente a cachés separadas. Cuando hicieron su aparición las cachés onchip, muchos de los diseños conteman una sola caché para almacenar las referencias tanto a datos como a instrucciones. Más recientemente, se ha hecho normal separar la caché en dos: una dedicada a instrucciones y otra a datos. Una caché unificada tiene varias ventajas potenciales: • Para un tamaño dado de caché, una unificada tiene una tasa de aciertos

mayor que una caché partida, ya que nivela automáticamente la carga entre captación de instrucciones y de datos. Es decir, si un patrón de ejecución implica muchas más captaciones de instrucciones que de datos, la caché tenderá a llenarse con instrucciones, y si el patrón de ejecución involucra relativamente más captaciones de datos, ocurrirá lo contrario. • Solo se necesita diseñar e implementar una caché. A pesar de estas ventajas, la tendencia es hacia cachés separadas, particularmente para máquinas super-escalares tales como el Pentium y el PowerPC, en las que se enfatiza la ejecución paralela de instrucciones y la precaptación de instrucciones futuras previstas. La ventaja clave del diseño de una caché partida es que elimina la competición por la caché entre el procesador de instrucciones y la unidad de ejecución. Esto es importante en diseños que cuentan con segmentación de cauce (pipelining) de instrucciones. Normalmente el procesador captará instrucciones anticipadamente y llenará un buffer con las instrucciones que van a ejecutarse. Supongamos ahora que se tiene una caché unificada de instrucciones/datos. Cuando la unidad de ejecución realiza un acceso a memoria para cargar y almacenar datos, se envía la petición a la caché unificada. Si, al mismo tiempo, el precaptador de instrucciones emite una petición de lectura de una instrucción a la caché, dicha petición será bloqueada temporalmente para que la caché pueda servir primero a la unidad de ejecución permitiéndole completar la ejecución de la instrucción en curso. Esta disputa por la caché puede degradar las prestaciones, interfiriendo con el uso eficiente del cauce segmentado de instrucciones. La caché partida supera esta dificultad.

Conclusión Tras finalizar con el análisis sobre los beneficios que aporta la memoria caché y sus características, con vistas al logro de una mayor optimización de su uso, es posible concluir que: La caché es un sistema complejo de alta velocidad que permite almacenar una serie de instrucciones y datos a los que el procesador accede continuamente, con la finalidad de que estos accesos sean instantáneos. Se considera que esta memoria secundaria logra un incremento del rendimiento entre el trabajo que realizan en conjunto el microprocesador y la memoria RAM, y a su vez gana fluidez durante el proceso de lectura/escritura de datos evitando así que existan retrasos a l hora de trabajar con la máquina. Podemos concluir así que es una herramienta indispensable tanto para concretar los procedimientos que indican las instrucciones dadas mediante el ingreso de datos dentro del computador, como para el usuario que lo utilice.