Pular para o conteúdo principal

Aula 8 — Hierarquia de Memória

Apresentação​

A aula anterior terminou com uma pergunta em aberto: se memórias estáticas são mais rápidas e memórias dinâmicas são mais densas e baratas por bit, por que um computador não adota apenas uma dessas tecnologias? A resposta está na combinação de diferentes meios de armazenamento, cada qual ocupando um ponto distinto do compromisso entre velocidade, capacidade e custo. É essa combinação que esta aula sistematiza.

A ideia central tem um nome preciso: hierarquia de memória. Em vez de um único nível de memória, o computador empilha vários — do menor e mais rápido ao maior e mais lento —, e copia para os níveis de cima apenas a fração da informação que o processador está usando agora. Funciona porque programas reais não acessam a memória de forma aleatória: eles reutilizam o que já usaram e visitam posições vizinhas em sequência. Essa previsibilidade tem nome — localidade — e é ela que faz a hierarquia valer a pena.

Por que estudar isso em Organização de Computadores​

Porque o desempenho de um computador não depende apenas da velocidade do processador, mas também da capacidade de fornecer instruções e dados no ritmo em que são solicitados. Padrões de acesso sequencial e reutilização de um conjunto de dados tornam perceptível o efeito da hierarquia. Nas próximas unidades, os conceitos de acerto, falha e taxa de acerto permitirão explicar por que a memória cache existe e como seu desempenho é avaliado.

Objetivos​

Ao final desta aula você deve ser capaz de:

  • Explicar por que a diferença de velocidade entre processador e memória principal obriga à existência de uma hierarquia de memória.
  • Descrever os quatro níveis típicos da hierarquia — registradores, cache, memória principal e memória secundária — e o que cada um otimiza.
  • Definir acerto e falha, e relacionar cada um aos níveis da hierarquia.
  • Explicar a localidade temporal e a localidade espacial, e dar um exemplo de cada uma a partir do comportamento de um programa.
  • Calcular a taxa de acerto de um nível da hierarquia a partir do número de acertos e do total de acessos.
  • Calcular o tempo médio de acesso de um nível, a partir da taxa de acerto e dos tempos de acerto e de falha.

Conteúdo​

1. O problema: o descompasso entre processador e memória​

O cenário ideal — memória principal ilimitada e com tempo de acesso instantâneo — não existe na prática. Além disso, durante décadas, o desempenho dos processadores cresceu mais rapidamente do que a redução do tempo de acesso da memória principal, construída com DRAM, tecnologia mais densa e barata por bit que a SRAM, porém mais lenta.

A Figura 1 ilustra a ampliação histórica desse descompasso.

Gráfico de linhas com o eixo vertical em escala logarítmica, rotulado desempenho normalizado, indo de 1 a mais de 10 milhões, e o eixo horizontal com os anos de 1980 a 2020. Duas curvas partem do mesmo ponto próximo de 1980: a do processador sobe de forma quase reta em escala logarítmica, atingindo valores na casa dos milhões por volta de 2020; a da memória sobe muito mais devagar, terminando pouco acima de 100
Em escala logarítmica, o desempenho do processador cresce como uma reta íngreme; o da memória, como uma reta quase deitada — o vão entre as duas é o problema que a hierarquia resolve.

A consequência prática é a necessidade de estados de espera: ciclos de relógio em que o processador fica parado, aguardando que os dados ou instruções cheguem da memória.

Uma possibilidade seria substituir toda a memória dinâmica por memória estática, mais rápida. A Aula 7 mostrou por que essa opção não é economicamente viável: a célula SRAM ocupa mais área, apresenta menor densidade e tem custo por bit mais elevado.

A solução real, adotada por todo computador moderno, é combinar vários níveis de memória — de menor capacidade porém mais rápidos, perto do processador, a maior capacidade porém mais lentos, longe dele — e copiar para os níveis de cima apenas a informação mais relevante naquele momento.

Dois termos organizam o restante da aula:

  • Acerto (hit): a informação solicitada é encontrada no nível consultado.
  • Falha (miss): a informação não é encontrada no nível consultado e precisa ser obtida em um nível inferior, geralmente mais lento e de maior capacidade.

2. A pirâmide da hierarquia​

