ELEMENTOS DO SISTEMA DE COMPUTAÇÃO

Cap. 4 — Sistema
de Memória

Prof. Clayton J A Silva · Base: Nota de Aula 4 (2021.2)

Objetivos do capítulo

Compreender o papel da memória no desempenho da arquitetura; distinguir características e tecnologias de armazenamento; interpretar capacidade, tempos e vazão; explicar a organização da MP e as operações de leitura e escrita em sistemas com cache.

4.1 • Elementos do sistema de computação

Da máquina de von Neumann aos gargalos de desempenho

A Figura 1 reapresenta a máquina IAS, referência para a arquitetura de von Neumann, cujo detalhamento foi apresentado nas primeiras sessões do curso. A CPU (do inglês, Central Processing Unit), simplesmente processador, contém a Unidade de Controle, os circuitos lógicos e aritméticos e registradores. A memória armazena as instruções do programa e os dados sobre os quais essas instruções operam.

Figura 1 – Máquina IAS. Reprodução da Figura 1 da Nota de Aula 4, Prof. Clayton J A Silva (2021.2).
Figura 1 – Máquina IAS. Reprodução da Figura 1 da Nota de Aula 4, Prof. Clayton J A Silva (2021.2).

Os elementos são interligados por caminhos de comunicação pelos quais trafegam endereços, dados e sinais de controle. Para executar uma instrução, o processador precisa buscar a instrução e, conforme a operação, ler ou escrever dados. Se esses elementos não atenderem à demanda na velocidade necessária, parte do tempo de execução será consumida pela espera. (Tanenbaum, 2007; Stallings, 2019).

Gargalo da máquina de von Neumann

O chamado gargalo de von Neumann é a limitação imposta à execução pela comunicação entre o processador e a memória que armazena instruções e dados. Backus descreve essa limitação como o estreito caminho pelo qual a informação precisa trafegar entre esses elementos. (Backus, 1978, seção 3, p. 615).

A latência dos acessos e a quantidade de informação transferida por unidade de tempo limitam o ritmo de processamento. No modelo clássico, instruções e dados disputam o caminho de acesso à memória. (Stallings, 2019).

Nos sistemas modernos, vários mecanismos reduzem essa limitação: caches, caminhos separados para instruções e dados em determinados níveis, múltiplos canais de memória e sobreposição de operações. Ainda assim, o processador pode solicitar dados mais rapidamente do que o sistema de memória consegue fornecê-los. A limitação depende também do programa executado, especialmente da sequência de endereços acessados. (Tanenbaum, 2007; Stallings, 2019).

Os capítulos seguintes do curso discutem as alterações no desempenho global do sistema a partir da análise do desempenho de cada um dos elementos apresentados na Figura 2 — processador, sistema de barramento, sistema de memória e dispositivos de entrada/saída —, considerando as mudanças tecnológicas em relação ao modelo simplificado estudado até aqui.

Figura 2 – Processador, sistema de barramento, sistema de memória e dispositivos de entrada/saída. Modelo simplificado para a análise do desempenho global.
Figura 2 – Processador, sistema de barramento, sistema de memória e dispositivos de entrada/saída. Modelo simplificado para a análise do desempenho global.

Referências conceituais: Tanenbaum (2007), Stallings (2019).

4.2 • Sistema de memória

Memória, operações e hierarquia

Memória é um dispositivo, ou um conjunto de dispositivos, destinado a armazenar informação na forma de bits. Os bits podem representar instruções, números, caracteres, endereços ou outras formas de dados. A finalidade do armazenamento e as condições de acesso determinam como cada dispositivo será empregado na arquitetura. (Tanenbaum, 2007; Stallings, 2019).

Na operação de leitura, o sistema seleciona uma posição e obtém a informação armazenada. Em termos lógicos, a leitura preserva a informação; em tecnologias como a DRAM, a leitura física exige que o circuito restaure a carga da célula. Na operação de escrita, o sistema seleciona uma posição e registra um novo valor, substituindo o valor anterior. Memórias programáveis não voláteis podem exigir procedimentos específicos de apagamento e programação. (Tanenbaum, 2007; Stallings, 2019).

As tecnologias de construção de dispositivos de memória são variadas. Não existe uma única tecnologia que ofereça, simultaneamente, grande capacidade, resposta muito rápida, persistência e baixo custo. Por essa razão, diversos tipos de tecnologia são empregados em um mesmo sistema de computação. (Tanenbaum, 2007; Stallings, 2019).

As principais medidas dos elementos de memória que orientam a alocação de diferentes tecnologias no computador são o tempo de operação de leitura ou escrita e a capacidade de armazenamento. Ao longo do tempo, a indústria desenvolveu tecnologias com características próprias de construção e operação, que oferecem diferentes combinações de velocidade, capacidade e custo de produção.

A comparação de custos deve considerar a unidade de informação armazenada: custo por bit, por Mbit ou por outra unidade de capacidade. De forma complementar, pode-se comparar a quantidade de informação armazenada por unidade monetária, expressa, por exemplo, em bit/$, indicando a moeda utilizada. Essas duas medidas são inversas: quanto menor o custo por bit, maior a capacidade de armazenamento obtida por unidade monetária.

O investimento no desenvolvimento dessas tecnologias permitiu obter memórias com diferentes velocidades e capacidades por unidade monetária. Algumas coexistem na arquitetura porque atendem a necessidades distintas; outras foram sendo substituídas à medida que surgiram alternativas mais eficientes para determinadas aplicações.

4.2.1 Hierarquia do sistema de memória

A estratégia de armazenamento pode ser estudada como um sistema hierárquico. A Figura 3 representa os quatro grupos utilizados na Nota 4: registradores, cache, memória principal ou primária e memória secundária. A cache pode, por sua vez, ser dividida em níveis. Em processadores atuais, L1 e L2 costumam estar integradas ao processador, e L3 também pode estar. A hierarquia expressa os níveis de acesso, não uma separação obrigatória entre componentes internos e externos. (Intel, 2015). (Tanenbaum, 2007; Stallings, 2019).

Figura 3 – Hierarquia do sistema de memória com registradores e caches integrados ao processador. A localização física depende da arquitetura.
Figura 3 – Hierarquia do sistema de memória com registradores e caches integrados ao processador. A localização física depende da arquitetura.

Quanto mais próximo do processador, em geral, menor é a capacidade de armazenamento, menor é o tempo de acesso e maior é o custo por bit. Quanto mais próximo da base, maior é a capacidade e menor é o custo por bit, com tempos de acesso maiores. Essas tendências orientam o projeto; a posição na hierarquia não determina, por si só, volatilidade ou tempo de retenção. (Tanenbaum, 2007; Stallings, 2019).

Cada uma das tecnologias alocadas na arquitetura compõe o sistema de memória. O papel que desempenha nesse sistema reflete a organização hierárquica. A alocação dessas tecnologias, por sua vez, influencia o desempenho e deve considerar o propósito principal do sistema computacional. O equilíbrio entre custo e benefício depende da aplicação. Em alguns projetos de arquitetura, é possível ampliar ou ajustar, até certo limite, a alocação de tecnologias para acomodar a evolução do uso. As camadas hierárquicas, conforme o papel que desempenham, são:

O papel é uma classificação funcional. As caches também podem estar fisicamente dentro do processador; isso não as transforma em registradores. A Figura 4 apresenta as quatro camadas e suas funções na arquitetura. (Tanenbaum, 2007; Stallings, 2019).

Figura 4 – As camadas de memória e sua função na arquitetura.
Figura 4 – As camadas de memória e sua função na arquitetura.

4.2.2 Tecnologias empregadas nas camadas

Historicamente, a evolução dos elementos de memória semicondutora pode ser estudada a partir de duas famílias: memórias ROM (do inglês, Read Only Memory) e memórias RAM (do inglês, Random Access Memory). Na seção 4.4, discutiremos o significado dessas denominações e as características das tecnologias de cada família.

