Cache (computação)

Caching é um termo usado na ciência da computação. A idéia por trás de um cache (pronuncia-se "cash" /ˈkæʃ/ KASH ) é muito simples: Muito freqüentemente, obter um resultado para um cálculo é muito demorado, portanto, armazenar o resultado é geralmente uma boa idéia. Dois tipos de mídia de armazenamento são utilizados: Um é normalmente bastante grande, mas o acesso é "lento"; o outro pode ser acessado muito mais rápido, mas geralmente é pequeno. A idéia básica por trás do caching é usar o meio que é rápido de acessar para ter cópias dos dados. Não há diferença entre a cópia, e o original. O acesso aos dados originais pode levar muito tempo, ou pode ser caro (por exemplo: os resultados de um problema difícil que leva muito tempo para ser resolvido). Por esta razão, é muito "mais barato" simplesmente usar a cópia dos dados do cache. Dito de outra forma, um cache é uma área de armazenamento temporário que tem cópias de dados que são usados com freqüência. Quando uma cópia dos dados está neste cache, é mais rápido usar esta cópia em vez de buscar novamente ou recalcular os dados originais. Isto fará com que o tempo médio necessário para acessar os dados seja menor. Colocar um novo valor em um cache muitas vezes significa que um valor mais antigo precisa ser substituído. Há diferentes idéias (geralmente chamadas de "estratégias") sobre como selecionar o valor a ser substituído.

Um buffer é muito semelhante a um cache. É diferente porque o cliente que acessa os dados em um buffer sabe que existe um buffer; o buffer é gerenciado pela aplicação. Com um cache, o cliente que acessa os dados não precisa estar ciente de que existe um cache.

Aplicações típicas de computador acessam dados de formas muito semelhantes. Suponha que os dados sejam estruturados em "blocos", que podem ser acessados individualmente. Quando uma aplicação acessa um bloco, também é muito provável que acesse (ou faça referência) a um bloco que esteja "próximo" do bloco original. Isto é conhecido como localidade de referência. Existem diferentes tipos de tais "localidades". A localidade de referência é uma das razões pelas quais os caches funcionam bem em muitas áreas de computação.

Para funcionar bem, as caches são pequenas, em comparação com a quantidade total de dados. Quanto maior o cache, mais tempo se leva para procurar uma entrada. As caches maiores também são mais caras de se construir.

Como funcionam as caches

Um cache é um bloco de memória para armazenamento de dados que provavelmente é usado novamente. A CPU e o disco rígido freqüentemente usam um cache, assim como os navegadores e servidores web.

Um cache é composto de muitas entradas, chamadas de pool. Cada entrada contém um dado (um pouco de dado) que é uma cópia de um dado em outro lugar. Os caches geralmente usam o que é chamado de back-up store. As lojas de backup são de acesso lento ou caro, em comparação com o cache. Um cache de disco usa um disco rígido como backup store, por exemplo. Cada entrada também tem um pouco de informação anexada, chamada de tag. Esta etiqueta é usada para encontrar o local onde os dados originais são armazenados.

Caches para leitura

Um cliente (uma CPU, navegador web, sistema operacional) quer acessar um pouco de dados, acredita estar na loja de backup, primeiro verifica se os dados podem ser encontrados no cache. Se os dados puderem ser encontrados no cache, o cliente pode usá-los e não precisa usar a memória principal. Isto é conhecido como um acerto no cache. Assim, por exemplo, um programa de navegador da web pode verificar seu cache local em disco para ver se ele tem uma cópia local do conteúdo de uma página da web em uma determinada URL. Neste exemplo, a URL é a tag, e o conteúdo da página web é o datum.

A outra situação que pode ocorrer é que o dado com a etiqueta não pode ser encontrado no cache. Isto é conhecido como cache miss. O dado precisa ser buscado na loja de backup. Normalmente, ele é copiado para o cache, para que da próxima vez ele não precise mais ser buscado na loja de backup.

O cache tem apenas um tamanho limitado. Para dar espaço para a entrada anteriormente não armazenada em cache, outra entrada em cache pode precisar ser apagada do cache. Regras especiais são usadas para encontrar a entrada que deve ser melhor apagada. Estas regras são normalmente chamadas de Heurística. As heurísticas usadas para encontrar a entrada são chamadas de política de substituição. Uma regra muito simples é chamada de Menos recentemente utilizada (ou LRU). Ela simplesmente leva a entrada que foi usada há mais tempo. Outras heurísticas são listadas no algoritmo de cache.

Caches para escrever

Caches também podem ser usados para escrever dados; o benefício disto é que o cliente pode continuar sua operação uma vez que a entrada tenha sido escrita no cache; não precisa esperar até que a entrada seja escrita na loja de apoio.

