MEMORIE DI MASSA TERMINALI STAMPANTI PLOTTER
Transcript
MEMORIE DI MASSA TERMINALI STAMPANTI PLOTTER
ARCHITETTURA DI UN CALCOLATORE In questa sezione si prendono in esame i componenti fondamentali di un calcolatore. Si possono individuare tre strutture principali (v. Fig. 1) collegate fra loro. Fig. 1 La CPU (Central Processing Unit, in italiano normalmente detta Unità Centrale) ha un ruolo sia di elaborazione che di controllo. Nei calcolatori attuali in pratica è identificabile con un singolo circuito, il microprocessore. Più in generale, è quell'insieme di circuiti dedicati all'esecuzione delle operazioni elementari sui dati ed al controllo dell'intero sistema. La memoria centrale è un insieme di celle, ciascuna delle quali contiene 1 byte ed è individuata da un numero progressivo ad essa associato, detto indirizzo. La memoria centrale contiene, durante il funzionamento del calcolatore, sequenze binarie che possono rappresentare dati o codici corrispondenti alle istruzioni che costituiscono i programmi in esecuzione. Il bus è l'insieme dei molti collegamenti elettrici (fisicamente è un insieme di piste di un circuito stampato, in cui transitano segnali elettrici controllati da appositi dispositivi) che collega le varie parti del calcolatore e consente lo scambio di dati e segnali di controllo. I cosiddetti dispositivi di input/output sono dispositivi che consentono l'acquisizione dei dati da parte del calcolatore (input), la loro archiviazione e la loro presentazione verso il mondo esterno (output). Una classificazione schematica dei dispositivi di input/output è la seguente (in corsivo i dispositivi ormai caduti in disuso): MEMORIE DI MASSA STAMPANTI DISCHI MAGNETICI DISCHI OTTICI NASTRI MAGNETICI MEMORIE FLASH TAMBURI MAGNETICI SCHEDE PERFORATE A MARGHERITA AD AGHI TERMICHE A GETTO DI INCHIOSTRO LASER TERMINALI PLOTTER TASTIERA / MOUSE MONITOR ALFANUMERICI/ GRAFICI A RULLO XY Fig. 2 1 1) Memorie di massa - possono essere: a) dischi, magnetici oppure ottici, b) nastri magnetici, c) memorie flash, d) tamburi magnetici (ormai in disuso), e) schede perforate, dispositivi ormai del tutto obsoleti. I dischi, sia magnetici che ottici, possono essere suddivisi in dischi fissi o asportabili. 2) Terminali, composti di solito da una tastiera, un mouse e un monitor di tipo grafico (un tempo esistevano anche monitor di tipo alfanumerico, che cioè possono rappresentare solo caratteri dell'alfabeto o numeri o alcuni simboli grafici predeterminati). Nei monitor di tipo grafico ogni punto che compone un’immagine sul video (pixel, contrazione di ‘picture element’) è controllabile singolarmente. Quindi, con un terminale grafico si possono visualizzare grafici ed immagini, la cui qualità è determinata dalla risoluzione del dispositivo, cioè dal numero di pixel che si hanno a disposizione per formare l'immagine. Un terminale di tipo grafico può, ovviamente, visualizzare anche caratteri alfanumerici. 3) Stampanti: possono essere a) a margherita, b) ad aghi, c) laser, d) a getto di inchiostro, e) termiche o, in generale, chimiche. 4) Plotter , che possono essere a rullo o piani (di tipo X-Y). CPU La CPU può essere considerata il vero e proprio cuore del sistema: La struttura della CPU è la seguente (Vedi fig. 3) CLOCK Fig.3 2 La CPU è un dispositivo sequenziale, cioè può eseguire una sequenza di operazioni (v. sotto), una alla volta, in successione. E’ anche un dispositivo di tipo sincrono. Questo significa che esiste un circuito, detto clock, il cui compito è quello di sincronizzare tutte le operazioni che avvengono nel calcolatore, generando il cosiddetto segnale di clock. Questo è costituito da una serie di impulsi che si ripetono per milioni/miliardi di volte ogni secondo, ad intervalli regolari, e viene inviato in ingresso alla CPU e a tutti gli altri dispositivi che costituiscono il calcolatore. La CPU e gli altri dispositivi diventano attivi, cioè eseguono una operazione, soltanto ogni volta che ricevono un impulso di clock. In pratica, ogni volta che viene inviato un impulso alla CPU, questa esegue una operazione elementare che, come vedremo, implica un cambiamento del suo stato ed, eventualmente, dello stato dei dispositivi ad essa collegati. La CPU è internamente suddivisa in una Unità di Controllo, una Unità Logico-Aritmetica, chiamata di solito ULA in italiano (ALU in inglese) e un insieme di registri che servono a contenere i dati da cui dipendono i risultati dell’operazione che la CPU sta eseguendo: la CPU, infatti, non può operare direttamente sulla memoria ma ha bisogno di trasferire i dati al suo interno, e in particolare nei registri, prima di poterli elaborare. Alcuni registri possono essere riservati ad usi specifici; ad esempio contenere gli operandi, nel caso in cui si debba eseguire una operazione matematica (registri dati); oppure contenere l'indirizzo, all'interno della memoria, della prossima operazione da eseguire (registro Program Counter), o i bit di overflow e di carry (riporto) e, più in generale, bit che segnalano l’occorrenza di eventi specifici quando si esegue una operazione (registri di stato). La CPU è collegata alla memoria centrale tramite un bus, suddivisibile in bus dati, bus indirizzi e bus di controllo, a seconda dei segnali che vengono trasmessi sulle piste corrispondenti. Ogni CPU dispone di un proprio linguaggio macchina, ovvero di una codifica, mediante sequenze binarie, delle diverse operazioni che può compiere: ogni operazione ha una diversa codifica. Tali sequenze binarie sono chiamate istruzioni. Da questo punto di vista la CPU può essere schematizzata nel modo seguente (Fig. 4): DATI Fig. 4 Il contenuto dei registri che si trovano all'interno della CPU (che contengono i dati su cui deve essere eseguita la prossima operazione, l’indirizzo dell’operazione, i bit che servono a segnalare particolari situazioni, ecc.) definisce lo stato in cui si trova la CPU. La combinazione fra la sequenza binaria (istruzione) in ingresso e lo stato in cui si trova la CPU determina un risultato (output) che è sempre lo stesso a parità di istruzione e stato; in pratica la CPU associa alla lunga sequenza binaria formata dall’input e dallo stato una nuova sequenza binaria (output) che dovrà essere opportunamente interpretata. Questa nuova sequenza è il risultato dell’esecuzione dell'istruzione. L'esecuzione di una istruzione modifica il contenuto dei registri, quindi lo stato della CPU. Una operazione eseguita dal calcolatore corrisponde quindi ad un cambiamento di stato della CPU. Il nuovo stato in cui si trova la CPU dopo l’esecuzione dell’operazione è il risultato dell’operazione. In pratica, la CPU è una complicatissima rete logica che realizza una funzione booleana avente un elevatissimo numero di variabili di input e di output. Per fare un esempio estremamente banale, facendo il paragone con l’uso di una macchina da scrivere, fornire un'istruzione alla CPU può corrispondere alla pressione di un tasto, mentre lo stato può corrispondere alla condizione in cui si trova il tasto di shift; quando, ad esempio, si preme il tasto "A" (che, in questo esempio, 3 corrisponde all’istruzione da eseguire) nella macchina da scrivere, se il tasto di shift (stato) è premuto il risultato sarà il carattere A maiuscolo, se non è premuto il risultato sarà una a minuscola. Per risolvere qualunque problema, bastano tre tipi di istruzione: istruzioni aritmetiche e logiche (abbiamo visto che con la somma e lo shift si possono eseguire anche sottrazioni, moltiplicazioni o divisioni), operazioni di accesso alla memoria (ad esempio la possibilità di spostare un dato da una posizione all'altra all'interno della memoria oppure di leggere un dato e di inserirlo in uno dei registri, oppure di trasferirlo da uno dei registri all'interno della memoria), e operazioni di confronto fra numeri. Riguardo a queste ultime, può bastare anche il solo confronto con lo zero: se, infatti, si devono confrontare due numeri per vedere se uno è maggiore dell'altro, ciò equivale a calcolarne la differenza e vedere se questa è maggiore, minore o uguale a zero. Se è uguale a zero i due numeri sono uguali, se è maggiore di zero il primo numero è maggiore del secondo e viceversa. Le operazioni aritmetiche e logiche, come detto, vengono eseguite dalla Unità Logico-Aritmetica. I registri possono avere diverse funzioni a seconda del loro contenuto: possono contenere dati, ma anche indirizzi di memoria (cioè quegli indici che consentono di identificare in modo univoco ogni cella della memoria centrale). Ad esempio, quando si esegue un programma, il cosiddetto Program Counter è un registro particolare che contiene l'indirizzo della prossima istruzione che la CPU dovrà eseguire. La CPU, in pratica, legge nel Program Counter un indirizzo che identifica una certa locazione di memoria, legge l’istruzione contenuta in quella locazione e la esegue, operando sui dati che sono presenti in quel momento nei registri dati. I registri possono, inoltre, contenere codici di controllo; uno di questi, ad esempio, è il bit di overflow che, come detto, segnala quando in un'operazione intera senza segno si va oltre la capacità di rappresentazione della macchina. Quando questi codici di controllo sono rappresentati da un singolo bit vengono normalmente chiamati flag, cioè bandierine. In effetti, hanno un ruolo di segnalazione analogo a quello del guardalinee in una partita di calcio: se il bit è attivato (cioè il suo valore è 1), questo indica che si è verificata una certa condizione, ed equivale al sollevamento della bandierina da parte del guardalinee. La supervisione di tutte queste operazioni è compito dell'unità di controllo. Con una velocità proporzionale alla frequenza con cui arrivano gli impulsi di clock, l'unità di controllo interpreta le singole istruzioni attivando opportunamente le varie componenti della CPU, in modo da produrre il risultato corrispondente. PARAMETRI CARATTERISTICI DI UNA CPU (MicroProcessore) 1) LUNGHEZZA DELLE PAROLE BINARIE CHE E' IN GRADO DI ELABORARE, ESPRESSA IN NUMERO DI BIT (8, 16, 32, 64) 2a) LUNGHEZZA DELLE PAROLE BINARIE CHE E' IN GRADO Di RICEVERE DALL'ESTERNO O DI INVIARE VERSO L'ESTERNO CON UN'UNICA OPERAZIONE (8, 16, 32, 64) 2b)CAPACITA' DI INDIRIZZAMENTO (Mb, Gb) 3) TIPO DI ARCHITETTURA UTILIZZATA: CISC (Complex Instruction Set Computer) RISC (Reduced Instruction Set Computer) 4) FREQUENZA DI CLOCK. espressa in Megacicli/secondo = Megahertz (MHz) 5) MILIONI DI ISTRUZIONI AL SECONDO (MIPS) (centinaia o migliaia) MILIONI DI OPERAZIONI IN VIRGOLA MOBILE AL SECONDO (MFLOPS, decine o centinaia) MFLOPS <= MIPS <= FREQ. DI CLOCK Fig. 5 Il bus, pur essendo, dal punto di vista logico, un'entità unica, in realtà è un insieme di collegamenti fisici suddivisibili in un insieme collegamenti che consentono il trasferimento dei dati dalla memoria centrale alla 4 CPU e viceversa (bus dati), un insieme di collegamenti per trasmettere gli indirizzi (bus indirizzi) e una serie di collegamenti (bus di controllo) che consentono di trasmettere i segnali di controllo che regolano il collegamento fra CPU, memoria e dispositivi di Input/Output. Ad esempio, un collegamento è riservato ad un segnale che indica se sulla memoria va eseguita un'operazione di lettura (cioè un trasferimento dalla memoria verso la CPU o verso un dispositivo di input/output) oppure un'operazione di scrittura (cioè un trasferimento dalla CPU o da un dispositivo di input/output verso la memoria). In fig. 5 sono riportati i principali parametri che caratterizzano le prestazioni della CPU. Il primo è la lunghezza della parola che la CPU è in grado di elaborare. Questa lunghezza è espressa in numero di bit (normalmente sono 8, 16, 32 o 64 bit). Alla lunghezza della parola si fa riferimento spesso col termine architettura interna della CPU. Cioè se una CPU ha una architettura interna a 8, 16, 32, 64 bit, questo significa che è in grado, internamente, di compiere operazioni su stringhe binarie di tale lunghezza, cioè ogni operazione eseguibile in un unico ciclo di clock coinvolge operandi che, al massimo, sono di tale lunghezza. Analogamente all'architettura interna, si può definire una architettura esterna, caratterizzata dalla lunghezza delle parole che la CPU può trasferire, con una singola operazione, verso l'esterno: questo parametro si può identificare con la dimensione del bus dati. La distinzione fra architettura interna ed esterna è importante in quanto vengono talvolta utilizzati, per motivi di economia, microprocessori con architetture interne, ad es., a 32 o 64 bit che, per poter essere inseriti in calcolatori più economici, hanno un bus dati caratterizzato da un numero di bit inferiore. Internamente, quindi, un microprocessore di questo tipo può trattare dati di 32 (64) bit; tuttavia, disponendo, ad esempio, di un bus a 16 bit, deve eseguire in due (quattro) cicli di clock ogni operazione di lettura e di scrittura. Da un lato, ciò provoca un rallentamento delle operazioni di input/output, dall'altro i circuiti esterni collegati a questo microprocessore sono molto più economici, perché sono costituiti da un minor numero di componenti o, in ogni caso, da componenti più semplici. Per quello che riguarda il tipo di istruzioni che è in grado di eseguire un microprocessore, si possono avere due tipi di architetture: Architettura CISC (Complex Instruction Set Computer) o RISC (Reduced Instruction Set Computer). L'architettura CISC caratterizza microprocessori che sono in grado di eseguire istruzioni molto complesse, per eseguire le quali sono spesso necessari molti cicli di clock; quindi, la ALU ha una struttura molto complessa e occupa gran parte dello spazio a disposizione nel chip. Pertanto, questo tipo di microprocessori contiene di solito un numero piuttosto limitato di registri. Nel caso dell'architettura RISC si ha la situazione opposta: si dispone di un numero molto basso di operazioni molto elementari, avendo però a disposizione un numero molto elevato di registri: questo fa sì che si possa ottenere un elevatissima velocità di elaborazione, in quanto gran parte delle operazioni possono essere eseguite in pochi cicli di clock, se non addirittura in uno solo. Tuttavia, ogni operazione corrisponde solo ad una parte di una operazione di una CPU CISC. Le prestazioni relative di una CPU CISC o una RISC dovranno quindi essere valutate in funzione del tipo di programma che deve essere eseguito. Non è possibile affermare la superiorità in assoluto dell’una architettura sull’altra. Un'altra caratteristica fondamentale della CPU è la frequenza di clock alla quale può operare. Come abbiamo visto ogni istruzione corrisponde ad una sequenza di operazioni elementari eseguite dalla CPU in corrispondenza di ogni impulso di clock; quindi, maggiore è il numero di impulsi di clock che la CPU riceve in un secondo, maggiore è il numero delle operazioni che la CPU è in grado di svolgere nell'unità di tempo. Normalmente è espressa in MHz/GHz (Megahertz/GigaHertz) o Megacicli/Gigacicli al secondo. Il primo personal computer (PC) IBM aveva una frequenza di clock di 4,77 MHZ, e il suo processore aveva una architettura interna a 16 bit: attualmente i computer a 32 bit basati su Intel Pentium o su processori della stessa classe (es. AMD Athlon) arrivano ad un massimo di circa 3 GHz, cioè di quasi 1000 volte superiore. Se a ciò si aggiunge il progressivo miglioramento dell’ingegnerizzazione dei microprocessori, che comporta che una stessa istruzione sia eseguita in un minor numero di cicli di clock, e l’estensione dell’architettura interna, si raggiunge un incremento di prestazioni ancora maggiore rispetto al PC originale, in circa 20 anni, cioè si è raddoppiata la potenza di calcolo mediamente ogni 18 mesi (a questo fenomeno si fa normalmente riferimento come legge di Moore)! Tale legge si prevede che continui a valere almeno per i prossimi 10 anni. Altri parametri che descrivono le prestazioni di una CPU e vengono forniti in genere insieme alla macchina sono i MIPS, cioè milioni di istruzioni per secondo, e i MFLOPS (Megaflops), milioni di operazioni in 5 virgola mobile per secondo. Un'operazione in virgola mobile è normalmente molto più complessa di un'operazione fra interi e richiede quindi un maggior numero di cicli di clock, perciò il dato relativo ai MFLOPS è generalmente molto più basso di quello relativo ai MIPS che, a sua volta, è inferiore alla frequenza di clock. In realtà, nei microprocessori più recenti, alcune operazioni possono essere effettuate in parallelo, durante lo stesso ciclo di clock, per cui potrebbe anche succedere, per particolari sequenze di operazioni, che MIPS > frequenza di clock. Quando si confrontano i MIPS di due CPU diverse bisogna anche tenere in considerazione l'architettura del microprocessore; abbiamo detto infatti che l'architettura RISC può eseguire una varietà minore di istruzioni più elementari, quindi un'istruzione di un computer con architettura CISC può corrispondere, a livello operativo, a più istruzioni di un computer RISC. A parità di MIPS, è quindi più potente un microprocessore CISC; d'altra parte, a parità di frequenza di clock, un microprocessore RISC esibirà un dato in MIPS generalmente superiore ad un CISC, rendendo molto delicato (se non impossibile) un confronto basato su questo solo dato. MEMORIA CENTRALE La memoria centrale è lo spazio di lavoro del calcolatore, in cui si collocano, durante il suo funzionamento, i dati da elaborare. E' caratterizzata da un insieme di celle ciascuna delle quali contiene 8 bit (1 byte) ed ha un proprio indirizzo, cioè un numero progressivo che la identifica in modo univoco. A seconda della dimensione del Registro Indirizzi all’interno del microprocessore, quest’ultimo sarà in grado di gestire una quantità più o meno grande di memoria. Ad es., con 16 bit si possono generare 65536 (216) numeri diversi, quindi si possono raggiungere direttamente 65536 celle di memoria; i primi microprocessori avevano uno spazio di indirizzamento di questo tipo, cioè potevano indirizzare 65536 locazioni di memoria di 1 byte ciascuna, cioè 64 Kbyte. Un microprocessore con un registro indirizzi di 32 bit (come il Pentium) può indirizzare 4GByte (232 byte) di memoria. In realtà il Pentium ha un ulteriore registro a 16 bit che permette di indirizzare 65536 blocchi (segmenti) di 4Gbyte. Questo registro a 16 bit individua quindi il segmento di memoria entro cui opera il processore ed il registro indirizzi a 32 bit serve quindi a identificare la singola cella all’interno del segmento entro il quale si sta lavorando. Per gli attuali calcolatori, 4Gbyte di memoria sono sufficienti, quindi in realtà la CPU lavora, normalmente, sempre all’interno dello stesso segmento di memoria. Il tipo di memoria centrale utilizzata nella grandissima maggioranza dei casi nei calcolatori (fanno eccezione alcuni dispositivi palmari o tascabili) è la memoria di tipo RAM (Random Access Memory), cioè Memoria ad Accesso Casuale. Tale termine indica che si può accedere direttamente a qualunque locazione della memoria, indipendentemente dalla sua posizione; ogni dato è quindi raggiungibile con la stessa velocità. In pratica, tutti i tipi di memoria oggi esistenti sono ad accesso casuale, tuttavia il termine RAM indica convenzionalmente un particolare tipo di memoria ad accesso casuale che conserva i dati finché le viene fornita tensione: è cioè un tipo di memoria "volatile" e quindi, al momento dello spegnimento del calcolatore i dati vengono persi. Vedremo in seguito quali siano gli altri tipi di memoria che è possibile trovare in un sistema di calcolo. A livello operativo, sulla memoria la CPU compie tre operazioni principali: lettura, scrittura e spostamento. La lettura implica che si invii alla memoria un indirizzo e si prelevi (cioè si trasferisca all’interno della CPU) la sequenza binaria (corrispondente ad un dato o ad una istruzione) contenuto nella cella di memoria corrispondente. Con una operazione di scrittura, una volta che la CPU ha specificato l'indirizzo, va a modificare il contenuto della cella ad esso corrispondente; con lo spostamento, infine, il contenuto di una cella di memoria viene trasferito in un'altra cella. Si può dire che in pratica le operazioni possibili sulla memoria sono comunque lettura e scrittura, in quanto lo spostamento consiste in una operazione di lettura di un dato da una cella seguita da una operazione di scrittura dello stesso dato in un'altra cella. Nella memoria centrale si memorizzano sia i dati che le istruzioni che costituiscono i programmi; questi, di solito, vengono collocati in una zona della memoria distinta da quella riservata ai dati, in modo tale che la CPU possa interpretare tali sequenze come istruzioni e non come dati. 6 Il funzionamento dei calcolatori è di tipo sequenziale, cioè il calcolatore esegue un'istruzione dopo l'altra. E’ quindi naturale e vantaggioso da un punto di vista pratico che le istruzioni vengano inserite in memoria nello stesso ordine in cui devono essere eseguite. Infatti in questo modo per prelevare l’istruzione da eseguire dopo quella attualmente in esecuzione la CPU non deve fare altro che incrementare di 1 l’indirizzo contenuto nel registro Program Counter che, come detto, contiene l’indirizzo in memoria centrale della prossima istruzione che la CPU deve eseguire. L'operazione di lettura dalla memoria centrale può essere scomposta in tre fasi: (0) una fase preliminare, in cui viene attivata la linea del Bus di Controllo relativa alla lettura: quasi contemporaneamente (1) la CPU pone l'indirizzo della cella di memoria che si vuole leggere sul Bus Indirizzi. A questo punto, dopo un tempo brevissimo, detto tempo di accesso, il dato (2) viene trasmesso alla CPU sul Bus Dati. Il tempo di accesso è quindi il tempo che intercorre fra il momento in cui viene generato l'indirizzo e il momento in cui il dato richiesto viene inviato alla CPU sul Bus Dati. Questo ritardo è dovuto al fatto che i circuiti logici hanno bisogno di un certo tempo per cambiare stato, cioè perché alcuni loro bit commutino da 0 a 1 o viceversa. Il tempo di accesso è di solito pari a qualche decina di nanosecondi (un nanosecondo corrisponde a 10-9 s, cioè 1 miliardesimo di secondo). Nel caso dell’operazione di scrittura l'unica diversità è che nella fase (0) anziché attivare la linea di controllo relativa alla lettura si attiva la linea di controllo relativa alla scrittura; successivamente la CPU pone contemporaneamente sul Bus Indirizzi l'indirizzo della cella nella quale deve essere scritto il dato e sul Bus Dati la sequenza binaria che deve essere trasferita, ottenendo quindi un trasferimento di dati in senso opposto rispetto alla lettura. Riassumendo, vediamo quindi quali sono i parametri caratteristici della memoria centrale: la prima caratteristica fondamentale è la dimensione, espressa di solito in MByte, cioè il numero di celle (di 1 byte) disponibili all'interno della memoria. La seconda caratteristica è il tempo di accesso, che abbiamo appena definito. I Personal Computer vengono tipicamente forniti con 256 o più MByte di RAM. Abbiamo detto che la memoria centrale è normalmente una memoria di tipo RAM. Esaminiamo ora altri tipi di memoria. La memoria ROM (Read Only Memory, cioè memoria a sola lettura), viene ‘scritta’ al momento della sua produzione con un processo irreversibile e contiene quindi dati che non possono essere più modificati. Su tale tipo di memoria è quindi possibile compiere solo operazioni di lettura. Quando si accende il calcolatore, nella memoria centrale non c'è niente, in quanto la RAM ha bisogno di tensione per conservare i dati. Pertanto, cioè necessario che all'interno del calcolatore vi sia un programma, disponibile immediatamente all’accensione, che consente di "inizializzare" il calcolatore (cioè di eseguire la cosiddetta sequenza di boot o sequenza di caricamento) in modo che possa cominciare ad operare. Normalmente questa parte di programma, attivata solo al momento dell'accensione, è memorizzata su una memoria ROM, che nel PC è detta BIOS (Basic Input/Output System). Questo perché la memoria ROM conserva i dati in essa memorizzati anche a calcolatore spento. Il nome BIOS deriva dal fatto che i programmi in esso contenuti devono permettere al calcolatore di eseguire anche operazioni elementari di input/output, in quanto il calcolatore dovrà per prima cosa trasferire dalla memoria di massa alla memoria centrale (nella fase di boot) il sistema operativo, il programma cioè che gestisce l’hardware e il software applicativo del calcolatore. Un altro tipo di memoria a sola lettura sono le PROM (Programmable ROM). Queste ultime differiscono tuttavia dalle ROM in quanto, al momento della fabbricazione, non contengono alcun dato e possono in seguito essere programmate (in modo irreversibile) tramite opportuni dispositivi. Vi si possono cioè memorizzare dati che diventano inalterabili, cioè vi si può scrivere una sola volta. Per poter scrivere più volte su memorie utilizzabili come PROM sono state create le EPROM (Erasable PROM), cioè PROM cancellabili tramite l'applicazione di un fascio di raggi ultravioletti. Si tenga tuttavia presente che la cancellazione delle EPROM è un processo relativamente lungo, inoltre è totale e non selettiva. Le EPROM non possono quindi essere utilizzate al posto delle RAM, che permettono di modificare in modo quasi istantaneo il contenuto anche di una singola cella. La memorie appartenenti alla ‘famiglia’ ROM hanno la caratteristica di mantenere le informazioni senza bisogno di essere alimentate, in quanto la loro scrittura 7 avviene o mediante processi irreversibili (ROM e PROM), o mediante processi che le fanno cambiare di stato in modo stabile (EPROM) a meno che non vengano esposte ai raggi UV. Recentemente si stanno affermando anche le memorie di tipo FLASH, che sono memorie permanenti, indirizzabili singolarmente e riscrivibili, quindi possono di fatto sostituire le RAM in tutto e per tutto. Per ora tuttavia le prestazioni inferiori, in particolare in termini di tempo di accesso, ne consentono un uso efficiente solo come piccoli dispositivi di memoria di massa. MEMORIE DI MASSA Al momento dello spegnimento del calcolatore vengono cancellati tutti i dati contenuti nella memoria centrale. Bisogna quindi disporre di un sistema per conservare i dati che si sono elaborati o che si vogliono elaborare ed i programmi che servono ad elaborarli. Per questo esistono le memorie di massa, di tipo permanente, disponibili normalmente sotto forma di nastri (magnetici) o dischi (magnetici, ottici o magneto-ottici) ovvero, come detto, sotto forma di memoria FLASH. Ci si potrebbe chiedere perché non si usi questo tipo di memoria anche durante l’elaborazione. Il motivo è il tempo di accesso (che, analogamente a quanto visto per la memoria centrale, corrisponde al tempo che trascorre dal momento in cui viene inviata una richiesta di lettura o di scrittura di un dato a quello in cui il dato diventa effettivamente disponibile per l'elaborazione). Esso è infatti molto più elevato rispetto a quello della RAM o delle ROM, che sono memorie costituite da soli componenti elettronici, senza alcuna parte meccanica in movimento: un'operazione che in memoria centrale richiede alcune decine di nanosecondi richiede invece decine di millisecondi quando viene eseguita su disco. Quindi eseguire un miliardo di operazioni in memoria centrale richiede alcune decine di secondi, mentre eseguire le stesse operazioni su un disco richiederebbe alcune migliaia di secondi (N.B. 1000 secondi sono circa 17 minuti!). La memoria di tipo FLASH è anch’essa totalmente di tipo elettronico, ma ha un tempo di accesso superiore alla RAM, anche se nettamente inferiore a quello dei dispositivi di memoria di massa di tipo magnetico. In una prospettiva storica, il primo tipo di memoria di massa ad essere utilizzato sono state le schede perforate. Queste erano cartoncini in cui, ad un foro praticato in una certa posizione, corrispondeva un valore di 1 o 0 nel bit corrispondente; queste schede venivano lette da un lettore di tipo ottico che riusciva a riconoscere la presenza del foro e consentiva il trasferimento dei dati dalla scheda alla memoria centrale. Per memorizzare dati si usava quindi un perforatore di schede, un dispositivo simile ad una macchina da scrivere con una tastiera simile a quella degli attuali computer, che disponeva di una serie di aghi, anziché di martelletti come nella macchina da scrivere che incidevano le schede ‘bianche’, cioè prive di fori, contenute in un opportuno cassetto. Ovviamente come tipo di memoria era molto poco pratica. Ad ogni scheda corrispondevano pochi byte e, quindi, programmi di una certa mole o quantità di dati significative costituivano pacchi di schede di dimensioni considerevoli; le schede, inoltre, potevano deteriorarsi, piegarsi, forarsi e quindi generare errori. Un progresso decisivo si è avuto nel momento in cui si è passati alla memorizzazione su supporto magnetico. Fig.6 8 Il primo tipo di memoria di massa di tipo magnetico ad essere realizzato è stato il nastro magnetico. I nastri magnetici per computer sono del tutto analoghi ai nastri che vengono utilizzati per le registrazioni musicali o video. L'organizzazione tipica del nastro magnetico su bobina (ormai abbandonato) è simile a quella che si vede in figura 6. Il nastro è suddiviso in 9 tracce, quindi la testina è in grado di operare su 9 sezioni parallele del nastro. In ogni posizione del nastro, su ciascuna traccia viene scritto uno dei bit che compongono un byte. Le tracce sono 9 invece che 8 (1 byte= 8 bit) poiché il nono bit, che non contiene informazioni utili, viene utilizzato come controllo (controllo di parità), che consente di determinare se il byte è stato letto/scritto in modo corretto o sbagliato. Ad esempio, si può supporre di usare la regola banale ma efficace secondo cui, se il byte contiene un numero pari di 1 (o di 0), questo bit (detto bit di parità) deve essere posto a 1, se è dispari a 0. Se, ad esempio, viene letto un byte che contiene un numero pari di 1 ma il valore del bit di parità viene letto come 0, questo significa che uno dei bit del dato, o il bit di parità stesso, è stato letto/scritto in modo sbagliato. Si noti che un meccanismo di questo tipo permette di identificare solo un numero dispari di errori. Se si commettono, ad esempio, due errori, il controllo di parità non segnala alcun errore. Tuttavia, poiché un errore costituisce un evento di per sé raro, è estremamente improbabile che si commetta più di un errore scrivendo o leggendo lo stesso byte, per cui il controllo è comunque molto efficace. I nastri che si usano attualmente hanno lo stesso formato dei nastri video/audio digitale (DAT, Video8, MiniDV), che consentono di memorizzare dati con una densità (quantità di dati per unità di lunghezza) molto elevata. La distribuzione dei dati sul nastro è diversa, poiché le testine di lettura/scrittura dei videoregistratori non sono fisse ma mobili, ma il principio resta sostanzialmente lo stesso. L'accesso alle informazioni contenute sul nastro è ovviamente di tipo sequenziale, al contrario, come si è detto in precedenza, delle memorie RAM, ROM, PROM ed EPROM che sono ad accesso random. In tali memorie ogni cella è singolarmente indirizzabile: basta generare l'indirizzo per avere subito disponibile il dato corrispondente. Utilizzando i nastri magnetici, invece, accade ciò che si verifica nelle registrazioni musicali: se si vuole ascoltare un brano musicale che si trova in fondo al nastro, bisogna scorrere tutta la bobina. Analogamente, se vogliamo cercare dei dati raccolti in una certa posizione del nastro, bisognerà farlo scorrere fino a quella posizione. Quindi l'organizzazione di tipo sequenziale fa sì che l'accesso a un dato sia mediamente molto lento (anche dell'ordine di minuti). Quindi l'utilizzazione principale dei nastri è quella di copia per motivi di sicurezza (backup) di grosse quantità di dati, con un'alta densità di registrazione (su un nastro magnetico possono essere memorizzate decine di Gbyte) e con il vantaggio della portabilità. Pertanto, con un unico lettore e un numero elevato di nastri (dal costo limitato) si può disporre di un archivio molto ampio. Si può notare che i dati, in un nastro, oltre ad essere organizzati su diverse tracce, sono anche organizzati in blocchi. Cioè durante la scrittura su nastro e quindi in seguito anche durante la lettura, per ottimizzare i tempi delle operazioni di lettura e scrittura, non si fa mai accesso ad un solo byte alla volta ma ad un certo numero di byte, tipicamente 256 o 512, memorizzati su nastro in modo contiguo. Poiché il sistema di lettura è meccanico l'arresto e l’avviamento del nastro risentono dell’inerzia meccanica del dispositivo, per cui la velocità di scorrimento standard, necessaria per una corretta lettura dei dati, viene raggiunta in alcune frazioni di secondo, durante le quali il nastro si sposta di una certa lunghezza. Per distinguere i diversi blocchi di dati si interpone un gap fra di essi, cioè uno spazio bianco che dovrà essere più lungo di tale lunghezza per poter accedere al blocco successivo rispetto alla posizione in cui il nastro si è eventualmente arrestato, senza bisogno di riavvolgere il nastro stesso. Se supponiamo, quindi, che, al momento in cui si termina la lettura di un blocco di dati il nastro sia posizionato esattamente alla fine di tale blocco, fra quest'ultimo ed il blocco successivo è necessario predisporre il gap per poter leggere il blocco successivo anche a partire da nastro fermo. Se invece di dare un'organizzazione di tipo rigorosamente sequenziale come quella di un nastro, si dispongono i dati su un supporto di forma diversa, come ad esempio un disco, a parità di supporto magnetico e quindi di registrazione di informazioni sì potrà ottenere un tempo di accesso decisamente più rapido. 9 Vediamo come vengono organizzati i dati su un disco (figg. 7 - 8). Fig. 7 Le tracce, a differenza del nastro, in cui erano disposte in modo parallelo, sono concentriche. Quindi i blocchi, rettangolari nel caso del nastro, nel caso del disco sono settori circolari. A causa della forma del disco e del suo moto di rotazione (anziché di scorrimento lineare come nel caso del nastro), un punto che si trova su di esso ritorna periodicamente nella stessa posizione. Anche nei dischi esiste il problema che, dal momento dell'avviamento del disco, passa un po' di tempo prima che questo giunga alla velocità ideale per la lettura; ma, basterà attendere che, una volta raggiunta la velocità di lettura, il dato ripassi sotto la testina per poterlo leggere. Poiché il disco ruota piuttosto velocemente (oggi fino a una velocità di 7200 giri/minuto) il tempo di attesa prima che un dato ripassi nella posizione desiderata e utile per la lettura è piuttosto limitato. E’ quindi sufficiente predisporre sulla superficie del disco un singolo gap, che serve unicamente come riferimento per segnalare l'inizio del conteggio dei settori. Supponiamo ad esempio di voler leggere il settore che in fig. 8 è contrassegnato da un asterisco. Possiamo supporre di cominciare a contare le tracce dal centro lungo il raggio e i settori a partire dal gap e procedendo in senso orario; il settore contrassegnato dall'asterisco nella figura corrisponde allora alla seconda traccia del primo settore. I settori interni del disco sono più corti e questo, poiché in ogni settore deve essere registrato un uguale numero di dati, fa sì che la densità di informazione (quantità di dati per unità di superficie) nelle tracce interne sia maggiore di quella delle tracce esterne. Tenendo conto che c'è un limite fisico nella densità delle informazioni che possono essere registrate su un supporto magnetico, si ha una utilizzazione non ottimale del supporto, in quanto solo nelle tracce interne si può utilizzare la massima densità possibile, mentre la densità delle tracce esterne è inevitabilmente inferiore. Se da un certo punto di vista, quindi, le tracce esterne sono sottoutilizzate, quelle interne, poiché le prestazioni del supporto vengono portate al limite, sono quelle in cui si può avere più facilmente qualche inconveniente, come ad esempio la perdita di qualche dato, a causa di processi di smagnetizzazione. In testa a ciascun blocco di dati viene scritto il suo indirizzo, individuato dalla traccia e dal settore. Fig. 8 Al momento in cui si acquista un disco, questo è semplicemente di materiale magnetico neutro, privo di punti di riferimento per il calcolatore. Per poterlo utilizzare occorre dargli un formato, quindi eseguire la 10 cosiddetta operazione di formattazione. Il disco non viene, di solito, formattato direttamente dalla fabbrica in quanto ogni sistema di calcolo utilizza una diversa convenzione (formato) e quindi, nonostante si possano usare gli stessi dischi con sistemi diversi, a seconda del sistema utilizzato vengono registrate inizialmente informazioni diverse che consentiranno di accedere ai dati. Il sistema più semplice per operare una lettura su disco è utilizzare un'unica testina che può spostarsi lungo il raggio e quindi leggere qualunque traccia, o insieme di tracce contigue, del disco. Il metodo quindi più immediato per rendere più veloce la lettura consiste nell'utilizzare un unico blocco composto da più testine, una per traccia, onde evitare di dovere attendere il tempo necessario alla testina per spostarsi radialmente e posizionarsi sulla traccia in cui è contenuto il dato che deve essere letto. Se il dato si trova nel settore immediatamente successivo alla posizione della testina, la lettura sarà pressoché immediata, ma se il dato è appena passato sotto la testina bisognerà attendere che il disco compia un'intera rotazione prima di poterlo leggere. Quindi si può dire che, mediamente, il tempo di accesso di un disco è pari al tempo necessario ad una mezza rotazione del disco stesso. Memorie di massa più veloci possono essere costituite da sistemi a stack (fig. 9), in cui si hanno più dischi con più testine e quindi, se i dati vengono scritti nella stessa posizione relativa in dischi diversi si potrà accedere contemporaneamente ad una quantità di dati superiore a quella accessibile su un singolo disco di tante volte quante sono i dischi che vengono impiegati. Fig. 9 Un sistema di memorizzazione che consente di ovviare ai problemi di densità non omogenea che si hanno nei dischi, è il sistema basato sui tamburi magnetici (fig. 10): si tratta di cilindri in cui i dati sono scritti sulla superficie esterna: quindi, ogni traccia ha la stessa dimensione e inoltre, essendo il sistema a testine fisse, la lettura può avvenire piuttosto rapidamente. Fig.10 Tuttavia, rispetto ad una pila di dischi, si ha una superficie utile minore e quindi la memorizzazione delle informazioni è meno efficiente, tanto che questi dispositivi non sono mai stati utilizzati in modo esteso. 11 I dischi che offrono la massima densità di informazione sono quelli ottici: usano la stessa tecnologia che viene utilizzata per i compact disc e per i DVD, cioè l'1 o lo 0 vengono codificati mediante un foro, praticato con il raggio laser su una superficie riflettente, di dimensioni talmente piccole che su un disco di grandezza uguale o poco superiore a quella di un compact disc, possono essere memorizzate quantità di dati molto elevate, dell'ordine di alcune centinaia di Mbyte (CD-ROM) fino ad alcuni Gbyte (DVD-ROM) ed oltre per dischi ottici di dimensioni maggiori. Durante la lettura, se non c’è alcun foro il raggio laser di bassa potenza che è presente sul lettore viene riflesso, altrimenti attraversa il disco. Le due situazioni corrispondono ovviamente una alla lettura di un 1 e l’altra alla lettura di uno 0. I dispositivi che scrivono i dischi ottici (masterizzatori) forano fisicamente il disco e fanno quindi sì che questo non sia più riscrivibile, in quanto, ovviamente, una volta praticato un foro non è possibile “riempirlo” di nuovo. Per questo motivo i dischi che operano secondo questo principio si chiamano di tipo WORM che significa Write Once Read Many, cioè “scrivi una volta sola e leggi molte volte”. Nel caso di CD e DVD si parla rispettivamente di CD-ROM e DVD-ROM per evidenziare la proprietà di tali dispositivi di consentire solo la lettura dei dati, una volta che sono stati scritti. Esistono anche dischi (come ad esempio i CD-RW e i DVD-RW cioè i CD e DVD riscrivibili), che si basano su alterazioni reversibili della superficie riflettente e possono essere quindi scritti più volte. Il compact disc è stato presentato originariamente come supporto per registrazioni musicali pressoché indistruttibile. Pur essendo sicuramente meno alterabile di un 33 giri in vinile, è tuttavia più corretto dire che, per quanto riguarda la ricostruzione di un segnale musicale, il danneggiamento o la mancata lettura di alcuni byte alterano la riproduzione sonora in modo quasi impercettibile, anche per merito dei metodi di correzione degli errori che compensano la mancata lettura di alcuni campioni isolati. Quando invece si tratta di dati, la perdita di un singolo bit può essere talvolta sufficiente a compromettere completamente l'elaborazione. Si pensi ad es. ad un'immagine di tipo medico in cui una zona di interesse può essere rappresentata da una alterazione di dimensioni anche molto limitate, all’apparenza molto simile all'effetto che si può avere a causa della perdita o all'alterazione di qualche pixel. Oppure, più semplicemente, ad un programma in cui venga sostituita un’istruzione con un’altra a caso, a causa di un errore di lettura. L'affidabilità di questi dispositivi non è quindi assoluta, anche se è di solito superiore rispetto a quella un supporto magnetico; pertanto, se si vuole gestire un archivio, anche utilizzando dischi ottici sarà comunque opportuno disporre sempre di una seconda copia di sicurezza (backup). Vediamo ora quali sono i parametri caratteristici dei dispositivi di memorizzazione di massa, in particolare dei dischi e dei nastri: la caratteristica principale è la capacità, cioè la quantità totale di byte che si può memorizzare. Per i nastri a bobina era dell'ordine di alcune decine di Mbyte; ora, con l'avvento dei DAT e del nastri video (ad es. DV o Video 8 Sony) si può arrivare a decine di Gbyte. Può essere interessante anche valutare il costo medio di un nastro per valutare il costo effettivo per byte di questi dispositivi: un nastro DAT, DV o Video8 per memorizzazione dati costa in genere circa 5/10 Euro. Per quanto riguarda i dischi, possono essere asportabili o fissi. I dischi asportabili sono di solito i floppy disk che possono essere da 3.5 pollici di diametro e contenere 720 Kbyte, 1.44 Mbyte o 2.88 Mbyte, oppure da 5.25 pollici (ormai in disuso) e contenere o 360 Kbyte o 1.2 Mbyte. I floppy disk hanno un costo di circa 50 centesimi, fino a circa 1 Euro per quelli da 2.88 Mbyte, standard che però non si è affermato ed è ormai anch’esso in disuso. Nei sistemi più vecchi venivano utilizzati anche dischi da 8 pollici, con una capacità di circa 360 Kbyte. Nella valutazione del costo dei dischi asportabili bisogna considerare anche il prezzo del lettore, di solito molto basso per quanto riguarda i lettori di floppy disk. Un lettore di floppy ha un prezzo di circa 15 Euro. Gli hard disk sono dischi fissi, contenuti all'interno del cabinet del calcolatore o in contenitori esterni e comprendono anche il dispositivo di lettura. Gli hard disk hanno una capacità che varia oggi di solito da 40 Gbyte in su (20 Gbyte per gli hard disk dei computer portatili), con prezzi a partire da circa 100 Euro. Per quanto riguarda i dischi ottici e magneto-ottici, da un lato, hanno una capacità molto elevata, che va dai circa 650 Mbyte dei CD-ROM a decine di Gbyte e possono costare 0.5-1 Euro (CD-ROM) fino a 2 Euro (CD-RW) ad una decina di Euro e più (dischi WORM di formato superiore), e quindi hanno un prezzo per byte molto basso. Attualmente i dispositivi più economici, relativamente al costo per byte sono i CD-ROM e 12 i DVD-ROM, che però possono essere scritti una sola volta. Il masterizzatore per CD ha un costo lievemente inferiore ad un hard disk di fascia economica, quello per DVD-ROM è di circa 2 volte maggiore. Il tempo di accesso è di solito molto più elevato rispetto a quello di un hard disk. I CD-RW hanno caratteristiche analoghe, con un costo per byte lievemente più alto, ma sono riscrivibili. Tuttavia, per come è organizzata l’informazione sul disco, non è possibile utilizzarli esattamente come un hard disk, anche se sono in commercio programmi che, a scapito della velocità di accesso, operano su di essi come se fossero hard disk. Inoltre, possono essere riscritti un numero elevato, ma comunque limitato (fino ad un migliaio) di volte. Gli altri due parametri che caratterizzano un dispositivo per la memorizzazione di massa sono il tempo di accesso, che equivale al tempo che trascorre dal momento in cui si impartisce l'ordine di andare a leggere un dato, al momento in cui la testina o il sistema di lettura si posizionano sul dato stesso. Per i nastri non ha molto senso parlare di tempo di accesso in quanto abbiamo una struttura sequenziale, quindi, come già detto, la ricerca di un dato può richiedere anche minuti se il nastro è lungo. Per i floppy si hanno tempi di accesso dell'ordine di 150 millisecondi, per i dischi ottici di 40-100 millisecondi, per gli hard disk di qualche millisecondo. Una volta che sono stati raggiunti i dati, è anche importante considerare quanto tempo impiegano per essere trasferiti in memoria: questo parametro è detto Transfer Rate e si misura in Kbyte al secondo. Questo dipende in buona parte dalle caratteristiche meccaniche del disco ma anche dal dispositivo di controllo, cioè dalla scheda elettronica che viene utilizzata per gestire le operazioni che si effettuano sul disco. Per i floppy si hanno Transfer Rate nell'ordine delle decine di Kbyte/s, per i dischi alcuni Mbyte/s, per gli hard disk si arriva anche a decine di Mbyte/s. Come abbiamo già accennato, per le diverse caratteristiche che presentano questi dispositivi, la loro utilizzazione varia da dispositivo a dispositivo. L'hard disk è una memoria di massa veloce e, per brevi periodi, può essere utilizzato anche durante una elaborazione nel caso che la memoria centrale non sia in grado di contenere tutti i dati da elaborare, limitando, se gestiti in modo intelligente, la riduzione, comunque rilevante, della velocità di esecuzione del processo. Quindi sono utilizzabili per memorizzare dati e programmi (ad es., inevitabilmente, il sistema operativo) che vengono utilizzati molto spesso e che quindi è necessario che risiedano permanentemente all'interno del calcolatore. Oppure possono essere sfruttati da meccanismi di gestione della memoria che utilizzano l'hard disk come se fosse memoria RAM. I floppy disk, i CD ROM e alcuni dischi ottici, essendo asportabili e tascabili, sono molto utili per il backup di quantità relativamente limitate di dati e per il trasferimento di dati fra calcolatori che non sono collegati fra loro in rete, mentre i nastri e i dischi ottici di maggiore capacità e dimensioni vengono prevalentemente utilizzati per l'archiviazione di grandi quantità di dati. Recentemente con l’avvento delle memorie FLASH, si stanno diffondendo anche dispositivi di memoria di massa di dimensioni limitatissime, detti pen drive o data key, in quanto assumono spesso la forma di una piccola penna o di un portachiavi. Collegati alla porta USB del calcolatore, vengono visti dal sistema operativo come un disco aggiuntivo, utilizzabile sia in lettura che in scrittura. La loro capacità varia dalle decine alle centinaia di Megabyte, hanno un tempo di accesso intorno al microsecondo e un costo di circa 50 Euro/256 Mbyte. 13