A árvore tradicional da Nota 4 distingue essas duas famílias históricas. Na família ROM, o desenvolvimento de PROM, EPROM, EEPROM e flash ampliou as possibilidades de programação. Na família RAM de trabalho, SRAM e DRAM coexistem; entre os desdobramentos da DRAM encontram-se tecnologias históricas como FPM, EDO e BEDO, além da SDRAM e das gerações DDR. Essas tecnologias não formam uma sequência em que cada uma substitui integralmente a anterior: sua utilização depende da aplicação e do equilíbrio entre capacidade, velocidade, consumo, custo e retenção. (Tanenbaum, 2007; Stallings, 2019).

Figura 5 – Famílias históricas de memórias semicondutoras. A organização agrupa tecnologias; não representa uma sequência de substituição integral.
Figura 5 – Famílias históricas de memórias semicondutoras. A organização agrupa tecnologias; não representa uma sequência de substituição integral.

Na arquitetura, a escolha dessas tecnologias está associada à função de cada camada. A Figura 6 sintetiza os exemplos consagrados; o significado das siglas e os mecanismos de funcionamento serão desenvolvidos na seção 4.4.

Registradores: são construídos com circuitos semicondutores CMOS e oferecem armazenamento diretamente utilizado nas operações do processador. (Tanenbaum, 2007; Stallings, 2019).

Memória cache: emprega tipicamente SRAM (Static RAM), adequada ao atendimento rápido dos acessos a instruções e dados. (Tanenbaum, 2007; Stallings, 2019).

Memória principal ou primária (MP): emprega tipicamente DRAM (Dynamic RAM), combinando capacidade e custo para armazenar os programas e dados em execução. (Tanenbaum, 2007; Stallings, 2019).

Memória secundária (MS): utiliza dispositivos como SSDs e HDDs para manter programas e dados entre utilizações do sistema. Outras aplicações também utilizam fitas magnéticas e discos ópticos. (Tanenbaum, 2007; Stallings, 2019).

Figura 6 – Tecnologias consagradas nas camadas do sistema de memória.
Figura 6 – Tecnologias consagradas nas camadas do sistema de memória.

A evolução da DRAM inclui as memórias DDR SDRAM, amplamente utilizadas como memória principal. DDR significa Double Data Rate. Os SSDs, do inglês Solid State Drives (unidades de estado sólido), utilizam tipicamente memória flash NAND para armazenar a informação. Os mecanismos de operação dessas tecnologias serão explicados na seção 4.4. (Kingston, glossário; Kingston, KC3000).

Nos computadores de uso geral considerados neste capítulo, as tecnologias consagradas para a memória principal, como a DRAM e suas gerações DDR, são voláteis: perdem os dados quando deixam de receber alimentação. As tecnologias consagradas para a memória secundária, como a flash NAND dos SSDs e os meios magnéticos dos HDDs, são não voláteis: conservam a informação sem alimentação, nas condições de retenção especificadas. A classificação expressa o uso predominante dessas tecnologias; a função de uma camada não determina, por si só, sua volatilidade. (Tanenbaum, 2007; Stallings, 2019).

Memória flash de inicialização do sistema

Ao ligar o computador, é necessário executar instruções que preparem o hardware antes que o sistema operacional seja carregado. Em muitos computadores, esse firmware de inicialização, associado ao BIOS/UEFI, fica armazenado em uma memória flash NOR na placa do sistema. Por ser não volátil, ela preserva o código mesmo com o equipamento desligado; por ser reprogramável, permite atualizações do firmware. Nas etapas de inicialização, o firmware prepara a memória principal e os demais recursos necessários para que o processo de boot possa prosseguir. Essa flash tem a função de armazenar firmware e não substitui a DRAM utilizada como memória de trabalho dos programas. (Intel, 2018, pp. 12–15 e 39).

4.3 • Parâmetros de desempenho

Capacidade, tempos, vazão e custo

4.3.1 Capacidade de armazenamento

A capacidade é a quantidade total de informação que o dispositivo pode armazenar. Pode ser expressa em bits ou bytes e em seus múltiplos. Um bit admite dois valores, 0 e 1; um byte (B) corresponde a 8 bits. Deve-se distinguir B, byte, de bit ou b, quando este símbolo é empregado para bit. (Tanenbaum, 2007; Stallings, 2019).

Os símbolos K, M, G e T aparecem frequentemente no material técnico. Para evitar ambiguidade, os múltiplos decimais e binários serão explicitamente diferenciados:

Tabela 1 – Unidades de capacidade; convenção NIST/IEC.
OrdemMúltiplo decimal de bytesMúltiplo binário de bytes
quilo / kibi1 kB = 10³ B = 1 000 B1 KiB = 2¹⁰ B = 1 024 B
mega / mebi1 MB = 10⁶ B1 MiB = 2²⁰ B
giga / gibi1 GB = 10⁹ B1 GiB = 2³⁰ B
tera / tebi1 TB = 10¹² B1 TiB = 2⁴⁰ B
peta / pebi1 PB = 10¹⁵ B1 PiB = 2⁵⁰ B
exa / exbi1 EB = 10¹⁸ B1 EiB = 2⁶⁰ B

Assim, a expressão tradicional “1 KB = 2¹⁰ bytes”, usada na nota, será escrita aqui como 1 KiB = 2¹⁰ B. Um dispositivo anunciado como 1 TB possui 10¹² bytes, aproximadamente 0,909 TiB, antes das reservas e da formatação. Fonte: NIST – prefixos binários.

4.3.2 Tempo de acesso (ou de resposta), ciclo e latência

O tempo de acesso (tA), também chamado aqui de tempo de resposta, é o intervalo entre as condições que iniciam um acesso e o evento adotado para indicar o seu atendimento. Esse conceito se aplica tanto à leitura quanto à escrita; os eventos de início e de término devem ser definidos para cada operação. (Tanenbaum, 2007; Stallings, 2019).

Na leitura, o intervalo é contado, neste modelo, desde a apresentação de um endereço válido e da requisição de leitura até a disponibilização do dado válido no barramento de dados. Na escrita, conta-se desde que endereço, dado de entrada e comando de escrita atendem às condições exigidas até que a memória aceite ou conclua a gravação, conforme o evento definido pela interface. Nesse caso, o dado é fornecido à memória: não se espera que ela devolva um dado no barramento para concluir a operação.

Os tempos de leitura e escrita podem ser diferentes. A especificação do dispositivo define a duração mínima do comando de escrita e por quanto tempo endereço e dado precisam permanecer estáveis antes e depois do evento de gravação. Um sinal de aceitação também não significa, em toda arquitetura, que o conteúdo já foi gravado fisicamente; por isso, a medida deve declarar o evento usado como término. (Infineon, temporização de escrita em SRAM; Stallings, 2019).

O tempo de ciclo (tC) é o menor intervalo admitido entre o início de duas operações sucessivas de acesso à memória. No modelo simples da Nota 4, após disponibilizar o dado, a memória necessita de um intervalo de recuperação (tS) até poder iniciar outro acesso. Assim:

tC = tA + tS

A relação descreve uma operação sem sobreposição de acessos. A recuperação depende da tecnologia; por essa razão, tempo de acesso e tempo de ciclo não são necessariamente iguais. (Stallings, 2019).

A latência é o tempo decorrido entre a requisição e o seu atendimento. Considere que o processador requisita um dado para armazená-lo em um registrador: se o atendimento for considerado concluído quando o dado for efetivamente armazenado, a latência inclui o acesso à memória, a transferência e o recebimento pelo processador. Portanto, pode ser maior que o tempo de acesso da memória. (Stallings, 2019; Intel, manual de otimização).

A medida de latência pode variar conforme o evento adotado para indicar que a requisição foi atendida. Se esse evento for a disponibilização do dado válido no barramento, ela coincide com o tempo de acesso; se for o recebimento completo pelo processador, inclui também o tempo necessário para concluir esse recebimento. Latência não é sinônimo de tempo de ciclo.

A Figura 7 apresenta um diagrama de temporização que evidencia as medidas de tempo de uma operação de leitura, considerando os sinais disponibilizados no barramento. Os barramentos de endereços e de dados são múltiplos: cada um reúne várias linhas que transportam bits em paralelo. Nesta figura, o barramento de endereços possui n bits, indicados por A[n−1:0], e o barramento de dados possui m bits, indicados por D[m−1:0]. As faixas com duas linhas e cruzamentos representam os valores de cada conjunto de bits; não representam dois sinais isolados. Para uma escrita, o sentido de fornecimento dos dados e o evento de término são os descritos acima.

