Architettura dei sistemi di elaborazione: La memoria (parte...
Transcript of Architettura dei sistemi di elaborazione: La memoria (parte...
Architettura dei sistemi di elaborazione:
La memoria (parte 1)
La tecnologia consente di realizzare CPU sempre più veloci. A partire dal 2006 sono stati messi sul mercato processori con frequenza di clock superiore ai 3GHz. Purtroppo le memorie non sono così veloci, cioè non hanno tempi di accesso paragonabili al periodo di clock delle CPU attuali.
Le prestazioni delle CPU non devono essere troppo negativamente influenzate dal tempo di accesso alle memorie. In aiuto al progettista viene la proprietà di località spaziale e temporale esibita dai programmi.
200
100
ns
1980 1990 2000
Tempo di accesso memoria
Tempo di ciclo CPU
CPU e Memoria
La memoria - definizioni • La memoria è semplicemente un grande vettore unidimensionale di “parole” o “celle” (tipicamente bytes) in sequenza. • Ogni parola di memoria ha un indirizzo, (simile all’indice di un vettore)
Memory[0], Memory[1], Memory[2], …
0,1,2 sono gli “indirizzi” di una parola
Dimensione (nel senso di capacità) – data in bit o byte; spesso la dimensione viene riportata in modo da descrivere l’organizzazione interna. es. 64K x 8 bit indica una memoria di 65536 celle di 8 bit ciascuna. Velocità – indicata come tempo di accesso (intervallo di tempo tra la richiesta del dato e il momento in cui viene reso disponibile). Consumo – questo parametro indica la potenza media assorbita. Costo – il parametro più aleatorio, dipende anche dal volume di acquisto. Integrazione – maggiore l’integrazione, minore l’ingombro e il consumo e i costi di assemblaggio delle parti, dell’alimentazione e dello smaltimento del calore. Idealmente un calcolatore dovrebbe avere quanta più memoria possibile, ad alta velocità, basso consumo, basso ingombro e minimo costo.
La Memoria – parametri di valutazione
La modalità di accesso ai dati in memoria è in genere prevedibile, cioè vale il principio per cui Questo significa che nel breve periodo gli indirizzi generati da un programma sono confinati in regioni limitate (località spaziele) e vengono richiesti in tempi brevi (località temporale)
La distribuzione degli accessi alla memoria in un dato intervallo può essere misurato direttamente su un sistema.
se al tempo t si accede all'indirizzo X è "molto probabile" che l'indirizzo X+X sia richiesto fra t e t+ t.
La Memoria – Principio di Località
Idealmente un calcolatore dovrebbe avere quanta più memoria possibile, ad alta velocità, basso consumo, basso ingombro e minimo costo. Non è possibile avere un’unica memoria con tutte queste caratteristiche, ma il principio di località suggerisce di realizzare una gerarchia: - memorie piccole e veloci (e costose) ai livelli alti, vicino alla CPU; - memorie ampie, più lente (e meno costose) ai livelli più bassi.
Memoria M1
CPU … Memoria M2
Gerarchie di memoria
A diversi livelli, le memorie sono realizzate con tecnologie diverse. • Costo per bit: c1 > c2 > … • Tempi di accesso: tA1 < tA2 < … • Dimensioni: S1 < S2 < … Un tipico sistema di memoria è il seguente: • memoria interna alla CPU • memoria ROM • memoria cache • memoria principale • memoria secondaria c tA S
Gerarchie di memoria
Registri
Cache
Memoria principale
Dischi magnetici
Nastri
Dischi ottici
+lente
+capacita`di memorizzazione
Da 32KB a alcuni MB
Da 16MB a decine di GB
Da alcuni GB a decine di TB
Memorizzazione di archivi Memorizzazione permanente
Gerarchie di memoria
I criteri di gestione si rifanno al principio di località: • I dati utilizzati più spesso vanno posti in memorie facilmente accessibili. • I dati utilizzati più raramente sono posti in memorie con tempi di accesso elevato. • Allocazione dinamica per utilizzare gli spazi disponibili con la massima efficienza. • Spostamento automatico dei dati tra i livelli. • Canali di comunicazione veloci fra i livelli.
Questa politica di gestione tende a mimare una memoria che abbia: • i tempi di accesso della più veloce, • le dimensioni della maggiore, • i costi della più economica.
Gerarchie di memoria
All’inizio dell’era informatica le memorie erano costose e poco capienti. I programmatori impiegavano molto tempo nel tentativo di assottigliare i programmi perché entrassero in memorie minuscole. Quando il programma era troppo grande, veniva messo nella memoria secondaria diviso in pezzi, ciascuno dei quali poteva entrare in memoria principale. I pezzi venivano portati nella memoria principale ed eseguiti uno alla volta. La gestione di questo procedimento era interamente nelle mani dei programmatori. Nel 1968 un gruppo di ricercatori propose di automatizzare questo processo separando i concetti di spazio degli indirizzi e di locazioni di memoria. Questo metodo è oggi chiamato MEMORIA VIRTUALE.
Memoria virtuale
Ad es. una CPU a 16 bit vede uno spazio degli indirizzi che va da 0 a 65535 (216 parole di memoria virtuale). La memoria principale può avere comunque, fisicamente, meno di 65536 locazioni (supponiamo 4096). • Indirizzi utilizzabili dal programma: indirizzi virtuali (o logici).
• Indirizzi effettivi della memoria principale: indirizzi fisici. Esiste una corrispondenza (se necessaria) tra indirizzo logico e indirizzo fisico. La corrispondenza prende il nome di allocazione, ed è una funzione f tale che:
indirizzo fisico = f(indirizzo logico)
Memoria virtuale
Analogia (per la memoria virtuale)
• State scrivendo una relazione (siete il processore) • La biblioteca è il disco
– Sostanzialmente senza limiti – Per trovare il libro che serve ci mettete del tempo (lenta)
• Il tavolo dove studiate è la memoria – Ha meno posto…: se il tavolo è pieno dovete restituire un libro – Trovare il libro da usare è molto più veloce, se l’avete già sul tavolo
• I libri aperti sul tavolo sono la cache – Capacità ancora più piccola: si possono avere pochi libri aperti sul tavolo… quando sono troppi bisogna chiuderne uno… – Molto più veloce nel recuperare i dati
• Si vuole creare un’illusione: l’intera biblioteca “aperta” sul tavolo. Due idee (semplici)
– Tenere aperti sul tavolo i libri usati più recentemente (e il più a lungo possibile… è probabile doverli riutillizzare) – Tenere i libri sul tavolo il più a lungo possibile… restituirli fa perdere tempo
Analogia (per la memoria virtuale)
Gerarchie di memoria
Tiriamo le somme • più il livello è vicino al processore
– più è piccolo – più è veloce – Contiene un sottoinsieme dei dati del livello sottostante (di solito quelli usati più recentemente) – Contiene tutti i dati contenuti nei livelli soprastanti
• Il livello più basso (il disco) contiene tutti i dati
Registri interni alla CPU:
- visibili o no al programmatore - memorizzano temporaneamente dati e istruzioni - dimensione: qualche byte - tempo di accesso: qualche ns
In tempi recenti si è iniziato a collocare sullo stesso chip della CPU anche memorie di tipo cache. Nelle CPU più recenti cresce la quantità di risorse dedicate alla memoria:
– 1980: processori senza cache (I386) – 1995: Alpha 21164 55% dei transistor – 2000: Merced (Intel-HP) 85% dei transistor
Memoria interna alla CPU
Registri • Un registro è un elemento di memoria
– in grado di memorizzare un insieme di n bit – composto da un insieme di flip-flop – l’informazione memorizzata in un registro prende
il nome di parola (se 8 bit si identifica anche come byte)
bit in ingresso
bit in uscita
Implementazione cella: Latch S-R
R
S
Q
Q
CK
R Q
Q S
CK
0 0 0 Q 0 0 1 Q 0 1 0 Q 0 1 1 ? 1 0 0 Q 1 0 1 0 1 1 0 1 1 1 1 ?
CK S R Q’
Quando CK=1 allora si ha il consenso alla transizione
Implementazione cella: Flip/flop D • Un solo ingresso più uno di abilitazione • Usato come unità elementare di memorizzazione
– Presenta in uscita ciò che è presente in ingresso quando il CK = 1, altrimenti presenta l’ultimo valore di D quando il CK commuta da 1 a 0 (delay).
R Q
S
CK
Q
D
CK
D Q
D
CK
Q
Registro parallelo-parallelo
D Q D Q D Q
D0 D1 D3
Q0 Q1 Q3
Clock
D Q
D2
Q2
Shift register
D Q D Q D Q D Q
CLOCK
D Q
Registro circolare (n=4)
D Q D Q D Q
D0 D1 D3
Q
Clock
D Q
D2
Write/Shift Scrivi/Scorri
• memoria elettronica (matrice logica) a sola lettura • ad accesso casuale (il tempo di accesso a una cella è indipendente dalla sua posizione) • Impiegata per contenere i programmi che inizializzano la macchina all’atto dell’accensione e il nucleo di base del sistema operativo. • Implementabile con 3 componenti fondamentali
Memoria ROM
E
E
=
x1 x2
y
Porta AND
Decodificatore x2
y x1
Porta OR
Schema logico di una ROM
0 0 0
Funzioni di commutazioni realizzate come OR di mintermini
fusibile
Implementazione ROM con C-MOS
• ROM 4x4 (numero parole x dimensione parola)
Uscita
R R R R
Vdd
Indirizzo
DE
C
Assenza collegamento =1
“Interruttore”