Ir ao conteúdo
  • Cadastre-se
Entre para seguir isso  

Como o Cache de Memória Funciona

       
 320.516 Visualizações    Tutoriais  
 8 comentários

Neste tutorial você aprenderá tudo o que precisa saber sobre o cache de memória em uma linguagem simples e objetiva.

Como o Cache de Memória Funciona
Gabriel Torres Editor executivo do Clube do Hardware

Como o Cache de Memória Funciona

O cache de memória funciona da seguinte forma. A unidade de busca do processador procura pela a próxima instrução a ser executada no cache L1 de instruções. Se ela não estiver lá, o processador procurará por ela no cache L2. Por fim, se a instrução não estiver no cache L2, o processador terá que buscá-la na memória RAM.

Chamamos de “acerto” (“hit”) quando o processador carrega uma informação requisitada do cache, e de “erro” (“miss”) quando a informação requisitada pelo processador não está no cache de memória e ele precisa acessar a memória RAM do micro.

Claro que quando você liga o micro os caches estão vazios, assim o processar tem de acessar a memória RAM – este é um erro do cache inevitável. Mas após a primeira instrução ter sido carregada, o show começa.

Quando o processador carrega uma instrução de uma certa posição da memória, um circuito chamado controlador de cache carrega para o cache de memória um pequeno bloco de dados abaixo da posição atual que o processador acabou de carregar. Como os programas normalmente seguem um fluxo sequencial, a próxima posição de memória que o processador precisará provavelmente será a posição de memória imediatamente inferior a qual o processador acabou de carregar. Como o controlador de memória já carregou alguns dados abaixo da primeira posição de memória lida pelo o processador, o próximo dado provavelmente já estará dentro do cache de memória. Portanto o processador não precisará buscar o dado na memória RAM: o dado já foi carregado para o cache de memória embutido no processador e pode ser acessado com o clock interno do processador.

Esta quantidade de dados é chamada linha e é normalmente de 64 bytes (mais sobre esse assunto na próxima página).

Além de carregar esta pequena quantidade de dados, o controlador de memória está sempre tentando adivinhar qual será o próximo dado que o processador precisará. Um circuito chamado pré-busca, por exemplo, carrega mais dados localizados após esses primeiros 64 bytes da RAM dentro do cache de memória. Se o programa continuar carregar instruções e dados de posições de memória sequenciais, as instruções e dados que o processador precisará já estarão localizadas dentro do cache de memória.

Portanto nós podemos resumir como o cache de memória funciona da seguinte forma:

  1. O processador solicita a instrução/dado armazenado no endereço “a”.
  2. Como o conteúdo do endereço “a” não está no cache de memória, o processador precisa buscá-lo diretamente da memória RAM.
  3. O controlador de cache carrega uma linha (tipicamente de 64 bytes) começando do endereço “a” para dentro do cache de memória. Isto é, mais dados do que o processador solicitou, portanto se o processador continuar executado o programa sequencialmente (isto é, solicitando o endereço a+1) a próxima instrução/dado que o processador precisará já estará localizada no cache de memória.
  4. Um circuito chamado pré-busca carrega mais dados localizados após esta linha, ou seja, carrega o conteúdo do endereço a+64 para dentro do cache. Para dar a você um exemplo real, os processadores Pentium 4 têm um circuito de pré-busca de 256 bytes, o que significa que ele carrega os próximos 256 bytes após a linha recém carregada para dentro do cache.

Se os programas sempre forem executados sequencialmente o processador nunca precisará buscar dados diretamente da memória RAM – exceto para carregar a primeira instrução – já que as instruções e dados solicitados pelo o processador já estariam dentro do cache de memória antes de o processador solicitar por eles.

Porém os programas não são executados dessa forma, de tempos em tempos eles pulam para outra posição de memória. O principal desafio do controlador de cache é tentar adivinhar para quais endereços o processador pulará, carregando o conteúdo desses endereços para o cache de memória antes que o processador os solicite, de modo a evitar que o processador acesse a memória RAM, que é lenta. Esta tarefa é chamada previsão de desvio e todos os processadores modernos têm esse recurso.

Os processadores modernos têm uma taxa de acerto de pelo menos 80%, o que significa que pelo menos em 80% do tempo o processador não acessa a memória RAM diretamente, mas sim o cache de memória.

Editado por

Compartilhar



  Denunciar Artigo
Entre para seguir isso  

Artigos similares


Comentários de usuários


Parabéns, muito completo o tutorial. Uma dúvida besta.. eu gostaria de saber a relação da Ponte Sul com Cache L1 e Ponte Norte/Cache L2.

Compartilhar este comentário


Link para o comentário
Compartilhar em outros sites

Fiquei um pouco confuso: Eu aprendi que no cache mapeado diretamente a memória principal era dividida em conjuntos de blocos sendo que cada conjunto de blocos era mapeado em um único bloco da memória cache. Se eu estiver errado me corrijam.

Compartilhar este comentário


Link para o comentário
Compartilhar em outros sites

Muito legal o artigo! Gostaria de dar uma sugestão para que ficasse ainda mais completo.

Achei que seria muito interessante acrescentar um review mostrando a diferença de desempenho de processadores similares (mesma arquitetura e mesmo clock), mas com diferentes quantidades de memória cache, em diferentes aplicativos.

Isso nos daria uma real dimensão do quanto a memória cache influencia no desempenho.

Fica a sugestão.

Compartilhar este comentário


Link para o comentário
Compartilhar em outros sites

O artigo é excelente! Mas fiquei com uma dúvida: Há alguma diferença no circuito dos flip-flops da memória cache L1 para L2 e L3 ou todos os níveis utilizam o mesmo esquema eletrico, mudando apenas a quantidade de flip-flops(quantidade de memória) e a latência?

 

Compartilhar este comentário


Link para o comentário
Compartilhar em outros sites

Gabriel Torres, obrigado por responder! Já que estamos falando sobre memórias cache eu tenho mais uma dúvida: uma vez estava a utilizar o CPU-Z, e no canto da tela, onde é exibido os níveis de cache e a quantidade de memória estava escrito:

Cache

L1 Data    16 KBytes      8 Way

Trace        12 Kuops       8 Way

Level 2     2048 KBytes  8 Way

  O processador era um Intel Pentium 4 630. O que seria esta linha "Trace / 12 Kuops / 8 Way? Eu não vi em nem um outro processador este negócio...

Compartilhar este comentário


Link para o comentário
Compartilhar em outros sites


Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×