Caché (informática)

Caché es un término utilizado en informática. La idea detrás de un caché (pronunciado "cash" /ˈkæʃ/ KASH ) es muy simple: Muy a menudo, obtener el resultado de un cálculo lleva mucho tiempo, por lo que almacenar el resultado suele ser una buena idea. Se utilizan dos tipos de medios de almacenamiento: Uno suele ser bastante grande, pero el acceso a él es "lento"; el otro se puede acceder mucho más rápido, pero generalmente es pequeño. La idea básica de la caché es utilizar el medio de acceso rápido para tener copias de los datos. No hay diferencia entre la copia y el original. Acceder a los datos originales puede llevar mucho tiempo, o puede ser costoso de hacer (por ejemplo: los resultados de un problema difícil que llevan mucho tiempo de resolver). Por esta razón, es mucho más "barato" utilizar simplemente la copia de los datos de la caché. Dicho de otro modo, una caché es un área de almacenamiento temporal que tiene copias de datos que se utilizan a menudo. Cuando una copia de los datos está en esta caché, es más rápido utilizar esta copia en lugar de volver a buscar o calcular los datos originales. Esto hará que el tiempo medio necesario para acceder a los datos sea más corto. La introducción de un nuevo valor en la caché suele implicar la necesidad de sustituir un valor anterior. Existen diferentes ideas (normalmente llamadas "estrategias") sobre cómo seleccionar el valor a sustituir.

Un búfer es muy similar a una caché. Se diferencia en que el cliente que accede a los datos de un búfer sabe que existe un búfer; el búfer es gestionado por la aplicación. Con una caché, el cliente que accede a los datos no tiene por qué saber que hay una caché.

Las aplicaciones informáticas típicas acceden a los datos de forma muy similar. Supongamos que los datos están estructurados en "bloques", a los que se puede acceder individualmente. Cuando una aplicación accede a un bloque, es muy probable que también acceda (o haga referencia) a un bloque que esté "cerca" del bloque original. Esto se conoce como "localidad de referencia". Hay diferentes tipos de "localidad". La localidad de referencia es una de las razones por las que las cachés funcionan bien en muchas áreas de la informática.

Para que funcione bien, las cachés son pequeñas, comparadas con la cantidad total de datos. Cuanto más grande es la caché, más tiempo se tarda en buscar una entrada. Las cachés más grandes también son más caras de construir.

Cómo funcionan las cachés

Una caché es un bloque de memoria para almacenar datos que probablemente se vuelvan a utilizar. La CPU y el disco duro suelen utilizar una caché, al igual que los navegadores y los servidores web.

Una caché se compone de muchas entradas, llamadas pool. Cada entrada contiene un dato (un bit de datos) que es una copia de un dato en otro lugar. Las cachés suelen utilizar lo que se llama un almacén de respaldo. Los almacenes de respaldo son lentos o costosos de acceder, en comparación con la caché. Una caché de disco utiliza un disco duro como almacén de respaldo, por ejemplo. Cada entrada también tiene una pequeña información adjunta, llamada etiqueta. Esta etiqueta se utiliza para encontrar la ubicación donde se almacenan los datos originales.

Cachés de lectura

Un cliente (una CPU, un navegador web, un sistema operativo) quiere acceder a un dato que cree que está en el almacén de respaldo, primero comprueba si el dato puede encontrarse en la caché. Si el dato se encuentra en la caché, el cliente puede utilizarlo y no necesita usar la memoria principal. Esto se conoce como un éxito de la caché. Así, por ejemplo, un programa de navegación 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 concreta. En este ejemplo, la URL es la etiqueta, y el contenido de la página web es el dato.

La otra situación que puede darse es que el dato con la etiqueta no se encuentre en la caché. Esto se conoce como "cache miss". El dato tiene que ser recuperado del almacén de respaldo. Normalmente, se copia en la caché, de modo que la próxima vez, ya no es necesario recuperarlo del almacén de respaldo.

La caché sólo tiene un tamaño limitado. Para hacer sitio a la entrada no almacenada anteriormente, puede ser necesario eliminar otra entrada de la caché. Se utilizan reglas especiales para encontrar la entrada que mejor debe ser borrada. Estas reglas suelen llamarse Heurística. La heurística utilizada para encontrar la entrada se denomina política de sustitución. Una regla muy simple que se utiliza es la llamada Least recently used (o LRU). Simplemente toma la entrada que fue utilizada hace más tiempo. Otras heurísticas se encuentran en el algoritmo de la caché.

Caché para escribir

La caché también puede utilizarse para escribir datos; la ventaja de esto es que el cliente puede continuar su operación una vez que la entrada se ha escrito en la caché; no tiene que esperar hasta que la entrada se escriba en el almacén de respaldo.

Sin embargo, la entrada debe escribirse en el almacén de respaldo en algún momento. El momento en que esto ocurre está controlado por la política de escritura.

