Computadores
Um dos assuntos de maior importância dentro da organização de arquitetura de computadores é o sistema de memória
utilizado dentro de uma máquina para suprir a necessidade de armazenamento durante o processamento das instruções.
Já conhecemos o ciclo de instrução e todos os processos que envolvem a execução da mesma, bem como a
necessidade constante de leitura e gravação em diversos tipos de memória, não somente a Memória Principal, mas
também os registradores que conhecemos brevemente.
Nesta aula, vamos estudar as memórias utilizadas no processamento das máquinas, bem como sua relação e
importância na otimização dos processos de computação. Vamos perceber que não se pode dizer que o computador tem
uma memória, mas sim que é formado por um subsistema de memória, complexo, e que interage entre si.
OBJETIVOS
Reconhecer a motivação no desenvolvimento da memória cache, bem como seu funcionamento junto à CPU e Memória
Principal.
O que é memória?
Memória é o componente dentro da arquitetura e organização do computador com a função de armazenar os programas
e os dados que serão manipulados pelo sistema operacional dentro dos ciclos de instrução.
A memória não pode ser considerada um componente único, mas sim um subsistema.
Veremos nesta e na próxima aula que, para o perfeito funcionamento otimizado do computador, vários tipos de memória
são envolvidos a m de compensar a velocidade da CPU, que é sempre superior à da velocidade da memória.
Caso dentro do sistema de computação existisse somente um tipo de memória, para que o processamento fosse
aceitável, sua velocidade teria que ser compatível à velocidade da CPU.
Isso inviabilizaria a construção da máquina, pois, com esta velocidade e com alta capacidade de armazenamento, a
tecnologia utilizada seria de alto custo e não acessível ao mercado.
Velocidade de processamento
Para car mais clara a diferença de velocidade de processamento, vamos falar dos números.
Dentro da CPU, um dado é processado em aproximadamente 5 nanossegundos (isto signi ca 5 bilionésimos de segundo),
ao contrário do processamento da memória principal (glossário) (que será vista detalhadamente na próxima aula).
Como sabemos que tudo que está sendo processado ca armazenado na memória RAM e é requisitado pela CPU, quando
a CPU recebe este conteúdo e processa em 5ns, a CPU ca mais 55ns ociosa aguardando o envio de uma nova
informação por parte da memória principal.
Por esse e por outros motivos, surgiram outras memórias que auxiliam nesta compensação.
Uma memória é volátil quando ela perde o conteúdo, quando não há alimentação de energia. Resumindo, se o
equipamento é desligado, seu conteúdo é perdido.
Memória primária
São os componentes que fornecem dados e instruções para uso imediato, sendo voláteis.
Basicamente, é formada pelos seguintes componentes:
Exemplos de dispositivos de armazenamento secundário são:
Dessa forma, podemos considerar como hierarquia de memória a estrutura apresentada a seguir:
Memória de K a
Primária Alto Volátil
Cache MBytes
Memória de M a
Médio Volátil
Principal GBytes
Disco Rígido, de G a
Secundária baixo Não-Volátil Menor
DVD, Bluray TBytes
Registradores
Quando estudamos o ciclo de instrução, ou ciclo de busca–decodi cação e execução, veri camos a presença de
registradores, que são dispositivos de armazenamento temporário, localizados na CPU, utilizados constantemente dentro
do processo de execução das instruções.
Por serem usados pela CPU, entende-se que são memórias muito rápidas. Na verdade, são consideradas as memórias
mais rápidas existentes no sistema de computação.
Porém, como seu objetivo é o armazenamento do conteúdo de memória a ser processado pela CPU, sua capacidade de
armazenamento se limita à palavra daquele processador, normalmente variando de 8 a 64 Bits.
O conceito de registrador surgiu da necessidade da CPU armazenar temporariamente dados que serão usados em seu
processamento.
SAIBA MAIS
, Um exemplo é o armazenamento temporário do resultado de um cálculo, que será utilizado posteriormente após a execução do
ciclo de instrução seguinte, que necessita de uma nova consulta na memória.
Por estarem dentro da CPU, subentende-se que os registradores são voláteis, isto é, precisam ser alimentados
constantemente pela energia elétrica para manter o conteúdo armazenado.
Memória cache
Como já estudado, a CPU trabalha diretamente com a memória RAM. Sendo assim, todos os dados processados são
recebidos dos módulos de memória RAM, para, dessa forma, serem decodi cados e executados.
Porém, com o desenvolvimento constante na tecnologia de construção de processadores, (lembre-se inclusive da Lei de
Moore) a sua velocidade foi cando cada vez maior quando comparada à velocidade de transmissão da memória
principal (que não acompanhou da mesma forma a evolução em velocidade, mas sim em capacidade de
armazenamento).
Com isso, surgiu um desequilíbrio entre a comunicação da CPU e a memória principal, de forma que a CPU processa
dados mais rápido do que a memória RAM poderia enviar, resultando em longos períodos de ociosidade ou estados de
espera (“wait states”) devido ao gargalo (“bottleneck”) criado por este desequilíbrio, o que logicamente resulta em um
desperdício da capacidade de processamento da CPU.
Por esse fato e também porque os registradores possuem alta velocidade mas baixa capacidade de armazenamento, foi
necessário, dentro da hierarquia da memória, criar uma nova “camada” que possibilitasse a CPU usar melhor toda a sua
capacidade de processamento: a memória cache.
Certamente, o custo da memória cache é maior do que o da principal e menor do que o custo de registradores, o que
justi ca parte da solução encontrada.
No entanto, o custo de fabricação da memória cache é muito maior do que o da principal, não justi cando a extinção da
principal. Ou seja, não seria viável economicamente construir um computador somente com tecnologia de memória
cache.
A partir dos processadores 386, surgiu a inclusão de memória cache, localizada entre a CPU e a principal, e que
funcionaria como um espelho de parte do conteúdo dessa memória principal.
Exemplo das primeiras placas-mãe lançadas com memória cache, localizada na própria placa-mãe.
Princípio da localidade
O funcionamento da memória cache se faz da seguinte forma: todo conteúdo consultado com mais frequência na
memória principal é mantido de forma espelhada na memória cache, ou seja, este conteúdo não é apagado na memória
principal, somente espelhado.
Esse conteúdo consultado com frequência é veri cado pelo princípio da localidade.
Por esse princípio, se um endereço, por exemplo, na memória principal, foi requisitado pela CPU, é bem provável que um
endereço próximo ou vizinho a este seja o próximo a ser consultado pela CPU na memória principal.
Dessa forma, antecipa-se não somente o conteúdo solicitado pela CPU, mas também o conteúdo dos endereços
próximos a esta localidade são espelhados da memória principal para a cache, de modo que, em uma próxima vez que for
efetuada uma consulta por parte da CPU, este conteúdo possa ser acessado diretamente pela cache, otimizando o tempo
de processamento.
Baseia-se no fato de que um dado acessado recentemente tem mais chances de ser usado
novamente do que um dado usado há mais tempo.
Isso é uma realidade pois, quando um programa está em execução, uma variável pode ser
consultada diversas vezes durante seu processamento, por exemplo, se houver uma rotina de
loop ou sub-rotinas.
Baseia-se no fato de que há uma grande probabilidade de acesso para dados e instruções em
endereços próximos àqueles acessados recentemente pela CPU (como no exemplo citado
anteriormente).
Durante a execução de um programa, normalmente as variáveis são criadas e armazenadas
próximas umas às outras, dentro da memória principal.
Logicamente, nem sempre, em uma consulta efetuada pela CPU, o conteúdo estará disponível na memória cache de
imediato.
• Se a CPU busca um determinado dado e o encontra na cache, dá-se o que chamamos de cache hit, ou seja, conteúdo é
localizado na cache;
• Se o caso for negativo, ou seja, se o dado não estiver presente na cache, sendo necessário requisitar o conteúdo para a
memória principal, dá-se o que chamamos de cache miss.
Níveis de cache
Cache L1 (nível 1)
Também conhecida como cache on-die (no núcleo), exatamente por estar dentro do
processador.
Alguns fabricantes identi cam as memórias cache L1 como formada por dois elementos:
Memória de instrução – acionada quando o processador está buscando uma instrução;
Memória para dados – acionada se o processador estiver buscando um dado.
Cache L2 (nível 1)
Localizada fora do núcleo, mas muito próxima do mesmo, sendo construída normalmente
dentro do processador.
Cache L3 (nível 3)
Para car mais claro, veja o exemplo abaixo, de um processador Phenom II X3 da AMD, de 6 núcleos, em que são
mostradas suas especi cações por meio de imagem microscópica.
Atenção
, Caches são geralmente inclusivas. Isso signi ca que o conteúdo total de uma cache L1 está na cache L2, que também está na
cache L3.
Mapeamento de cache
Mesmo com a memória cache, a localização das instruções ou dados a serem manipulados pela CPU continuam se
relacionando a endereços da memória principal e não da memória cache.
Sabendo que a memória cache possui uma pequena porção de memória e que normalmente o índice de cache hit é de
90%, como esta memória é referenciada na cache, de forma a evitar que toda a memória cache tenha que ser varrida a m
de localizar um determinado endereço?
A base disso é o processo de mapeamento da memória, ou seja, é feita uma divisão da memória principal em blocos de
tamanho xo, conhecidas como linhas de cache.
Essas linhas possuem de 4 bytes (32 bits) a 64 bytes (512 bits) e são endereçadas a partir do zero, de forma que, se a
memória principal for dividida em 64 bytes, teríamos as linhas que iriam de 0 a 63 bytes, de 64 a 127 bytes, e assim por
diante.
Feito isso, já se tem uma forma de mapeamento que pode ser feito na cache.
Neste método todas as linhas de cache da memória principal podem ser gravadas em qualquer localização na memória
cache.
É uma forma ine ciente porque a recuperação dos dados pode levar à varredura completa da cache para localizar o
conteúdo.
O método de mapeamento direto limita a gravação das linhas de cache em locais especí cos na cache. Porém, este
índice pré-de nido dos locais permite que a pesquisa do conteúdo na cache seja mais ágil.
A gura abaixo mostra um esquema de mapeamento direto em que a linha de cache consiste em 32 bytes (256 bits).
Exemplo
, Antes de continuar, veja um exemplo (galeria/aula8/docs/Exemplo.pdf) e entenda melhor.
Este tipo de mapeamento é um esquema híbrido entre o mapeamento totalmente associativo e o mapeamento direto.
Ele permite que os problemas do mapeamento totalmente associativo (em que a cache inteira precisa ser varrida à
procura de um endereço) e do mapeamento direto (em que ocorrem colisões) sejam minimizados.
Nele, um mesmo endereço na memória principal pode ser armazenado em mais de um local (por vez) da cache, através
da criação de vias de cache, ou seja, cada linha pode possuir n vias de cache, onde normalmente são de 2 a 4 vias.
Utilizando o exemplo mencionado anteriormente, onde foi consultado pela CPU o endereço 195 e logo após o 65, que
faziam parte da mesma linha de chave, a colisão seria evitada, pois, com 2 vias possíveis na linha de cache 0, ambas as
linhas da memória principal poderão ser gravadas, cada uma em uma via especí ca.
Isso resolve parte dos problemas encontrados nos métodos anteriores e agiliza o mapeamento e a consulta de conteúdo
na cache.
Métodos de substituição de dados
No que se refere à memória cache, é importante lembrar que existe um momento em que sua capacidade está lotada e os
dados precisam ser substituídos, como, por exemplo, os das vias de cache.
Como optar por qual via de cache a ser excluída para uma nova substituição?
First-in
Remove a linha que está mais tempo na cache.
First-out
Quando for necessário substituir uma linha na cache, será retirada aquela cujo contador tiver o valor mais alto. Utilizado
para substituição de dados no mapeamento de cache associativa de conjunto.
Logicamente, é necessário que, em algum momento, os dados atualizados na memória cache também sejam atualizados
na memória principal. A nal, uma deve ser o espelho da outra.
Write Through
Write Back
Consiste em atualizar a cache, porém ao enviar atualizações em blocos para a memória principal.
ATIVIDADE
1 - Nesta aula, conhecemos mais a fundo o subsistema de memória, incluindo a memória cache.
Para esta atividade, instale o aplicativo CPUZ (glossário) e procure descobrir a con guração de memória cache que seu
computador possui.
Resposta Correta
Justi cativa
Memória RAM
Disco rígido
Memória cache
Registrador
Acumulador
Justi cativa
4 - Remove a via menos recentemente utilizada. Remove a linha que mais tempo não é referenciada pelo CPU:
Substituição Aleatória
First-in First-Out
LRU
Write Back
Write ThroughCondicional
Justi cativa
Glossário
MEMÓRIA PRINCIPAL
Essa memória principal é a tão conhecida memória RAM, que leva aproximadamente 60 nanossegundos para processar um dado e
transferir para a CPU.