Os quatro níveis típicos, do topo (mais rápido, menor, mais caro) à base (mais lento, maior, mais barato):

A Figura 2 sintetiza os principais compromissos da hierarquia.

Pirâmide dividida em quatro faixas horizontais. De cima para baixo: Registradores, a faixa mais estreita no topo; Memória cache; Memória principal; e Memória secundária, a faixa mais larga na base. À esquerda da pirâmide, uma seta dupla rotulada tempo de acesso e capacidade aponta para baixo, crescendo; à direita, uma seta rotulada custo aponta para cima, crescendo em direção ao topo
Subindo a pirâmide, o tempo de acesso cai e o custo por byte sobe; descendo, a capacidade cresce e o custo cai.
NívelTecnologiaOrdem de capacidadeOrdem de latênciaGestão predominanteUnidade transferida
Registradorescircuitos no núcleo do processadorcentenas de bytes a poucos KiBfração de ns a poucos nscompilador e conjunto de instruçõesoperandos ou palavras
Memória cacheSRAMdezenas de KiB a dezenas de MiBpoucos ns a dezenas de nshardwarelinhas de cache, em geral com dezenas de bytes
Memória principalDRAMGiBdezenas a centenas de nscontrolador de memória; SO na memória virtualrajadas/blocos no acesso físico; páginas na memória virtual
Memória secundáriaFlash/SSD, disco magnético ou meio ópticocentenas de GiB a TiBdezenas de µs em SSDs a vários ms em discoscontrolador de E/S e sistema operacionalsetores e blocos; arquivos na interface do SO

Registradores. Internos ao processador e diretamente nomeados pelas instruções da arquitetura. O compilador procura manter neles os valores de uso imediato, embora o conjunto de instruções e o próprio programa também determinem quais registradores são acessados. As transferências envolvem operandos ou palavras, e não linhas de cache ou páginas.

Memória cache. Hoje construída na mesma pastilha do processador, entre os registradores e a memória principal, com tecnologia estática (SRAM). Movimentações entre cache e memória principal acontecem em quantidades fixas, chamadas linhas ou blocos, controladas por uma máquina de estados em hardware — sem intervenção do sistema operacional ou do compilador.

Memória principal. Construída predominantemente com DRAM — mais lenta que a SRAM, porém mais densa e barata por bit, como detalhado na Aula 7. No acesso físico entre cache e DRAM, o hardware transfere linhas por meio de rajadas. Quando a memória virtual precisa trazer dados do armazenamento secundário, o sistema operacional e o controlador de E/S movimentam páginas.

Memória secundária. É formada por dispositivos não voláteis, como SSDs, discos magnéticos e meios ópticos. Apresenta maior capacidade e menor custo por byte que os níveis superiores, mas suas latências variam amplamente: SSDs respondem em dezenas ou centenas de microssegundos, enquanto discos magnéticos podem exigir vários milissegundos. Na hierarquia apresentada, é o nível que preserva a informação sem alimentação.


3. Conceito de localidade​

Resta explicar por que copiar informações para os níveis superiores produz ganho de desempenho, embora a primeira busca tenha custo adicional. Programas tendem a executar novamente os mesmos trechos de código em intervalos curtos e a acessar em sequência posições de memória próximas. Essas propriedades são denominadas localidade temporal e localidade espacial.

Localidade temporal​

Durante a execução de um programa, posições de memória (dados ou instruções) já referenciadas tendem a ser referenciadas de novo em um curto intervalo de tempo.

  • É observada tipicamente em laços de instruções, no topo de pilhas, em variáveis acumuladoras e em contadores. Um vetor só apresenta localidade temporal quando seus mesmos elementos são reutilizados em curto intervalo.
  • É a propriedade que a memória cache mais depende para funcionar: se um dado é usado várias vezes seguidas, vale a pena mantê-lo copiado no nível rápido depois do primeiro acesso.

Localidade espacial​

Durante a execução de um programa, se uma posição de memória é referenciada, as posições vizinhas tendem a ser referenciadas logo em seguida.

  • É por isso que a informação é trazida da memória principal para a cache em blocos, e não palavra por palavra: o processador provavelmente vai precisar, em breve, dos dados ou instruções vizinhos ao que acabou de acessar.
  • Linhas de cache frequentemente têm 32, 64 ou 128 bytes. Páginas de memória virtual costumam ter alguns KiB, embora o tamanho dependa da arquitetura e da configuração do sistema.

