Unità 1 · Il sistema di elaborazione
Lezioni 4 e 5 · pagine 14–17

La memoria cache e la memoria centrale

Tutto il testo delle due lezioni, con un laboratorio accanto a ogni concetto: prova il cache hit e il cache miss, confronta write‑through e write‑back, seleziona una cella con il suo indirizzo, segui una lettura sui bus, scopri un errore di parità, guarda una DRAM che perde carica.

9 laboratori8 domande di verifica con rispostaQuiz di 12 domande
4

La memoria cache

4.1 Funzioni della cache

La memoria cache è una memoria nascosta che svolge la funzione di conservare quei dati che, molto probabilmente, saranno a breve utilizzati dalla CPU. Tale memoria si considera nascosta perché non è gestita da chi realizza i programmi, ma direttamente dal microprocessore tramite un dispositivo integrato chiamato cache controller.

Questa memoria è molto più veloce, più costosa e meno capiente rispetto alla memoria centrale (RAM) presente sulla scheda madre del computer. In pratica è una memoria intermedia che immagazzina i dati in modo tale da renderli immediatamente disponibili al processore appena quest'ultimo li richiede. In questo modo la CPU non deve aspettare l'invio dei dati dalla RAM e il processo elaborativo diventa più rapido.

Inizialmente, la memoria cache era esterna al processore, a causa delle difficoltà di integrazione all'interno del silicio. Con il miglioramento della tecnologia di produzione è stato possibile integrarla all'interno della CPU (figura 10).

Attualmente la memoria cache è suddivisa in tre livelli: L1, L2 e L3, tutti integrati all'interno del microprocessore. Nelle moderne CPU multi‑core (cioè dotate di più processori), ogni core ha a disposizione L1 e L2 private, mentre L3 è condivisa e unica per tutti i core. Passando dal livello 1 al livello 3 aumenta la capacità della memoria, ma diminuisce la velocità.

  • L1 è la più veloce, ma anche la più piccola e contiene sia dati sia istruzioni. Viene solitamente suddivisa in due sezioni: la cache delle istruzioni e la cache dei dati. La cache delle istruzioni tratta le informazioni sull'operazione che la CPU deve eseguire, mentre la cache dei dati contiene i dati su cui deve essere eseguita l'operazione.
  • L2 è un po' più lenta, ma più grande e contiene solo dati.
  • L3 è molto grande ma più lenta e contiene solo dati.

La tabella 1 riporta le caratteristiche delle memorie cache che si possono avere sui moderni processori.

Laboratorio 1

Figura 10 · La cache integrata nella CPU

Tocca un livello (L1, L2, L3 o la RAM) per vederne le caratteristiche. Poi scegli dove si trova il dato e premi “Richiedi un dato”: vedrai il percorso che il core 1 compie e quanti cicli di clock servono al massimo.

figura 10 Memoria cache integrata all'interno della CPU

CacheTempo di accessoDimensioni
L11÷4 cicli di clockDa 128 kB a 1 MB
L28÷15 cicli di clock256 kB ÷ 32 MB
L325÷50 cicli di clock32 MB ÷ 128 MB

tabella 1 Caratteristiche delle memorie cache

Tocca un livello nella figura.
Nessuna richiesta ancora.

4.2 Gestione della cache

I dati prelevati dalla RAM vengono inseriti nella cache, dove sono organizzati in modo diverso rispetto a come si trovano nella memoria centrale. Insieme ai dati, infatti, viene registrata anche la loro posizione nella RAM, in modo da creare una corrispondenza diretta tra le due memorie.

Quando il microprocessore deve prelevare un dato dalla memoria ne conosce l'indirizzo, ma prima di richiederlo alla RAM, il cache controller effettua la ricerca nella cache: se lo trova (cache hit) il trasferimento è velocissimo, poiché non deve accedere alla RAM, altrimenti (cache miss) si avvia il caricamento dei dati dalla memoria centrale.

