5.3. Funcionamento do Sistema de Memória
O ponto inicial da memória é a Memória Principal (por isso ela recebe esse nome). Todo programa para ser executado deve ser armazenado nesta memória, com todo seus dados e instruções.
Mais a frente veremos que nem sempre é possível manter todos programas em execução na Memória Principal.
Devido ao Princípio da Localidade, sempre que o processador solicita um dado/instrução da memória, ele e seus vizinhos (Localidade Espacial) são copiados para a Memória Cache no nível superior a seguir da hierarquia, Cache L2, por exemplo. Uma parte menor deste bloco é transferido para o nível seguinte (Cache L1, por exemplo), e uma parte ainda menor (porções individuais) é transferida para registradores.
Quando o processador vai acessar um endereço de memória, ele faz uma consulta no sentido inverso, do topo da hierarquia até a base. Primeiro ele busca o conteúdo nos registradores. Se não encontrar, ele vai buscar no primeiro nível de Cache. Se não encontrar, ele busca no próximo nível de Cache e, por fim, na Memória Principal.
O grande problema é que os níveis superiores da Hierarquia de Memória possuem capacidade cada vez menores a medida que se aproximam do topo. Isso implica na falta de capacidade de armazenar todos dados e instruções que estão sendo executadas pelo processador. Por isso, o sistema deve decidir o que é mais relevante e fica nos níveis mais altos, e o que é menos relevante e deve ficar nos níveis inferiores da hierarquia.
Perceba que tudo é uma questão de aposta. Tudo o que o processador possui a seu favor é o Princípio da Localidade, mas que se baseia em probabilidade. Há uma probabilidade de um endereço próximo (temporal e espacialmente) a um que foi acessado, ser acessado também, mas não há garantias. Muitas vezes ele acerta, mas muitas outras ele erra, e quem perde é o desempenho geral do sistema.
Como fazer então para aumentar a probabilidade de um endereço ser encontrado no topo da Hierarquia de Memória? A resposta é simples, mas não barata! Deve-se investir em registradores e memórias Cache maiores.
Quando as memórias estão cheias, o Sistema de Memória possui uma tarefa difícil, que é remover um conteúdo considerado menos relevante no momento, e substituir por um outro mais relevante naquele momento. A única memória que continua com uma cópia de todos os conteúdos é a Memória Principal. A escolha de qual conteúdo deve ser removido se baseia também no Princípio da Localidade, mas há diversas formas de implementar o algoritmo de substituição de conteúdos, que também podem influenciar no desempenho do sistema.
Veremos que a Memória Virtual quebra essa ideia de que a Memória Principal sempre mantém cópia de todos programas.