Quando há localidade, o custo de trazer um bloco para um nível superior pode ser amortizado por acessos subsequentes mais rápidos. Quando o espaço se torna necessário, uma política de substituição escolhe qual bloco deve ser removido; blocos modificados podem precisar ser escritos no nível inferior antes da remoção.

Um exemplo concreto

Um laço que soma os elementos de um vetor de 100 posições ilustra as duas localidades ao mesmo tempo: a instrução do laço (a soma) é executada 100 vezes seguidas — localidade temporal —, enquanto os dados acessados a cada iteração são posições consecutivas do vetor — localidade espacial.


4. Métricas de eficiência​

Dois parâmetros medem quão bem um nível da hierarquia está cumprindo o seu papel.

Taxa de acerto​

A taxa de acerto (hh) é a razão entre o número de acessos atendidos pelo nível consultado e o número total de acessos a esse nível:

h=nuˊmero de acertosnuˊmero total de acessosh = \frac{\text{número de acertos}}{\text{número total de acessos}}

Quanto maior a taxa de acerto — e, por consequência, menor a taxa de falha —, menor tende a ser o tempo médio de acesso. A taxa depende do programa, do nível de cache, da política de substituição e do padrão de leituras e escritas. Isoladamente, porém, ela não informa quanto tempo custa uma falha.

Tempo médio de acesso​

O tempo médio de acesso (TmaT_{ma}) pode ser expresso de duas formas equivalentes. Se TfT_f representa o tempo total de um acesso que falha, então:

Tma=h×Ta+(1−h)×TfT_{ma} = h \times T_a + (1 - h) \times T_f

onde TaT_a é o tempo total de um acerto. Na forma mais comum da literatura, define-se a penalidade de falha PfP_f como o tempo adicional causado pela busca no nível inferior:

Tma=Ta+(1−h)×PfT_{ma} = T_a + (1 - h) \times P_f

As duas expressões são equivalentes quando Tf=Ta+PfT_f = T_a + P_f. Distinguir tempo total de falha e penalidade de falha evita contar o tempo de consulta ao nível atual duas vezes.

Exemplo resolvido: se Ta=10T_a = 10 ns, Tf=100T_f = 100 ns e h=90%h = 90\%:

Tma=0,90×10+(1−0,90)×100=9+10=19 nsT_{ma} = 0{,}90 \times 10 + (1 - 0{,}90) \times 100 = 9 + 10 = 19 \text{ ns}

Repare que, mesmo com 90% de acerto, o tempo médio (19 ns) é quase o dobro do tempo de um acerto isolado (10 ns) — os 10% de falhas, por custarem dez vezes mais, pesam desproporcionalmente na média. É esse efeito que torna a taxa de acerto tão sensível: cair de 90% para 80% de acerto, no mesmo exemplo, levaria o tempo médio a 28 ns, quase 50% pior.

Essa formulação pode ser aplicada recursivamente a vários níveis: a penalidade de falha de um nível inclui o acesso ao nível seguinte. Essa é a base da análise de hierarquias com múltiplos níveis de cache.


5. Para onde isso vai​

Com as Aulas 7 e 8, o subsistema de memória está completo: como uma memória é construída (célula, matriz, sinais de controle, tecnologias) e como várias memórias se combinam em sistema (hierarquia, localidade, métricas de eficiência).

  • Na Unidade 4 — CPU, os registradores do topo da pirâmide reaparecem como parte do caminho de dados, e o ciclo de busca-decodificação-execução vai depender diretamente do tempo de acesso à memória principal discutido aqui.
  • O conceito de acerto e falha, e a métrica de tempo médio de acesso, são exatamente o vocabulário usado para dimensionar e avaliar uma memória cache — o próximo refinamento natural desta hierarquia, quando a disciplina voltar ao tema.
  • A localidade espacial desta aula é o mesmo princípio que, nas Unidades 5 e 6, vai justificar por que buscar instruções em sequência da memória (em vez de saltos aleatórios) é o caso comum, e por que desvios de fluxo têm um custo de desempenho.

Exercícios (checkpoints)​

Verificação rápida​

Quiz5 questões