Figura 7 – Leitura com endereços de n bits e dados de m bits; tempo de acesso tA, recuperação tS e ciclo tC. A validade do dado começa na marca de tA, junto à transição da faixa.
Figura 7 – Leitura com endereços de n bits e dados de m bits; tempo de acesso tA, recuperação tS e ciclo tC. A validade do dado começa na marca de tA, junto à transição da faixa.

4.3.3 Vazão e largura do barramento de dados

A vazão é a quantidade de informação transferida por unidade de tempo. O barramento de dados possui um conjunto de m linhas que transportam m bits simultaneamente, como representado na Figura 7. Se ele transfere m bits em um acesso que consome tA segundos, a vazão pode ser estimada, de forma simplificada, por:

v ≈ largura do barramento de dados / tempo de acesso
v ≈ m / tA   [bit/s]

Por exemplo, um barramento de dados de m = 32 bits e um tempo de acesso de 10 ns resultam em v ≈ 32/(10 × 10−9) = 3,2 × 109 bit/s, ou 400 MB/s. Os valores desse exemplo são didáticos.

O barramento de endereços seleciona a posição da memória; o barramento de dados transporta a informação. É a largura m do segundo que entra no cálculo da vazão; a largura n do barramento de endereços não entra nesse numerador. A estimativa acima considera uma transferência por acesso e desconsidera recuperação e outros intervalos. Se cada transferência exigir um ciclo completo, utiliza-se tC no denominador. O desempenho real depende da organização e do funcionamento da memória. (Stallings, 2019).

4.3.4 Custo por unidade de informação

O custo deve ser comparado por unidade de informação armazenada: custo por bit, por MiB, por GB etc. Se um dispositivo custa P e oferece capacidade Q, o custo unitário é P/Q. Por exemplo, em uma cotação hipotética, R$ 400 por 1 TB resultam em R$ 0,40/GB. A moeda, a data e a convenção de capacidade precisam ser informadas. (Tanenbaum, 2007; Stallings, 2019).

As tecnologias mais rápidas normalmente ocupam mais área de circuito por bit e oferecem menor capacidade pelo mesmo custo. A hierarquia combina uma pequena quantidade de memória rápida com uma grande quantidade de memória de menor custo por bit. Cache e registradores integrados não costumam ter preço de compra isolado: seu custo está associado à área de silício e ao projeto do processador. (Tanenbaum, 2007; Stallings, 2019).

Conceitos: Stallings (2019), Tanenbaum (2007). Especificações: Kingston. Medição em CPUs: Intel – manual de otimização.

4.4 • Tecnologias de construção

Características tecnológicas dos dispositivos

As características dos tipos de memória dependem fortemente da tecnologia de construção. Os critérios seguintes são independentes: uma memória pode ser, ao mesmo tempo, semicondutora, não volátil e de acesso aleatório para leitura.

4.4.1 Tipo de acesso

No acesso aleatório, é possível selecionar uma posição pelo endereço sem ler previamente as posições anteriores. No modelo básico, o tempo independe da posição. Isso não garante um tempo efetivamente idêntico em sistemas modernos: bancos, linhas abertas, filas e caches podem alterar a resposta. (Tanenbaum, 2007; Stallings, 2019).

No acesso sequencial, os dados são alcançados percorrendo uma sequência, como ocorre na fita magnética. HDDs e discos ópticos utilizam acesso direto a blocos: o mecanismo posiciona-se na região desejada e transfere o bloco, com tempo variável. SSDs oferecem acesso direto a blocos ao sistema, sem posicionamento mecânico. Essa interface não deve ser confundida com a seleção de uma célula RAM por endereço. (Tanenbaum, 2007; Stallings, 2019).

4.4.2 Volatilidade

Uma memória volátil perde a informação armazenada quando deixa de receber alimentação suficiente. Uma memória não volátil retém a informação sem alimentação, dentro das condições e do prazo de retenção especificados. SRAM e DRAM convencionais são voláteis; ROM, EEPROM, flash e meios magnéticos são não voláteis. (Tanenbaum, 2007; Stallings, 2019).

RAM significa Random Access Memory, ou memória de acesso aleatório. O nome descreve a forma de acesso, não a volatilidade. Existem memórias RAM não voláteis, como tecnologias MRAM e FRAM, além de dispositivos que combinam SRAM com armazenamento de respaldo. (Tanenbaum, 2007; Stallings, 2019).

4.4.3 Refresh: memória estática e dinâmica

Uma SRAM mantém o estado em circuitos biestáveis enquanto houver alimentação; não necessita de refresh periódico. Uma DRAM representa os bits por carga elétrica em células que perdem carga ao longo do tempo. O controlador e os circuitos internos realizam periodicamente o refresh, restaurando a informação. “Estática” não significa não volátil: a SRAM também perde os dados sem alimentação. (Tanenbaum, 2007; Stallings, 2019).

Uma forma simples de visualizar a DRAM é considerar uma célula capacitiva: um transistor de acesso permite transferir carga para um pequeno capacitor ou retirá-la dele. Neste exemplo didático, o bit 1 é associado ao capacitor carregado. O carregamento exige um intervalo de tempo; depois que o acesso é desativado, correntes de fuga reduzem gradualmente a carga armazenada e a tensão da célula.

A Figura 8 mostra esse comportamento. A curva sobe durante a carga inicial e desce lentamente durante a perda de carga. Antes que alcance o limiar de referência indicado, ocorre um refresh, que lê e restaura o estado armazenado. A sequência se repete para preservar a informação. A linha tracejada mostra o que aconteceria sem essa restauração. Para o bit 0, os circuitos preservam o estado correspondente; o refresh não transforma todas as células em 1. (Tanenbaum, 2007; Stallings, 2019).

Figura 8 – Modelo ilustrativo de uma célula capacitiva armazenando o bit 1: carga, perda gradual de carga e restauração por refresh antes do limiar de referência. Curvas e tempos não estão em escala física.
Figura 8 – Modelo ilustrativo de uma célula capacitiva armazenando o bit 1: carga, perda gradual de carga e restauração por refresh antes do limiar de referência. Curvas e tempos não estão em escala física.

O gráfico simplifica a operação para evidenciar o papel da carga e do tempo: o limiar não é uma especificação de um dispositivo real, e os intervalos de carga e descarga foram ampliados para facilitar a visualização. Em uma DRAM real, amplificadores de detecção e os circuitos de controle recuperam o estado de cada célula e o restauram. Por isso, a memória dinâmica precisa de refresh periódico mesmo enquanto o computador permanece ligado.

4.4.4 Controle síncrono e assíncrono

Na memória assíncrona, os tempos são definidos em relação às mudanças dos endereços e dos sinais de controle, sem depender de um clock comum para receber cada comando. Na memória síncrona, os comandos são recebidos em relação a um clock; a transferência de dados segue a temporização definida pela interface, podendo usar sinais de strobe. (Tanenbaum, 2007; Stallings, 2019).

A SDRAM é uma DRAM síncrona. Ela continua necessitando de comandos e sinais de controle, como seleção, leitura, escrita, ativação e refresh. A sincronização não elimina esses sinais. DDR SDRAM transfere dados nas duas bordas do sinal de temporização; isso não significa que todo comando ou operação interna ocorre duas vezes por ciclo. (Tanenbaum, 2007; Stallings, 2019).

4.4.5 Material e construção

Memórias de estado sólido não utilizam partes mecânicas móveis para acessar a informação. SRAM, DRAM e flash são exemplos semicondutores. MOS significa metal–oxide–semiconductor; CMOS emprega transistores MOS complementares. Esses termos descrevem estruturas e processos de circuito, não camadas da hierarquia. (Tanenbaum, 2007; Stallings, 2019).

Nos meios magnéticos, a informação é representada por estados de magnetização, como em HDDs e fitas. Nos meios ópticos, é representada por propriedades do meio lidas por luz, como em CDs, DVDs e Blu-ray. Estado sólido e semicondutor não são categorias opostas: um SSD é simultaneamente de estado sólido e baseado em memória semicondutora. (Tanenbaum, 2007; Stallings, 2019).

