Le memorie

Da Hacknowledge.

[modifica] Le memorie

La memoria svolge un ruolo determinante all’interno di un calcolatore al punto da condizionarne le prestazioni. I dati che un programma elabora in fase di esecuzione vengono tipicamente mantenuti nella memoria principale di un calcolatore e sono restituiti al processore solo quando richiesti da un programma in corso. Osservando lo schema ideale di un calcolatore, quello di Von Neumann qui sotto riportato:

Immagine:Memorie_-_von_neumann.gif

verrebbe da pensare ad un'unica memoria di sistema, uguale per tutti i componenti del calcolatore, tuttavia la velocità di esecuzione dei programmi dipende molto dalla velocità con cui le istruzioni e i dati vengono trasferiti fra la CPU e la memoria principale. Ecco allora che si decide di realizzare diversi tipi di memoria, alcuni di questi molto veloci altri invece non necessariamente richiedono un elevata velocità e sono quindi realizzati con diverse tecnologie. La memoria centrale di un calcolatore a cui si fa riferimento nello schema di Von Neumann è quella classica che va sotto il nome di memoria RAM (Random Access Memory, ossia memoria ad accesso casuale) La caratteristica RAM non è vera per tutti i tipi di memoria essa consente l’accesso al dato memorizzato alla quale corrisponde un indirizzo per l’identificazione, inoltre l’accesso è detto casuale (random) poiché indipendente dalla collocazione del dato. Difatti, la disponibilità di un dato situato in memoria è all’incirca la stessa per tutti gli altri dati. Ben diversa è invece la situazione per un hard disk che è pur sempre inquadrato nella categoria delle memorie (dette tipicamente memorie di massa) ma necessita di un tempo di caricamento che cambia da dato a dato. Come si nota dalla figura, la struttura di un hard disk prevede la disposizione di più piatti magnetici uno sopra l’altro e diverse testine per la lettura e la scrittura:


Immagine:Memorie_-_hard_disk.gif


Per individuare informazioni su un disco è necessario conoscere su quale piatto esso è stato scritto, non solo, ma anche su quale delle due superfici del piatto, su quale traccia e su quali settori. I tempi di accesso per i dischi di tipo magnetico dipendono da:

Tempo di accesso = Tempo medio di ricerca + Latenza media

Per tempo medio di ricerca intendiamo quell’intervallo di tempo necessario allo spostamento radiale delle testine verso il settore da leggere. Per tempo di latenza media s’intende invece la rotazione che il piatto deve compiere fino al raggiungimento del settore voluto. Nel corso di queste note ci occuperemo essenzialmente delle memorie RAM, dispositivi fondamentali per le prestazioni dell’sistema. Alcune intuizioni logiche portano a pensare che una memoria debba essere contemporaneamente grande, veloce e ovviamente poco costosa. Tuttavia all’aumentare dei parametri che ne caratterizzano le prestazioni corrisponde un inevitabile innalzamento del costo. Per evitare di costruire memorie dall’elevato costo sono state sviluppate diverse strutture che migliorano la velocità e la capacità della memoria mantenendo ragionevole il costo. In base a quanto detto prima, i parametri che caratterizzano una memoria sono:


  • Dimensione: è il numero di byte che la memoria è in grado di memorizzare, spesse volte questa informazione si accompagna ad altre che ne specificano la struttura. Ad esempio se è riportata la voce 64K x 4 bit si vuole intendere che la memoria si compone di 65536 celle ciascuna di 4 bit, per cui abbiamo che una parola è di 4 bit;
  • Velocità: questo parametro è indicativo della rapidità con la quale la memoria effettua i prelievi dei dati e li rende disponibili al processore. Un primo parametro legato alla velocità della memoria è il tempo di accesso alla memoria ed è costituito dall’istante di tempo che trascorre tra l’attivazione del segnale Read (oppure Write) e il segnale MFC che indica appunto il completamento della lettura del dato (oppure della scrittura). Un altro parametro legato alla velocità è invece il tempo di ciclo della memoria, ed è il tempo minimo che trascorre tra due operazioni successive di accesso alla memoria. Il tempo di ciclo è generalmente più alto del tempo di accesso in memoria.
  • Altri parametri: non è possibile prescindere dal costo della realizzazione, per questo motivo appartiene a questa classe il costo che il dispositivo di memoria richiede, in alcuni casi la realizzazione risulta essere impossibile proprio per gli elevati costi che il dispositivo di memoria può richiedere, per cui le scelte, come già detto in precedenza, sono influenzate da questo fattore ma hanno dato anche un contribuito in modo positivo alla ricerca di nuove tecnologie più innovative quali: memoria cache, memoria virtuale e interlacciamento della memoria. Anche la potenza dissipate è un parametro da tenere sotto controllo;


