Um dia era pra mostrar coisas sobre o excel, hoje é para compartilhar meus poucos conhecimentos, com os interessados!

segunda-feira, 2 de janeiro de 2012

Ciências Computação - 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. 
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.