4.4.6 Memórias RAM e ROM: leitura, escrita e aplicações

Memórias RAM e transferência DDR

Nas memórias RAM de leitura e escrita, a posição é selecionada pelo endereço e o conteúdo pode ser consultado ou atualizado nas condições de operação do dispositivo. SRAM e DRAM são exemplos empregados, respectivamente, em caches e na memória principal de computadores de uso geral. (Tanenbaum, 2007; Stallings, 2019).

Na família RAM de trabalho, SRAM e DRAM coexistem. As DRAMs FPM, EDO e BEDO têm interesse histórico; a SDRAM e suas gerações DDR ampliaram o desempenho e organizaram a comunicação síncrona. O emprego depende do compromisso entre capacidade, velocidade, consumo, custo e retenção. (Tanenbaum, 2007; Stallings, 2019).

Na DDR SDRAM, DDR significa Double Data Rate. Em termos simples, a interface transfere dados tanto na borda de subida quanto na borda de descida do sinal de temporização. Assim, para um período T, podem ocorrer duas transferências de m bits, em vez de uma, como na SDR. Mantidas a mesma frequência f = 1/T e a mesma largura m, o pico ideal passa de m × f para 2 × m × f bits por segundo. A Figura 9 ilustra apenas esse princípio. (Kingston, glossário).

Figura 9 – Princípio da DDR: duas transferências de dados por período, uma em cada borda. Comparação com SDR na mesma frequência; representação simplificada de uma rajada, sem latência inicial.
Figura 9 – Princípio da DDR: duas transferências de dados por período, uma em cada borda. Comparação com SDR na mesma frequência; representação simplificada de uma rajada, sem latência inicial.

A DDR aumenta a taxa de transferência da interface; ela não reduz automaticamente à metade o tempo de acesso à célula nem duplica a execução de todos os comandos internos. Na transferência real, os dados são temporizados por sinais de strobe, e a vazão efetiva também depende da latência, das rajadas, das pausas e do controle da memória. A expressão 2 × m × f descreve o pico durante a transferência contínua e complementa o modelo de um acesso isolado da seção 4.3.3.

Memórias ROM e programação

Memória somente de leitura, ROM (Read Only Memory), é destinada à leitura durante o uso normal. Na ROM de máscara, o conteúdo é definido na fabricação. PROM, EPROM, EEPROM e flash permitem programação sob condições específicas; apagar ou programar não equivale necessariamente a uma escrita RAM comum. (Tanenbaum, 2007; Stallings, 2019).

A evolução da família ROM ampliou as possibilidades de programação: a PROM pode ser programada uma vez; a EPROM pode ser apagada por radiação ultravioleta; a EEPROM admite apagamento elétrico; e a flash opera com apagamento em blocos. Essas tecnologias coexistem e não constituem uma sequência em que cada uma substituiu integralmente a anterior. (Tanenbaum, 2007; Stallings, 2019).

Aplicações das famílias de memória

A Tabela 2 reúne as famílias discutidas nesta seção. A aplicação depende tanto da possibilidade de leitura, escrita e programação quanto da retenção dos dados e dos requisitos de desempenho; o nome RAM, por si só, descreve a forma de acesso, e não a volatilidade.

Tabela 2 – Aplicações das famílias de memória.
TecnologiaProgramação / apagamentoEmprego típico
ROM de máscaraDefinida na fabricação; não reprogramávelCódigo ou tabelas fixos em produtos de grande volume
PROM / OTPProgramação únicaIdentificação, configuração permanente e firmware fixo
EPROMApagamento por UV e nova programaçãoEquipamentos legados e desenvolvimento histórico
EEPROMApagamento/programação elétricos, frequentemente por byte ou páginaConfiguração, calibração, identificação e pequenos dados persistentes
Flash NORProgramação por unidades/páginas; apagamento por setores/blocosFirmware e boot; execução direta quando a interface permite
Flash NANDLeitura/programação por páginas; apagamento por blocosSSD, eMMC/UFS e cartões; grande volume de dados
SRAMLeitura/escrita; sem refreshCache de CPU, buffers e RAM interna em microcontroladores
DRAM / SDRAM / DDRLeitura/escrita; com refreshMemória de trabalho de computadores e aceleradores

Firmware é o software que controla funções do equipamento e sua inicialização. Um bootloader prepara ou carrega etapas posteriores, inclusive o sistema operacional. Tabelas de dados, conversores de códigos e geradores de funções podem ser implementados por conteúdo persistente, conforme a aplicação. Em muitos sistemas essas funções são armazenadas em flash e podem ser atualizadas. (Tanenbaum, 2007; Stallings, 2019).

Referências: Tanenbaum (2007), Stallings (2019), Microchip – produtos de memória e EEPROM, Microchip – EERAM.

4.5 • Comparação das tecnologias

Tabelas de características e desempenho

As tabelas seguintes apresentam características, aplicações e exemplos de especificações de dispositivos de memória. As fontes estão identificadas junto de cada tabela. As especificações foram consultadas em 7 de outubro de 2026; os produtos são exemplos documentados, não um inventário de todas as tecnologias existentes.

4.5.1 Características por camada

Tabela 3 – Características tecnológicas por camada.
Camada / dispositivoAcessoVolatilidadeRefreshControle / interfaceMaterial / leitura e escrita
RegistradoresSeleção direta pelo circuito/ISAVolátilNão periódicoTipicamente síncrono ao núcleoSemicondutor CMOS; leitura/escrita
Cache L1, L2 e L3Endereço + consulta de tagsVolátilNão periódico na SRAMCircuitos integrados ao processador; tipicamente síncronosTipicamente SRAM; leitura/escrita
MP em DDR SDRAMAleatório endereçado; organização em bancosVolátilSimSíncrono, com comandos e strobesDRAM semicondutora; leitura/escrita
SSDDireto a blocos lógicosNão volátilSem refresh periódico de DRAM para reter a NANDSATA ou PCIe/NVMe; depende do dispositivoNAND flash; leitura/programação/apagamento
HDDDireto a blocos; posicionamento mecânicoNão volátilNãoControlador e interface de armazenamentoMeio magnético; leitura/escrita
Fita magnéticaSequencial; busca exige percursoNão volátilNãoControlador da unidadeMeio magnético; leitura/escrita ou WORM
Disco ópticoDireto a setores; posicionamentoNão volátilNãoControlador da unidadeMeio óptico; somente leitura, gravável ou regravável, conforme o disco

A necessidade de refresh da célula DRAM é diferente da manutenção de dados de um SSD. Um SSD pode realizar correção de erros, remapeamento e regravações internas; isso não o classifica como DRAM dinâmica. Dispositivos de armazenamento possuem interfaces e controladores próprios: “síncrono/assíncrono” não deve ser atribuído a toda a camada como se fosse uma única célula de memória.

Fontes: Stallings, Intel, Kingston, Samsung 870 EVO, Seagate Exos X24, IBM LTO-9.

4.5.2 Capacidade e parâmetros de desempenho

Capacidade e tempo dependem do modelo e do ponto de medição. Em vez de atribuir um único tempo “típico” a uma tecnologia inteira, a Tabela 4 separa os parâmetros documentados. Tempo de acesso, ciclo, CAS latency e vazão não são medidas intercambiáveis.

