Caché (informática) - Cache (computing)

Diagrama de una operación de caché de memoria de la CPU

En computación , un caché ( / k æ ʃ / ( escuchar ) Sobre este sonido Kash , o / k ʃ / kaysh en Australia Inglés ) es un componente de hardware o software que almacena los datos para que las futuras solicitudes de que los datos se pueden servir más rápido; los datos almacenados en una caché pueden ser el resultado de un cálculo anterior o una copia de los datos almacenados en otro lugar. Un acierto de caché se produce cuando los datos solicitados se pueden encontrar en un caché, mientras que un error de caché se produce cuando no es posible. Los aciertos de la caché se obtienen leyendo datos de la caché, que es más rápido que volver a calcular un resultado o leer desde un almacén de datos más lento; por lo tanto, cuantas más solicitudes se puedan atender desde la caché, más rápido funcionará el sistema.

Para ser rentables y permitir un uso eficiente de los datos, las cachés deben ser relativamente pequeñas. No obstante, las memorias caché han demostrado su eficacia en muchas áreas de la informática, porque las aplicaciones informáticas típicas acceden a datos con un alto grado de localidad de referencia . Dichos patrones de acceso exhiben localidad temporal, donde se solicitan datos que ya se han solicitado recientemente, y localidad espacial , donde se solicitan datos que se almacenan físicamente cerca de los datos que ya se han solicitado.

Motivación

Existe una compensación inherente entre tamaño y velocidad (dado que un recurso más grande implica mayores distancias físicas), pero también una compensación entre tecnologías premium caras (como SRAM ) y productos básicos más baratos y fáciles de producir en masa (como DRAM o productos duros). discos ).

El almacenamiento en búfer proporcionado por un caché beneficia uno o ambos de la latencia y el rendimiento ( ancho de banda ):

Latencia

Un recurso más grande incurre en una latencia significativa para el acceso, por ejemplo, puede tomar cientos de ciclos de reloj para que un procesador moderno de 4 GHz alcance la DRAM . Esto se mitiga leyendo en grandes porciones, con la esperanza de que las lecturas posteriores sean de ubicaciones cercanas. La predicción o la captación previa explícita también pueden adivinar de dónde vendrán las lecturas futuras y realizar solicitudes con anticipación; si se hace correctamente, la latencia se omite por completo.

Rendimiento

El uso de una caché también permite un mayor rendimiento del recurso subyacente, al ensamblar múltiples transferencias de grano fino en solicitudes más grandes y eficientes. En el caso de los circuitos DRAM , esto podría lograrse con un bus de datos más amplio. Por ejemplo, considere un programa que accede a bytes en un espacio de direcciones de 32 bits , pero que recibe el servicio de un bus de datos fuera del chip de 128 bits; Los accesos individuales de bytes no almacenados en caché permitirían utilizar solo 1/16 del ancho de banda total, y el 80% del movimiento de datos serían direcciones de memoria en lugar de datos en sí. La lectura de fragmentos más grandes reduce la fracción de ancho de banda necesaria para transmitir información de direcciones.

Operación

El hardware implementa la caché como un bloque de memoria para el almacenamiento temporal de datos que probablemente se volverán a utilizar. Las unidades de procesamiento central (CPU) y las unidades de disco duro (HDD) utilizan con frecuencia una caché basada en hardware, mientras que los navegadores web y los servidores web suelen depender del almacenamiento en caché de software.

Una caché está formada por un conjunto de entradas. Cada entrada tiene datos asociados , que son una copia de los mismos datos en alguna tienda de respaldo . Cada entrada también tiene una etiqueta , que especifica la identidad de los datos en el almacén de respaldo del cual la entrada es una copia. El etiquetado permite que los algoritmos simultáneos orientados a la memoria caché funcionen en varias capas sin interferencia de relé diferencial.

Cuando el cliente de caché (una CPU, navegador web, sistema operativo ) necesita acceder a datos que se presume que existen en el almacén de respaldo, primero verifica el caché. Si se puede encontrar una entrada con una etiqueta que coincida con la de los datos deseados, en su lugar se utilizan los datos de la entrada. Esta situación se conoce como acierto de caché. Por ejemplo, un programa de navegador web puede comprobar su caché local en el disco para ver si tiene una copia local del contenido de una página web en una URL en particular . En este ejemplo, la URL es la etiqueta y el contenido de la página web son los datos. El porcentaje de accesos que resultan en aciertos de caché se conoce como tasa de aciertos o índice de aciertos de la caché.

