MEMORIA PRINCIPALE (MAIN MEMORY) Per accedere a una locazione di memoria, il suo indirizzo viene posto nel registro indirizzi di memoria o MAR; il dato letto dalla cella indirizzata, o da scrivere in essa, viene copiato nel registro dei dati di memoria (MDR), come già visto nello schema semplificato del processore. Tempo di accesso (access time): tempo necessario per leggere un dato in una certa locazione di memoria, misurato dall'inizio di un ciclo di lettura. Ciclo di memoria (cycle time): tempo minimo richiesto tra due accessi consecutivi. Le prestazioni delle memorie sono generalmente riferite loro tempo di ciclo. Le memorie centrali oggi in commercio hanno tempi di accesso varianti tra i 30 e i 60 ns, in continuo calo. A causa dell'attuale tecnologia impiegata (semiconduttori) per la memoria centrale, essa ha la caratteristica di essere volatile: in caso di assenza di alimentazione elettrica, le informazioni memorizzate sono irrimediabilmente "perse". La caratteristica di volatilità, pertanto, non è funzionale ma è unicamente legata a ragioni tecnologiche (i primi calcolatori utilizzavano memorie a nuclei di ferrite che avevano la caratteristica di non essere volatili). Le memorie a semiconduttore hanno diverse capacità e diverse organizzazioni. Per capacità s’intende normalmente quante “locazioni” di memoria sono contenute (e quindi è correlata con il numero di fili di indirizzo), per organizzazione s’intende di quanti bit è costituita una locazione (e quindi è correlata con il numero di fili di dato). Una memoria da 32Kbyte è organizzata in 32K locazione di 1 byte, una da 1 Mb è organizzato in 1 M locazioni ciascuna da 1 bit. A volte si fornisce come dato la capacità complessiva (numero di locazioni X numero di bit/locazione), specificando successivamente l’organizzazione. Per il montaggio sul circuito stampato, nei personal computer, si trovano le SIMM (Single Inline Memory Module), schedine sulle quali sono inseriti più chip di memoria e dotate di pin per la connessione elettrica a un opportuno zoccolo (socket) sulle schede che ospitano il resto della circuiteria. Dalla fine degli anni '80 sino ai primi '90 le SIMM erano commercializzate con 30 pin che consentivano di trasferire 8 bit di dati (più uno di parità) alla volta; poi si sono invece diffuse altre SIMM a 72 pin che consentivano un trasferimento di dati a 32 bit. Più recenti, invece le DIMM (Dual Inline Memory Module) montate su schede a 168 pin per raddoppiare il parallelismo dei trasferimenti e più adatte al le nuove architetture dei processori a 64 bit. Tipi di memorie: DRAM (Dynamic RAM): sono le memorie a semiconduttore più economiche e le più frequentemente usate. Sono chiamate così perché, basate sulla capacità di un transistor, devono essere continuamente rinfrescate (cicli di refresh, all’incirca ogni 2 ms). Sono volatili e riscrivibili, ogni transistor memorizza un bit e il tempo di accesso è di poche decine di nanosecondi (ma il tempo tra due letture successive varia dagli 80 ai 125 ns impiegando chip da 50 o 60 ns). Si consideri che un processore che lavora a 500 MHz svolge un’operazione elementare in 2 ns! Una delle tecnologie usate nei chip prodotti sino al '96 è chiamata FPM DRAM (Fast Page Mode DRAM) cerca di diminuire il tempo d'accesso facendo in modo che il memory controller non debba ripetere l'indirizzo di riga rispetto a un bit precedente (l'efficienza è ottenuta per tutti i dati sulla stessa "pagina" o riga). Una tecnologia subentrata alla FPM è la EDO (Extended Data Output) DRAM che ha migliorato del 10% circa le prestazioni introducendo una tecnica per diminuire il tempo per fornire l'indice di colonna. Ulteriore progresso ha portato all'immissione sul mercato delle SDRAM (Syncronous DRAM) e delle RDRAM (Rambus DRAM) in grado di funzionare a frequenze molto più elevate rispetto alle precedenti (500 MHz e oltre). Il costo è notevolmente diminuito negli anni (per es. dal 1990 al 1995 si è ridotto a un decimo) e sono commercializzate con chip da 1, 8, 16, 32, ecc. Mb che comprendono tutta l'elettronica per accedere a ogni singolo bit, leggerlo e scriverlo. SRAM (Static RAM): sono impiegate come memorie centrali, hanno un consumo molto inferiore a quello delle DRAM e non necessitano di refresh costante in quanto il bit è memorizzato a mezzo di due transistor accoppiati incrociati funzionanti come un flip-flop. Come le DRAM, sono volatili e riscrivibili ma molto più veloci, con un tempo di ciclo dell’ordine di nanosecondi. Altri tipi di memoria (vedi testo): ROM (Read Only Memory ): sono molto veloci (hanno un tempo di ciclo dell'ordine di pochi nanosecondi), non volatili e utilizzabili in sola lettura. PROM (Programmable ROM): sono memorie non volatili, programmabili un'unica volta per mezzo di speciali apparati che, mediante impulsi elettrici, fondono dei collegamenti all'intemo delle celle. EPROM (Erasable PROM): sono delle PROM cancellabili e riprogrammabili. EEPROM (Electrically Erasable PROM): sono EPROM riprogrammabili senza doverle rimuovere dal circuito stampato. Flash EPROM: combinano le caratteristiche delle memorie a semiconduttori a quelle tipiche di memorie magnetiche: sono non volatili e riscrivibili senza l'uso di apparati particolari. Memoria cache La memoria cache (termine di origine francese e pronunciato come l'inglese cash) è una memoria inserita tra il processore e la memoria centrale vera e propria. Quando, durante l'esecuzione di un programma, risulta necessario un accesso in lettura alla memoria centrale (relativamente lenta in rapporto alla velocità di calcolo del processore), il processare verifica prima se quanto richiesto è presente nella cache (questo è possibile in quanto la cache contiene sia il dato sia informazioni sul suo indirizzo): in caso positivo il trasferimento avviene dalla cache anziché dalla RAM e sarà notevolmente più veloce. In caso negativo il processore ricerca la locazione in RAM e copia detta locazione nel registro dati di memoria. Appositi circuiti, simultaneamente, attivano la copia di un certo numero di locazioni successive dalla RAM alla cache, se- condo uno schema look-ahead (guarda in avanti) in modo che alla successiva richiesta le infonnazioni si trovino già nella cache. Il miglioramento di prestazioni grazie alla memoria cache è dovuto al fatto i programmi sono caratterizzati da due tipi di «località»: Località nel codice: lo stesso segmento di programma è eseguito più volte (cicli); Località nei dati: se si elaborano grosse moli di dati (vettori o matrici), lo stesso dato è manipolato più volte prima di passare ad altri dati, e comunque se si accede ad un dato, è molto probabile che appena dopo si acceda al dato in posizione attigua. Si distinguono, in genere, cache dette di primo livello o interne, della capacità di pochi kilobyte, fisicamente collocate all'interno del processare, usate principalmente per garantire un flusso continuo all'interno del processore e cache di secondo livello o esterne, fisicamente localizzate all'esterno del processore, in genere di decine o centinaia di kilobyte, usate per superare la lentezza della memoria centrale. La memoria virtuale (Vedi cap. 5 del testo, Sistemi Operativi) I programmi e i file molto estesi possono eccedere la memoria disponibile anche se questa è molto grande. Per evitare questo inconveniente i moderni sistemi operativi, ma anche molti programmi applicativi, memorizzano parte dei dati e dei programmi al momento non utilizzati fuori dalla RAM. Questo tipo di gestione della memoria è chiamato memoria virtuale. In un sistema che utilizza la memoria virtuale, soltanto le parti del programma o del file al momento necessarie vengono memorizzate nella memoria del computer; il resto è immagazzinato su un drive del disco fisso. Quando l'elaboratore ha bisogno di una parte del file memorizzata sull'hard disk, vi trasferisce dei dati dalla RAM per avere più memoria a disposizione e poi sposta i dati di cui ha bisogno dall'hard disk alla RAM stessa. Quando scorrete un documento molto esteso, ad esempio, soltanto una parte è presente nella RAM. Il resto del documento rimane sull'hard disk finché non arrivate a quella parte. La memoria virtuale porta a una riduzione del costo totale del sistema perché memorizzare dati su un'unità del disco fisso è più economico che aggiungere ulteriori chip di memoria. Per darvi un'idea, anche se in realtà i prezzi sono estremamente fluttuanti, nel 1997 un megabyte nello spazio del disco fisso costava 160 lire, mentre un megabyte in un chip dì memoria costava sedicimila lire, ben cento volte di più. Che cosa significa “virtuale” Il termine “virtuale” indica che una cosa non esiste fisicamente ma soltanto logicamente. Ad esempio, la RAM di un computer è una realtà fisica in quanto costituita da un insieme di chip, mentre quando un elaboratore opera come se avesse una memoria più grande di quella effettiva, si parla di memoria virtuale. Questo concetto ha preso piede anche in altri campi, come quelli della realtà virtuale e dell'ufficio virtuale. Nella prima, grazie a un elmetto o a speciali occhiali, è possibile vedere una realtà generata unicamente dal computer. Ufficio virtuale, invece, è chiamato così perché non si trova in un edificio vero e proprio, ma è costituito semplicemente da persone collegate fra loro tramite i computer. In ogni caso, la parola “virtuale” è diventata ormai una moda e viene quindi usata nei contesti più disparati.