En una caché de escritura, cada entrada se escribe en el almacén de respaldo inmediatamente, además de almacenarse en la caché.

La otra opción es escribir sólo en la caché y escribir después en el almacén de respaldo. Esto se conoce como caché de escritura trasera (o de escritura posterior). La caché marca las entradas que aún no se han escrito en el almacén de respaldo; la marca que se utiliza suele denominarse bandera sucia. Antes de borrar las entradas de la caché, se escriben en el almacén de respaldo. Esto se conoce como escritura perezosa. Un fallo en una caché de escritura (que requiere que un bloque sea reemplazado por otro) a menudo necesitará dos accesos a la memoria: uno para obtener el dato necesario, y otro para escribir los datos reemplazados desde la caché al almacén.

La política de almacenamiento en caché también puede decir que un determinado dato debe escribirse en la caché. El cliente puede haber hecho muchos cambios al dato en la caché. Cuando haya terminado, puede decirle explícitamente a la caché que vuelva a escribir el dato.

La asignación sin escritura es una política de caché en la que sólo se almacenan las lecturas. Esto evita la necesidad de almacenar en la caché las lecturas o las escrituras. Las escrituras se realizan en el almacén de respaldo todo el tiempo.

El cliente no es la aplicación que cambia los datos en el almacén de respaldo. Si los datos cambian en el almacén de respaldo, la copia en la caché estará desactualizada, o será obsoleta. Por otra parte, cuando el cliente actualiza los datos en la caché, las copias de esos datos en otras cachés se vuelven obsoletas. Existen protocolos de comunicación especiales que permiten a los gestores de la caché hablar entre sí para mantener la coherencia de los datos. Se conocen como protocolos de coherencia.

Diagrama de una memoria caché de la CPUZoom
Diagrama de una memoria caché de la CPU

Selección de la entrada a sustituir

Una caché es pequeña y estará llena, o casi llena, la mayor parte del tiempo. Así que cuando se añade un nuevo valor, hay que eliminar uno antiguo. Hay diferentes maneras de hacer esta selección:

  • El primero en entrar es el primero en salir: Simplemente sustituye la entrada que se añadió a la caché hace más tiempo
  • Utilización más reciente: Esta idea es similar a la del FIFO anterior, pero cuando se utiliza una entrada, se actualiza su marca de tiempo/edad.
  • Utilización menos frecuente: De nuevo, de forma similar al caso FIFO, en lugar de utilizar una marca de tiempo se utiliza un contador, que se incrementa cada vez que se utiliza una entrada
  • Elija una entrada al azar

Historia

La palabra caché se utilizó por primera vez en informática en 1967, cuando se preparó un artículo científico para ser publicado en IBM Systems Journal. El artículo trataba sobre una nueva mejora de la memoria en el Modelo 85. El modelo 85 era un ordenador de la línea de productos IBM System/360. El editor del Journal quería una palabra mejor para el buffer de alta velocidad, utilizado en el artículo. No obtuvo ninguna respuesta y sugirió caché, del francés cacher, que significa "esconder". El artículo se publicó a principios de 1968 y los autores fueron premiados por IBM. Su trabajo fue ampliamente acogido y mejorado. Cache pronto se convirtió en un uso estándar en la literatura informática.

Dónde se utilizan las cachés

Cachés de la CPU

Las pequeñas memorias situadas en el chip de la CPU o cerca de él pueden ser más rápidas que la memoria principal, mucho más grande. La mayoría de las CPUs desde la década de 1980 han utilizado una o más memorias caché. Las CPU modernas de propósito general de los ordenadores personales pueden tener hasta media docena. Cada caché puede estar especializada en una parte diferente de la tarea de ejecutar programas.

Cachés de disco

Las cachés de la CPU suelen ser gestionadas íntegramente por el hardware, mientras que otras cachés son gestionadas por otro tipo de software. El sistema operativo suele gestionar una caché de páginas en la memoria principal. Los usuarios ajenos a la informática suelen llamar a esta caché memoria virtual. Está gestionada por el núcleo del sistema operativo.

Los discos duros modernos tienen búferes de disco. A veces se les llama "caché de disco", pero es un error. La función principal de estos búferes es ordenar las escrituras del disco y gestionar las lecturas. Las visitas repetidas a la caché son raras, porque la memoria intermedia es muy pequeña en comparación con el tamaño del disco duro.

Los discos duros locales son rápidos en comparación con otros dispositivos de almacenamiento, como los servidores remotos, las unidades de cinta locales o las máquinas de discos ópticos. Utilizar los discos duros locales como cachés es el concepto principal de la gestión del almacenamiento jerárquico.

Cachés web

