Você está na página 1de 13

Organização de

Computadores

Aula 08: Memória


INTRODUÇÃO

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 o subsistema de memória quanto à volatilidade.

Interpretar a importância dos registradores na arquitetura de computadores.

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.

Memória primária x secundária

Para se entender a diferença dessas divisões, é importante conhecer o conceito de volatilidade. 

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.

Sendo assim, analise as de nições:

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:

Registradores, Memória cache e Memória principal.


Memória secundária

São os componentes que provêm capacidade de armazenamento permanente (não voláteis).

 
Exemplos de dispositivos de armazenamento secundário são:

Discos Rígidos, Discos Óticos (CDs, DVDs, etc.) e Fitas.

Dessa forma, podemos considerar como hierarquia de memória a estrutura apresentada a seguir:

Classi cação Nome Nome Custo Volatilidade Velocidade


Muito
Registradores Bytes Volátil Maior
alto

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

Fonte: Adaptado pelo autor

 Atenção! Para visualização completa da tabela utilize a rolagem horizontal

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.

Mesmo sendo de baixa capacidade de


armazenamento, os registradores são
sempre construídos internamente no chip do
processador.
O que faz com que sua tecnologia de construção seja cara e não permita o uso de muitos registradores. Contudo, isso
permite que seu tempo de acesso seja compatível com a velocidade da CPU, entre 1 e 5 nanossegundos.

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.

Memória Cache feita no núcleo da CPU.

Portanto, a cache é uma memória criada


justamente para diminuir os “estados de
espera” entre CPU e memória principal, sendo
muito mais rápida do que a memória RAM e
com mais capacidade do que os
registradores.
Ela tem a função de armazenar temporariamente conteúdos muito requisitados e fornecer as informações para a CPU de
forma mais ágil, evitando que a memória principal tenha que ser consultada a todo momento, reduzindo a ociosidade da
CPU.

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.

Tipos de princípio da localidade

Princípio da localidade temporal

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.

Sendo assim, o princípio da localidade temporal tende a manter os dados e instruções


recentemente acessados.

Princípio da localidade espacial

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.

O conteúdo estará disponível na memória cache de imediato?

Logicamente, nem sempre, em uma consulta efetuada pela CPU, o conteúdo estará disponível na memória cache de
imediato.  

Sendo assim, existem duas possibilidades:

• 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.

Independente de cache miss ou cache hit,


dentro do processo de fabricação da
memória cache e suas metodologias de
gravação de dados, o índice de cache hit é
geralmente acima de 90%.
Isso nos mostra que, em boa parte do tempo, o equipamento atua pesquisando na memória cache.

Níveis de cache

Cache L1 (nível 1)

Pequena memória inserida internamente no processador, ou seja, encapsulada dentro do


núcleo de processamento.

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)

Em algumas arquiteturas, encontramos ainda o nível 3 na placa-mãe.


Em outras, dentro do processador. Porém, usada como cache compartilhada entre os núcleos
de um processador.

Foi criada originalmente pelo fabricante AMD.

Exemplo do processador Phenom II X3 da AMD

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.

• L1 Cache: 128KB (64KB Instrução + 64KB Dados) em cada Núcleo;


• L2 Cache: 512KB em cada Núcleo;
• L3 Cache: 6MB L3 (Compartilhado entre os núcleos).

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.

Se a CPU busca um determinado conteúdo, continua sendo referenciado o endereço da MP.

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?

O que seria ine ciente?

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.

Veja algumas formas desse mapeamento da cache:

Caches totalmente associativas

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.

Caches de mapeamento direto

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.

Caches associativas de conjunto

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? 

Existem três métodos conhecidos de substituição de dados na cache:

Substituição É escolhida uma posição qualquer da cache aleatoriamente para


Aleatória ser substituída.

First-in
Remove a linha que está mais tempo na cache.
First-out

Least Remove a via menos recentemente utilizada e a linha que a mais


tempo não é referenciada pelo CPU. Quando há um cache hit, um
Recently
contador é zerado para esta via, enquanto todos os demais tem
Used (LRU) seu contador incrementado.

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.

Políticas de escrita em cache na memória principal

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.

Sendo assim, existem políticas que efetuam esta atualização:

Write Through

Consiste em atualizar o valor em cache e na MP simultaneamente.

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.

Sobre isso, responda:

Quanto seu equipamento possui de memória cache?


Quais os tipos encontrados?

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

2 - Sobre memória cache, selecione a alternativa INCORRETA:

Há ocorrência de cache miss e cache hit.

Funciona como espelho da parte de memória principal.

Velocidade de acesso maior do que dos registradores.

Capacidade de armazenamento maior do que dos registradores.

Velocidade de acesso maior do que a da memória principal.

Justi cativa

3 - É considerada como uma memória secundária:

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.