Tabela 4 – Exemplos documentados de capacidade e desempenho.
Dispositivo / exemploCapacidade documentadaParâmetro de desempenhoCusto por unidade
Registradores de CPUDepende da ISA e da implementaçãoAcesso interno; não há tempo único em ns para todas as CPUsMuito alto em área por bit; sem preço avulso usual
Caches Ryzen 9 9950XL1: 1 280 KB; L2: 16 MB; L3: 64 MB (totais anunciados)A latência exige caracterizar cada nível e a microarquitetura; capacidade não determina ciclosAlto em área por bit; parte do processador
SRAM assíncrona Infineon CY7C10612G30-10ZSXI16 Mbit, organização 1M × 16tAA = 10 ns; tRC = 10 ns, conforme especificaçãoCotação por bit/MiB; não é a SRAM interna de uma CPU
DDR5 Kingston KVR56U46BS8K2-32Kit 32 GB, 2 módulos de 16 GB5 600 MT/s; CL46 ≈ 16,4 ns; tRC ≥ 48 ns; pico agregado 44,8 GB/s por módulo de 64 bitsCotação por GB/GiB do kit
SSD SATA Samsung 870 EVO, 1 TB1 TB decimalLeitura/escrita sequencial até 560/530 MB/s; leitura aleatória QD1 até 13 000 IOPSCotação por GB; incluir modelo e capacidade
SSD NVMe Samsung 990 PRO, 1 TB1 TB decimalLeitura/escrita sequencial até 7 450/6 900 MB/sCotação por GB; incluir modelo e capacidade
HDD Seagate Exos X24Exemplo de 24 TB decimaisTransferência sustentada até 285 MB/s no diâmetro externoBaixo por GB em grandes capacidades, em geral
Fita LTO-9 em unidade IBM18 TB nativos por cartuchoTransferência nativa até 400 MB/s; busca depende do posicionamentoCusto da mídia por TB + unidade e biblioteca

Fontes por linha: AMD Ryzen 9 9950X, Infineon SRAM, Kingston DDR5, Samsung 870 EVO, Samsung 990 PRO, Seagate Exos X24, IBM LTO-9. KB/MB dos fabricantes de CPU foram mantidos como anunciados. No cálculo didático de campos de endereço, utilizam-se explicitamente potências de dois.

Os números de SSD são máximos declarados nas condições de teste do fabricante; não representam a latência de toda leitura individual. QD é a profundidade de fila. Não se deve converter IOPS com fila elevada em latência usando apenas 1/IOPS: há operações simultâneas. No caso de fila unitária, 1/IOPS aproxima o tempo médio por operação do teste, mas ainda não é o tempo físico de acesso a uma célula NAND.

Valores monetários fixos foram substituídos pelo critério de custo. Uma comparação de preços precisa de cotações na mesma moeda, data, região e unidade de capacidade. O custo relativo é uma tendência; durabilidade, interface, garantia e requisitos da aplicação também influenciam a escolha.

4.5.3 Comparação SSD SATA e SSD NVMe

Tabela 5 – Comparação de dois SSDs de mesma capacidade.
AtributoSamsung 870 EVO • 1 TBSamsung 990 PRO • 1 TB
Formato físico2,5 polegadasM.2 2280
Interface e protocoloSATA 6 Gb/s; normalmente AHCI no controlador do sistemaPCIe 4.0 ×4; NVMe
Memória de armazenamentoV-NAND, 3 bits por célula (TLC)V-NAND, 3 bits por célula (TLC)
Leitura sequencial, até560 MB/s7 450 MB/s
Escrita sequencial, até530 MB/s6 900 MB/s
Endurance declarada para 1 TB600 TBW600 TBW
Garantia limitada5 anos ou limite TBW, o que ocorrer primeiro5 anos ou limite TBW, o que ocorrer primeiro
Emprego típicoAtualização de equipamentos com SATA; armazenamento de uso geralArmazenamento com maior demanda de vazão em sistemas PCIe/NVMe

M.2 é formato físico; NVMe é protocolo. Existem dispositivos M.2 SATA. PCIe é a interconexão utilizada pelo exemplo NVMe. TBW é a quantidade total de bytes escritos indicada na especificação de endurance, não o número de regravações de cada célula. A comparação usa a versão de 1 TB de ambos os produtos.

Fontes: datasheet Samsung 870 EVO e especificações Samsung 990 PRO de 1 TB.

4.5.4 Memórias não voláteis além das camadas de trabalho

Tabela 6 – Memórias não voláteis e suas aplicações.
TecnologiaAcesso / retençãoAtualizaçãoRefresh / interfaceEmprego
ROM de máscara / PROMEndereçado para leitura; não volátilNenhuma / programação únicaSem refresh; interface depende do circuitoCódigo e dados permanentes
EPROMEndereçado para leitura; não volátilApagamento UV; reprogramávelSem refresh; tradicionalmente paralela assíncronaSistemas legados
EEPROMEndereçado; não volátilElétrica, por byte/página conforme o componenteSem refresh de DRAM; serial ou paralelaParâmetros persistentes e calibração
Flash NOREndereçado; não volátilProgramação e apagamento por setores/blocosSem refresh de DRAM; serial ou paralelaFirmware, boot e código
Flash NANDPáginas e blocos; não volátilProgramação por páginas; apagamento por blocosControlador gerencia ECC e blocos defeituososArmazenamento de massa
EERAMSRAM de trabalho com respaldo não volátilEscrita SRAM; salvamento e recuperação do conteúdoSem refresh SRAM; cópia ao respaldo exige energia de suporteRegistro de dados que devem sobreviver à falta de alimentação

Fontes: Microchip – portfólio e características de memória, Microchip – EERAM.

4.6 • Memória principal

Memória principal ou primária: organização da MP

A memória principal armazena os programas, constituídos por sequências de instruções, e os dados empregados durante a execução. As instruções compreendem o código da operação, chamado de opcode, e campos adicionais definidos pelo conjunto de instruções do processador. Os formatos e os tamanhos variam entre arquiteturas. (Tanenbaum, 2007; Stallings, 2019).

A MP pode ser compreendida como um conjunto de posições endereçáveis, cada uma armazenando N bits. Se existem L bits de endereço, podem ser selecionadas 2L posições, na faixa de 0 a 2L − 1. A capacidade do dispositivo será 2L × N bits. Uma célula física armazena um bit; uma posição endereçável reúne uma ou mais células. Em muitas arquiteturas, o endereço do sistema seleciona um byte; o tamanho da palavra da CPU pode ser maior. (Tanenbaum, 2007; Stallings, 2019).

A capacidade endereçável não é necessariamente a capacidade instalada. Além disso, largura do endereço, largura dos dados do chip e tamanho de instrução são atributos diferentes. O ATmega2560 citado na nota possui organização Harvard, com espaços de programa e dados distintos; não se deve calcular sua capacidade real como se fosse uma MP unificada de palavras de 32 bits. O exemplo a seguir permite estudar a organização sem misturar essas propriedades. Fonte: datasheet Microchip ATmega2560.

4.6.1 Exemplo: memória Motorola MCM2114

Seja a SRAM histórica Motorola MCM2114, utilizada na Nota 4 e no slide de pinagem. Possui 1 024 posições de 4 bits, totalizando 4 096 bits, ou 512 bytes de capacidade. O exemplo é de uma SRAM assíncrona; a memória de trabalho de computadores atuais emprega normalmente DRAM e interfaces mais complexas.

Figura 10 – Exemplares reais do MCM2114 e sua pinagem DIP-18, vista superior. DQ1–DQ4 são as linhas de entrada/saída de dados.
Figura 10 – Exemplares reais do MCM2114 e sua pinagem DIP-18, vista superior. DQ1–DQ4 são as linhas de entrada/saída de dados. Fotografia: Trio3D / Wikimedia Commons, CC BY-SA 3.0, sem alterações. Diagrama de pinagem redesenhado conforme o manual da Motorola.
Tabela 7 – Identificação dos pinos da MCM2114, conforme o manual da Motorola.
PinosFunção
A₀ a A₉A0: pino 5; A1: 6; A2: 7; A3: 4; A4: 3; A5: 2; A6: 1; A7: 17; A8: 16; A9: 15. Recebem os 10 bits do endereço. A₀ é o menos significativo; A₉, o mais significativo. Selecionam 000H a 3FFH, isto é, 0 a 1 023.
I/O₁ a I/O₄DQ1/I/O1: pino 14; DQ2/I/O2: 13; DQ3/I/O3: 12; DQ4/I/O4: 11. Quatro linhas bidirecionais de dados: saída na leitura, entrada na escrita.
VccPino 18. Alimentação positiva de +5 V nominal.
VssPino 9. Referência de potencial, terra (0 V).
/W ou W̅Pino 10. Write enable ativo em zero: /W = 0 seleciona escrita; /W = 1 permite leitura quando o chip está selecionado.
/S ou S̅Pino 8. Chip select ativo em zero: /S = 0 habilita o chip; /S = 1 o desabilita.