La situación alternativa, cuando se comprueba la caché y se descubre que no contiene ninguna entrada con la etiqueta deseada, se conoce como falta de caché. Esto requiere un acceso más costoso a los datos de la tienda de respaldo. Una vez que se recuperan los datos solicitados, normalmente se copian en la caché, listos para el siguiente acceso.

Durante una falta de caché, se elimina alguna otra entrada de caché previamente existente para dejar espacio para los datos recién recuperados. La heurística utilizada para seleccionar la entrada a reemplazar se conoce como política de reemplazo . Una política de reemplazo popular, "menos usada recientemente" (LRU), reemplaza la entrada más antigua, la entrada a la que se accedió menos recientemente que cualquier otra entrada (ver algoritmo de caché ). Los algoritmos de almacenamiento en caché más eficientes calculan la frecuencia de aciertos de uso en comparación con el tamaño del contenido almacenado, así como las latencias y los rendimientos tanto del caché como del almacenamiento de respaldo. Esto funciona bien para grandes cantidades de datos, latencias más largas y rendimientos más lentos, como el experimentado con discos duros y redes, pero no es eficiente para su uso dentro de una memoria caché de CPU.

Políticas de redacción

Una caché de escritura simultánea con asignación sin escritura
Una caché de escritura diferida con asignación de escritura

Cuando un sistema escribe datos en la caché, en algún momento también debe escribir esos datos en el almacén de respaldo. El tiempo de esta escritura está controlado por lo que se conoce como política de escritura . Hay dos enfoques básicos de escritura:

  • Escritura simultánea: la escritura se realiza de forma sincrónica tanto en la memoria caché como en el almacén de respaldo.
  • Escritura diferida (también denominada escritura diferida ): inicialmente, la escritura se realiza solo en la caché. La escritura en el almacén de respaldo se pospone hasta que el contenido modificado esté a punto de ser reemplazado por otro bloque de caché.

Una caché de escritura diferida es más compleja de implementar, ya que necesita rastrear cuáles de sus ubicaciones se han sobrescrito y marcarlas como sucias para escribirlas posteriormente en la tienda de respaldo. Los datos de estas ubicaciones se vuelven a escribir en el almacén de respaldo solo cuando se expulsan de la memoria caché, un efecto que se conoce como escritura diferida . Por esta razón, una falla de lectura en un caché de escritura diferida (que requiere que un bloque sea reemplazado por otro) a menudo requerirá dos accesos a la memoria para el servicio: uno para escribir los datos reemplazados desde el caché de regreso a la tienda, y luego otro para recuperar los datos necesarios.

Otras políticas también pueden activar la reescritura de datos. El cliente puede realizar muchos cambios en los datos de la caché y luego notificar explícitamente a la caché que vuelva a escribir los datos.

Dado que no se devuelven datos al solicitante en las operaciones de escritura, se debe tomar una decisión sobre los errores de escritura, si los datos se cargarían o no en la caché. Esto se define mediante estos dos enfoques:

  • Asignación de escritura (también denominada recuperación al escribir ): los datos en la ubicación de escritura perdida se cargan en la caché, seguidos de una operación de acierto de escritura. En este enfoque, los errores de escritura son similares a los errores de lectura.
  • Asignación sin escritura (también llamada escritura-no asignación o escritura alrededor ): los datos en la ubicación de escritura perdida no se cargan en la caché y se escriben directamente en el almacén de respaldo. En este enfoque, los datos se cargan en la caché solo en caso de fallas de lectura.

Tanto las políticas de escritura simultánea como las de escritura diferida pueden utilizar cualquiera de estas políticas de errores de escritura, pero normalmente se combinan de esta manera:

  • Una caché de escritura diferida utiliza la asignación de escritura, esperando escrituras posteriores (o incluso lecturas) en la misma ubicación, que ahora está almacenada en caché.
  • Una caché de escritura simultánea utiliza asignación de no escritura. Aquí, las escrituras posteriores no tienen ninguna ventaja, ya que aún deben escribirse directamente en la tienda de respaldo.