Il rapporto tra cache hit e accessi totali alla memoria, detto hit rate (rapporto di successo), misura l'efficacia della cache. A causa della capacità limitata della cache, quando questa è piena, sarà necessario liberare spazio per inserire nuovi dati. Il criterio prevalentemente usato è quello di eliminare dalla cache i dati che non sono utilizzati da più tempo (LRU, Least Recently Used).

È comunque necessario mantenere la memoria centrale aggiornata rispetto ai cambiamenti effettuati nella cache. Se un dato presente nella cache viene cancellato o modificato, questa variazione va riportata anche nel corrispondente dato nella memoria centrale. Se, ad esempio, il contenuto di una variabile viene incrementato nella cache, anche la corrispettiva variabile in memoria centrale andrà incrementata. A questo scopo sono possibili due strategie:

  • write‑through: ogni modifica nella cache è riportata immediatamente nella memoria principale;
  • write‑back: l'aggiornamento è fatto solo al momento in cui il dato viene tolto dalla cache con il criterio dell'LRU (Least Recently Used).
Laboratorio 2

Simulatore: hit, miss, LRU, write‑through e write‑back

La cache ha 4 posti, la RAM 16 celle (indirizzi 0–15). R5 = leggi la cella 5, W5 = incrementa la variabile nella cella 5. Esegui passo passo e osserva: quando la cache è piena esce la riga usata meno di recente (LRU). Con write‑back la RAM resta indietro (in giallo) finché la riga “sporca” non viene tolta.

Prossimo: R3
Memoria cache · 4 righe (indirizzo RAM registrato · valore · ultimo uso)
Memoria centrale · 16 celle (in giallo: valore non aggiornato rispetto alla cache)
Accessi
0
Cache hit
0
Cache miss
0
Hit rate
–
Scritture in RAM
0
Pronto. Premi “Passo”.

Il problema inverso: i protocolli di coerenza

Il problema inverso si presenta nei sistemi multiprocessore con i bus separati (vedi precedente Lezione sui bus). In questo caso la memoria centrale può contenere dati più aggiornati rispetto alla memoria cache, in quanto un altro processore potrebbe aver modificato i dati autonomamente utilizzando la propria cache. La gestione di queste problematiche ha portato allo sviluppo di “protocolli di coerenza”, che si occupano di garantire che i dati presenti nelle cache e nella memoria centrale siano sempre aggiornati tra loro.

Laboratorio 3

Due processori, una variabile x

Fai leggere x a entrambe le CPU, poi fai incrementare x alla CPU 0 e fai rileggere la CPU 1. Senza protocollo la CPU 1 continua a usare la sua copia vecchia (in rosso). Con il protocollo di coerenza la modifica invalida le altre copie e aggiorna la RAM.

CPU 0

copia di x nella cache 0
vuota

CPU 1

copia di x nella cache 1
vuota
Memoria centrale · x = 10
x vale 10 in memoria centrale. Le cache sono vuote.

Posizionamento dei dati: libero o vincolato