A barra superior, ou o prefixo “/”, indica sinal ativo em nível baixo. Para /S = 1, a saída de dados fica em alta impedância, permitindo compartilhar as linhas sem que o chip conduza os dados. Vcc e Vss são alimentação; não são sinais que selecionam a operação.

4.6.2 Decodificação de endereço

O decodificador de endereço converte a combinação binária apresentada nos pinos A₀–A₉ na seleção da posição correspondente. No modelo didático, cada uma das 1 024 combinações ativa uma das posições da matriz. Por exemplo, 0000000101₂ seleciona a posição 5. As quatro células dessa posição são ligadas aos circuitos de leitura ou escrita. (Tanenbaum, 2007; Stallings, 2019).

A Figura 11 simplifica a organização física: chips reais podem distribuir a seleção em linhas, colunas e bancos. A decodificação interna do chip seleciona a posição; a decodificação externa, quando existem vários chips, determina qual dispositivo recebe a seleção.

A Figura 11 relaciona os pinos aos três barramentos e à organização lógica da RAM. As linhas de endereço entram no decodificador; as quatro linhas DQ são bidirecionais; /S seleciona o chip e /W define a escrita. VCC e VSS alimentam o circuito. No componente real, a matriz utiliza seleção interna de linhas e colunas; o desenho agrupa essa lógica para evidenciar as posições endereçáveis. (Motorola, MCM2114).

Figura 11 – Modelo funcional da MCM2114: A0–A9 selecionam uma das 1024 palavras, de 0 (0x000) a 1023 (0x3FF); DQ1–DQ4 transferem a palavra de 4 bits. O conteúdo 1010 da posição 5 é apenas ilustrativo.
Figura 11 – Modelo funcional da MCM2114: A0–A9 selecionam uma das 1024 palavras, de 0 (0x000) a 1023 (0x3FF); DQ1–DQ4 transferem a palavra de 4 bits. O conteúdo 1010 da posição 5 é apenas ilustrativo.

4.6.3 Operações de leitura e escrita

Na leitura, aplica-se o endereço, mantém-se /S = 0 e /W = 1 e aguarda-se o tempo necessário até a saída válida. O processador ou o controlador deve liberar as linhas I/O para que o chip possa conduzi-las. O próximo acesso respeita o tempo mínimo de ciclo. (Tanenbaum, 2007; Stallings, 2019).

Na escrita, aplica-se o endereço e o dado, seleciona-se o chip e ativa-se /W = 0. O dado e o endereço devem permanecer estáveis pelos intervalos de preparação (setup) e manutenção (hold) requeridos em torno do evento que encerra a escrita. O pulso de escrita também tem uma duração mínima. (Tanenbaum, 2007; Stallings, 2019).

Não se deve interpretar um tempo de ciclo de 200 ns como a latência obrigatória de qualquer versão da MCM2114. Os tempos variam conforme a versão e as condições; acesso e ciclo são especificações diferentes. Como exemplo documentado de SRAM assíncrona, a Infineon citada na Tabela 4 especifica tAA e tRC de 10 ns.

Exemplo e pinagem: Motorola – manual e datasheet da MCM2114; Nota de Aula 4 (2021.2), Figura 5; slides 28–33. Conceitos: Tanenbaum (2007), Stallings (2019). Exemplo de tempos especificados: Infineon.

4.7 • Memória cache

Organização, funcionamento e desempenho da cache

4.7.1 Complexidade e desempenho

A cache é uma memória rápida, de capacidade menor que a MP, utilizada para reduzir o tempo médio dos acessos. Ela é chamada de memória intermediária porque atende requisições entre o núcleo de processamento e os níveis mais distantes da hierarquia. Em uma configuração com vários níveis, cada cache é intermediária em relação ao nível seguinte. (Tanenbaum, 2007; Stallings, 2019).

Inserir a cache aumenta a complexidade: são necessários dados, tags, comparadores, bits de estado, circuitos de controle e políticas de substituição e escrita. O ganho ocorre quando a maior parte dos acessos encontra o dado nos níveis rápidos. Nem todo programa obtém o mesmo benefício; acessos pouco reutilizados ou um conjunto de trabalho muito grande podem produzir muitas faltas. (Tanenbaum, 2007; Stallings, 2019).

As caches de CPU são construídas tipicamente com SRAM, que mantém o estado enquanto alimentada, sem refresh periódico. A SRAM emprega mais área por bit que a DRAM convencional. Assim, a capacidade de cache é relativamente baixa em comparação com a MP, embora possa atingir dezenas ou centenas de megabytes em determinadas arquiteturas. (Tanenbaum, 2007; Stallings, 2019).

4.7.2 Princípio de localidade

O princípio que permite explorar a cache se chama princípio de localidade. A localidade temporal é a tendência de uma informação acessada voltar a ser acessada em um intervalo curto. Uma variável acumuladora ou uma instrução dentro de um laço são exemplos. (Tanenbaum, 2007; Stallings, 2019).

A localidade espacial é a tendência de acessar posições próximas a uma posição recém-acessada. Percorrer um vetor e executar instruções consecutivas são exemplos. Por isso, a cache recebe normalmente um bloco que inclui o dado solicitado e posições vizinhas. A localidade é uma propriedade frequente dos programas, não uma garantia. O PC avança conforme o tamanho das instruções e a organização da ISA, e não necessariamente uma unidade por instrução. (Tanenbaum, 2007; Stallings, 2019).

4.7.3 Níveis L1, L2 e L3 e controlador

Figura 12 – Distribuição didática de L1, L2 e L3, atualizando a organização do slide 36.
Figura 12 – Distribuição didática de L1, L2 e L3, atualizando a organização do slide 36.

A L1 fica mais próxima do núcleo e costuma separar instruções (L1-I) e dados (L1-D). A L2 normalmente tem maior capacidade e pode ser privada ou compartilhada. A L3, quando presente, costuma ser compartilhada por um grupo de núcleos. Nos processadores atuais, os níveis podem estar integrados ao chip ou ao encapsulamento, inclusive em chiplets ou estruturas empilhadas. O número do nível não determina que a cache seja externa ao processador.

Tabela 8 – Comparação L1/L2/L3, capacidades anunciadas pela AMD. Fontes: AMD e Intel. A latência depende da microarquitetura e da localização do dado; a tabela não estabelece faixas fixas de ciclos.
NívelPapel e organização frequenteCapacidade: exemplo Ryzen 9 9950XTempo de resposta / tecnologia
L1Próxima de cada núcleo; frequentemente dividida em I e D1 280 KB totais em 16 núcleos; média de 80 KB/núcleo somando I e DMenor latência na hierarquia de caches; tipicamente SRAM
L2Retém blocos que não cabem na L1; neste tipo de CPU, usualmente privada por núcleo16 MB totais; média de 1 MB/núcleoMaior que L1 em geral; tipicamente SRAM
L3Último nível neste exemplo; compartilhamento depende da topologia64 MB totais; não implica um banco único igualmente próximo de todos os núcleosMaior que L2 em geral; depende também do núcleo solicitante; tipicamente SRAM

4.7.4 Organização da cache e operações de leitura e escrita

Para operar com a memória intermediária, é necessário controlar os acessos ao sistema cache-MP nas operações de leitura e escrita. O controlador de cache executa uma lógica de controle cujo encadeamento depende da natureza da operação. Essa lógica pode ser descrita por um algoritmo ou fluxograma; nas caches de CPU, ela é normalmente implementada por circuitos de hardware e máquinas de estados, sem exigir a execução de um programa de software a cada acesso. Para compreender esse controle, é necessário primeiro entender a organização do sistema cache-MP.

A MP possui palavras endereçáveis que, para o controle da cache, são agrupadas em blocos de K palavras. A cache é organizada em linhas; cada linha possui capacidade para armazenar as K palavras de um bloco completo da MP. Em um dado instante, uma linha só pode armazenar um bloco. O índice ou endereço da linha identifica a posição na cache; o campo tag, associado a essa linha, identifica qual bloco da MP está nela, em conjunto com os bits de índice quando o mapeamento os utiliza. Tag e índice da linha são informações distintas. (Tanenbaum, 2007; Stallings, 2019). Ver também Cornell, CS 3410.