Ogni calcolatore può utilizzare una memoria massima di dimensione pari a due elevato il numero di bit che è in grado di indirizzare. Un calcolatore con indirizzi di 16 bit può allora indirizzare 216=64K locazioni di memoria. La memoria può essere organizzata nella modalità byte-addressable, l’indirizzamento avviene cioè byte per byte, ed è inoltre possibile seguire lo schema big-endian o quello little-endian, a seconda che l’assegnazione dell’indirizzo di memoria meno significativo venga corrisposto alla cella di memoria più a sinistra o più a destra del dispositivo. Il processore colloquia con la memoria attraverso l’utilizzo di due registri situati all’interno della CPU e che sono:


  • Registro MAR, Memory Address Register;
  • Registro MDR, Memory Data Register;


I registri MAR e MDR costituiscono allora l’interfaccia del dispositivo di memoria. Il registro MDR è il registro contenente dati della memoria. Il registro MAR è il registro della CPU contenente gli indirizzi della memoria. Entrambi sono collegati alla memoria principale da appositi bus (controll bus e Add bus), il bus comprende le linee di controllo per la lettura (Read), la scrittura (Write) e il segnale di completamento della funzione di memoria detto MFC (Memory Function Completed). Schema interno di una memoria:

Immagine:Memorie_-_architettura.gif

connessione alla CPU di una memoria:

Immagine:Memorie_-_connessione_alla_cpu.gif

Per gestire la memoria occorre che il processore sia in grado di comunicare attraverso l’interfaccia generando i segnali che ne permettono il corretto funzionamento. In realtà, il controllo della memoria vera e propria è codificata in hardware per cui i segnali non sono controllati via software ma vengono delegati, da parte del processore, ad alcuni circuiti. I segnali che servono alla comunicazione tra memoria e CPU sono:


  • R/W (segnali di Read e Write), è il segnale che controlla le operazioni di lettura e scrittura ed è generalmente comandato con un unico segnale, il valore alto indica un operazione di lettura viceversa per quello basso;
  • Start, è il segnale che individua l’inizio delle operazioni di lettura o scrittura, in realtà i segnali che compaiono sono solo R/W, questo e il successivo segnale servono solo per comprendere l’inizio e la fine del ciclo;
  • Ready, è il segnale significativo di un ciclo di operazioni conclusosi con esito positivo;


E’ abbastanza logico collegare il lavoro che svolge una memoria e quello svolto da un flip-flop, entrambi hanno in comune le operazioni di lettura e scrittura dati, ovviamente il flip-flop si limita alla lettura e scrittura dati di un singolo bit, diversamente per le memorie che operano invece su più di un bit. Il flip-flop costituisce di fatto l’elemento portante di tutte le memorie che sono infatti realizzate da un certo numero di flip-flop per quanti sono i bit massimi che la memoria deve ricordare. Se ad esempio abbiamo una memoria di 32Mbyte, abbiamo anche 32x106x28 differenti bit, l’unico modo di trovare quelli giusti è allora quello di etichettare ciascun bit associandolo ad un numero codificato che permette la sua individuazioni in maniera univoca e senza ambiguità. La macchina che realizza questo sistema è il decodificatore, poiché i fili che ci occorrono sono molti (ne abbiamo infatti uno per ciascuno flip-flop) si deve allora realizzare una composizione di decodificatori (è estremamente complesso realizzare un decodificare che abbia in ingresso molti fili per la selezione del dato), quindi i dati che si inseriranno nel registro MAR saranno poi elaborati dal decodificatore che ci consentirà di individuare i bit che si vogliono leggere o scrivere (dipende dalla modalità di accesso). Le celle di memoria vengono organizzate secondo una struttura ad array, ogni cella di memoria può memorizzare un bit di informazione:

Immagine:Memorie_-_architettura2.gif