Las entidades distintas de la caché pueden cambiar los datos en el almacén de respaldo, en cuyo caso la copia en la caché puede quedar obsoleta o obsoleta . Alternativamente, cuando el cliente actualiza los datos en la caché, las copias de esos datos en otras cachés se volverán obsoletas. Los protocolos de comunicación entre los administradores de caché que mantienen la coherencia de los datos se conocen como protocolos de coherencia .

Prefetch

En un error de lectura de caché, los cachés con una política de paginación de demanda leen la cantidad mínima del almacén de respaldo. Por ejemplo, la memoria virtual de paginación por demanda lee una página de memoria virtual (a menudo 4 kBytes) del disco a la memoria caché del disco en la RAM. Por ejemplo, una CPU típica lee una sola línea de caché L2 de 128 bytes de DRAM en la caché L2 y una sola línea de caché L1 de 64 bytes de la caché L2 en la caché L1.

Los cachés con una cola de entrada de captación previa o una política de paginación anticipatoria más general van más allá: no solo leen el fragmento solicitado, sino que suponen que pronto se necesitarán los siguientes fragmentos o dos, por lo que precargar esos datos en el caché antes de tiempo. La paginación anticipada es especialmente útil cuando el almacén de respaldo tiene una latencia larga para leer el primer fragmento y tiempos mucho más cortos para leer secuencialmente los siguientes fragmentos, como el almacenamiento en disco y la DRAM .

Algunos sistemas operativos van más allá con un cargador (computación) que siempre precarga todo el ejecutable en la RAM.

Algunas cachés van aún más lejos, no solo precargan un archivo completo, sino que también comienzan a cargar otros archivos relacionados que pueden ser solicitados pronto, como la caché de página asociada con un prefetcher o la caché web asociada con prefetching de enlaces .

Ejemplos de cachés de hardware

Caché de la CPU

Las memorias pequeñas en o cerca de la CPU pueden funcionar más rápido que la memoria principal mucho más grande . La mayoría de las CPU desde la década de 1980 han utilizado una o más cachés, a veces en niveles en cascada ; Los modernos microprocesadores integrados , de escritorio y de servidor de alta gama pueden tener hasta seis tipos de caché (entre niveles y funciones). Ejemplos de cachés con una función específica son D-cache e I-cache y el búfer de búsqueda de traducción para la MMU .

Caché de GPU

Las unidades de procesamiento de gráficos (GPU) anteriores a menudo tenían cachés de textura de solo lectura limitados , e introdujeron texturas agrupadas por orden de Morton para mejorar la coherencia de la caché 2D . Las fallas de caché afectarían drásticamente el rendimiento, por ejemplo, si no se usara mipmapping . El almacenamiento en caché fue importante para aprovechar las transferencias de 32 bits (y más amplias) para datos de textura que a menudo eran tan pequeños como 4 bits por píxel, indexados en patrones complejos mediante coordenadas UV arbitrarias y transformaciones de perspectiva en el mapeo de texturas inverso .

A medida que las GPU avanzaban (especialmente con los sombreadores de cómputo GPGPU ), han desarrollado cachés cada vez más grandes y cada vez más generales, incluidos los cachés de instrucciones para los sombreadores , que exhiben una funcionalidad cada vez más común con los cachés de la CPU. Por ejemplo, las GPU de la arquitectura GT200 no tenían caché L2, mientras que la GPU Fermi tiene 768 KB de caché de último nivel, la GPU Kepler tiene 1536 KB de caché de último nivel y la GPU Maxwell tiene 2048 KB de caché de último nivel. . Estos cachés han crecido para manejar primitivas de sincronización entre subprocesos y operaciones atómicas , e interactuar con una MMU de estilo CPU .

DSP

Los procesadores de señales digitales se han generalizado de manera similar a lo largo de los años. Los diseños anteriores usaban memoria scratchpad alimentada por DMA , pero los DSP modernos como Qualcomm Hexagon a menudo incluyen un conjunto de cachés muy similar a una CPU (por ejemplo, arquitectura Harvard modificada con L2 compartida, caché I dividida L1 y caché D).

Búfer lookaside de traducción

Una unidad de gestión de memoria (MMU) que recupera entradas de la tabla de páginas de la memoria principal tiene un caché especializada, que se utiliza para registrar los resultados de direcciones virtuales a direcciones físicas traducciones. Esta caché especializada se denomina búfer de búsqueda de traducción (TLB).

Caché en la red

Redes centradas en la información