1. Por que um computador não constrói toda a sua memória com a tecnologia mais rápida disponível (memória estática)?

  • a)Porque memória estática é volátil e memória dinâmica não é
  • b)Porque memória estática tem capacidade de armazenamento muito menor e custo mais alto pelo mesmo espaço físico, o que tornaria o sistema inviável em escala
  • c)Porque memória estática não pode ser endereçada de forma aleatória
  • d)Porque o processador só consegue se comunicar com memória dinâmica
  • e)Porque memória estática exige refresh periódico, o que a tornaria mais lenta que a dinâmica

2. O que caracteriza uma falha (miss) em um nível da hierarquia de memória?

  • a)Um erro de hardware detectado por paridade
  • b)O conteúdo buscado não é encontrado naquele nível, sendo necessário buscá-lo em um nível mais baixo, mais lento
  • c)O processador tenta escrever em uma posição protegida contra escrita
  • d)O tempo de acesso excede o tempo de ciclo do processador
  • e)A taxa de acerto do nível cai abaixo de 50%

3. Um programa percorre um vetor de 1000 posições em um laço, somando seus elementos a cada iteração. Qual propriedade de localidade explica por que os elementos do vetor, uma vez trazidos para a cache em blocos, tendem a já estar disponíveis quando acessados na iteração seguinte?

  • a)Localidade temporal, porque o mesmo elemento é acessado repetidamente
  • b)Localidade espacial, porque elementos vizinhos do vetor são trazidos juntos em um mesmo bloco, e o laço os acessa em sequência
  • c)Localidade de instrução, porque o código do laço é pequeno
  • d)Localidade de registrador, porque o índice do laço fica em um registrador
  • e)Nenhuma das duas localidades se aplica a acessos a vetores

4. Em uma memória cache com taxa de acerto de 95%, tempo total de 2 ns em caso de acerto e tempo total de 40 ns em caso de falha, qual é o tempo médio de acesso?

  • a)2 ns
  • b)3,9 ns
  • c)21 ns
  • d)40 ns
  • e)38 ns

5. Qual nível da hierarquia é nomeado diretamente pelas instruções da arquitetura, em vez de ser preenchido automaticamente com linhas ou páginas?

  • a)Memória cache
  • b)Memória principal
  • c)Memória secundária
  • d)Registradores
  • e)Todas movimentam dados em blocos de tamanho fixo

Questões dissertativas​

Q1

Explique por que a hierarquia de memória funciona — ou seja, por que copiar dados para um nível mais rápido, antes de eles serem efetivamente necessários de novo, resulta em ganho de desempenho e não em desperdício de tempo.

Q2Difícil

Um professor afirma que 'aumentar a taxa de acerto de uma memória cache melhora proporcionalmente o desempenho do sistema'. Avalie essa afirmação com a fórmula do tempo médio de acesso e diferencie redução absoluta do tempo médio e ganho relativo de desempenho.

Q3

Descreva o que significa 'localidade espacial' e explique por que ela justifica que a memória cache traga blocos inteiros de dados da memória principal, em vez de trazer apenas a palavra individual que o processador pediu.


Referências​

Principais (essenciais)​

  • SILVA, Gabriel Pereira da; BORGES, José Antonio dos S. Arquitetura e organização de computadores: uma introdução. Rio de Janeiro: LTC, 2024. Recurso online — Acervo Virtual. Número de chamada: Ac.5063593
    • Capítulo 4, Seção 4.3 — Hierarquia de memória (texto de referência desta aula)

Aprofundamento (opcionais)​

  • STALLINGS, William. Arquitetura e organização de computadores. São Paulo: Pearson, 2024. Número de chamada: Ac.132127

    • Análise aprofundada de hierarquias com múltiplos níveis de cache e políticas de substituição
  • DELGADO, José. Arquitetura de computadores. Rio de Janeiro: LTC, 2017. Recurso online — Acervo Virtual. Número de chamada: Ac.5013563

    • O papel da hierarquia de memória no desempenho geral do sistema
  • WEBER, Raul Fernando. Fundamentos de arquitetura de computadores. Porto Alegre: Bookman, 2012. Número de chamada: 004.2 W375fuf Ac.113940

    • Discussão clássica de localidade de referência e desempenho de hierarquias de memória

Pré-requisito​