Os blocos e as linhas são identificados por números; a palavra dentro de cada um é selecionada pelo deslocamento. Pode-se generalizar que:

Tipicamente, o número de blocos B é muito maior que o número de linhas L. A eficiência desse sistema depende de os acessos dos programas explorarem o princípio da localidade: ao manter na cache os blocos com maior probabilidade de reutilização, reduz-se o número de acessos à MP. A localidade favorece esse resultado, mas não o garante para qualquer programa.

Exemplo: oito blocos da MP e duas linhas de cache

Considere uma MP com 16 palavras de 8 bits, cujos endereços vão de 0000 a 1111 em binário, isto é, 0d a 15d. Cada palavra equivale a 1 byte neste exemplo. Agrupando duas palavras por bloco (K = 2), obtêm-se B = 8 blocos, identificados de 000 a 111 (0d a 7d). O bloco 000 contém as palavras 0000 e 0001; o bloco 001 contém 0010 e 0011; e assim por diante, até o bloco 111, que contém 1110 e 1111.

A cache possui L = 2 linhas, identificadas por 0 e 1. Cada linha comporta as duas palavras de um bloco. Na Figura 13, a linha 0 guarda o bloco 010 (2d), com as palavras 0100 (4d) e 0101 (5d); a linha 1 guarda o bloco 101 (5d), com as palavras 1010 (10d) e 1011 (11d).

Para explicitar a identificação dos oito blocos, o exemplo inicial utiliza a tag completa de 3 bits, com valores possíveis de 000 (0d) a 111 (7d), como no mapeamento totalmente associativo. Essa tag não é o endereço da linha: a linha continua sendo 0 ou 1. No mapeamento direto, apresentado adiante, parte da identificação do bloco fica no índice da linha e a tag desse mesmo exemplo passa a ter 2 bits.

Figura 13 – Organização ilustrativa com B = 8 blocos, L = 2 linhas e K = 2 palavras. A linha 0 guarda o bloco 010 (2d); a linha 1, o bloco 101 (5d). D4, D5, D10 e D11 representam os conteúdos das palavras.
Figura 13 – Organização ilustrativa com B = 8 blocos, L = 2 linhas e K = 2 palavras. A linha 0 guarda o bloco 010 (2d); a linha 1, o bloco 101 (5d). D4, D5, D10 e D11 representam os conteúdos das palavras.

Se cada palavra possui N bits, as capacidades de dados são:

MP: B × K palavras → B × K × N bits
Cache: L × K palavras → L × K × N bits de dados

No exemplo, B = 8, L = 2, K = 2 e N = 8: a MP possui 8 × 2 × 8 = 128 bits (16 bytes), e a cache possui 2 × 2 × 8 = 32 bits (4 bytes). As tags e os bits de estado ocupam espaço adicional, sem ampliar essa capacidade de dados. Quando se utiliza escrita retroativa, um bit dirty também informa se o conteúdo foi modificado em relação ao próximo nível.

4.7.5 Controle da cache para operação de leitura

A Figura 14 apresenta o encadeamento de uma leitura no modelo com uma cache e a MP. Seja X o endereço solicitado pela CPU. O controlador calcula o número do bloco b = ⌊X/K⌋ e o deslocamento da palavra d = X mod K. Em seguida, consulta as tags e os bits válidos das linhas permitidas pelo mapeamento. Há acerto somente quando uma dessas linhas está válida e sua tag corresponde à identificação esperada do bloco solicitado. No exemplo de tag completa, isso equivale a comparar a tag com b. (Tanenbaum, 2007; Stallings, 2019).

Figura 14 – Controle de uma leitura no sistema cache-MP. O ramo de acerto usa o dado da cache; o ramo de falta obtém o dado e preenche uma linha antes de concluir o fluxo simplificado.
Figura 14 – Controle de uma leitura no sistema cache-MP. O ramo de acerto usa o dado da cache; o ramo de falta obtém o dado e preenche uma linha antes de concluir o fluxo simplificado.

No ramo SIM, ocorre um acerto (hit): o controlador usa o deslocamento d para ler a palavra na linha da cache e completa sua transferência para a CPU. No ramo NÃO, ocorre uma falta (miss): o controlador solicita à MP a palavra e o bloco que a contém, preenche a linha de destino com a cópia desse bloco e atualiza a tag e o bit válido. O dado requisitado pode então ser entregue à CPU. O fluxograma mostra uma conclusão única após o preenchimento; alguns projetos antecipam a entrega da palavra solicitada enquanto as demais chegam.

A decisão de onde colocar o bloco — e, quando necessário, quais dados substituir — depende do mapeamento cache-MP. Ele pode ser direto, totalmente associativo ou associativo por conjunto, que combina características dos dois anteriores. No direto, a linha de destino é fixa; no totalmente associativo, qualquer linha pode receber o bloco; no associativo por conjunto, a escolha fica restrita às linhas de um conjunto. Quando há mais de uma linha candidata, uma política de substituição escolhe a vítima. Essas modalidades são detalhadas nas próximas seções.

Se houver uma linha inválida disponível entre as candidatas, ela pode ser preenchida. Se a linha escolhida contiver um bloco modificado sob escrita retroativa, esse conteúdo precisa ser preservado no próximo nível antes de a linha ser sobrescrita. Em uma hierarquia com vários níveis, a solicitação segue para a próxima cache; a MP só é acessada quando os níveis anteriores não atendem à requisição. (Tanenbaum, 2007; Stallings, 2019).

4.7.6 Mapeamento direto

No mapeamento direto, cada bloco da MP possui uma única linha de destino. Para um endereço X expresso em posições do exemplo: (Tanenbaum, 2007; Stallings, 2019).

bloco b = ⌊X/K⌋   •   deslocamento d = X mod K
linha ℓ = b mod L   •   tag = ⌊b/L⌋

A regra de associação é implementada pela decodificação do endereço; não requer necessariamente uma tabela de software. Se B é múltiplo de L, existem B/L blocos candidatos a cada linha. Esse quociente não é uma regra geral para todos os tipos de mapeamento. (Tanenbaum, 2007; Stallings, 2019).

Figura 15 – Mapeamento direto com oito blocos e duas linhas; decomposição completa do endereço.
Figura 15 – Mapeamento direto com oito blocos e duas linhas; decomposição completa do endereço.

Se L e K são potências de dois, o endereço é dividido em tag | índice de linha | deslocamento. Neste exemplo, são 2 + 1 + 1 bits. Para X = 13 = 1101₂, b = 6, ℓ = 0, tag = 3 e d = 1. O dado está presente somente se a linha 0 estiver válida e sua tag for 3. (Tanenbaum, 2007; Stallings, 2019).

Essa técnica é simples, mas produz faltas por conflito: B0 e B2 disputam a linha 0 mesmo que a linha 1 esteja livre. Na falta, o destino é fixo; não existe escolha entre várias linhas para substituir. (Tanenbaum, 2007; Stallings, 2019).

4.7.7 Mapeamento totalmente associativo e substituição

No mapeamento totalmente associativo, qualquer bloco pode ocupar qualquer linha. O controlador compara a tag com as tags das linhas válidas. No exemplo, o endereço se divide em tag de 3 bits | deslocamento de 1 bit; a tag identifica o bloco completo, pois não existe índice de linha no endereço. (Tanenbaum, 2007; Stallings, 2019).

Figura 16 – Mapeamento totalmente associativo e escolha da linha de substituição.
Figura 16 – Mapeamento totalmente associativo e escolha da linha de substituição.

Quando existe uma linha inválida, ela pode receber o bloco. Se todas estão ocupadas, o controlador utiliza uma política de substituição: (Tanenbaum, 2007; Stallings, 2019).

Se B0 foi carregado antes de B1 e, depois, B0 foi acessado novamente, FIFO escolherá B0, enquanto LRU escolherá B1. A associação completa reduz conflitos de destino, mas exige mais comparadores e controle; não garante ganho de desempenho em todo projeto.