La red centrada en la información (ICN) es un enfoque para evolucionar la infraestructura de Internet desde un paradigma centrado en el host, basado en la conectividad perpetua y el principio de extremo a extremo , a una arquitectura de red en la que el punto focal es la información identificada (o contenido o datos). Debido a la capacidad de almacenamiento en caché inherente de los nodos en un ICN, se puede ver como una red de cachés débilmente conectada, que tiene requisitos únicos de políticas de almacenamiento en caché. Sin embargo, el almacenamiento en caché de contenido ubicuo presenta el desafío de la protección del contenido contra el acceso no autorizado, que requiere cuidados y soluciones adicionales. A diferencia de los servidores proxy, en ICN, la caché es una solución a nivel de red. Por lo tanto, tiene estados de caché que cambian rápidamente y tasas de llegada de solicitudes más altas; Además, los tamaños de caché más pequeños imponen además un tipo diferente de requisitos en las políticas de desalojo de contenido. En particular, las políticas de desalojo de ICN deben ser rápidas y ligeras. Se han propuesto varios esquemas de replicación y desalojo de caché para diferentes arquitecturas y aplicaciones de ICN.

Políticas

Reconocimiento del tiempo utilizado menos recientemente (TLRU)

El tiempo menos usado recientemente (TLRU) es una variante de LRU diseñada para la situación en la que el contenido almacenado en la caché tiene una vida útil válida. El algoritmo es adecuado en aplicaciones de caché de red, como redes centradas en la información (ICN), redes de entrega de contenido (CDN) y redes distribuidas en general. TLRU introduce un nuevo término: TTU (tiempo de uso). TTU es una marca de tiempo de un contenido / página que estipula el tiempo de usabilidad del contenido según la localidad del contenido y el anuncio del editor del contenido. Debido a esta marca de tiempo basada en la localidad, TTU proporciona más control al administrador local para regular el almacenamiento de red. En el algoritmo TLRU, cuando llega un fragmento de contenido, un nodo de caché calcula el valor TTU local en función del valor TTU asignado por el editor de contenido. El valor de TTU local se calcula utilizando una función definida localmente. Una vez que se calcula el valor de TTU local, el reemplazo de contenido se realiza en un subconjunto del contenido total almacenado en el nodo de caché. La TLRU asegura que el contenido de poca vida y menos popular debe ser reemplazado por el contenido entrante.

Uso reciente menos frecuente (LFRU)

El esquema de reemplazo de caché de uso reciente menos frecuente (LFRU) combina los beneficios de los esquemas LFU y LRU. LFRU es adecuado para aplicaciones de caché 'en red', como redes centradas en la información (ICN), redes de entrega de contenido (CDN) y redes distribuidas en general. En LFRU, la caché se divide en dos particiones llamadas particiones privilegiadas y no privilegiadas. La partición privilegiada se puede definir como partición protegida. Si el contenido es muy popular, se inserta en la partición privilegiada. El reemplazo de la partición privilegiada se realiza de la siguiente manera: LFRU desaloja el contenido de la partición no privilegiada, empuja el contenido de la partición privilegiada a la partición no privilegiada y finalmente inserta contenido nuevo en la partición privilegiada. En el procedimiento anterior, la LRU se usa para la partición privilegiada y un esquema LFU aproximado (ALFU) se usa para la partición no privilegiada, de ahí la abreviatura LFRU. La idea básica es filtrar los contenidos populares localmente con el esquema ALFU y enviar los contenidos populares a una de las particiones privilegiadas.

Pronóstico del tiempo

En 2010, The New York Times sugirió "Escriba 'clima' seguido de su código postal". En 2011, el uso de teléfonos inteligentes con opciones de pronóstico del tiempo estaba sobrecargando los servidores de AccuWeather ; dos solicitudes dentro del mismo parque generarían solicitudes separadas. Una optimización de los servidores de borde para truncar las coordenadas GPS a menos lugares decimales significaba que se utilizarían los resultados almacenados en caché de la consulta anterior. El número de búsquedas al servidor por día se redujo a la mitad.

Cachés de software

Caché de disco

Si bien las memorias caché de la CPU generalmente se administran en su totalidad por hardware, una variedad de software administra otras memorias caché. La caché de página en la memoria principal, que es un ejemplo de caché de disco, es administrada por el kernel del sistema operativo .