Los navegadores web y los servidores proxy utilizan cachés para almacenar las respuestas anteriores de los servidores web, como las páginas web. Las cachés web reducen la cantidad de información que debe transmitirse por la red. La información almacenada previamente en la caché puede reutilizarse a menudo. Esto reduce el ancho de banda y los requisitos de procesamiento del servidor web, y ayuda a mejorar la capacidad de respuesta para los usuarios de la web.

Los navegadores modernos utilizan una caché web integrada, pero algunos proveedores de servicios de Internet u organizaciones también utilizan un servidor proxy de caché. Se trata de una caché web que se comparte entre todos los usuarios de esa red.

Los motores de búsqueda también suelen poner a disposición de los usuarios las páginas web que han indexado en su caché. Por ejemplo, Google ofrece un enlace "Cached" junto a cada resultado de búsqueda. Esto es útil cuando las páginas web son temporalmente inaccesibles desde un servidor web.

Almacenamiento en caché con redes poco fiables

La operación de escritura es común en redes poco fiables (como una LAN Ethernet). El protocolo utilizado para asegurarse de que los datos de la caché de escritura tienen sentido cuando se utilizan varias cachés de escritura es muy complejo, en tal caso.

Por ejemplo, las cachés de las páginas web y las cachés de los sistemas de archivos de red del lado del cliente (como las de NFS o SMB) suelen ser de sólo lectura o de escritura para que el protocolo de red sea sencillo y fiable.

La diferencia entre búfer y caché

El búfer y la caché no son mutuamente excluyentes, sino que a menudo se utilizan juntos. Sin embargo, la razón por la que se utilizan es diferente. Un búfer es una ubicación en la memoria que se utiliza tradicionalmente porque las instrucciones de la CPU no pueden dirigirse directamente a los datos almacenados en los dispositivos periféricos. La memoria del ordenador se utiliza como almacén intermedio.

Además, un búfer de este tipo 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 pueden entregarse en un orden diferente al que se producen. Además, todo un búfer de datos suele transferirse de forma secuencial (por ejemplo, al disco duro), por lo que el búfer en sí mismo aumenta a veces el rendimiento de la transferencia. Estas ventajas están presentes incluso si los datos almacenados en el búfer se escriben en él una vez y se leen del mismo una vez.

Una caché también aumenta el rendimiento de las transferencias. Una parte del aumento proviene igualmente de la posibilidad de que varias transferencias pequeñas se combinen en un gran bloque. Pero la principal ganancia de rendimiento se produce porque hay muchas posibilidades de que el mismo dato se lea de la caché varias veces, o de que los datos escritos se lean pronto. El único propósito de las cachés es reducir los accesos al almacenamiento subyacente más lento. La caché también suele ser una capa de abstracción que está diseñada para ser invisible desde la perspectiva de las capas vecinas. De este modo, las aplicaciones o los clientes pueden no ser conscientes de que existe una caché.

Preguntas y respuestas

P: ¿Qué es el almacenamiento en caché?


R: El almacenamiento en caché es un término utilizado en informática que hace referencia a la práctica de almacenar copias de datos que se utilizan con frecuencia para acceder a ellos más rápidamente que volviendo a buscar o calcular los datos originales.

P: ¿Cómo funciona el almacenamiento en caché?


R: El almacenamiento en caché funciona utilizando dos tipos de medios de almacenamiento, uno que suele ser bastante grande pero de acceso lento, y otro al que se puede acceder mucho más rápido pero que suele ser más pequeño. La idea que subyace al almacenamiento en caché es utilizar el medio rápido para almacenar copias de los datos, de modo que acceder a los datos originales lleve menos tiempo o sea menos costoso.

P: ¿Qué es un búfer?


R: Un búfer es similar a una caché en el sentido de que almacena copias de datos para un acceso más rápido; sin embargo, con un búfer, el cliente que accede a los datos sabe que existe un búfer y que está gestionado por una aplicación, mientras que con una caché, los clientes no tienen por qué saber que existe una caché.

P: ¿Qué significa localidad de referencia?


R: La localidad de referencia significa que cuando una aplicación accede a determinados bloques de datos estructurados, es probable que también acceda a otros bloques cercanos a los que accedió originalmente. Esto ayuda a que las cachés funcionen bien, ya que suelen ser pequeñas en comparación con todos los datos disponibles.

P: ¿Por qué las cachés más grandes tardan más en buscar entradas?


R: Las cachés más grandes tardan más porque contienen más información almacenada y, por tanto, requieren más tiempo para las búsquedas. También son más caras, ya que requieren más recursos para su almacenamiento.

P: ¿Cómo puede ayudar la localidad a que las cachés funcionen mejor?


R: La localidad ayuda a que las cachés funcionen mejor porque cuando las aplicaciones acceden a determinados bloques de datos estructurados, es probable que también necesiten otros bloques cercanos que pueden recuperarse rápidamente de la caché en lugar de tener que buscarlos en otro lugar o volver a calcularlos.

AlegsaOnline.com - 2020 / 2023 - License CC3