Índice
Índice
- Introdução
- RAM Dinâmica vs. RAM Estática
- História do Cache de Memória nos PCs
- O Cache de Memória
- Cache de Memória L2 nos Processadores Multi-Núcleos
- Como o Cache de Memória Funciona
- Organização do Cache de Memória
- Cache Associativo por Grupos de n-vias
- Configuração do Cache de Memória nos Processadores Atuais
Organização do Cache de Memória
O cache de memória é divido internamente em linhas, cada uma podendo guardar de 16 a 128 bytes, dependendo do processador. Na maioria dos processadores atuais o cache de memória está organizado em linhas de 64 bytes (512 bits), portanto consideraremos um cache de memória usando linhas de 64 bytes em nossos exemplos dados neste tutorial. Na última página apresentaremos as especificações dos caches de memória dos principais processadores encontrados no mercado atualmente.
Portanto, um cache de memória L2 de 512 KB é dividido em 8.192 linhas. Lembre-se que 1 KB é igual a 2^10 ou 1.024 bytes e não 1.000 bytes. A conta é a seguinte: 524.288 / 64 = 8.192. Nós consideraremos um processador de um único núcleo com 512 KB de memória cache L2 em nossos exemplos. Na Figura 5 ilustramos esta organização interna deste cache de memória.
Figura 5: Como um cache de memória L2 de 512 KB é organizado.
O cache de memória pode funcionar em três diferentes organizações: cache com mapeamento direto, cache completamente associativo e cache associativo por grupos (também conhecido como cache associativo por grupos de n-vias). O cache associativo por grupos é a configuração mais usada atualmente, mas vamos dar uma olhada em como essas três configurações funcionam.
Cache com Mapeamento Direto
O cache com mapeamento direto é a maneira mais simples de se criar um cache de memória. Nesta configuração a memória RAM é dividida no mesmo número de linhas que existem dentro do cache de memória. Se tivermos um micro com 1 GB de memória RAM, esse 1 GB será dividido em 8.192 blocos (assumindo que o cache de memória use a configuração que descrevemos acima), cada um com 128 KB (1.073.741.824 / 8.192 = 131.072 – lembre-se que 1 GB é igual a 2^30 bytes, 1 MB é igual a 2^20 bytes e 1 KB é igual a 2^10 bytes). Se o micro tivesse 512 MB a memória também seria dividida em 8.192 blocos, mas desta vez cada bloco teria 64 KB. E assim por diante. Nós ilustramos essa organização na Figura 6.
Figura 6: Como o cache com mapeamento direto funciona.
A principal vantagem do mapeamento direto é que essa é a configuração mais fácil de ser implementada.
Quando o processador solicita por um dado endereço da memória RAM (por exemplo, o endereço 1.000), o controlador de cache carregará uma linha (64 bytes) da memória RAM e armazenará esta linha no cache de memória (isto é, endereço 1.000 até 1.063, assumindo que estamos usando um esquema de endereçamento de 8 bits só para ajudar em nossos exemplos). Portanto se o processador solicitar novamente o conteúdo deste endereço ou de alguns endereços próximos desse (ou seja, qualquer endereço na faixa de 1.000 a 1.063) eles já estarão dentro do cache.
O problema é que se o processador precisar de dois endereços que estão mapeados na mesma linha do cache, um erro do cache acontecerá (este problema é chamado colisão ou conflito). Continuando nosso exemplo, se o processador solicitar o endereço 1.000 e então solicitar o endereço 2.000, um erro do cache acontecerá porque esses dois endereços estão dentro do mesmo bloco (os primeiros 128 KB da memória RAM), e o que estava dentro do cache era uma linha começando com o endereço 1.000. Portanto o controlador de cache carregará a linha do endereço 2.000 e armazenará ela na primeira linha do cache de memória, limpando o conteúdo antigo, em nosso caso a linha de endereço 1.000.
O problema continua. Se o processador tem de executar um laço de repetição (loop) maior do que 64 bytes, haverá um erro do cache durante o tempo de duração do loop.
Por exemplo, se o loop for do endereço 1.000 até o endereço 1.100, o processador terá de carregar todas as instruções diretamente da memória RAM enquanto o loop durar. Isto acontecerá porque o cache terá o conteúdo do endereço 1.000 até 1.063 e quando o processador solicitar o conteúdo do endereço 1.100 ele terá buscá-lo na memória RAM, e o controlador de cache carregará os endereços 1.100 até 1.163. Quando o processador solicitar o endereço 1.000 novamente ele terá que voltar na memória RAM, já que o cache não tem mais o conteúdo do endereço 1.000. Se este loop for executado 1.000 vezes, o processador terá que ir à memória RAM 1.000 vezes.
É por isso que o cache com mapeamento direto é a configuração de cache menos eficiente e não é mais usada – pelo menos nos PCs.
Cache Completamente Associativo
Na configuração completamente associativa, por outro lado, não existe uma ligação fixa entre as linhas do cache de memória e as localizações da memória RAM. O controlador de cache pode armazenar qualquer endereço. Portanto o problema descrito acima não acontece. Esta configuração é a mais eficiente (ou seja, apresenta uma maior taxa de acertos).
Por outro lado, o circuito de controle é muito mais complicado, já que precisa monitorar quais localizações estão carregadas dentro do cache de memória. É por isso que uma solução hibrida – chamada cache associativo por grupos – é mais usada atualmente.
Respostas recomendadas
Crie uma conta ou entre para comentar
Você precisa ser um usuário para fazer um comentário
Criar uma conta
Crie uma nova conta em nossa comunidade. É fácil!
Crie uma nova contaEntrar
Já tem uma conta? Faça o login.
Entrar agora