Cache foi o nome escolhido para designar o nível da hierarquia de memória entre o processador e a memória principal. Assim, a memória cache é um dispositivo de memória colocado entre a CPU e a memória principal, com o intuito de aumentar o desempenho do sistema. Possui tecnologia de fabricação semelhante a CPU (VLSI) garantindo redução da espera por parte desta.

As caches apareceram primeiro nas máquinas desenvolvidas para pesquisa, no início da década de 60, sendo implementadas em máquinas comerciais mais tarde, ainda na mesma década; virtualmente todas as máquinas comerciais desenvolvidas hoje, desde as mais rápidas até as mais lentas, incluem cache.

Uma analogia utilizando uma biblioteca pode ser definida, suponha que você necessite pesquisar sobre a evolução da arquitetura de computadores na biblioteca da universidade. Imagine que você esteja sentado em uma mesa com um conjunto de livros sobre o assunto que você selecionou previamente, retirou das estantes e colocou sobre a mesa. Ao examinar os livros em seu poder, você observa que eles contêm a descrição de várias máquinas e tecnologias, com exceção da arquitetura proposta por Von Neumann. Por causa disto você retorna as estantes em busca de um livro adicional que trate sobre o assunto. Caso tenha selecionado bem os livros que se encontram sobre sua mesa existe uma grande probabilidade de você encontrar neles a maioria dos tópicos que você precisa para o seu trabalho.

O fato de você possuir vários livros a sua frente faz com que o tempo necessário para escrita do trabalho seja bem menor, quando comparado ao tempo gasto na escrita do mesmo trabalho caso você não pudesse ter mais de um livro em seu poder e precisasse constantemente levantar-se da sua mesa para levar um livro até a estante e trocá-lo por outro. O mesmo princípio permite criar a ilusão de uma memória muito grande que possa ser acessada de modo tão rápido quanto é uma memória pequena. Assim como você não precisa acessar todos os livros de uma biblioteca de uma vez, com igual prioridade, um programa não acessa todo o seu código e todos os seus dados de uma vez com igual probabilidade. Se assim fosse seria impossível fazer com que os acessos a essa memória fossem rápidos. Pela mesma linha de raciocínio seria impossível para você colocar todos os livros de uma biblioteca em cima da sua mesa, mantendo a chance de encontrar rapidamente a informação que você precisa.

O chamado princípio da localidade está por trás tanto da maneira como você escreve o trabalho quanto o modo como os programas operam. Este princípio estabelece que os programas acessam uma parte relativamente pequena do seu espaço de endereçamento em um instante qualquer, assim como você acessa uma parcela extremamente pequena dos recursos de uma biblioteca, em um dado instante. Existem dois diferentes tipos de localidade:

1. Localidade Temporal: se um item é referenciado, ele tende a ser referenciado novamente dentro de um curto espaço de tempo. Se você tiver trazido um livro para sua mesa para examiná-lo é provável que em breve você vá precisar dele novamente.

2. Localidade Espacial: se um item é referenciado, ıtens cujos endereços sejam próximos a eles tendem a ser logo referenciados. Quando você lê/pesquisa sobre determinado tópico na seqüência você já está lendo o tópico consecutivo, adjacentes ao primeiro. Assim como os acessos aos livros da biblioteca que estão sobre a mesa exibem localidade, tal propriedade aparece nos programas de computador, pura e simplesmente em função de sua própria estrutura. Por exemplo, a imensa maioria dos programas contém loops (for, while, repeat, do, etc), de maneira que as instruções e os dados tendem a ser acessados de maneira repetitiva, exibindo um alto grau de localidade temporal. Considerando que as instruções são quase sempre acessadas sequencialmente, os programas também exibem um alto grau de localidade espacial.

Pode-se tratar o sistema como tendo dois níveis de memória o superior (neste caso cache) e o inferior(neste caso MP) e a unidade mínima de informação que pode ou não estar presente nesta hierarquia de dois níveis e o bloco (na analogia com a biblioteca um bloco corresponde a um livro). Se a informação solicitada pelo processador estiver presente no nível superior (cache), ocorre um acerto. Se a informação não puder ser encontrada no nível superior, a tentativa de encontrá-la gera uma falta. Quando ocorre uma falta o nível mais baixo da hierarquia (MP) é acessado para que seja possível recuperar o bloco com a informação ao solicitada pelo processador (equivalente a levantarmos da mesa e irmos até a estante buscar um livro que contenha a informação que desejamos e que não existia nos que já estavam na mesa). A taxa de acertos, ou razão de acertos, corresponde a fração dos acessos a memória encontrados no nível superior, e com freqüência é usada como medida de performance da hierarquia de memória. A taxa de altas (1 - taxa de acertos) e a fração de acessos a memória não encontrados no nível superior (na cache).

Para efetuar ser possível a transferência de um bloco da MP para um quadro da memória cache temos três procedimentos de mapeamento. São as chamadas políticas de mapeamento, que estão citadas abaixo não entrarei em detalhes sobre essas políticas porque não é o foco do artigo.

  • Mapeamento Direto;
  • Mapeamento Associativo;
  • Mapeamento Associativo por Conjunto;

Quando essas informações estão alocadas a memória cache deve-se possuir alguma política de substituição de dados na cache para que essas informações não ficam eternamente alocadas sem serem usadas e consequentemente diminuindo a performance do sistema, essas políticas são as seguintes.

  • LRU (O que não é usado a mais tempo)
  • Fila
  • LFU (O que tem menos referência)
  • Escola Aleatória

Com a utilização da memória cache aumentou consideravelmente o ganho de desempenho dos computadores esse tempo que o processador economiza na busca dos dados é depositado em outras tarefas que o sistema operacional necessite, assim que ganha com tudo isso é o usuário final que muitas vezes para ele não interessa se está utilizando ou não cache qual política de mapeamento está sendo utilizada, o usuário que apenas que tudo seja executado na melhor maneira possível, ou seja rápido.