Il posizionamento dei dati nella memoria cache (figura 11) può essere libero (sono inseriti dove c'è un numero di celle vicine sufficientemente grande) oppure vincolato (alle varie parti della memoria centrale è assegnata una corrispondente area nella cache). Il secondo metodo consente un trasferimento più veloce, ma aumenta il rischio di dover spesso liberare spazio nella cache se quell'area è molto utilizzata.

Laboratorio 4

Figura 11 · Posizionamento dati tra memoria centrale e cache

La RAM ha 6 aree, la cache 3 posti. Tocca un'area per richiederla. In modalità vincolato l'area 1 e l'area 4 hanno lo stesso posto (così come 2‑5 e 3‑6): prova ad alternare Area 1 e Area 4 e confronta con libero. Oppure usa la sequenza di prova.

memoria centrale
memoria cache
Hit
0
Miss
0
Posti liberati
0
Tocca un'area della memoria centrale.
VERIFICA DI FINE LEZIONE · 4
1.Che cosa cambia tra i vari livelli di memoria cache?risposta

Passando da L1 a L3 aumenta la capacità ma diminuisce la velocità.

  • L1: la più veloce (1÷4 cicli) e la più piccola (128 kB – 1 MB); contiene dati e istruzioni, divisa in cache istruzioni e cache dati; privata per ogni core.
  • L2: un po' più lenta (8÷15 cicli), più grande (256 kB – 32 MB); solo dati; privata per ogni core.
  • L3: molto grande (32 – 128 MB) ma più lenta (25÷50 cicli); solo dati; condivisa e unica per tutti i core.
2.Con quale criterio sono eliminati i dati della cache?risposta

Quando la cache è piena si eliminano i dati che non sono utilizzati da più tempo: criterio LRU (Least Recently Used). Così si libera spazio per i nuovi dati.

3.Descrivi le strategie write‑through e write‑back.risposta

Servono a mantenere la memoria centrale aggiornata rispetto alle modifiche fatte nella cache.

  • Write‑through: ogni modifica nella cache è riportata immediatamente nella memoria principale. La RAM è sempre aggiornata, ma si fanno molte scritture.
  • Write‑back: la RAM viene aggiornata solo quando il dato viene tolto dalla cache con il criterio LRU. Si fanno meno scritture, ma per un certo tempo la RAM contiene un valore vecchio.
4.Un computer deve eseguire un programma che richiede l'uso intensivo della memoria. Spiega come la presenza di una memoria cache multilivello influisce sull'esecuzione del programma e quali strategie potrebbero essere utilizzate per ottimizzare la performance.risposta

Il cache controller cerca ogni dato prima in L1, poi in L2, poi in L3 e solo in caso di cache miss lo carica dalla RAM. Più alto è l'hit rate, meno la CPU aspetta la RAM e più veloce è l'esecuzione. I dati usati spesso restano nei livelli più vicini e veloci; quelli usati di rado vengono tolti con l'LRU.

Strategie utili:

  • scrivere programmi che riusano gli stessi dati a breve distanza e li leggono in ordine (celle vicine), così restano in cache e l'hit rate cresce;
  • scegliere il write‑back per un programma che modifica molte volte gli stessi dati, perché riduce le scritture in RAM; il write‑through quando serve una RAM sempre aggiornata;
  • con più core, sfruttare la L3 condivisa e affidarsi ai protocolli di coerenza per mantenere i dati allineati;
  • preferire il posizionamento libero se poche aree sono molto usate, per evitare che si scaccino a vicenda come nel vincolato.
5

La memoria centrale

5.1 Caratteristiche della memoria centrale

La memoria centrale (RAM, Random Access Memory) è uno degli elementi fondamentali della struttura di un elaboratore (figura 12).

È la parte del calcolatore in cui viene temporaneamente conservato il programma durante la sua esecuzione con tutte le informazioni necessarie. Oltre alle istruzioni del programma, sono memorizzati i dati ricevuti in input, i risultati parziali, quelli finali prima di essere mandati in output e tutte le informazioni che servono alla CPU. Le sue caratteristiche, che influenzano le prestazioni complessive dell'elaboratore, sono le seguenti:

  • è costituita da miliardi di celle, ciascuna contenente lo stato di un bit; la gestione avviene a gruppi di almeno 8 bit (un byte), organizzati in righe e colonne come una gigantesca tabella; normalmente non viene gestito il singolo byte, ma gruppi di 2 o 4 byte chiamati Word o Parola di memoria;
  • è ad accesso diretto (random); si può accedere a ogni byte semplicemente generando l'indirizzo fisico che contiene le coordinate della cella e il suo tempo di accesso non dipende dalla posizione;
  • i dati possono essere letti e scritti e sono mantenuti solo per il tempo in cui la memoria è alimentata; lo spegnimento dell'elaboratore comporta la perdita dei dati presenti nella memoria.
Cosa contiene la RAM durante l'esecuzione · tocca per evidenziare
Istruzioni, dati di input, risultati parziali, risultati finali, informazioni per la CPU.
Bit, byte, word

5.2 Organizzazione della memoria centrale

Ogni singola cella di memoria ha un determinato indirizzo, che indica la posizione che la cella occupa all'interno della memoria stessa e la identifica univocamente. Poiché la memoria è vista come una matrice, l'indirizzo di una cella è dato dalla colonna e dalla riga in corrispondenza della quale essa si trova. Gli indirizzi sono generalmente espressi in esadecimale, così da permettere un maggior numero di indirizzamenti. Nell'esempio di figura 13 si ipotizza di avere indirizzi formati da 6 bit e, quindi, in grado di indirizzare 64 celle. La prima parte dell'indirizzo (100) indica la colonna 4, mentre la seconda parte (101) indica la riga 5. Tramite queste coordinate il sistema è in grado di individuare quella particolare cella che si trova all'incrocio della colonna 4 e della riga 5.

Laboratorio 5

Figura 13 · Organizzazione della memoria centrale

Tocca una cella della matrice oppure clicca i 6 bit dell'indirizzo: i primi 3 (arancio) passano alla decodifica delle colonne, gli ultimi 3 (verde acqua) alla decodifica delle righe. All'inizio è selezionata la cella dell'esempio del libro: indirizzo 100 101.

Le prestazioni di una memoria si misurano con due parametri:

  • latenza: tempo richiesto per trasferire un dato da/verso la memoria;
  • velocità di trasferimento (bandwidth): numero di byte trasferiti in un secondo.

Altro parametro importante della memoria è la sua capacità, data dal numero massimo di byte che possono essere immagazzinati in essa. Nei moderni calcolatori la memoria ha una capacità dell'ordine di miliardi di byte, per cui risulta inadeguato esprimere tale capacità in byte. Si usano pertanto i multipli binari del byte: il kibibyte (kiB = 210 B), il mebibyte (MiB = 220 B) e il gibibyte (GiB = 230 B). Se leggiamo tra le caratteristiche di un computer che ha 4 GiB di RAM, vuol dire che la sua memoria centrale è formata da circa 4 miliardi di byte, esattamente 4.294.967.296 (= 4 · 1.024 · 1.024 · 1.024).

Laboratorio 6

Multipli decimali (SI) e multipli binari

Scrivi una quantità e scegli l'unità: vedi i byte esatti e la stessa quantità nell'altro sistema. Le barre mostrano quanto cresce la differenza tra 10ⁿ e 2ⁿ salendo di prefisso.

Prefisso SIBytePrefisso binarioByteDifferenza

5.3 Operazioni della memoria centrale

I dati in memoria possono solo essere letti o scritti. Per farlo vengono seguite le seguenti fasi.

» Lettura

  1. Il microprocessore genera l'indirizzo della cella da leggere e lo invia alla memoria tramite l'Address bus.
  2. Il circuito interno alla memoria decodifica l'indirizzo e attiva la cella interessata.
  3. Lo stato dei vari bit della cella è trasferito sul circuito di collegamento tra memoria e Data bus.
  4. La memoria immette il dato sul Data bus e invia un segnale sul Control bus per avvertire il microprocessore che il dato è pronto.

» Scrittura

  1. Il microprocessore genera l'indirizzo della cella sulla quale scrivere e lo invia alla memoria tramite l'Address bus.
  2. Il circuito interno alla memoria decodifica l'indirizzo e attiva la cella interessata, segnalando al microprocessore che è pronta a ricevere il dato.
  3. Il microprocessore immette il dato sul Data bus.
  4. Il dato è prelevato dal Data bus ed è trasferito nella cella; la memoria comunica al microprocessore che il dato è stato memorizzato.
Laboratorio 7

Segui una lettura e una scrittura sui bus

Scegli l'operazione e avanza fase per fase: si accende il bus usato in quel momento.

CPU reg: — Memoria decodifica cella 0x25 = 0110 1010 Address bus Data bus Control bus

    » Controllo degli errori

    A causa dell'importanza che riveste la memoria centrale, oltre alla gestione di lettura e scrittura, occorre garantire continuamente che non avvengano errori o malfunzionamenti.

    In genere, oltre ai bit di dati, sono presenti internamente alcuni bit aggiuntivi (error bit) che, con opportuni metodi di controllo, consentono di verificare costantemente lo stato della memoria. Un errore nella RAM viene considerato dai sistemi operativi così grave da bloccare l'esecuzione di un programma o dell'intero sistema operativo stesso.

    Se l'errore è rilevato in fase di avvio dell'elaboratore, l'operazione si blocca determinando un Memory Parity Error, dove “parity” indica il metodo utilizzato per il controllo degli errori (controllo di parità). Questa segnalazione spesso indica che il modulo di memoria è danneggiato e occorre sostituirlo.

    Laboratorio 8

    Controllo di parità

    1) Clicca sui bit per scegliere il byte e premi “Memorizza”: viene calcolato il bit di parità (viola). 2) Premi “Simula un guasto”: un bit della cella cambia. 3) Premi “Rileggi e controlla”.

    Scegli un byte e memorizzalo.

    5.4 Tipologie di memorie

    Ora che abbiamo introdotto la memoria centrale e, nella precedente Lezione 4, la memoria cache, vediamo un altro modo per classificare le memorie.

    » Le memorie volatili

    Si dicono memorie volatili quelle che permettono la memorizzazione delle informazioni solo fino a quando sono alimentate dalla corrente. La memoria RAM è una memoria volatile e può funzionare con le due tecnologie seguenti.

    • DRAM (Dynamic RAM). Ciascuna cella è costituita da un piccolo condensatore, che mantiene la carica elettrica per un tempo limitato. Nella memoria è presente un circuito (memory refresh) che provvede periodicamente a ricaricare le varie celle prima che esse perdano completamente la carica. Tale tecnica ha consentito di realizzare memorie con capacità maggiore senza aumentare le dimensioni delle schede, in quanto ogni cella è molto piccola. La gestione però è complessa a causa della necessità di ricaricare continuamente le celle senza interferire con le operazioni di lettura e scrittura della memoria. Nel corso degli anni, le DRAM hanno subito una notevole evoluzione con numerosi cambiamenti di standard e conseguenti problemi di compatibilità. Un notevole miglioramento nella velocità si è avuto con l'introduzione della tecnologia DDR (Double Data Rate, doppio flusso di dati): i dati sono trasferiti sia durante il fronte di salita dell'impulso di clock, sia durante il fronte di discesa. Le memorie DRAM sono utilizzate per realizzare le memorie centrali.
    • SRAM (Static RAM). Per mantenere l'informazione memorizzata, ogni cella è costantemente alimentata. Questo comporta consumi elettrici superiori, ma presenta il vantaggio che i tempi di risposta (latency time) al microprocessore sono piuttosto brevi. Per realizzare ciascuna cella sono necessari più componenti rispetto alla DRAM. Per queste sue caratteristiche, le memorie SRAM sono particolarmente adatte per realizzare le memorie cache.
    Laboratorio 9

    DRAM e SRAM a confronto

    Le celle DRAM sono condensatori che si scaricano. Sotto la linea tratteggiata il bit 1 non è più riconoscibile e diventa 0. Spegni il memory refresh e guarda cosa succede; spegni l'alimentazione e guarda anche la SRAM.

    DRAM · 1 condensatore per cella
    SRAM · cella sempre alimentata
    DRAMSRAM
    Cellaun piccolo condensatorepiù componenti, sempre alimentati
    Refreshsì, periodico (memory refresh)no
    Dimensione cellamolto piccola → grande capacitàpiù grande
    Consumipiù bassisuperiori
    Latenzamaggioretempi di risposta brevi
    Gestionecomplessa (ricarica senza disturbare letture e scritture)semplice
    Usomemoria centralememoria cache
    Trasferimenti per ciclo di clock

    » Le memorie permanenti

    Esistono anche delle memorie che vengono dette permanenti. Si differenziano da quelle volatili in quanto, anche in assenza di corrente, mantengono memorizzate le informazioni per lungo tempo.

    Appartengono a questa categoria le ROM (Read Only Memory), memorie non volatili che però, una volta programmate, possono essere solo lette. La ROM costa meno della RAM, ma ha ovviamente un campo di applicazione più limitato; in genere, sono programmate in fase di fabbricazione e contengono i programmi che permettono l'avvio del sistema (programmi di bootstrap). Esistono anche le PROM (Programmable Read Only Memory), che possono essere programmate direttamente dall'utente con uno speciale dispositivo e le EPROM (Erasable Programmable Read Only Memory) che possono essere anche cancellate un certo numero di volte (molto limitato) e riprogrammate.

    Laboratorio 10

    Prova a scrivere su ROM, PROM ed EPROM

    Ogni chip ha il suo comportamento. Prova a programmarlo, a cancellarlo e a togliere la corrente.

    VERIFICA DI FINE LEZIONE · 5
    1.Che cos'è la RAM?risposta

    La RAM (Random Access Memory) è la memoria centrale dell'elaboratore: vi vengono conservati temporaneamente il programma in esecuzione, i dati di input, i risultati parziali e finali e le informazioni che servono alla CPU. È formata da miliardi di celle da un bit, gestite a byte e a word (2 o 4 byte) e organizzate in righe e colonne; ogni cella ha un indirizzo. È ad accesso diretto (il tempo di accesso non dipende dalla posizione), può essere letta e scritta ed è volatile. È realizzata con tecnologia DRAM e si installa negli slot DIMM della scheda madre.

    2.Che cosa vuol dire che una memoria è volatile?risposta

    Che conserva le informazioni solo finché è alimentata dalla corrente: allo spegnimento dell'elaboratore i dati vanno persi. La RAM è volatile; le ROM, PROM ed EPROM invece sono permanenti.

    3.In che cosa differiscono SRAM e DRAM?risposta
    • DRAM: ogni cella è un piccolo condensatore che perde carica, quindi serve il memory refresh periodico; le celle sono piccole e si ottengono grandi capacità; gestione complessa. Si usa per la memoria centrale (oggi DDR, fino a DDR5).
    • SRAM: ogni cella è costantemente alimentata e non serve refresh; consuma di più e usa più componenti per cella, ma ha tempi di risposta brevi. Si usa per la memoria cache.
    4.Un utente esegue un programma che analizza grandi set di dati. Illustra come il sistema utilizza le memorie RAM e cache per processare i dati in modo efficiente.risposta

    Il programma e i dati da analizzare vengono caricati nella RAM (DRAM), che è abbastanza capiente (GiB) da contenerli e permette l'accesso diretto a ogni byte tramite il suo indirizzo. La CPU però è molto più veloce della RAM: per non aspettarla, il cache controller copia nelle cache L1, L2, L3 (SRAM, veloci ma piccole) i dati che probabilmente serviranno a breve, registrando anche la loro posizione nella RAM.

    A ogni richiesta la CPU cerca prima in cache: in caso di cache hit il dato arriva in pochi cicli di clock; in caso di cache miss viene letto dalla RAM tramite Address, Data e Control bus e copiato in cache. Quando la cache è piena si libera spazio con l'LRU. I risultati modificati vengono riportati in RAM con write‑through o write‑back. Più alto è l'hit rate, più rapida è l'elaborazione; la larghezza di banda e la latenza della RAM (migliorate dalla tecnologia DDR) incidono sui miss.

    Autoverifica

    Quiz sulle lezioni 4 e 5

    Scegli una risposta: vedi subito se è giusta e perché.

    Punteggio: 0 / 12
    Glossario

    Parole chiave