Tutte le celle di memoria e quindi tutti i flip-flop di una riga sono collegati ad una linea comune che determina la lunghezza di parola della memoria e che è detta appunto linea di parola. Questa linea è collegata al decodificatore degli indirizzi. Le celle di memoria appartenenti alla stessa colonna (quindi tutti i flip-flop di una stessa colonna) sono invece collegati ad un circuito Sense/Write (rileva/scrivi) mediante due linee di bit. In una operazione di lettura questi circuiti leggono i bit memorizzati nelle celle di memoria, durante un operazione di scrittura i circuiti Sense/Write ricevono come ingresso un dato e scrivono quest’ultimo all’interno della cella di memoria. Nella figura precedente, che mostra 16 parole (16 è il numero di righe) di 8 bit (8 bit è il numero di colonne) è possibile memorizzare 128 bit (l’equivalente del prodotto 16 x 8), la struttura mostrata prima è nota anche come “organizzazione 16 x 8”. Questa struttura richiede, per la comunicazione con l’esterno, 14 pin, alla quale si devono aggiungere altri 2 pin per l’alimentazione del dispositivo, per cui in totale abbiamo 16 pin, di cui 8 sono i fili che vanno da b7 a b0 e che corrispondono alle linee di ingresso e di uscita, 4 sono i fili che vanno da A3 a A0 e che sono in ingresso al decodificatore degli indirizzi, e 2 pin sono associati ai segnali R/W e CS che seleziona un determinato chip. Altra struttura nota è quella 128 x 8 che è quindi dotata di 1024 celle di memoria e che adopera oltre ad un decodificatore a 5 bit, due multiplexer che prendono in ingresso i diversi fili in uscita dai circuiti Sense/Write. Se guardiamo il circuito della figura che mostra la struttura 16 x 8, notiamo che molti fili sono stati uniti, questo causerebbe una condizione di indeterminazione poiché la logica che abbiamo usato fin ora era basata su due valori logici, in realtà per realizzare una serie di dispositivi viene utilizzato il meccanismo della logica three state, viene cioè aggiunto un terzo stato detto neutro. Tutto ciò avviene poiché si vogliono realizzare dei circuiti che hanno dal punto di vista tecnologico un’alta impedenza in uscita, per cui se si trovano in una certa condizione sono in grado di non influenzare il filo a cui sono connessi. Questa logica è tipicamente applicata alla realizzazione dei BUS. Quando le dimensioni della memoria aumentano (gli esempi di strutture 16 x 8 oppure 128 x 8 sono utili a comprendere lo schema che le memoria possono adottare) è necessario gestire tutto il sistema in modo più efficace. La realizzazione delle memorie segue differenti tecniche che possiamo suddividere in due famiglie:

  • memorie statiche (SRAM);
  • memorie dinamiche (DRAM);

Le memorie statiche SRAM sono le più performanti ed hanno la caratteristica di essere le più veloci, ma sono molto piccole dal punto di vista capacitivo. Sono dette memorie statiche tutte quelle memorie capaci di mantenere il loro stato durante tutto il periodo in cui sono alimentate. Affinché la memoria mantenga il suo stato è necessario alimentare il dispositivo in continuazione, interrompendo l’alimentazione si perde il contenuto della memoria. Le memorie SRAM sono veloci ma anche più costose a causa dell’elevato numero di transistor necessari per realizzare la cella. Le memorie dinamiche o DRAM costituiscono l’alternativa alle SRAM, esse sono meno costose ed utilizzano celle più semplici da realizzare dal punto di vista elettronico, tuttavia le celle possono mantenere il dato memorizzato solo per un tempo indefinito. L’informazione presente in una memoria dinamica è memorizzata sotto forma di carica di un condensatore, per questo motivo l’informazione dura solo pochi milli-secondi. Una situazione del genere sarebbe inaccettabile poiché di scarsa utilità, tuttavia si realizzano alcuni dispositivi che periodicamente “rinfrescano” la carica dei condensatori mantenendo vivi i dati memorizzati. Le SRAM sono usate maggiormente qualora il requisito fondamentale della macchina debba essere l’alta velocità di funzionamento, mentre le DRAM trovano facilmente impiego e costituiscono la scelta predominante per realizzare la memoria principale di un calcolatore. Il ciclo di funzionamento di questi dispositivi è sviluppato in questo modo:


Immagine:Memorie_-_segnali.gif


NOTA: i segnali RAS, CAS e Write sono negati Nell’interfaccia avevamo inserito altri due segnali, quello di start e quello di ready, che in questo caso non consideriamo. In realtà abbiamo cercato di considerare un meccanismo del tutto generale in cui i segnali sono gestiti in modo differente a seconda del dispositivo. In questo caso consideriamo i segnali RAS e CAS anziché quelli di start e ready. Il dispositivo opera sui fronti di discesa dei segnali. Osservando il diagramma si nota infatti che l’operazione di Write assunta come esempio ha inizio solo quando il segnale RAS compie una discesa sul proprio fronte. Quindi: il segnale RAS (Rows address strobe) compie una variazione sul fronte di discesa, le operazioni di lettura o scrittura possono cominciare a patto che il dato sia disponibile sul bus. Al fronte di discesa del RAS la memoria:


  • Carica nel latch l’indirizzo di riga;
  • l’indirizzo viene fornito al decodificatore di riga;
  • il decodificatore di riga seleziona l’array costituito dalle celle di memoria richieste (vengono selezionati i 32 bit);


Le operazioni fin qui fatte si sono svolte senza tener conto di quale operazione si dovesse poi fare successivamente (sia essa di Write o di Read, lettura o scrittura), infatti al dispositivo di memoria l’intenzione di un eventuale lettura o scrittura viene comunicata solo dopo il segnali di RAS e prima che avvenga il fronte di discesa del segnale di CAS. Al fronte di discesa del segnale CAS (Columns address strobe) il dispositivo è in grado di individuare il giusto bit. Il tempo di accesso inizia con la variazione sul fronte di discesa del segnale RAS e termina non appena il dato è disponibile. Quando il tempo di accesso si conclude il dato può essere preso e memorizzata dal processore, per individuare il dato il dispositivo ha bisogno di un nuovo fronte nel quale i segnali di RAS e di CAS si alzano.

Strumenti personali