No entanto, a entrada deve ser escrita para a loja de apoio em algum momento. O momento em que isso acontece é controlado pela política de escrita.

Em um cache gravado, cada entrada é escrita na loja de apoio imediatamente, assim como é armazenada em cache.

A outra opção é apenas escrever para o cache, e escrever para a loja de apoio mais tarde. Isto é conhecido como cache de retorno (ou write-behind). O cache marca as entradas que ainda não foram escritas na loja de apoio; a marca que é usada é freqüentemente chamada de bandeira suja. Antes que as entradas sejam apagadas do cache, elas são escritas na loja de apoio. Isto é conhecido como escrita preguiçosa. Uma falha em um cache de gravação (que requer que um bloco seja substituído por outro) freqüentemente precisará de dois acessos à memória: um para obter os dados necessários, e outro para escrever dados substituídos do cache para a loja.

A política de cache também pode dizer que um determinado dado deve ser escrito em cache. O cliente pode ter feito muitas mudanças no dado no cache. Após isso, ele pode dizer explicitamente ao cache para escrever o dado de volta.

A alocação sem gravação é uma política de cache onde apenas as leituras são armazenadas em cache. Isto evita a necessidade de gravação de retorno ou gravação em cache. As escritas são feitas para a loja de backup o tempo todo.

O cliente não é a aplicação que muda os dados na loja de backup. Se os dados forem alterados na loja de backup, a cópia no cache estará desatualizada, ou obsoleta. Alternativamente, quando o cliente atualizar os dados no cache, as cópias desses dados em outros caches ficarão obsoletas. Existem protocolos especiais de comunicação que permitem aos gerentes do cache conversar uns com os outros para manter os dados significativos. Estes são conhecidos como protocolos de coerência.

Diagrama de um cache de memória da CPUZoom
Diagrama de um cache de memória da CPU

Selecionando a entrada para substituir

Um cache é pequeno, e estará cheio, ou quase cheio, na maior parte do tempo. Portanto, quando um novo valor é adicionado, um antigo precisa ser removido. Há diferentes maneiras de se fazer esta seleção:

  • Primeiro a entrar Primeiro a sair: Basta substituir a entrada que foi adicionada ao cache há mais tempo
  • Menos usado recentemente: Esta idéia é semelhante ao FIFO acima, mas quando uma entrada é usada, seu carimbo/idade é atualizado.
  • Menos freqüentemente utilizado: Novamente, semelhante ao caso FIFO, em vez de usar um carimbo de tempo, use um contador, que é incrementado cada vez que uma entrada é usada.
  • Escolha uma entrada ao acaso

História

A palavra cache foi usada pela primeira vez na computação em 1967, quando um artigo científico foi preparado para ser publicado no IBM Systems Journal. O artigo era sobre uma nova melhoria da memória no Modelo 85. O Modelo 85 era um computador da linha de produtos IBM System/360. O editor do Journal queria uma palavra melhor para o buffer de alta velocidade, usado no artigo. Ele não recebeu nenhuma entrada, e sugeriu o cache, do cacher francês, que significa "esconder". O artigo foi publicado no início de 1968, e os autores foram homenageados pela IBM. Seu trabalho foi muito bem recebido e melhorado. O cache logo se tornou um uso padrão na literatura de informática.

Onde as caches são utilizadas

Caches de CPU

Pequenas memórias no chip da CPU ou perto dele podem ser feitas mais rapidamente do que a memória principal, muito maior. A maioria das CPUs desde os anos 80 tem usado uma ou mais caches. As CPUs modernas de uso geral dentro dos computadores pessoais podem ter até meia dúzia de CPUs. Cada cache pode ser especializado em uma parte diferente da tarefa de execução de programas.

Caches de discos

As caches de CPU são geralmente gerenciadas inteiramente por hardware, outras caches são gerenciadas por um tipo diferente de software. O sistema operacional geralmente gerencia um cache de página na memória principal. Usuários fora da informática geralmente chamam este cache de memória virtual. Ele é gerenciado pelo kernel do sistema operacional.

Os discos rígidos modernos possuem amortecedores de disco. Estes são às vezes chamados de "cache de disco", mas isto está errado. A principal função destes buffers é ordenar a gravação em disco e gerenciar leituras. Os acessos repetidos ao cache são raros, porque o buffer é muito pequeno em comparação com o tamanho do disco rígido.

Os discos rígidos locais são rápidos em comparação com outros dispositivos de armazenamento, tais como servidores remotos, unidades locais de fita adesiva ou jukeboxes óticas. O uso de discos rígidos locais como caches é o principal conceito de gerenciamento de armazenamento hierárquico.

Caches Web

