appuntiDiIngegneria
Architettura delle
Memorie
Sommario
1.1. Architettura delle Memorie ...............................................................................................................2
1.1.1. Memorie Cache .............................................................................................................................7
1.1.2. Memoria RAM ............................................................................................................................. 12
1.1.2.1. Correzione degli Errori nelle RAM ............................................................................................ 19
1.1.3. Memoria Secondaria ................................................................................................................... 22
1.1.3.1. Dischi Magnetici ...................................................................................................................... 22
1.1.3.2. Dischi Magnetici RAID .............................................................................................................. 27
1.1.3.3. Dischi Ottici ............................................................................................................................. 29
1.1.3.4. Memorie Flash......................................................................................................................... 33
1.2. Gestione della Memoria .................................................................................................................. 37
1.2.1. Monoprogrammazione ................................................................................................................ 37
1.2.2. Multiprogrammazione a Partizioni Fisse ...................................................................................... 38
1.2.3. Swapping..................................................................................................................................... 39
1.2.4. Memoria Virtuale ........................................................................................................................ 41
1.2.4.1. Memoria Virtuale con Paginazione .......................................................................................... 41
1.2.4.2. Algoritmi di Sostituzione dei Blocchi ........................................................................................ 46
1.2.4.3. Memoria Virtuale con Segmentazione ..................................................................................... 52
1.2.4.4. Segmentazione con Paginazione .............................................................................................. 53
1
1.1. Architettura delle Memorie
Il Processore porta fuori dal suo chip un certo numero di linee per accedere alla Memoria, ad
32
2
esempio il MIPS essendo un Processore a 32 bit, dispone di 32 linee per indirizzare locazioni in
memoria. In realtà di solito si parla soltanto di “Memoria” e non di “Memoria Fisica” perché i
programmi Assembly non tengono conto di quanta memoria essi hanno a disposizione sulla
macchina, ma solo dello spazio di indirizzamento del programma (ad esempio se il Processore è a
32 bit essi assumono di avere a disposizione 4GB di memoria anche se in realtà la RAM è di 2 GB,
soltanto le parti del programma o del file al momento necessarie vengono memorizzate nella
memoria centrale del computer; il resto è immagazzinato sul disco fisso fino a che non si renda
necessario il suo caricamento sulla RAM), questo è il Principio della Memoria Virtuale. La
tecnologia ha consentito 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:
Principio di Località Temporale: se il programma fa riferimento ad un dato in memoria,
probabilmente entro breve tempo farà riferimento allo stesso dato. Per tale motivo
conviene copiare questo dato dalla RAM alle caches.
Principio di Località Spaziale: se il programma fa riferimento ad un dato in memoria,
probabilmente entro breve tempo farà riferimento anche ad altri dati i cui indirizzi sono
vicini a quello del dato riferito. Per tale motivo conviene copiare dalla RAM alla cache non
solo il dato riferito, ma un intero blocco di dati (cioè anche i dati vicini).
Idealmente si desidera avere una memoria fisica centrale che sia grandissima (almeno quanto
tutto lo spazio di indirizzamento dei programmi), poco costosa, non volatile e velocissima, ed a
questa si vorrebbe collegare direttamente il Processore. Non esiste una tecnologia tale da
realizzare una Memoria Fisica con queste caratteristiche, per tale motivo si costruisce una
Gerarchia di Memorie che comprende tutta una serie di memorie esterne ed interne al
Processore: 2
Per soddisfare i principi di località spaziale e temporale i dati più utilizzati vengono messi nei posti
più facilmente e velocemente accessibili dal Processore, mentre i meno utilizzati vengono messi
nei posti che richiedono un tempo di accesso maggiore, e si utilizza un’allocazione dinamica per
gestire al meglio gli spazi spostando automaticamente i dati tra i vari 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.
Questa politica prende anche il nome di regola 90-10: il programma trascorre il 90% del suo tempo
nello stesso spazio di indirizzamento usando gli stessi dati (si pensino ad esempio a cicli e chiamate
a sottoprogrammi) che rappresentano soltanto il 10% dell’intero programma. Più il livello è vicino
al processore, più è piccolo e più è veloce; contiene un sottoinsieme dei dati del livello sottostante
(di solito quelli usati più recentemente), e contiene tutti i dati contenuti nei livelli soprastanti. Il
livello più basso (il disco) contiene tutti i dati. I parametri che classificano le prestazioni di una
memoria sono i seguenti:
Tempo di accesso ta: indica quanto tempo occorre al Processore per leggere/scrivere un
dato in memoria;
Capacità di Memoria s: indica quanto è capiente la memoria;
Costo per byte c: indica il costo della memoria in funzione dello spazio utilizzato sul chip;
Banda di trasferimento b: indica quanti dati la memoria è in grado di trasferire al
Processore in una unità di tempo;
Larghezza Bus Dati p: indica quanti dati il processore riesce a leggere
contemporaneamente (è il livello di Parallelismo della memoria);
Volatilità: indica la possibilità di mantenere i dati in memoria anche in assenza di
alimentazione. Una Memoria Volatile necessita dell'alimentazione elettrica continua al fine
di mantenere memorizzate le informazioni (vuol dire che spegnendo il computer si
perdono i dati).
Il livello più alto della gerarchia è costituito dai Registri della CPU, che sono molto piccoli (pochi
bit), volatili, ma estremamente costosi e veloci, in quanto essi sono integrati direttamente nella
CPU: qui dentro vengono memorizzati i dati utilizzati per processare una certa istruzione
(operandi, indirizzi, istruzioni, flags, etc). Dal punto di vista tecnologico i registri sono delle
aggregazioni di flip-flop. 3
Scendendo di livello ci sono le Memorie Cache, che sono delle memorie più piccole (pochi MB) e
veloci della RAM, volatili, ma molto più costose, che negli ultimi anni sono in forte sviluppo (infatti
la grandezza delle caches è diventato un importante parametro di prestazione di un elaboratore).
Si utilizzano le caches per aumentare le prestazioni in termini di velocità del Processore, in quanto
qui dentro vengono memorizzati i blocchi di dati della RAM che sono più frequentemente e
recentemente utilizzati dai programmi in esecuzione. Dal punto di vista tecnologico le caches
utilizzano delle celle di memoria statiche elettronicamente, vuol dire che a differenza della RAM
non hanno bisogno di fare un Refresh continuo per mantenere scritta l’informazione, ma il costo
tecnologico di tale vantaggio è che invece di utilizzare un singolo transistor per cella (come per le
RAM) occorrono ben 6 transistor per cella. Ciò vuol dire che a parità di spazio sul silicio (cioè sul
chip), con le caches si riescono a realizzare memorie più piccole. Anche le RAM sui microcontrollori
PIC e Atmel di Arduino sono realizzare con questa tecnologia. Possono esistere diversi livelli di
caches, alcuni dei quali potrebbero essere integrati direttamente nella CPU, altri esterni ad essa.
Scendendo ancora di livello è possibile trovare la RAM, che è una memoria volatile abbastanza
grande (fino a decine di GB) rispetto alle caches (anche se non necessariamente quanto lo spazio
di indirizzamento dei programmi, ma in tal caso viene in aiuto il Principio della Memoria Virtuale),
ma non molto veloce. Dal punto di vista tecnologico la RAM utilizza delle celle di memoria
dinamiche elettronicamente, cioè che hanno bisogno di un un Refresh continuo per mantenere
scritta l’informazione in essa: la cella elementare della RAM è composta da un transistor ed un
condensatore, e scrivere nella RAM vuol dire semplicemente caricare questo condensatore, il
quale però tenderà con il tempo a scaricarsi, allora periodicamente la RAM deve riscrivere il bit in
memoria ricaricando il condensatore per evitare che i dati si perdano. Durante questi continui
refresh il processore non può utilizzare la RAM, e quindi viene rallentato ancora di più: vuol dire
che l’esecuzione di istruzioni load e store rallenterebbe notevolmente il Processore, per questo
motivo esso sfrutta la caches per evitare di perdere la maggior parte del tempo in attesa di dati
dalla memoria.
Scendendo ancora di livello è possibile trovare le Memorie Secondarie (Disco), che sono delle
memorie molto capienti (da centinaia di GB fino a qualche TB), non volatili, molto meno costose
rispetto alle RAM, ma anche molto più lente: il programma in esecuzione tende ad essere caricato
interamente nella RAM, qualora blocchi di esso non entrassero nella RAM il programma dovrà
effettuare una lettura sul disco. Siccome l’obiettivo è mantenere in maniera permanente le
informazioni, le tecnologie utilizzate sono basate sul magnetismo e sui raggi laser (dischi ottici).
Siccome esse raccolgono una quantità di dati enorme rispetto alla RAM vengono anche chiamate
Memorie di Massa, ed esse possono essere di diversi tipi: Dischi Magnetici (Hard Disk), Floppy
Disk, Dischi Ottici (CD-ROM e DVD-ROM) e Memorie Flash (Chiavi USB, Micro SD, Hard Disk SSD).
Il livello più basso della gerarchia è costituito dai Nastri Magnetici, che sono delle memorie enormi
(oltre i TB) utilizzate in genere per memorizzare interi archivi, ma estremamente lente. 4
Più genericamente, si distinguono due memorie negli elaboratori:
Memoria Primaria: lavora a più diretto contatto con il processore, costituita
fondamentalmente da memoria RAM, memoria ROM, memoria Cache, e registri.
Memoria Secondaria: non lavora a diretto contatto con il processore, costituita
fondamentalmente dagli hard disks, ma anche supporti rimovibili come floppy disk, CD,
DVD, nastri magnetici, memorie flash di ogni tipo ed altro ancora.
Oltre alla RAM, che può essere di diversi tipi (SRAM, DRAM, SDRAM, DDR-SDRAM), ci sono anche
le Memorie ROM, che si differenziano per diversi punti rispetto alle RAM:
La ROM (Read Only Memory) è una memoria elettronica a sola lettura non volatile, a
differenza della RAM che è accessibile in lettura e in scrittura;
La ROM è non volatile, deve mantenere i dati anche quando si spegne il Processore perché
al suo interno contiene il software necessario all’avviamento del Sistema Operativo (fase di
bootstrap) dell’elaboratore, che prende il nome di BIOS (Basic Input-Output System), che a
partire dal 2010 è stato progressivamente sostituito da UEFI (Unified Extensible Firmware
Interface). In genere nelle ROM i dati sono inseriti dal produttore e non sono modificabili
dall’utente.
Dato che le ROM sono molto più lente rispetto alle memorie di tipo RAM (una ROM ha un
tempo di accesso di circa 150 ns mentre una memoria di tipo SDRAM ha un tempo di
accesso di circa 10 ns), le istruzioni contenute nella ROM sono talvolta copiate nella RAM
all'avvio, si parla allora di shadowing.
Il contenuto di una ROM può essere però modificato con diverse tecniche, in fase di
progettazione, prototipazione o costruzione. Oppure, per talune applicazioni, il contenuto
della memoria può essere aggiornato anche quando il componente è in esercizio.
La ROM è più precisamente un dispositivo logico programmabile, poiché dato il suo
elevatissimo costo di costruzione, conviene dare la possibilità agli utilizzatori di
programmare la ROM attraverso una serie di segnali elettrici, che andranno a
“programmare” il dispositivo bruciando una serie di fusibili in modo da realizzare una
5
funzione booleana desiderata (i fusibili così bruciati corrispondono a degli 0, gli altri a degli
1). Si parla in tal caso di PROM (Programmable ROM).
Una evoluzione delle PROM è la EPROM (Erasable Programmable Read Only Memory), che
permette di cancellare totalmente il contenuto della memoria tramite raggi ultravioletti
per un numero limitato ma consistente di volte in modo tale da riprogrammare il
contenuto. Tale evoluzione ha permesso di superare la limitazione delle PROM che non
permetteva di modificare il contenuto di una PROM una volta che essa era stata
programmata. Ovviamente, qualsiasi modifica operata determina sostanziali modifiche nel
funzionamento del computer, per cui la stessa non può essere oggetto di improvvisazione
e deve essere affidata soltanto ad utenti esperti.
Tuttavia nelle EPROM non era molto semplice cancellare il contenuto di una ROM da parte
di “normali utenti informatici” in quanto tale operazione necessitava di una rimozione del
chip dalla scheda su cui era assemblato per poter esporre esso a radiazioni UV. Per tale
motivo un ulteriore evoluzione delle EPROM sono state le EEPROM (Electrically Erasable
and Programmable Read Only Memory) che prevedono di cancellare il contenuto della
ROM elettricamente (cioè mediante segnali elettrici, allo stesso modo di come esse
vengono programmate/scritte), senza quindi dover smontare il chip dalla scheda (cioè
possono essere cancellate anche quando sono poste nel computer), addirittura spesso è
possibile cancellare e riprogrammare solamente alcuni settori della EEPROM, cosa che non
era fattibile con la EPROM.
Ulteriore variante delle EEPROM sono le memorie Flash, che sono sempre cancellabili e
riscrivibili elettricamente, ma per blocco. Esse sono molto simili alle DRAM perché
utilizzano un solo transistor per cella.
La tabella seguente effettua una comparazione fra queste tecnologie:
La memoria è semplicemente un grande vettore unidimensionale di “parole” o “celle”
(tipicamente bytes) in sequenza, dove ogni parola di memoria ha un indirizzo, (simile all’indice di
un vettore); ci sono tre diversi modi per accedere alla memoria, che differenzia le varie tipologie di
memoria indicate prima:
Memoria ad Accesso Casuale: è quello della RAM, il cui acronimo significa appunto
“Random Access Memory”. Tali memorie consentono di leggere e scrivere informazioni con
un tempo di accesso che risulta indipendente dalla locazione di memoria effettivamente
indirizzata. Anche la ROM è ad accesso casuale. 6
Memorie ad Accesso Semicasuale: possiedono come caratteristica il fatto che il tempo di
accesso è indipendente sia dalla locazione fisica dell’informazione sia dal particolare istante
in cui viene effettuato l’accesso. Alcuni esempi di memorie di questo tipo sono gli Hard
Disk e i CD-ROM.
Memorie ad Accesso Sequenziale: possiedono come caratteristica il fatto che i dati
vengono memorizzati in modo sequenziale nelle locazioni di memoria, quindi il tempo di
accesso dipende dalla locazione fisica. I Nastri sono degli esempi.
1.1.1. Memorie Cache
La cache è una memoria veloce e di piccole dimensioni posta fra la CPU e la memoria principale. Le
prestazioni della memoria cache dipendono anche dalla sua posizione rispetto alla CPU: è possibile
avere infatti le caches su scheda e le caches su chip. La presenza di una memoria cache sullo
stesso chip del processore rappresenta la soluzione che garantisce la maggiore efficienza, ma nei
sistemi più recenti sono presenti entrambe le soluzioni.
Il funzionamento è il seguente: un indirizzo fisico viene inviato dalla CPU, e la cache confronta la
parte rilevante dell'indirizzo: in caso di successo (cache hit) viene eseguita l’istruzione con il dato
letto dalla cache, mentre in caso di insuccesso (cache miss) la cache inizia la lettura da memoria
principale di dati che comprendono quello richiesto. Si analizzano i parametri che caratterizzano le
memorie caches:
Block Size: per il principio di località spaziale i dati vengono trasferiti in blocco. Se il blocco
è troppo grande occorre un tempo maggiore per spostarlo dalla RAM alla Cache, mentre se
è troppo piccolo si rischia di non prendere tutto ciò che occorre per le elaborazioni
successive perdendo più tempo in seguito per ulteriori accessi (venendo meno al principio
di località temporale), per cui la scelta di questo parametro è fondamentale.
Hit Time: tempo per leggere il dato nella Cache nel momento in cui è stato accertato che
esso è presente (cioè che una copia di esso è stata portata dalla RAM in precedenza).
Questo parametro si misura in tempi di clock, e l’ideale è che venga impiegato un singolo
colpo di clock ogni volta in maniera tale che questa lettura coincida con la fase di
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
-
Architettura Dei Calcolatori Generalita (Parte 1 della raccolta)
-
Architettura greca
-
Architettura web/Architettura internet
-
Architettura dei Processori (Parte 2 della Raccolta)