Mientras que el búfer de disco , que es una parte integrada de la unidad de disco duro, a veces se denomina erróneamente "caché de disco", sus funciones principales son la secuenciación de escritura y la captación previa de lectura. Los aciertos de caché repetidos son relativamente raros, debido al pequeño tamaño del búfer en comparación con la capacidad de la unidad. Sin embargo, los controladores de disco de gama alta suelen tener su propia memoria caché integrada de los bloques de datos de la unidad de disco duro .

Por último, una unidad de disco duro local rápida también puede almacenar en caché información contenida en dispositivos de almacenamiento de datos aún más lentos, como servidores remotos ( caché web ) o unidades de cinta locales o máquinas de discos ópticos ; dicho esquema es el concepto principal de la gestión del almacenamiento jerárquico . Además, las unidades de estado sólido (SSD) rápidas basadas en flash se pueden usar como cachés para unidades de disco duro de medios rotacionales más lentas, que funcionan juntas como unidades híbridas o unidades híbridas de estado sólido (SSHD).

Caché web

Los navegadores web y los servidores proxy web emplean cachés web para almacenar respuestas anteriores de servidores web , como páginas web e imágenes . Los cachés web reducen la cantidad de información que debe transmitirse a través de la red, ya que la información previamente almacenada en el caché a menudo se puede reutilizar. Esto reduce el ancho de banda y los requisitos de procesamiento del servidor web y ayuda a mejorar la capacidad de respuesta de los usuarios de la web.

Los navegadores web emplean un caché web integrado, pero algunos proveedores de servicios de Internet (ISP) u organizaciones también utilizan un servidor proxy de almacenamiento en caché, que es un caché web que se comparte entre todos los usuarios de esa red.

Otra forma de caché es el almacenamiento en caché P2P , donde los archivos más buscados por las aplicaciones de igual a igual se almacenan en un caché de ISP para acelerar las transferencias P2P. De manera similar, existen equivalentes descentralizados, que permiten a las comunidades realizar la misma tarea para el tráfico P2P, por ejemplo, Corelli.

Memorización

Una caché puede almacenar datos que se calculan a pedido en lugar de recuperarlos de una tienda de respaldo. La memorización es una técnica de optimización que almacena los resultados de las llamadas a funciones que consumen recursos dentro de una tabla de búsqueda, lo que permite que las llamadas posteriores reutilicen los resultados almacenados y eviten cálculos repetidos. Está relacionado con la metodología de diseño de algoritmos de programación dinámica , que también se puede considerar como un medio de almacenamiento en caché.

Otros cachés

El demonio BIND DNS almacena en caché una asignación de nombres de dominio a direcciones IP , al igual que una biblioteca de resolución.

La operación de escritura simultánea es común cuando se opera en redes poco confiables (como una LAN Ethernet), debido a la enorme complejidad del protocolo de coherencia requerido entre múltiples cachés de escritura diferida cuando la comunicación no es confiable. Por ejemplo, los cachés de páginas web y los cachés del sistema de archivos de red del lado del cliente (como los de NFS o SMB ) suelen ser de solo lectura o escritura directa específicamente para mantener el protocolo de red simple y confiable.

Los motores de búsqueda también suelen hacer que las páginas web que han indexado estén disponibles en su caché. Por ejemplo, Google proporciona un enlace "En caché" junto a cada resultado de búsqueda. Esto puede resultar útil cuando las páginas web de un servidor web son inaccesibles temporal o permanentemente.

Otro tipo de almacenamiento en caché es el almacenamiento de resultados calculados que probablemente se necesitarán nuevamente, o la memorización . Por ejemplo, ccache es un programa que almacena en caché la salida de la compilación para acelerar las ejecuciones posteriores de la compilación.

El almacenamiento en caché de la base de datos puede mejorar sustancialmente el rendimiento de las aplicaciones de la base de datos , por ejemplo, en el procesamiento de índices , diccionarios de datos y subconjuntos de datos de uso frecuente.

Una caché distribuida utiliza hosts en red para proporcionar escalabilidad, confiabilidad y rendimiento a la aplicación. Los anfitriones pueden estar coubicados o distribuidos en diferentes regiones geográficas.

Búfer frente a caché

La semántica de un "búfer" y un "caché" no es totalmente diferente; aun así, existen diferencias fundamentales en la intención entre el proceso de almacenamiento en caché y el proceso de almacenamiento en búfer.