Os navegadores e servidores web proxy utilizam caches para armazenar respostas anteriores de servidores web, tais como páginas web. Os caches da web reduzem a quantidade de informações que precisam ser transmitidas através da rede. Informações previamente armazenadas no cache podem ser reutilizadas com freqüência. Isto reduz a largura de banda e os requisitos de processamento do servidor web e ajuda a melhorar a capacidade de resposta dos usuários da web.

Os navegadores modernos usam um cache web embutido, mas alguns provedores de serviços de Internet ou organizações também usam um servidor proxy de cache. Este é um cache da web que é compartilhado entre todos os usuários dessa rede.

Os motores de busca também costumam disponibilizar páginas da web indexadas a partir de seu cache. Por exemplo, o Google fornece um link "Cached" ao lado de cada resultado de busca. Isto é útil quando as páginas web estão temporariamente inacessíveis a partir de um servidor web.

Caching com redes não confiáveis

A operação de escrita é comum em redes não confiáveis (como uma LAN Ethernet). O protocolo usado para garantir que os dados no cache de escrita façam sentido quando vários caches de escrita são usados é muito complexo, em tal caso.

Por exemplo, caches de páginas web e caches de sistemas de arquivos de rede do lado do cliente (como aqueles em NFS ou SMB) são normalmente somente leitura ou escrita para manter o protocolo de rede simples e confiável.

A diferença entre buffer e cache

Buffer e cache não são mutuamente exclusivos; eles também são freqüentemente utilizados em conjunto. A razão pela qual eles são usados é diferente, no entanto. Um buffer é um local na memória que é tradicionalmente usado porque as instruções da CPU não podem endereçar diretamente os dados armazenados em dispositivos periféricos. A memória do computador é usada como um armazenamento intermediário.

Além disso, tal buffer pode ser viável quando um grande bloco de dados é montado ou desmontado (como exigido por um dispositivo de armazenamento), ou quando os dados podem ser entregues em uma ordem diferente daquela em que são produzidos. Também um buffer inteiro de dados é geralmente transferido seqüencialmente (por exemplo, para o disco rígido), de modo que o próprio buffer às vezes aumenta o desempenho da transferência. Estes benefícios estão presentes mesmo que os dados armazenados em buffer sejam escritos no buffer uma vez e lidos do buffer uma vez.

Um cache também aumenta o desempenho da transferência. Uma parte do aumento também vem da possibilidade de que várias transferências pequenas se combinem em um bloco grande. Mas o principal ganho de desempenho ocorre porque há uma boa chance de que o mesmo dado seja lido do cache várias vezes, ou que os dados escritos sejam lidos em breve. O único objetivo do Caches é reduzir os acessos ao armazenamento mais lento subjacente. Cache é também normalmente uma camada de abstração que é projetada para ser invisível da perspectiva de camadas vizinhas. Dessa forma, as aplicações ou clientes podem não estar cientes de que existe um cache.

Perguntas e Respostas

P: O que é caching?


R: Caching é um termo usado em informática que se refere à prática de armazenar cópias de dados que são usadas com freqüência para acessá-los mais rapidamente do que buscar de novo ou recalcular os dados originais.

P: Como funciona o armazenamento em cache?


R: O cache funciona usando dois tipos de mídia de armazenamento, uma que geralmente é bastante grande, mas de acesso lento, e outra que pode ser acessada muito mais rapidamente, mas geralmente menor. A idéia por trás do cache é usar o meio rápido para armazenar cópias dos dados, de modo que o acesso aos dados originais leve menos tempo ou seja menos caro.

P: O que é um buffer?


R: Um buffer é semelhante a um cache na medida em que armazena cópias de dados para um acesso mais rápido, porém com um buffer, o cliente que acessa os dados sabe que há um buffer e é administrado por um aplicativo, enquanto que com um cache, os clientes não precisam estar cientes de que há um cache.

P: O que significa localidade de referência?


R: Localidade de referência significa que quando um aplicativo acessa certos blocos de dados estruturados, é provável que ele também acesse outros blocos próximos aos que foram acessados originalmente. Isso ajuda os cacheamentos a funcionar bem, já que eles são tipicamente pequenos em comparação com todos os dados disponíveis.

P: Por que as caches maiores levam mais tempo para procurar entradas?


R: Caches maiores levam mais tempo porque contêm mais informações armazenadas e, portanto, requerem mais tempo para buscas. Elas também são mais caras, pois exigem mais recursos para armazenamento.

P: Como a localidade pode ajudar a fazer com que as caches funcionem melhor?


R: A localidade ajuda a fazer com que as caches funcionem melhor porque quando os pedidos acessam certos blocos de dados estruturados, eles provavelmente vão precisar também de outros blocos próximos que podem ser rapidamente recuperados do cache, em vez de ter que ir buscá-los de outro lugar ou recalculá-los novamente.

AlegsaOnline.com - 2020 / 2023 - License CC3