O mapeamento associativo por conjunto combina as técnicas. A cache é dividida em S conjuntos de A vias, com L = S × A. O bloco b vai para o conjunto b mod S e pode ocupar qualquer uma das A linhas desse conjunto. A política de substituição atua dentro do conjunto. O endereço se divide em tag | índice do conjunto | deslocamento. (Tanenbaum, 2007; Stallings, 2019).

4.7.8 Desempenho de sistemas com cache

A taxa de acertos h é a razão entre os acessos atendidos pela cache e o total de acessos. A taxa de faltas é 1 − h. No exemplo restrito de k acessos a um bloco, com uma primeira falta e k − 1 acertos, h = (k − 1)/k. Essa relação não vale automaticamente para qualquer sequência de acessos. (Tanenbaum, 2007; Stallings, 2019).

Se c é o tempo de consulta à cache e p é a penalidade adicional de falta, o tempo médio de acesso, em um modelo serial simples, será: (Tanenbaum, 2007; Stallings, 2019).

tB = c + (1 − h) × p

Por exemplo, com valores didáticos c = 2 ns, p = 80 ns e h = 0,95, resulta tB = 2 + 0,05 × 80 = 6 ns. A consulta à cache é paga em todos os acessos; a penalidade adicional é paga somente nas faltas. O custo de substituir uma linha modificada pode fazer parte dessa penalidade.

Na expressão da Nota 4, tB = c + (1 − h) × m, m deve ser entendido como o custo adicional após a consulta, incluindo os componentes assumidos no modelo. Se m representar o tempo total de uma falta, medido desde o início da consulta, a forma equivalente será tB = h × c + (1 − h) × m, pois m = c + p. Isso resolve a diferença entre a fórmula da nota e a do slide 54.

Para dois níveis consultados em sequência, usando taxas de faltas locais f₁ e f₂ e tempos c₁ e c₂, o modelo se estende a tB = c₁ + f₁ × (c₂ + f₂ × pMP). f₂ é a fração de faltas entre os acessos que chegaram à L2. Operações sobrepostas, prefetch e filas exigem modelos mais detalhados.

Um menor tempo médio de acesso não implica o mesmo fator de redução no tempo total do programa. O ganho depende da parcela de execução limitada por memória, das faltas e das operações que o processador consegue realizar durante a espera. Aumentar a capacidade ou a associatividade pode reduzir faltas e, ao mesmo tempo, aumentar tempo de consulta, área e consumo. (Tanenbaum, 2007; Stallings, 2019).

4.7.9 Operação de escrita

A leitura procura uma cópia válida; a escrita precisa definir onde e quando as cópias serão atualizadas. Em um acerto de escrita, duas políticas principais podem ser empregadas: (Tanenbaum, 2007; Stallings, 2019).

Figura 17 – Políticas de escrita, baseada nos slides 52 e 53 e nas Figuras 12 e 13 da Nota 4.
Figura 17 – Políticas de escrita, baseada nos slides 52 e 53 e nas Figuras 12 e 13 da Nota 4.

Em uma falta de escrita, a decisão é independente: (Tanenbaum, 2007; Stallings, 2019).

Write-back é frequentemente combinado com write-allocate, e write-through com no-write-allocate, mas as combinações dependem do projeto. Em hierarquias com vários níveis, “próximo nível” pode ser L2 ou L3; uma escrita não precisa alcançar imediatamente a MP. (Tanenbaum, 2007; Stallings, 2019).

Em sistemas com vários núcleos, a coerência controla as cópias do mesmo bloco para que as leituras observem os valores permitidos pela arquitetura. Ela acrescenta estados, mensagens e possíveis transferências entre caches. O tratamento detalhado de coerência e consistência de memória depende da arquitetura do processador. (Tanenbaum, 2007; Stallings, 2019).

Referências para organização, localidade, mapeamento, substituição, desempenho e escrita: Tanenbaum (2007), Stallings (2019). Implementações e caracterização de CPUs: Intel – manual de otimização.

Referências e materiais de apoio

Material-base: SILVA, Clayton J A. Nota de Aula 4 – Elementos do sistema de computação, 2021.2; e Arquitetura de Computadores – Memória e Barramento, slides de memória 2–54. Os slides de barramento, a partir do 55, não integram este capítulo.

  1. TANENBAUM, A. S. Organização estruturada de computadores. 5. ed. Prentice-Hall, 2007. Referência conceitual preservada da Nota 4. Ver também TANENBAUM, A. S.; AUSTIN, T. Structured Computer Organization. 6. ed. Pearson, 2013. Consultar fonte.
  2. STALLINGS, W. Computer Organization and Architecture: Designing for Performance. 11. ed. Pearson, 2019. Hierarquia, memória interna e cache. Consultar fonte.
  3. NIST. Prefixes for binary multiples. Convenção para bit, byte e múltiplos binários. Consultar fonte.
  4. KINGSTON. KVR56U46BS8K2-32. Datasheet: kit DDR5-5600 CL46 de 32 GB. Consultar fonte.
  5. AMD. Ryzen 9 9950X. Especificações de núcleos e capacidades totais de cache. Consultar fonte.
  6. INTEL. Intel 64 and IA-32 Architectures Optimization Reference Manual. Organização, latência e vazão em microarquiteturas específicas. Consultar fonte.
  7. INFINEON. CY7C10612G30-10ZSXI. SRAM assíncrona 16 Mbit, tAA e tRC de 10 ns. Consultar fonte.
  8. SAMSUNG. SSD 870 EVO Data Sheet, revisão 1.1. Dados do modelo de 1 TB. Consultar fonte.
  9. SAMSUNG. 990 PRO PCIe 4.0 NVMe M.2 SSD, 1 TB. Especificações e garantia. Consultar fonte.
  10. SEAGATE. Exos X24 Data Sheet. Capacidade e transferência sustentada. Consultar fonte.
  11. IBM. LTO tape drives. Capacidade e taxa nativas de unidades LTO-9. Consultar fonte.
  12. MICROCHIP. Memory Products; Memory Features. SRAM, EEPROM, flash e usos em microcontroladores. Consultar fonte.
  13. MICROCHIP. Serial EERAM. SRAM com respaldo não volátil e salvamento na queda de alimentação. Consultar fonte.
  14. BACKUS, John. Can Programming Be Liberated from the von Neumann Style? A Functional Style and Its Algebra of Programs. Communications of the ACM, v. 21, n. 8, p. 613–641, 1978. Seção 3 (p. 615): computadores de von Neumann e seu gargalo. Artigo / DOI · Texto do artigo.
  15. INTEL. Improving Real-Time Performance by Utilizing Cache Allocation Technology. 2015. Hierarquia L1, L2 e L3 e integração no processador. White paper.
  16. Kingston Technology. Kingston glossary. Ver DDR / Double Data Rate / DDR SDRAM. Consulta: 20 out. 2026.
  17. Kingston Technology. KC3000 PCIe 4.0 NVMe M.2 SSD. Exemplo de unidade com flash NAND. Consulta: 20 out. 2026.
  18. Wei, D.; Zimmer, V.; Wu, M.; Richardson, B. Intel. Open Source UEFI Firmware Enabling Guide: Intel Atom Processor E3900 Series Platforms. Agosto de 2018, pp. 12–15 e 39. Consulta: 20 out. 2026.
  19. Infineon Technologies. MPWR SRAMs: Time to write when device wakes up from standby. Temporização e duração mínima do comando de escrita. Consulta: 20 out. 2026.
  20. Motorola. Memory Data Manual (1980): MCM2114 / MCM2114L14, 4096-bit Static Random Access Memory, página de dados 2-79, documento DS9800/1-79. Pinagem, organização 1024 × 4, alimentação e controle. Consulta: 20 out. 2026.
  21. Trio3D. Motorola MCM2114P20. Fotografia de dois circuitos integrados, 2016. Wikimedia Commons, CC BY-SA 3.0. Reproduzida sem alterações; a pinagem ao lado é um desenho separado.
  22. Cornell University. CS 3410: Caches. Índice, tag, validade, blocos e preenchimento de linha. Consulta: 20 out. 2026.

Fontes técnicas consultadas em 7 de outubro de 2026. Os desenhos são esquemas didáticos originais baseados na sequência do material, exceto a Figura 1, reproduzida da nota.