Básicamente, el almacenamiento en caché aumenta el rendimiento de las transferencias de datos que se transfieren repetidamente. Si bien un sistema de almacenamiento en caché puede obtener un aumento de rendimiento en la transferencia inicial (normalmente de escritura) de un elemento de datos, este aumento de rendimiento se debe al almacenamiento en búfer que se produce dentro del sistema de almacenamiento en caché.

Con las cachés de lectura, un elemento de datos debe haberse obtenido de su ubicación de residencia al menos una vez para que las lecturas posteriores del elemento de datos realicen un aumento de rendimiento en virtud de que se puede obtener del almacenamiento intermedio (más rápido) de la caché en lugar de la ubicación de residencia de los datos. Con las cachés de escritura, se puede realizar un aumento del rendimiento de la escritura de un elemento de datos en la primera escritura del elemento de datos en virtud de que el elemento de datos se almacena inmediatamente en el almacenamiento intermedio de la caché, difiriendo la transferencia del elemento de datos a su almacenamiento residente en una etapa posterior o que ocurra como un proceso de fondo. A diferencia del almacenamiento en búfer estricto, un proceso de almacenamiento en caché debe adherirse a un protocolo de coherencia de caché (potencialmente distribuido) para mantener la coherencia entre el almacenamiento intermedio de la caché y la ubicación donde residen los datos. Buffering, por otro lado,

  • reduce el número de transferencias de datos que de otro modo serían novedosos entre los procesos de comunicación, lo que amortiza los gastos generales involucrados en varias transferencias pequeñas en lugar de transferencias más pequeñas y más pequeñas,
  • proporciona un intermediario para los procesos de comunicación que son incapaces de transferencias directas entre sí, o
  • asegura un tamaño o representación de datos mínimo requerido por al menos uno de los procesos de comunicación involucrados en una transferencia.

Con las implementaciones típicas de almacenamiento en caché, un elemento de datos que se lee o escribe por primera vez se almacena efectivamente en el búfer; y en el caso de una escritura, principalmente se da cuenta de un aumento de rendimiento para la aplicación desde donde se originó la escritura. Además, la parte de un protocolo de almacenamiento en caché donde las escrituras individuales se difieren a un lote de escrituras es una forma de almacenamiento en búfer. La parte de un protocolo de almacenamiento en caché donde las lecturas individuales se difieren a un lote de lecturas también es una forma de almacenamiento en búfer, aunque esta forma puede afectar negativamente el rendimiento de al menos las lecturas iniciales (aunque puede afectar positivamente el rendimiento de la suma de el individuo lee). En la práctica, el almacenamiento en caché casi siempre implica alguna forma de almacenamiento en búfer, mientras que el almacenamiento en búfer estricto no implica el almacenamiento en caché.

Un búfer es una ubicación de memoria temporal que se usa tradicionalmente porque las instrucciones de la CPU no pueden abordar directamente los datos almacenados en dispositivos periféricos. Por tanto, la memoria direccionable se utiliza como etapa intermedia. Además, tal búfer puede ser factible cuando se ensambla o desensambla un gran bloque de datos (según lo requiera un dispositivo de almacenamiento), o cuando los datos se pueden entregar en un orden diferente al que se producen. Además, un búfer completo de datos generalmente se transfiere secuencialmente (por ejemplo, al disco duro), por lo que el almacenamiento en búfer en sí mismo a veces aumenta el rendimiento de la transferencia o reduce la variación o el jitter de la latencia de la transferencia en lugar del almacenamiento en caché donde la intención es reducir la latencia. Estos beneficios están presentes incluso si los datos almacenados en el búfer se escriben en el búfer una vez y se leen del búfer una vez.

Un caché también aumenta el rendimiento de la transferencia. Una parte del aumento proviene de manera similar de la posibilidad de que múltiples transferencias pequeñas se combinen en un bloque grande. Pero la principal ganancia de rendimiento se produce porque existe una buena posibilidad de que los mismos datos se lean de la memoria caché varias veces o que los datos escritos se lean pronto. El único propósito de una caché es reducir los accesos al almacenamiento subyacente más lento. La caché también suele ser una capa de abstracción diseñada para ser invisible desde la perspectiva de las capas vecinas.

Ver también

Referencias

Otras lecturas