College Online
0%

Interfaces de Memoria

Modulo 1 · Aula 3 ~18 min de leitura Nivel: Intermediario

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:

Diagrama — Barramento de Sistema
  ┌─────────────┐         ┌──────────────┐       ┌────────────┐
  │             │  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    │
  └────┘     └───────┘    └─────────┘
i
Evolucao dos barramentos Em arquiteturas mais antigas, o Front Side Bus (FSB) conectava CPU ao northbridge. Em processadores modernos (Intel a partir de Nehalem, AMD Zen), o controlador de memoria esta integrado ao processador, eliminando o northbridge e conectando CPU diretamente a DRAM via canais dedicados.

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:

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.

Diagrama — DDR vs SDR
  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:

*
Lendo especificacoes de memoria Quando voce vê "DDR4-3200 CL16-18-18-36", significa: DDR4 a 3200 MT/s com CL=16, tRCD=18, tRP=18, tRAS=36 ciclos. Uma memoria com CL menor e mais rapida, mas o clock base tambem importa — a latência real em nanosegundos e 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).

Diagrama — Burst de 8
  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:

C
// 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.

Diagrama — Transferência DMA
  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:

  1. A CPU programa o controlador DMA com endereco de origem, destino e tamanho da transferência
  2. O DMA assume o barramento e transfere os dados diretamente entre periferico e memoria
  3. A CPU continua executando outras instrucoes (paralelo real)
  4. Ao terminar, o DMA gera uma interrupcao para notificar a CPU
!
Coerência de cache com DMA Quando o DMA escreve dados na memoria principal, esses dados podem nao estar refletidos no cache da CPU (que ainda tem a versao antiga). Isso pode causar bugs sutis. Solucoes incluem: invalidar as linhas de cache correspondentes, usar regioes de memoria marcadas como nao-cacheáveis (uncacheable), ou usar protocolos de coerência em hardware.

No harness.os

Os conceitos de interfaces e protocolos de memoria têm paralelos diretos na arquitetura do harness.os:

Exercicios

  1. Um sistema usa DDR4-3200 com dois canais. Qual a banda de memoria teorica maxima total? Mostre o calculo.
  2. Explique a diferenca entre Memory-Mapped I/O e Port-Mapped I/O. Por que MMIO e mais usado em arquiteturas modernas?
  3. 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.
  4. 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?
  5. Calcule a latência real (em nanosegundos) de um acesso CAS para DDR4-2400 com CL=17.

Resumo

Verifique seu entendimento

Qual a principal vantagem do DMA sobre Programmed I/O?

  • DMA e mais simples de implementar em hardware
  • DMA transfere dados mais rapido que a CPU
  • DMA libera a CPU para executar outras tarefas durante a transferência de dados
  • DMA nao precisa de enderecos de memoria para funcionar