Le memorie: classificazione, tecnologia e gerarchia
Dalla distinzione primaria/secondaria alla piramide completa: DRAM, SRAM, DDR, ROM, Flash, stack LIFO, località, LRU, Hamming e CRC. Capire come il computer ricorda davvero.
1. Classificazione funzionale delle memorie
In ogni sistema di elaborazione la memoria non è un blocco unico — è un ecosistema di tecnologie diverse, ciascuna ottimizzata per velocità, capacità, costo e persistenza specifici. La prima distinzione fondamentale è quella funzionale.
Memoria primaria
Direttamente accessibile dalla CPU tramite bus. Contiene dati e istruzioni in uso. Veloce — latenza in ns. Capacità limitata. Esempi: RAM, ROM, Cache L1/L2/L3.
Memoria secondaria / di massa
Archiviazione permanente, non volatile. Non accessibile direttamente dalla CPU: serve controller I/O. Più capiente e lenta. Esempi: SSD, HDD, chiavette USB.
Primaria = lavora con la CPU adesso, secondaria = conserva anche a PC spento. La differenza chiave è volatilità e accessibilità diretta dal processore.
All'interrogazione: "Perché non usiamo solo SRAM velocissima ovunque?" Risposta: costa 100x più della DRAM e occupa molto più silicio (6 transistor vs 1 condensatore). Non è questione di voglia, è fisica ed economia.
2. Unità di misura e limiti fisici
L'unità minima indirizzabile è il byte = 8 bit. Ogni locazione ha un indirizzo univoco. I multipli tradizionali usano potenze di 2, non di 10:
| Nome | Valore binario | Significato |
|---|---|---|
| 1 KB | 2¹⁰ = 1024 byte | 10 linee indirizzo |
| 1 MB | 2²⁰ = 1.048.576 byte | 20 linee |
| 1 GB | 2³⁰ ≈ 1,07 miliardi byte | 30 linee |
| 1 TB | 2⁴⁰ ≈ 1 trilione byte | 40 linee |
KB decimale usato dai produttori HDD/SSD: 1 KB = 1000 byte. KB binario (KiB) usato da OS: 1024 byte. Ecco perché un SSD da 1 TB è visto come 931 GB: 10¹² / 2³⁰. Non è bug, è unità diversa.
La capacità indirizzabile dipende da n linee = 2ⁿ locazioni. Con 32 bit: 4 GB max. 64 bit: 16 exabyte teorici. Limiti fisici: costo per bit, consumo, refresh.
Il vostro PC ha 8 GB: 8×2³⁰=8,5 mld byte, indirizzi a 33 bit. La CPU non legge byte singoli: usa burst e cache line da 64 byte per sfruttare località spaziale.
3. RAM: DRAM vs SRAM e le evoluzioni DDR
RAM = Random Access Memory: accesso casuale, tempo costante. Due famiglie:
Dynamic RAM
1 transistor + 1 condensatore per bit. Si scarica → refresh ogni ~64 ms. Economica, densa. Usata per RAM principale.
Static RAM
Flip-flop 6 transistor. Nessun refresh, 1 ns. Costosa. Usata per cache.
SDRAM, DDR, LPDDR
| Tecnologia | Innovazione | Dove |
|---|---|---|
| SDRAM | Sincrona con clock | Base DDR |
| DDR | Double Data Rate – fronte salita+discesa | DDR-DDR5 raddoppia banda |
| DDR4/5 | Bank Group, prefetch 16n, tensioni basse | PC, server – DDR5 6400 MT/s |
| LPDDR | Low Power, canali 16-bit | Smartphone, ultrabook LPDDR5X |
Non guardare solo GB ma MT/s, latenza CL, dual channel. DDR4 3200 CL16 dual è molto più veloce di 2666 single. In lab lo misuriamo.
4. ROM, PROM, EPROM, EEPROM e Flash
ROM non volatile, mantiene dati senza alimentazione. Evoluzione:
ROM pura
Scritta in fabbrica, non modificabile.
PROM
Programmable once – fusibili.
EPROM
Cancellabile UV, finestrina 20 min.
EEPROM
Cancellabile elettricamente byte per byte – base BIOS.
Flash NAND/NOR
Evoluzione EEPROM a blocchi. SSD, chiavette, UEFI. NOR codice, NAND storage.
EEPROM = byte singolo, Flash = blocchi KB per velocità e durata. Ecco perché SSD ha controller FTL complesso.
ROM non è obsoleta: ogni PC ha UEFI in Flash NOR, ogni SSD firmware in Flash, ogni microcontrollore ha Flash interna. Oggi è riscrivibile.
5. Struttura interna del chip di memoria
Chip DRAM: matrice + decodifica:
Aprire riga costa ~15 ns, leggere 8 colonne stessa riga +4 ns. Programmi sequenziali più veloci: row buffer hit. Fisica, non magia.
6. Lo stack: regione LIFO gestita da SP
Stack zona RAM LIFO, cresce verso indirizzi decrescenti (x86, ARM). Registro SP.
SP=SP-dim; MEM[SP]=dato
Decrementa poi scrive.
dato=MEM[SP]; SP=SP+dim
Legge poi incrementa.
Disegnate stack con frecce in giù. Verifica: SP 0x1000 dopo 3 PUSH 4 byte? 0x1000-12=0x0FF4. Chi scrive 0x100C sbaglia verso.
Heap cresce su, malloc/free, frammentato. Stack giù, automatico LIFO, velocissimo. Stack overflow = ricorsione infinita senza ritorno.
7. Gerarchia delle memorie e principi di località
Non esiste memoria perfetta: veloce+grande+economica+persistente. Soluzione: piramide che sfrutta località.
Località temporale: uso ora → riuso presto (loop). Spaziale: uso X → uso presto X+1 (array). Cache e LRU vivono di questo.
Cache piena? LRU – Least Recently Used: butta chi non usi da più tempo. Usato L1/L2 e paginazione OS.
Ricorda LRU: chi non si fa sentire esce. Verifica: gerarchia funziona perché codice reale ha località >90% → 95% hit → Tavg ~ cache, non RAM.
8. Controllo e correzione degli errori
Bit flip per raggi cosmici, disturbi, celle difettose. Due approcci:
Hamming ECC
Parità su sottoinsiemi. 4 dati→3 parità→7 bit. Sindrome = posizione errore. SEC, con extra DED. RAM ECC server.
CRC
Firma polinomiale. dato/G(x)=resto. Resto ≠0 → errore. >99.9% rilevazione, no correzione. Ethernet, USB, NTFS, ext4.
Parità 1 bit rileva, Hamming corregge 1, CRC rivela burst. Domanda: bit per correggere 1 errore in 8 bit? 2⁴=16 ≥ 8+4+1=13 → 4 parità → 12 totali. Non 1.
9. Verifica operativa
🔬 Esercizio dal PDF ufficiale
Apri gli esercizi e prova:
- Bus 16 bit indirizzi, 8 bit dati: locazioni? Capacità KB?
- Perché DRAM refresh? Costo refresh 64 ms.
- SP=0x2000, PUSH AX 2B, PUSH BX 2B. Dove SP? Disegna.
- Hit L1 95% 1ns, miss 5%+RAM 60ns: Tavg?
- Hamming (7,4) dato 1010: codifica, errore bit5, correggi.
- Flash NOR vs NAND: quando?
1) 2¹⁶=65536×1B=64KB. 3) 0x2000→0x1FFC→0x1FF8 SP=0x1FF8. 4) Tavg=0.95×1+0.05×61=4ns ~cache. 6) NOR codice eseguibile BIOS/micro, NAND storage SSD. Dettagli nel PDF.
10. Riepilogo e concetti chiave
📚 Prossimo passo - Lezione 07: Organizzazione e funzionamento del bus
Ora che sai dove vivono dati e istruzioni, vediamo come viaggiano: bus dati, indirizzi, controllo, arbitraggio, sincrono/asincrono e il collo di bottiglia di Von Neumann. Porta schema gerarchia.