Interfaces de Memoria
Video da aula estara disponivel em breve
Arquitetura de Barramento
A comunicacao entre o processador, a memoria e os perifericos ocorre atraves de barramentos — conjuntos de linhas condutoras compartilhadas que transportam dados, enderecos e sinais de controle.
Um barramento classico e composto por tres sub-barramentos:
- Barramento de dados (data bus): transporta os dados propriamente ditos. A largura (8, 16, 32, 64 bits) determina quantos bits sao transferidos por ciclo.
- Barramento de enderecos (address bus): indica qual posicao de memoria o processador quer acessar. Com n linhas, pode endereccar 2n posicoes.
- Barramento de controle (control bus): sinais como Read/Write, clock, chip select (CS), interrupt requests.
┌─────────────┐ ┌──────────────┐ ┌────────────┐
│ │ Addr │ │ Addr │ │
│ CPU │========>│ Controlador │======>│ DRAM │
│ │ Data │ de Memoria │ Data │ (DIMMs) │
│ │<=======>│ │<=====>│ │
│ │ Ctrl │ │ Ctrl │ │
└──────┬──────┘========>└──────────────┘======>└────────────┘
│
┌────┴────┐
│ System │
│ Bus │
│(FSB/QPI/│
│ UPI) │
└────┬────┘
│
┌──────┴──────┐
│ Chipset │ ← northbridge (historico) / PCH (moderno)
│ (I/O Hub) │
└──────┬──────┘
┌────┴────────┬──────────────┐
│ │ │
┌─┴──┐ ┌───┴───┐ ┌────┴────┐
│PCIe│ │ USB │ │ SATA │
│GPU │ │ devs │ │ SSD │
└────┘ └───────┘ └─────────┘
Controlador de Memoria
O controlador de memoria (memory controller) e o circuito responsavel por traduzir requisicoes de leitura/escrita do processador em sinais eletricos que a DRAM entende. Ele gerencia:
- Timing: controla a sequência de sinais RAS, CAS, WE (Write Enable), e os intervalos entre eles
- Refresh: envia comandos de refresh periodicamente para manter os dados da DRAM
- Reordenacao: pode reordenar requisicoes pendentes para otimizar o acesso (ex: agrupar acessos a mesma linha aberta)
- Dual/Quad Channel: gerencia acesso paralelo a multiplos canais de memoria para aumentar a banda
DDR SDRAM — Timing e Operacao
DDR (Double Data Rate) SDRAM transfere dados tanto na borda de subida quanto na borda de descida do clock, dobrando a taxa de transferência em relacao a SDR SDRAM.
SDR SDRAM:
Clock: ─┐ ┌─┐ ┌─┐ ┌─┐ ┌─
└─┘ └─┘ └─┘ └─┘
Dados: ──X───X───X───X─── (1 transferência por ciclo)
DDR SDRAM:
Clock: ─┐ ┌─┐ ┌─┐ ┌─┐ ┌─
└─┘ └─┘ └─┘ └─┘
Dados: ─X─X─X─X─X─X─X─X─ (2 transferências por ciclo)
Evolucao de DDR:
┌──────┬──────────┬───────────┬──────────────────┐
│ Gen │ Clock │ Taxa │ Banda (x8 bytes) │
├──────┼──────────┼───────────┼──────────────────┤
│ DDR │ 200 MHz │ 400 MT/s │ 3.2 GB/s │
│ DDR2 │ 400 MHz │ 800 MT/s │ 6.4 GB/s │
│ DDR3 │ 800 MHz │ 1600 MT/s │ 12.8 GB/s │
│ DDR4 │ 1200 MHz │ 2400 MT/s │ 19.2 GB/s │
│ DDR5 │ 2400 MHz │ 4800 MT/s │ 38.4 GB/s │
└──────┴──────────┴───────────┴──────────────────┘
Os parametros de timing mais importantes da DRAM sao:
- CAS Latency (CL): numero de ciclos entre o envio do endereco de coluna (CAS) e a disponibilidade dos dados. Exemplo: CL=16 significa 16 ciclos de clock.
- tRCD (RAS to CAS Delay): tempo entre ativar uma linha (RAS) e enviar o endereco de coluna (CAS).
- tRP (Row Precharge): tempo para fechar (desativar) uma linha antes de abrir outra.
- tRAS (Row Active Time): tempo minimo que uma linha deve ficar ativa.
CL / (clock_MHz).
Burst Mode
Para explorar localidade espacial, a DRAM suporta burst mode: apos o primeiro acesso (com latência CL), os dados subsequentes na mesma linha sao entregues em ciclos consecutivos sem latência adicional. O burst length tipico e 8 (DDR3/DDR4) ou 16 (DDR5).
Ciclo: 1 2 3 4 5 6 7 8 9 10 11 12
|--CL (16 ciclos)--|
Dados: ─ ─ ─ ─ ... D0 D1 D2 D3 D4 D5 D6 D7
^ ^ ^ ^ ^ ^ ^ ^
Burst de 8 palavras (64 bytes com bus de 8 bytes)
Um burst de 8 x 8 bytes = 64 bytes = tamanho tipico de uma linha de cache
Memory-Mapped I/O vs. Port-Mapped I/O
O processador precisa se comunicar nao apenas com a memoria, mas tambem com perifericos (GPU, controladores USB, rede). Ha duas abordagens fundamentais:
- Memory-Mapped I/O (MMIO): os registradores dos perifericos sao mapeados no espaco de enderecos de memoria. O processador acessa perifericos com as mesmas instrucoes de leitura/escrita usadas para memoria (
LOAD/STORE). Usado em ARM, MIPS e x86 moderno (para a maioria dos perifericos). - Port-Mapped I/O (PMIO): usa um espaco de enderecos separado acessado por instrucoes especificas (
IN/OUTno x86). O x86 herdou esse modelo, mas hoje a maioria dos perifericos usa MMIO.
// Memory-Mapped I/O: acessar um registrador de GPIO em ARM
// O registrador esta mapeado no endereco 0x40020014
#define GPIOA_ODR (*(volatile uint32_t *)0x40020014)
// Ligar o pino 5
GPIOA_ODR |= (1 << 5);
// Desligar o pino 5
GPIOA_ODR &= ~(1 << 5);
DMA — Direct Memory Access
Em transferências de dados entre perifericos e memoria, usar a CPU como intermediaria e ineficiente — a CPU ficaria ocupada apenas movendo bytes. O DMA (Direct Memory Access) resolve isso com um controlador dedicado.
Sem DMA (Programmed I/O):
┌─────┐ read ┌──────────┐ ┌──────┐
│ CPU │<───────│ Periferico│ │ RAM │
│ │────────>│ │ │ │
│ │ write │ │ │ │
│ │────────────────────────────->│ │
└─────┘ CPU ocupa 100% durante a transferência
Com DMA:
┌─────┐ 1. configura ┌─────────┐
│ CPU │──────────────->│ DMA │
│ │ │ Ctrl │ 2. transfere direto
│ │ 4. interrupt │ │─────────────────────┐
│ │<─ ─ ─ ─ ─ ─ ─│ │ │
└─────┘ └────┬────┘ v
^ │ ┌──────────┐ ┌──────┐
│ └────────>│Periferico│ │ RAM │
│ │ (disco) │ │ │
└── CPU livre para executar └──────────┘ └──────┘
outras tarefas!
O fluxo DMA:
- A CPU programa o controlador DMA com endereco de origem, destino e tamanho da transferência
- O DMA assume o barramento e transfere os dados diretamente entre periferico e memoria
- A CPU continua executando outras instrucoes (paralelo real)
- Ao terminar, o DMA gera uma interrupcao para notificar a CPU
No harness.os
Os conceitos de interfaces e protocolos de memoria têm paralelos diretos na arquitetura do harness.os:
- Barramento = MCP (Model Context Protocol): assim como o barramento conecta CPU a memoria e perifericos, o MCP e o barramento padronizado que conecta o agente (CPU) ao harness (memoria) e ferramentas externas (perifericos).
- Memory-Mapped I/O = API unificada: no harness.os, tanto conhecimento quanto operacoes sao acessados pela mesma interface MCP — assim como MMIO usa as mesmas instrucoes para memoria e perifericos.
- DMA = processamento assincrono: quando o harness.os delega a agentes paralelos, funciona como DMA — a sessao principal (CPU) configura a tarefa e continua trabalhando enquanto o agente (DMA controller) executa independentemente.
- Burst mode = batch queries: em vez de fazer uma query por vez ao banco, o harness.os pode buscar blocos de conhecimento relacionado de uma vez, explorando localidade espacial.
Exercicios
- Um sistema usa DDR4-3200 com dois canais. Qual a banda de memoria teorica maxima total? Mostre o calculo.
- Explique a diferenca entre Memory-Mapped I/O e Port-Mapped I/O. Por que MMIO e mais usado em arquiteturas modernas?
- Um sistema precisa transferir 1 MB de dados de um disco para a RAM. Compare o tempo que a CPU ficaria ocupada usando Programmed I/O vs. DMA, assumindo que cada transferência de 4 bytes consome 2 ciclos de CPU a 3 GHz.
- O que acontece se o processador le um endereco de memoria que acabou de ser escrito pelo DMA e o cache ainda tem a versao antiga? Como resolver?
- Calcule a latência real (em nanosegundos) de um acesso CAS para DDR4-2400 com CL=17.
Resumo
- Barramentos conectam CPU, memoria e perifericos com linhas de dados, enderecos e controle
- O controlador de memoria traduz requisicoes da CPU em sinais de timing para a DRAM
- DDR SDRAM transfere dados nas duas bordas do clock; DDR5 alcanca 4800+ MT/s
- CAS Latency, tRCD, tRP e tRAS sao os parametros de timing criticos
- Burst mode entrega dados consecutivos sem latência adicional apos o primeiro acesso
- MMIO mapeia perifericos no espaco de enderecos; DMA libera a CPU durante transferências de dados
Verifique seu entendimento
Qual a principal vantagem do DMA sobre Programmed I/O?