Sei sulla pagina 1di 247

1

Alberto Viotto
alberto_viotto@hotmail.com

La rivincita dei computer

Copyright 2007

La rivincita dei computer


Da cinque a cinquecento milioni Quando apparvero i primi computer, allinizio degli anni 50, sembrava che potessero fare una sola cosa: i conti. Saper fare i conti senzaltro importante, ma un compito in qualche modo limitato, tanto che nel 1953 il presidente della IBM Thomas Watson valut che nel mondo ci fosse mercato per cinque computer in tutto. Da allora la necessit di fare conti aumentata in modo impressionante, ma sono aumentati molto di pi il numero e la potenza dei calcolatori, che adesso si valuta siano circa cinquecento milioni. Che cosa fanno i calcolatori nel 2007? Praticamente di tutto: immagazzinano e riproducono suoni e immagini, compongono e traducono testi, mettono in comunicazione tra loro persone in tutto il mondo. Gestiscono la contabilit di una azienda o i conti correnti dei clienti di una banca, controllano il funzionamento dei motori delle automobili, la visualizzazione dei messaggi sui telefonini, i programmi di lavaggio delle lavastoviglie, linclinazione degli alettoni degli aeroplani. Il mondo moderno non pu pi fare a meno dei calcolatori; senza i calcolatori tutte le fabbriche del mondo si fermerebbero, le banche non sarebbero pi in grado di rintracciare i depositi dei loro correntisti, i supermercati non potrebbero pi ordinare i prodotti esauriti. Come potuto succedere tutto questo? Il libro cerca di dare una risposta a questa domanda.

Le immagini nei numeri Gli uomini hanno sempre cercato di creare delle immagini; gi i nostri antichissimi progenitori riempivano di graffiti le pareti delle loro grotte. Per molti millenni le immagini sono state create a mano; in seguito stata inventata la stampa e da qualche tempo possibile utilizzare la fotografia. Questo procedimento prevede che sulla lastra fotografica si formi comunque qualcosa che assomiglia alloriginale, anche se rimpicciolito e con i colori che non corrispondono; in ogni momento del procedimento presente una immagine in forma in qualche maniera tradizionale. Sia che si dipinga a mano, sia che si utilizzi un procedimento fotografico, esiste sempre una immagine. Con lavvento dellelettronica moderna nato un modo completamente diverso di creare e manipolare le immagini. Per riprodurre una immagine la si suddivide in punti (detti anche pixel) e per ogni punto si misurano colore e luminosit, che vengono descritti da un numero. Ad esempio, limmagine:

pu essere scomposta in questo modo:

Limmagine stata suddivisa in 32 righe e 32 colonne, per un totale di 1024 punti; una sequenza di 1024 numeri pu indicare il colore di ogni punto (in questo esempio la scelta limitata al bianco ed al nero). Memorizzando su un qualsiasi supporto che possa essere letto in modo elettronico la serie di numeri ottenuta si poi in grado di riprodurre limmagine su carta o su qualsiasi altro materiale. Questo procedimento detto digitale (dal termine inglese digit, che significa cifra decimale) e comporta la completa scomparsa dellimmagine di partenza: esiste solo una serie di numeri. Si pu effettuare una fotografia digitale di qualunque soggetto; non serve pi la pellicola, ma si usa un supporto magnetico su cui memorizzare i numeri a partire dai quali si pu realizzare una stampa. La quantit di memoria necessaria ad immagazzinare i

numeri che compongono una normale fotografia digitale di circa 1 MByte. La qualit non distinguibile da quella delle immagini ottenute con i procedimenti tradizionali. La riduzione delle immagini a numeri comporta una incredibile semplificazione del loro trattamento. Una macchina fotografica digitale pu memorizzare un buon numero di foto in forma numerica e le pu trasmettere a qualsiasi dispositivo elettronico. Unimmagine in forma digitale pu essere memorizzata su un floppy disk, un compact disk, un pen drive (le piccole chiavette che si possono collegare su una delle porte USB dei calcolatori e sono in grado di memorizzare centinaia di MBytes), inviata per posta elettronica, pubblicata su un sito web. Pu essere vista e utilizzata senza necessit di stamparla. Il procedimento digitale risolve anche un altro problema: le immagini tradizionali si deteriorano nel tempo, le fotografie ingialliscono ed i colori si alterano. Se si converte limmagine in una serie di numeri la si rende immutabile: una sequenza di numeri non si pu rovinare. Se una stampa ottenuta in modo digitale si deteriora, possibile stampare una nuova immagine partendo dai numeri che la descrivono, ed essa sar identica alla prima stampa nel momento in cui stata realizzata. Utilizzando queste tecniche una sequenza di numeri pu comprendere tutto ci che caratterizza unimmagine. Forme, colori, sfumature, valore artistico sono riconducibili ai numeri che la descrivono, perch questa descrizione completa e non c una differenza percepibile tra una riproduzione fatta a partire dai numeri ed una riproduzione tradizionale. Con il procedimento digitale anche possibile creare con un programma per calcolatore delle immagini nuove direttamente come sequenza di numeri. Vi sono gi alcuni artisti che realizzano le loro opere in questo modo ed facile immaginare che in futuro questa pratica si diffonda sempre di pi. Un nuovo Van Gogh potrebbe limitarsi a generare dei numeri. Per migliaia di anni un dipinto stato qualcosa di unico. Il valore enorme che pu avere il quadro originale rispetto ad una copia dipinta da un falsario risiede nella sua unicit, nonostante vi siano falsi cos perfetti che nessuno, tranne pochi esperti, in grado di distinguere loriginale dalla copia. Nel caso delle immagini create

direttamente in forma digitale quello che si chiamava originale semplicemente non esiste.

La musica nei numeri Per noi che viviamo nel XXI secolo ascoltare la musica molto semplice: si inserisce una cassetta o un CD in un lettore e si pu ascoltare un concerto di una delle migliori orchestre del mondo con una qualit sonora eccezionale. Basta andare indietro nel tempo poco pi di un secolo, per, per trovare una situazione completamente diversa: la musica si poteva ascoltare solo dal vivo, e lascolto delle migliori orchestre era riservato a pochi fortunati. La possibilit di riprodurre la musica inizi nel 1877, quanto Thomas Edison brevett il suo fonografo. Il suono era memorizzato in solchi di ampiezza e profondit variabile, la cui forma riproduceva le frequenze del pezzo musicale. In ogni momento il formato del solco corrispondeva (in altri termini, era analogo) allaltezza ed alla intensit del suono. Questo tipo di rappresentazione detta appunto analogica e non presenta discontinuit tra due momenti successivi; lampiezza e profondit del solco variano in maniera continua. Essa rende pressoch impossibile riprodurre illegalmente un disco, perch creare un solco con il formato corrispondente alla musica con la necessaria precisione richiede un procedimento industriale. Questo tipo di memorizzazione della musica non sembrava particolarmente innaturale. Una volta superato lo sconcerto legato al fatto che la voce o la musica si potessero riprodurre, non cera niente di cos strano nel fatto che i suoni fossero catturati da qualcosa che ne riproduceva la forma. Da alcuni anni si passati ad utilizzare un tipo completamente diverso di riproduzione del suono, chiamato digitale perch basato sui numeri, come nel caso delle immagini. Per memorizzare la musica se ne effettua un campionamento, misurando la pressione sonora con una frequenza di circa 40.000 volte al secondo; in questa maniera si descrive completamente il suono, sia il succedersi delle note che lintensit. La possibilit di descrivere in maniera semplice il suono dipende dalla sua natura fisica. Il suono deriva dalla oscillazione delle particelle di aria in cui siamo immersi. Uno strumento musicale, ad esempio un violino, produce il suono tramite le oscillazioni di una

sua corda, che vibra in maniera sinusoidale e trasmette le vibrazioni allatmosfera. Limmagine indica le vibrazioni della corda di uno strumento:

Londa sonora risultante ha questa forma:

Laltezza del suono dipende dal numero di vibrazioni al secondo, e cio dalla loro frequenza, che diminuisce allaumentare della lunghezza della corda che le produce; un contrabbasso, le cui corde sono pi lunghe di quelle del violino, produce un suono con una frequenza inferiore, e quindi meno acuto. Il do pi basso di un pianoforte corrisponde ad una frequenza di circa 33 vibrazioni al secondo (in termini fisici, 33 Hz), mentre il do pi alto corrisponde a circa 4000 (4000 Hz, o 4KHz). Il nostro orecchio dispone di recettori che sono in grado di rilevare le oscillazioni sinusoidali della pressione sonora, entrando in vibrazione con la stessa frequenza. Gli esseri umani sono in grado di percepire i suoni con frequenze da circa 20 Hz a circa 20000 Hz. Quando i suoni sono composti dalla somma di molte oscillazioni (come avviene quasi sempre, ad esempio quando pi corde di uno strumento vibrano contemporaneamente) il nostro orecchio in grado di scomporre il suono nelle sue componenti.

Lintensit del suono dipende invece dai valori minimo e massimo che la pressione sonora raggiunge nelle sue oscillazioni. In questo modo la sequenza di numeri che deriva dal campionamento descrive completamente la variazione della pressione sonora; a partire da questa serie di numeri si pu ricostruire perfettamente il suono. La musica digitalizzata pu essere trattata con la stessa facilit con cui si trattano le immagini digitali; pu essere memorizzata su un qualsiasi supporto ottico o magnetico, come un compact disk, manipolata con un programma di un calcolatore, inviata ad altri come allegato di posta elettronica. Tramite un qualsiasi lettore digitale si pu ottenere una riproduzione sonora di altissima qualit; si pu, ad esempio, caricare il brano su uno dei lettori portatili che si stanno diffondendo ed ascoltarlo in qualsiasi posto. I vecchi dischi in vinile si deterioravano facilmente, ed i fruscii che peggioravano ad ogni ascolto sono stati compagni inseparabili degli appassionati di musica. La digitalizzazione risolve completamente questo problema, come risolve il problema del deterioramento delle immagini: una sequenza di numeri non si pu rovinare, ogni ascolto identico al primo. Da quando il suono pu essere memorizzato con i numeri diventato estremamente facile copiare la musica, senza perdere nulla della qualit originale; non si deve fare altro che copiare dei numeri. Un brano musicale, una volta registrato in questo modo, completamente catturato dai numeri, e la riproduzione pu raggiungere una precisione tale da ingannare i nostri sensi.

10

Una vita in quattro milioni di dischi Le immagini ed i suoni possono essere convertiti in numeri e poi riprodotti a piacere. chiaro che si possono combinare le due cose e realizzare in modo digitale anche dei filmati. Perfezionando queste tecniche si giunge alla realt virtuale, il cui obbiettivo la riproduzione di esperienze sensoriali complete, utilizzando visori, cuffie e guanti (per riprodurre le percezioni tattili) pilotati da calcolatori. Lo scopo della realt virtuale di permettere una illusione completa di realt con una precisione tale che i nostri sensi non siano in grado di distinguere tra le percezioni indotte ed il mondo reale. Le ricerche in questo campo hanno raggiunto notevoli risultati, consentendo ad esempio ad un chirurgo di vedere allinterno del corpo di un paziente e di pilotare un bisturi controllato da un calcolatore che opera al suo posto. Le percezioni indotte dal mondo reale, per, sono ancora ben distinguibili da quanto proposto dai dispositivi di realt virtuale. Il motivo non risiede in particolari caratteristiche del mondo reale, ma soltanto nella qualit inferiore delle immagini, suoni e percezioni tattili proposte dalle apparecchiature di realt virtuale. La qualit delle immagini, ad esempio, dipende dalla quantit di punti in cui suddiviso il campo visivo, che a sua volta dipende dalla quantit di numeri utilizzati per descrivere le immagini. La natura del problema esclusivamente tecnica ed ogni limitazione potr essere eliminata in futuro. Le aziende con sedi in diverse parti del mondo effettuano spesso le riunioni in videoconferenza, senza la presenza fisica dei partecipanti. In ognuna delle sedi ci sono una videocamera, uno schermo, dei microfoni e degli altoparlanti, ed i partecipanti si possono reciprocamente vedere e sentire. Partecipare ad una videoconferenza, per, non esattamente come essere presenti di persona, e molti funzionari e dirigenti continuano ad effettuare costosissimi viaggi attorno al mondo. Il motivo per cui necessario essere presenti di persona che le tecniche di videoconferenza non permettono ancora di riprodurre lesperienza sensoriale continua e completa che sarebbe necessaria, perch la quantit di informazioni da registrare e

11

trasmettere sarebbe eccessiva. Anche in questo caso, per, il problema di natura esclusivamente tecnica. La quantit di numeri (e quindi di informazioni) che possono essere memorizzati potr crescere decisamente nel futuro. Si pu addirittura pensare di memorizzare in modo numerico tutte le esperienze sensoriali di una persona, o almeno le percezioni visive e sonore. In via del tutto ipotetica, immaginiamo che una persona indossi sempre una videocamera digitale miniaturizzata, che memorizzi tutto ci che vede e ascolta nel corso della propria vita. Che capacit servirebbe per mantenere tutti questi dati? Attualmente un video di buona qualit richiede circa 3 GBytes per ora. Immaginiamo che per ottenere un campo visivo molto ampio ed una qualit straordinaria (quella che ci serve) siano necessari 300 GBytes per ora. Per memorizzare una giornata di sedici ore di veglia, quindi, servirebbero circa 5.000 GBytes, ovvero 5 TeraBytes. Una vita umana di 80 anni comprende circa 30.000 giorni, corrispondenti ad una capacit di 150.000 TeraBytes, ovvero di 150 PetaBytes. Questa impressionante quantit di dati equivale alla somma delle capacit dei dischi di 4 milioni di PC attuali, ma forse un giorno sar possibile dedicarla ad una sola persona.

12

Il felice disordine del web Nel suo celebre racconto La biblioteca di Babele lo scrittore argentino Jorge Louis Borges immagina una immensa biblioteca i cui libri comprendono tutte le possibili combinazioni di lettere. Nella Biblioteca, quindi, si trovano tutti i libri che possono esistere, ma i testi utili sono nascosti tra moltitudini di volumi insensati. Uno di questi libri, che mio padre vide nellesagono del circuito quindici novantaquattro, constava delle lettere MCV, perversamente ripetute dalla prima allultima riga. Un altro (molto consultato in questa zona) un mero labirinto di lettere, ma lultima pagina dice Oh tempo le tue piramidi. E ormai risaputo: per una riga ragionevole, per una notizia corretta, vi sono leghe di insensate cacofonie, di farragini verbali e di incoerenze. Spesso chi si accosta al web prova uno sconcerto simile a quello dei bibliotecari di Borges. Nel web si trova una enorme quantit di informazioni, certamente non tutte (come nella Biblioteca), ma pi che in qualunque altro strumento. Per trovare le informazioni che ci servono, per, necessario cercare tra una moltitudine di pagine insensate o irrilevanti. Il numero delle pagine web disponibili in rete superiore ai dieci miliardi, ma la stragrande maggioranza di queste pagine non ci pu minimamente interessare: pubblicit, vecchie notizie di cronaca, siti personali autocelebrativi di sconosciuti, discussioni insulse e veri e propri relitti, pagine che da anni nessuno consulta o modifica. Un altro motivo di sconcerto per chi cerca di capire la natura del web la sua sostanziale assenza di struttura. Lindirizzo di una pagina di solito non contiene informazioni sufficienti a catalogarla. Al loro interno alcune organizzazioni che si affacciano sul web cercano di mantenere una struttura coerente delle pagine, ma il numero delle organizzazioni talmente alto e i criteri di catalogazione sono talmente eterogenei che non si pu pensare ad una struttura globale. A differenza dei bibliotecari di Borges, per, i navigatori del web possono effettivamente usare il loro strumento, utilizzando i

13

cosiddetti motori di ricerca, con cui possibile districarsi nelloceano delle informazioni. Questi programmi leggono le pagine web di cui sono a conoscenza, seguendo tutti gli hyperlink che trovano. In questo modo si creano degli indici in costante aggiornamento, non esaustivi ma sufficientemente ricchi per la maggior parte delle esigenze. Gli indici dei motori di ricerca non sono organici, ma si limitano ad indicare in quali pagine sono presenti determinate parole o combinazioni di parole. Nonostante ci la loro efficienza elevatissima, e sembra dimostrare che in fondo lordine non una qualit indispensabile. La ricchezza delle informazioni disponibili sul Web tale che si pu fare a meno di una struttura globale. Lutilizzo dei motori di ricerca molto semplice: si va su un portale come www.yahoo.it o www.lycos.it, o su un motore di ricerca specializzato come www.google.it (che ha il catalogo pi vasto al mondo, circa otto miliardi di pagine), e si digita qualche parola che ha pertinenza con loggetto della ricerca. Il motore ritorna un elenco di puntatori a pagine che possono interessare, corredate da un breve riassunto. Qualsiasi argomento si voglia approfondire, le opere del regista di un film visto anni fa, la discografia di un gruppo musicale, il parere della critica su un autore, il web la fonte pi ricca di informazioni che si abbia a disposizione. Se si ha un problema medico e si vuole essere al corrente degli ultimi sviluppi delle ricerche, sul web quasi sicuramente si possono trovare le informazioni che ci servono. molto probabile che qualcuno nel mondo abbia inserito delle pagine sullargomento e che in qualche maniera riusciamo a raggiungerle. Nellutilizzo dei motori di ricerca necessaria qualche accortezza; molto importante utilizzare parole chiave significative, che probabile che si trovino nei documenti che cerchiamo. Se si vogliono ottenere informazioni sulla vita di una persona, ad esempio, si possono utilizzare come parole chiave il nome e cognome e lanno di nascita, che quasi sicuramente sono presenti in un profilo biografico. Per evitare di perdere tempo accedendo a pagine che non ci interessano si devono scorrere i riassunti riportati dal motore di ricerca. In questa fase la propria abilit fondamentale; non vi sono al momento strumenti che possano evitare fraintendimenti. Se si superano le prime difficolt, per, ci si trova a disposizione lo

14

strumento di conoscenza di gran lunga pi efficace che sia mai esistito.

15

Un numero per qualsiasi oggetto Nel marzo del 2005 una importante azienda italiana, la Mediaset, stata denunciata da alcune organizzazioni sindacali per una presunta violazione dello statuto dei lavoratori. Nei nuovi badge dei dipendenti della Mediaset, infatti, era stato inserito un tag RFID (Radio Frequency Identification), grande come un granello di sabbia, che pu essere letto da dispositivi di prossimit. I vantaggi di questa tecnologia sono evidenti; le porte degli uffici si aprono senza bisogno di strisciare il badge in un lettore, le sbarre dei parcheggi si alzano magicamente al passaggio delle auto delle persone autorizzate. Il problema evidenziato dai sindacati riguarda la possibilit di tracciare la presenza di un dipendente in un certo luogo. Un lettore dei tag RFID vicino alla macchina del caff, in teoria, potrebbe fare sapere allazienda quanto tempo ogni dipendente trascorre nelle aree break. Questo andrebbe contro un articolo dello statuto dei lavoratori, che vieta espressamente i controlli a distanza dellattivit lavorativa. I tag RFID pi comuni sono dei circuiti passivi, privi di alimentazione, che funzionano solo se attivati da un rilevatore. La distanza massima a cui possono essere letti pu andare da 50 centimetri fino ad un paio di metri a seconda del tipo. Attualmente il costo di ogni tag di poche decine di centesimi di dollaro, ma in futuro potrebbe scendere fino a due centesimi di dollaro. In questo caso potrebbe diventare conveniente inserire un tag in ogni etichetta; per pagare la spesa al supermercato non ci sarebbe pi bisogno dei cassieri che leggono ad una a una le etichette dei prodotti, ma basterebbe passare con il carrello vicino ad un rilevatore. Il codice impostato sui tag di solito segue lo standard EPC (electronic product code), sviluppato dal MIT (Massachusetts Institute of Technology), ed composto da 96 cifre binarie. Poich un numero con 30 cifre binarie (un Giga) pu superare di poco il miliardo (per lesattezza 1.073.741.284, come si vedr nei prossimi capitoli), utilizzando le propriet delle potenze si pu calcolare che un numero con 60 cifre binarie pu superare un miliardo di miliardi, un numero con 90 cifre binarie un miliardo di miliardi di miliardi. Con i 6 bit restanti si possono esprimere 64 combinazioni, per cui il

16

numero delle combinazioni realizzabili con 96 cifre binarie dellordine dei 64 miliardi di miliardi di miliardi, pi precisamente circa 80 miliardi di miliardi di miliardi. Questo numero cos grande che pu fornire lidentificazione univoca di qualsiasi oggetto, non solo di ogni tipo di oggetto. Ad esempio, su di un tag si pu inserire non solo linformazione che un prodotto una lattina di Cola di un certo tipo, una certa marca ed un certo costo, ma anche lidentificativo della singola lattina, di cui si pu tracciare tutto il cammino dalla produzione alla distribuzione e al riciclaggio una volta consumata. Non c rischio di rimanere a corto di combinazioni. Per un confronto, sulla terra ci sono circa sei miliardi di esseri umani; se si dividessero le combinazioni possibili tra tutti gli esseri umani del pianeta, se ne potrebbero assegnare ad ognuno circa dodici miliardi di miliardi. Dividendo questo numero per il numero di secondi di una vita umana di media durata (circa due miliardi), si ottengono circa sei miliardi di combinazioni per ogni secondo della vita di ogni persona del pianeta. Come evitare che unazienda utilizzi un codice gi usato e come permettere a chiunque di identificare un oggetto a partire dal suo codice? Il problema simile a quello dei nomi su Internet, in cui esiste una directory globale (il database DNS) che garantisce a qualunque azienda o organizzazione un nome unico nel mondo (come lastampa.it) e permette a chiunque di risalire da un indirizzo Internet allorganizzazione che lo utilizza. In modo simile a quanto avviene in Internet, si potrebbe assegnare ad ogni azienda un certo numero di identificativi per i tag RFID. Questa gigantesca directory in via di sviluppo e si chiamer ONS (object name service). Il progetto stato assegnato alla VeriSign, unazienda che gestisce la ricerca di buona parte degli indirizzi Internet. Quando il database ONS sar universalmente riconosciuto, come gi avviene con il database DNS, sar possibile risalire immediatamente da ogni tag RFID a tutte le caratteristiche delloggetto che identifica.

17

Come funzionano i calcolatori


I numeri intorno a noi Molti aspetti della nostra vita quotidiana sono completamente regolati dai numeri. Quando facciamo la spesa al supermercato ogni articolo identificato da un numero, rappresentato nel codice a barre, dal quale si riesce a risalire al prezzo. Per pagare usiamo spesso una carta di credito o una tessera Bancomat, caratterizzate dal numero di serie che identifica il conto da cui prelevare i fondi. Per garantire la nostra identit in un pagamento Bancomat, infine, dobbiamo dimostrare di conoscere un altro numero, il codice segreto. La gestione della enorme quantit di numeri utilizzati nelle nostre faccende quotidiane molto al di l delle capacit degli esseri umani ed affidata completamente ai calcolatori. Per comprendere i concetti matematici su cui si basa il loro funzionamento conviene partire dagli antichi Romani.

18

Numeri romani Per gli antichi Romani avere a che fare con i numeri era tuttaltro che agevole. Il numero 1848, ad esempio, veniva scritto in questo modo: MDCCCXLVIII e per capire il suo valore necessario pensarci su un po. La numerazione romana utilizzava dei simboli che probabilmente ci sono familiari: simbolo romano I V X L C D M valore 1 5 10 50 100 500 1000

Per esprimere valori diversi da questi si potevano ripetere pi volte i simboli, ad esempio III (corrisponde a 3) XIII (corrisponde a 13) I simboli di valore pi alto venivano indicati per primi. Se invece si incominciava con un simbolo di valore pi basso, il suo valore non veniva addizionato, ma sottratto: IX (corrisponde a 9) XXIV (corrisponde a 24)

19

Questa numerazione semplice ed elegante per numeri piuttosto piccoli (la si usa ancora, ad esempio, se si deve attribuire un numero ad una quindicina di volumi di unopera), ma diventa molto scomoda al crescere dei numeri. Gi 1848 pone dei problemi, ma le cose peggiorano se si devono scrivere numeri veramente grandi, come quelli che incontreremo pi avanti.

20

La scoperta dello zero Il nostro sistema di numerazione molto pi pratico di quello utilizzato dagli antichi Romani. Le cifre che utilizziamo vanno da 1 a 9, ma il loro valore dipende dalla posizione che occupano nel numero. Ad esempio, la cifra 1 pu indicare una unit, una decina (10), un migliaio (1000). Lefficienza di questa numerazione evidente. Per indicare i numeri inferiori a cento, ad esempio, sono necessari al massimo due simboli. Con il sistema usata dai romani, invece, per indicare un numero come 88 servono ben otto simboli: LXXXVIII Con questo sistema, inoltre, noi sappiamo virtualmente contare fino a qualsiasi cifra, mentre con i numeri romani sarebbe necessario aggiungere sempre nuovi simboli. Per quale motivo i Romani e tutti gli altri popoli dellantichit non sono riusciti a concepire un sistema cos efficace, che a noi sembra ovvio? La ragione che a questo scopo serve una cifra molto particolare, quella che William Shakespeare chiam un O senza figura, lo zero. Il concetto di zero, un simbolo che non ha valore di per s, ma soltanto perch permette ad altri numeri di assumere un valore diverso, che aggiunto ad un 1 permette di ottenere un 10, importantissimo e tuttaltro che banale. Si ritiene che a concepirlo per prima sia stata la cultura indiana, capace di assegnare un simbolo ad un concetto che rappresenta il non-essere. Lo zero venne poi introdotto in Europa dagli arabi e si afferm nella cultura occidentale grazie al grande matematico Leonardo Pisano (1170-1250), noto anche come Fibonacci. Lo zero permette di indicare che in un numero un posto non occupato, identificando con chiarezza la posizione di ogni simbolo. In questo modo una cifra pu avere un valore che dipende dalla posizione. Se una cifra si trova nellultima posizione di un numero il suo valore non va modificato; se invece si trova nella penultima

21

posizione il suo valore va moltiplicato per 10, se si trova nella terzultima va moltiplicato per 100, se si trova nella quartultima va moltiplicato per 1000, e cos via. 100 uguale a dieci per dieci, e lo si pu descrivere come due dieci moltiplicati tra loro, oppure 10 elevato alla seconda potenza. 1000 pu essere descritto come tre dieci moltiplicati tra loro, oppure 10 elevato alla terza potenza, e cos via. In questo modo, 3285 pu essere indicato come: 3 migliaia (10 elevato alla terza potenza) 2 centinaia (10 elevato alla seconda potenza) 8 decine (10 elevato alla prima potenza) 5 unit Se si esclude lultima posizione, quindi, ogni cifra va moltiplicata per dieci elevato ad una potenza che corrisponde alla posizione in cui si trova.

22

La scala esponenziale Quando si pensa ad un numero enorme pu venire in mente una cifra gigantesca, come, ahim, il debito pubblico italiano espresso in lire, circa due milioni di miliardi: 2.000.000.000.000.000 Un numero di questa grandezza non crea eccessive difficolt per rappresentarlo, ma in campo scientifico si possono incontrare numeri davvero grandi, come il numero di molecole che si trovano in un litro di acqua (circa dieci milioni di miliardi di miliardi). In questo caso pu diventare difficile scriverli: 10.000.000.000.000.000.000.000.000 chiaro che questa lunga sequenza di zeri non particolarmente rilevante; lunica informazione presente quanti siano gli zeri. Per esprimere numeri di questa grandezza si ricorre quindi alla notazione esponenziale, che considera quante sono le cifre contenute in un numero. Un miliardo, ad esempio, scritto come 1.000.000.000, si pu indicare pi semplicemente come "1 seguito da 9 zeri", oppure "10 elevato alla nona potenza". Il numero di zeri, nove, detto anche esponente. In questo modo il numero di molecole che si trovano in un litro d'acqua si pu esprimere molto pi semplicemente come 10 elevato a 25. Questo numero talmente grande che, se si ricevessero da ogni uomo della terra un miliardo di molecole, si raccoglierebbe molto di meno di un litro, solo alcuni milionesimi di grammo. Naturalmente esistono numeri ancora pi grandi; si pu calcolare, ad esempio, il numero di molecole che compongono la Terra. Questo numero dell'ordine di 10 elevato a 50. Per rappresentarlo nella maniera ordinaria si dovrebbe scrivere: 100.000.000.000.000.000.000.000.000.000.000.000.000.000.000.000 .000

23

chiaro che 10 elevato a 50 molto pi comodo ed efficace. Per moltiplicare o dividere tra loro numeri espressi in questo modo si pu utilizzare una semplice propriet delle potenze che ci torner molto utile. Dividendo un numero espresso da 1 seguito da un certo numero di zeri per un altro numero, pi piccolo, espresso allo stesso modo, sufficiente ridurre il numero di zeri del primo numero del numero di zeri del secondo numero. Se ad esempio si deve dividere un miliardo 1.000.000.000 (oppure 10 elevato a 9) per un milione 1.000.000 (oppure 10 elevato a 6) il risultato 1.000, oppure 10 elevato alla terza potenza. Loperazione da effettuare sugli esponenti la sottrazione: nove meno sei d appunto tre. Una propriet analoga vale per la moltiplicazione. Moltiplicando un milione (10 elevato a 6) per 1000 (10 elevato a 3) si ottiene un miliardo (10 elevato a 9); si sono sommati i due esponenti, tre e sei, per ottenere lesponente finale, nove. Quanto un millesimo del numero di molecole della terra, espresso da 10 elevato a 50? sufficiente sottrarre 3 (lesponente necessario per ottenere 1000) a 50, ottenendo 47; un millesimo del numero di molecole della terra 10 elevato a 47.

24

Dieci dita La numerazione che usiamo abitualmente detta decimale perch utilizza come base il numero 10. C forse qualche particolare motivo per utilizzare proprio questo numero? No, si potrebbe utilizzare qualsiasi base; in questo caso ogni cifra andrebbe moltiplicata per il numero scelto come base elevato alla potenza corrispondente alla posizione. Se, ad esempio, adottassimo come base il 7, il numero 153 significherebbe: 1 per 7 elevato alla seconda potenza 5 per 7 3 unit Espresso in base decimale, poich 7 elevato alla seconda potenza 49, 5 per 7 35 e 49 + 35 + 3 = 87 questo numero indicherebbe 87. Se adottassimo come base il 16, o qualsiasi numero maggiore di 10, avremmo il problema di dover introdurre delle nuove cifre, perch ogni numero pi piccolo della base deve essere indicato con una sola cifra. Nella numerazione con base sedici (o esadecimale), che spesso usata in informatica, oltre alle cifre abituali 123456789 si aggiungono le lettere ABCDEF, con questi valori decimali: simbolo A B C D E F valore 10 11 12 13 14 15

25

Una numerazione efficiente deve utilizzare come base un numero abbastanza piccolo, per evitare la necessit di introdurre troppi simboli, ma nella scelta della base si deve tenere conto anche di unaltra esigenza: qualsiasi base si utilizzi, il numero espresso come 10 rappresenta il valore di quella base, e probabilmente verr usato spesso. Vi siete mai chiesti perch di solito un programma di allenamento prevede per ogni esercizio dieci o venti ripetizioni, e non nove o diciassette, che potrebbero essere il numero ottimale? Perch i comandamenti sono proprio dieci, e non undici o nove? Il motivo che il numero 10 pi facile da ricordare, e la semplificazione che si ottiene arrotondando un vantaggio che ci fa rinunciare di buon grado alla ricerca dellesattezza. inevitabile che il numero che rappresenta la base di un sistema di numerazione sia utilizzato pi di ogni altro. Spesso, per, c lesigenza di considerare una frazione di questo numero particolarmente comodo. La maggioranza dei prezzi degli oggetti sono cifre tonde, come 10 o 100, e se un oggetto costa 10 monete pu essere necessario dividere in due il ricavato della vendita, ad esempio attribuendone met al produttore e met al venditore. Se questo 10 rappresenta una base non divisibile, come 7 o 9, loperazione richiede cifre frazionarie e diventa scomoda. Per questo motivo utile che il numero scelto come base sia facilmente divisibile; un numero primo, come 7, non sarebbe adatto. La scelta di 10 abbastanza buona, perch divisibile per 2 e per 5, ma comporta conseguenze imbarazzanti perch la sua met, 5, non ulteriormente divisibile. Nelle serie di banconote emesse da una nazione, che di solito comprendono tagli da 10, 50 e 100, il taglio intermedio tra 10 e 50 per alcune nazioni 20 (in modo da poter essere cambiato con due tagli da 10), per altre 25 (in modo che un taglio da 50 possa essere cambiato con due tagli da 25). Non c modo di arrivare da 50 a 10 con divisioni successive. La base otto sarebbe migliore della base dieci, perch otto pu essere dimezzato pi volte arrivando allunit senza resti. Per quale motivo si usa la base dieci? Probabilmente perch le nostre mani hanno dieci dita, ed aprendole entrambe si indica una decina.

26

Zero e uno La base pi semplice in assoluto la base 2, detta anche binaria, che ha bisogno di due soli simboli, 0 e 1. Il primo a descriverla stato il grande matematico Gottfried Leibniz (1646-1726). Questa base molto semplice, ma non particolarmente maneggiabile. Ad esempio: 10 corrisponde a 2 (in base decimale) 1000 corrisponde a 16 1010 corrisponde a 18 10000000001 corrisponde a 1025 Con questa base occorrono molte cifre per indicare numeri di una certa grandezza, e questo la rende piuttosto scomoda per gli esseri umani. I calcolatori, per, non hanno questo problema, e si trovano benissimo con la base binaria. Nei calcolatori ogni cifra binaria detta bit e pu valere 0 o 1, un valore che realizzato con un circuito elettronico che si pu trovare in due stati, chiuso o aperto. Lutilizzo della base binaria ha permesso di costruire i calcolatori. Per sommare o moltiplicare tra loro dei numeri in forma binaria ci si comporta come si fa abitualmente con i numeri decimali: si utilizzano le tabelline. Tutti, ad esempio, siamo in grado di sommare sette ad otto ed ottenere quindici, o moltiplicarli tra loro ed ottenere cinquantasei, ma lo sappiamo fare non in base a particolare ragionamenti, ma soltanto perch abbiamo memorizzato le tabelline. Anche con i numeri in forma binaria si usano le tabelline, ma sono molto semplici.

27

Una normale tabellina di moltiplicazione in base 10 si presenta cos: 1 1 2 3 4 5 6 7 8 9 10 2 2 4 6 8 10 12 14 16 18 20 3 3 6 9 12 15 18 21 24 27 30 4 4 8 12 16 20 24 28 32 36 40 5 5 10 15 20 25 30 35 40 45 50 6 6 12 18 24 30 36 42 48 54 60 7 7 14 21 28 35 42 49 56 63 70 8 8 16 24 32 40 48 56 64 72 80 9 9 18 27 36 45 54 63 72 81 90 10 10 20 30 40 50 60 70 80 90 100

1 2 3 4 5 6 7 8 9 10

Questa, invece, la tabellina di moltiplicazione in base binaria, molto pi semplice: 1 1 10 10 10 100

1 10

Nelle prossime pagine vedremo che possibile realizzare calcoli binari abbastanza facilmente, utilizzando i circuiti elettronici.

28

Circuiti logici Laritmetica binaria molto simile alla logica booleana, introdotta dal matematico George Boole (1815-1864) con il libro Le leggi del pensiero. Boole riteneva che la logica consistesse in un insieme di leggi di forma algebrica e propose di utilizzare i due valori 1 e 0 per indicare rispettivamente la verit o la falsit di una proposizione. Nella logica booleana la congiunzione di due proposizioni (e cio laffermazione che una proposizione vera se altre due sono vere, come Anna mia zia se Anna la sorella di Alberto e Alberto mio padre) si traduce in un operatore logico, chiamato AND, che si pu descrivere in questo modo: prima 0 0 1 1 seconda 0 1 0 1 risultato 0 0 0 1

La disgiunzione di due proposizioni (e cio laffermazione che una proposizione vera se vera una delle altre due, come Anna ed io siamo fratelli se abbiamo lo stesso padre o la stessa madre) si traduce nelloperatore logico chiamato OR prima 0 0 1 1 seconda 0 1 0 1 risultato 0 1 1 1

Questi due operatori si possono realizzare semplicemente utilizzando circuiti elettrici, che diventano cos dei circuiti logici. Loperatore AND corrisponde ad un circuito con due interruttori in serie:

29

La corrente passa (stato 1) soltanto se entrambi gli interruttori sono nello stato di chiusura (convenzionalmente lo stato 1). Nel disegno dei circuiti logici di solito loperatore AND rappresentato con questo simbolo:

Loperatore OR, invece, corrisponde ad un circuito elettrico con due interruttori in parallelo:

La corrente passa (stato 1) se almeno uno degli interruttori nello stato di chiusura (lo stato 1). Nel disegno dei circuiti logici loperatore OR rappresentato cos:

30

Un altro operatore che pu essere facilmente realizzato loperatore NOT, che rappresenta la negazione: la negazione del falso vera, mentre la negazione del vero falsa.

Quando linterruttore aperto (stato 0), la batteria alimenta il circuito superiore e la corrente passa (ottenendo lo stato 1); quando linterruttore del circuito inferiore chiuso (stato 1), la seconda batteria fornisce una corrente uguale e opposta che impedisce il passaggio di corrente (ottenendo lo stato 0). Loperatore NOT ha il simbolo:

Infine, loperatore XOR (OR esclusivo) indica che la conclusione vera soltanto se esattamente una delle due proposizioni vera. Lo si pu descrivere cos: prima 0 0 1 1 seconda 0 1 0 1 risultato 0 1 1 0

Loperatore XOR pu essere realizzato combinando gli altri circuiti logici; vale 1 se la prima proposizione A vera e la seconda B falsa - il che pu essere realizzato come A AND (NOT B) - oppure se la prima falsa e la seconda vera, il che pu essere realizzato

31

come (NOT A) AND B. Per ottenerlo, quindi, si devono utilizzare le operazioni: (A AND (NOT B)) OR ((NOT A) AND B) Le parentesi sono importanti perch indicano lordine in cui devono essere effettuate le operazioni. Nellimmagine la prima posizione A vale 1, la seconda posizione B vale 0 ed il risultato 1:

Il simbolo delloperatore XOR il seguente:

Con questi operatori si riesce a realizzare ogni operazione in aritmetica binaria. I calcolatori sono realizzati proprio su queste basi: le loro unit centrali contengono centinaia di milioni di circuiti logici miniaturizzati.

32

Verificare luguaglianza La tabella che verifica se due valori booleani A e B sono uguali : A 0 0 1 1 B 0 1 0 1 risultato 1 0 0 1

Il risultato vale 1 se A e B valgono entrambi 1 (il che pu essere espresso come A AND B) oppure se valgono entrambi 0 (il che pu essere espresso come (NOT A) AND (NOT B). Per ottenere loperatore di uguaglianza, quindi, si dovrebbero utilizzare le operazioni: (A AND B) OR ((NOT A) AND (NOT B)) Se si osserva la tabella delloperatore XOR nella capitoletto precedente, per, si pu notare che il suo risultato esattamente linverso delloperatore di uguaglianza. Per questo motivo loperazione di uguaglianza si pu realizzare in modo pi semplice con le operazioni: NOT (A XOR B) La figura riporta un circuito che verifica luguaglianza tra A e B.

33

Il circuito di addizione La somma di due numeri binari di una sola cifra vale 0 se entrambi sono 0, vale 1 se uno dei due 1 e laltro 0, ed infine vale 10 se entrambi sono 1. Anche se i due operandi hanno una dimensione di un solo bit, il risultato pu avere due bit; il primo chiamato bit pi significativo perch ha un valore maggiore, laltro bit meno significativo: primo operando 0 0 1 1 secondo operando 0 1 0 1 bit pi significativo del risultato 0 0 0 1 bit meno significativo del risultato 0 1 1 0

Per realizzare laddizione servono quindi due circuiti logici, uno per ottenere il primo bit del risultato, uno per il secondo bit. facile vedere che il circuito logico che realizza il primo bit AND, mentre quello che realizza il bit meno significativo XOR. Combinando questi due circuiti si pu realizzare un circuito di addizione. Nellimmagine il primo operando indicato come A, il secondo come B:

Se i numeri da sommare hanno pi di una cifra, il bit meno significativo del risultato va calcolato nello stesso modo, mentre il

34

bit pi significativo ottenuto ad ogni passo diventa un riporto che va considerato nel calcolo del bit successivo. Immaginiamo ad esempio di dover incrementare di uno il valore di questo numero di otto cifre binarie: 0010 1011 (43 in forma decimale) Il bit meno significativo del risultato, come nelladdizione di due cifre di un solo bit, loperatore XOR tra il bit meno significativo delloperando e il bit di incremento, entrambi 1, che vale 0. Il riporto, che scriviamo in seconda posizione per un motivo che presto risulter chiaro, loperatore AND tra gli stessi due bit e vale 1:
riporto operando incremento risultato 1 0010 1011 1 0

Il secondo bit del risultato il risultato di XOR tra il secondo bit meno significativo delloperando, 1, ed il riporto, 1, e vale 0. Il valore del riporto corrispondente il risultato di AND tra gli stessi due valori e vale 1:
riporto operando incremento risultato 11 0010 1011 1 00

Il terzo bit del risultato ed il corrispondente valore del riporto si calcolano allo stesso modo, e valgono rispettivamente 1 e 0:
riporto operando incremento risultato 011 0010 1011 1 100

Le operazioni vanno ripetute per tutti gli otto bit delloperando, ed facile vedere che dora in avanti il valore del riporto sempre 0

35

ed i rimanenti bit del risultato sono uguali ai rispettivi bit delloperando. Il risultato finale quindi: 0010 1100 (44 in forma decimale) Si potrebbe osservare che questo un metodo bizzarro e faticoso di calcolare che 43 + 1 uguale a 44, ma limportante che tutte queste operazioni possono essere eseguite da circuiti logici. Il numero di operazioni necessarie non un problema, perch un calcolatore pu effettuarne miliardi ogni secondo. Il procedimento di somma tra un numero binario ed un altro numero di un solo bit pu essere esteso per ottenere la somma tra due numeri di qualsiasi lunghezza. In questo caso si deve considerare ad ogni passo il riporto, un bit del primo e del secondo numero e si ha quindi a che fare con una somma a tre valori:
primo operando 0 0 0 0 1 1 1 1 secondo operando 0 0 1 1 0 0 1 1 riporto bit pi significativo del risultato 0 0 0 1 0 1 1 1 bit meno significativo del risultato 0 1 1 0 1 0 0 1

0 1 0 1 0 1 0 1

La somma a tre valori pu essere realizzata combinando due circuiti per la somma a due valori come quello mostrato prima (per questo motivo chiamato anche semiaddizionatore). Nellimmagine i due operandi ed il riporto sono indicati come A, B e C.

36

chiaro che il risultato finale di un incremento o di una somma tra due numeri con pi bit pu richiedere un numero maggiore di bit rispetto agli operandi; ad esempio, incrementando di 1 il valore del numero binario: 1111 1111 si ottiene 1 0000 0000 Nei calcolatori, per, il numero di bit degli operandi e del risultato fisso (negli esempi otto), per cui a volte non possibile immagazzinare nel risultato tutti i bit necessari. In questo caso il risultato viene privato del bit pi significativo, e diventa: 0000 0000 e si d un valore di 1 (la condizione vera) ad un bit di stato interno al calcolatore, talvolta chiamato bit di riporto, che indica che loperazione tra le ultime due cifre ha generato un riporto che non si pu pi utilizzare.

37

Come memorizzare le lettere Quella che viene chiamata memoria dei calcolatori non altro che un gigantesco elenco di numeri espressi in forma binaria. In questa memoria, per, si pu memorizzare anche altro, ad esempio delle lettere, purch le si descrivano in termini numerici. Le parole non sono altro che sequenze di lettere ed i testi di qualsiasi genere non sono altro che sequenze di parole. Se si associa un numero ad ogni lettera, quindi, una sequenza numerica pu rappresentare qualsiasi testo. La codifica pi utilizzata dai calcolatori detta ASCII (American Standard Code for Information Interchange), ed stata definita nel 1967 dal comitato American Standards Association, che comprendeva diverse importanti aziende dellinformatica e della telecomunicazione, come IBM ed AT&T. Nei primi tempi venne utilizzata soprattutto dalle telescriventi, ma in seguito stata universalmente adottata nel campo dellinformatica. Le lettere ed i simboli sono rappresentati dai numeri da 32 a 126 (i primi 31 numeri corrispondono a cosiddetti caratteri di controllo, utilizzati dalle telescriventi, come il carattere che indica salta ad una nuova pagina)
Num 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 Carattere Spazio ! # $ % & ( ) * + ; . / 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 64 0 1 2 3 4 5 6 7 8 9 : ; < = > ? 64 65 66 67 68 69 71 71 72 73 74 75 76 77 78 79 @ A B C D E F G H I J K L M N O 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 P Q R S T U V W X Y Z [ \ ] ^ _ 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 a b c d e f g h i j k l m n o 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 p q r s t u v w x y z { | } ~

38

Se, ad esempio, nella memoria di un calcolatore si trovano in sequenza i numeri: 67 73 65 79 questi possono rappresentare la parola CIAO.

39

Bit e bytes Le cifre binarie sono adatte ai calcolatori, ma difficili da maneggiare per gli esseri umani. Per trattarle in maniera pi semplice di solito le si raggruppano otto per volta, a formare quello che viene chiamato un byte. Il valore di un byte pu andare da 00000000 a 11111111 (255 in forma decimale) Un byte adatto a contenere il valore di un carattere ASCII, il cui valore pu arrivare fino a 126; nellesempio delle lettere nella memoria del calcolatore i numeri di cui abbiamo parlato occupano otto bit e sono in effetti dei bytes. Un byte, a sua volta, pu essere diviso in due gruppi di quattro cifre binarie ciascuno. Il valore di quattro bit pu andare da 0 a 15, esattamente come i valori delle cifre nella numerazione esadecimale. Pertanto, ogni gruppo di quattro cifre binarie pu essere espresso da una cifra esadecimale, e cio in base 16, ed ogni byte pu essere espresso da due cifre esadecimali.

40

La tabella che segue riporta ogni possibile configurazione di quattro bit associata al simbolo esadecimale corrispondente: Binario 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 Esadecimale 0 1 2 3 4 5 6 7 8 9 A B C D E F Decimale 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Per distinguere i numeri espressi in forma esadecimale di solito li si fanno precedere da 0x, ad esempio: 0xC corrisponde a 12 0x1C corrisponde a 28 (1 per il valore della base, 16, sommato a 12) Seguendo la tabella, la conversione da qualsiasi cifra binaria ad una cifra esadecimale immediata. Ad esempio: 0100 1111 0010 1010 corrisponde a: 0x4F2A.

41

Conversioni Per risalire al valore decimale di 0x4F2A si usa lo stesso procedimento gi visto per altre basi. Questo numero vale: 4 per 16 elevato alla terza potenza 0xF (15) per 16 elevato alla seconda potenza 2 per sedici 0xA (10) unit Per realizzare questi conti si devono conoscere le potenze di 16: 16 256 4096 65536 .... Questi valori corrispondono alla quarta, ottava, dodicesima e sedicesima potenza di due, perch 16 uguale a due alla quarta potenza e, come abbiamo visto, per moltiplicare tra loro le potenze di un numero basta sommare gli esponenti: due alla quarta per due alla quarta uguale a due alla ottava. 0x4F2A corrisponde quindi a: 4 per 4096 (16384) + 15 per 256 (3840) + 2 per 16 (32) + 10 e vale 20.266 in base decimale. Per convertire dalla base decimale alla base esadecimale, lavorando in questultima, si dovrebbero moltiplicare le cifre del numero decimale per le potenze di 0xA (che in base sedici vale appunto 10), e cio: 0xA 0x64 (che vale 100) 0x4E8 (che vale 1000)

42

0x2742 (che vale 10000) Normalmente, per, si preferisce lavorare nella base che ci familiare, la base dieci, ed effettuare loperazione inversa a quella usata per passare da un numero esadecimale ad un numero decimale, dividendo la cifra da convertire per le potenze di 16: 20.226 diviso 4096 vale 0x4 con resto di 3882 3.882 diviso 256 vale 0xF (che in base dieci 15) con resto di 42 42 diviso 16 vale 0x2 con resto di 10 10 in base esadecimale 0xA e si ottiene il valore esadecimale 0x4F2A.

43

Un Kilobyte non mille bytes In che modo si pu individuare ognuno dei tanti numeri che si trovano nella memoria di un calcolatore? Come avviene per le abitazioni, ogni posizione disponibile nella memoria (detta anche locazione di memoria) ha un suo indirizzo, che la identifica in modo univoco. Naturalmente lindirizzo espresso in forma binaria, ed ha un numero di cifre fisso. Se gli indirizzi sono espressi con tre cifre binarie, essi saranno semplicemente: 000 001 010 011 100 101 110 111 Nella prima posizione ci pu essere zero oppure uno (e si hanno quindi due possibilit), ma ognuna di queste deve essere moltiplicata per il numero di possibilit della seconda posizione (nuovamente due) e il tutto deve essere moltiplicato per il numero di possibilit della terza posizione (altre due). Il risultato uguale al prodotto di due per due per due, in altri termini uguale a due elevato alla terza potenza. In generale, il numero degli indirizzi di una memoria uguale a due elevato al numero di bit usati per lindirizzamento. Una memoria il cui indirizzo espresso con tre cifre binarie dispone quindi di otto locazioni di memoria, la prima delle quali ha come indirizzo zero. Ogni locazione di memoria contiene un solo byte, ma spesso si devono usare numeri pi grandi di un byte, andando ad occupare pi locazioni successive. molto comune, ad esempio, considerare numeri che occupano 32 bit, o quattro bytes; questi numeri si troveranno tutti ad indirizzi multipli di quattro.

44

Facendo un esempio pi vicino alla realt dei calcolatori, se per gli indirizzi usiamo sedici cifre binarie, essi andranno da 0000 0000 0000 0000 a 1111 1111 1111 1111 (0xFFFF in esadecimale, 65.535 in decimale) e quindi saranno esattamente 2 elevato alla sedicesima potenza, e cio 65.536 in decimale, 1 0000 0000 0000 0000 in binario, 0x10000 in esadecimale. Per indicare in modo comodo numeri di questo tipo, corrispondenti a potenze di due, si sfrutta la vicinanza del valore di due elevato alla decima potenza (1024) con il numero 1000. 2 elevato a 10 = 1024 1000 Quando in informatica si utilizza labbreviazione K (Chilo), per parlare ad esempio di KBytes, il prefisso K non indica esattamente 1000, ma appunto 1024. Per calcolare 2 elevato alla sedicesima potenza si considera che, secondo le propriet delle potenze viste nel capitoletto La scala esponenziale: 2 elevato a 16 = 2 elevato a 6 per 2 elevato a 10 Se si scorpora lultima parte, uguale a 1024, cio K, si pu parlare di 64 (2 elevato alla 6) K. Nel caso di indirizzamento a 16 bit si pu dire quindi che la memoria indirizzabile di 64 KBytes. Nel caso si debbano calcolare potenze di 2 ancora pi grandi, ad esempio la massima dimensione raggiungibile con un indirizzamento a 24 bit, si pu ripetere il procedimento. Il valore di due elevato alla ventesima potenza (1048576) molto vicino ad un milione 2 elevato a 20 = 1.048.576 1.000.000

45

Labbreviazione di questo valore M (Mega). Per calcolare la dimensione massima di una memoria indirizzata a 24 bit, 2 elevato a 24, si considera: 2 elevato a 24 = 2 elevato a 4 per 2 elevato a 20 Si scorpora lultima parte, uguale a 1.048.576, cio M, e si parla di 16 (2 elevato alla 4) MBytes. E chiaro che il procedimento pu essere ripetuto: 2 elevato a 30 = 1.073.741.824 1.000.000.000 (G, Giga) 2 elevato a 40 = 1.099.511.627.776 1.000.000.000.000 (T, Tera) 2 elevato a 50 = 1.125.899.906.842.624 1.000.000.000.000.000 (P, Peta)
2 elevato a 60 = 1.152.921.504.606.846.976 1.000.000.000.000.000.000

(E,Esa) Queste cifre, espresse in forma binaria, sarebbero veramente scomode da manipolare. Un Peta, ad esempio, 2 elevato a 50, andrebbe scritto come 100 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 Dimensioni dellordine del Giga e del Tera si incontrano ormai molto frequentemente. La dimensione media dei dischi fissi, le cosiddette memorie di massa, si misura in decine di GBytes (un PC standard ha una capacit di circa 40 GBytes), mentre sono di uso frequente dispositivi (le Storage Area Network) che hanno capacit di diversi TBytes. Tuttavia, mentre nel caso dei Chilo la differenza percentuale tra il valore esatto ed il valore approssimato molto bassa, circa il 2%, con il crescere delle cifre la differenza aumenta, arrivando a circa il 15% nel caso degli Esa.

46

Come ricordano i calcolatori Le memorie dei calcolatori sono strutturate in modo molto semplice; sono composte da una sequenza di celle di memoria, ognuna delle quali contiene otto cifre binarie, a formare un byte. Quando si vuole leggere il contenuto di un cella o, come si dice di solito, si accede ad una locazione di memoria, si d tensione alla cella in questione. Ogni cella pu essere realizzata con diverse tecniche, ad esempio con otto minuscoli condensatori, ognuno dei quali pu essere in due stati, carico (stato 1) oppure scarico (stato 0). I valori di uscita sono riportati da otto contatti che attraversano tutte le celle, ognuno dei quali trasporta corrente se il corrispondente bit del risultato ha un valore di 1. Nella figura gli otto bit sono numerati da 0 a 7. I loro nomi vanno da d7 a d0.

indirizzo 0 indirizzo 1 indirizzo 2 indirizzo 3 indirizzo 4

d7

d6

d5

d4

d3

d2

d1

d0

Le celle di memoria della figura hanno i valori: 1010 0010 0111 0000 0010 0100 0001 1111 1110 0000 (0xA2, 162) (0x70, 112) (0x24, 36) (0x1F, 31) (0xE0, 224)

47

Per accedere ad una locazione di memoria si utilizza un circuito di indirizzamento. Una cella riceve corrente se il suo indirizzo corrisponde ai valori dei bit dellindirizzamento. Prendiamo ad esempio la cella 2, il cui indirizzo binario 010; ricever corrente se il primo bit dellindirizzamento nello stato falso, il secondo nello stato vero ed il terzo nello stato falso. Se chiamiamo i tre bit di indirizzamento a2, a1 e a0 questo equivale alla operazione logica: (NOT a2) AND a1 AND (NOT a0) Loperazione pu essere realizzata in questo modo:
a2 a1 a0

In generale, per verificare che lindirizzo di una cella quello voluto, si effettua una operazione di AND tra tutti i bit dellindirizzamento e si inserisce un operatore NOT per ogni bit che deve valere zero. Lindirizzo della locazione zero, ad esempio, 000. Se si vuole accedere alla locazione zero tutti i bit dellindirizzamento devono essere a zero, per cui loperatore NOT va applicato ad ogni bit: (NOT a2) AND (NOT a1) AND (NOT a0) Loperazione pu essere realizzata in questo modo:

48 a2 a1 a0

Tutti gli altri indirizzi hanno uno o pi bit che devono valere 1, ai quali non va applicato loperatore NOT. Ad esempio lindirizzo della locazione uno (in decimale 001) va espresso come: (NOT a2) AND (NOT a1) AND a0 e cos via. Nellimmagine sono indicati i circuiti logici necessari per indirizzare la memoria del primo esempio:
a2 a1 a0

d7

d6

d5

d4

d3

d2

d1

d0

Questa memoria dispone di cinque locazioni, ma di solito la dimensione di una memoria corrisponde ad una potenza di due, per sfruttare al massimo i bit di indirizzamento. Con i tre bit indicati, ad esempio, si potrebbero indirizzare otto locazioni. Le memorie pi moderne dispongono di 28 bit di indirizzamento e contengono un

49

numero di celle di memoria pari a due elevato alla ventottesima potenza, o 256 Mbytes. Ovviamente si pu anche scrivere nelle memorie, oltre a leggerne il contenuto. Per scrivere un numero in una cella la si indirizza nel modo solito, si applica tensione ad un collegamento che indica che si effettua una operazione di scrittura e si applica tensione ai bit di dati che corrispondono al numero da scrivere. La carica dei condensatori della cella rispecchier i nuovi valori.

50

I numeri allopera

La macchina di Turing I numeri che si trovano nella memoria di un calcolatore possono essere significativi di per s, ma la loro importanza cresce enormemente se si possono modificare secondo le esigenze (o, come si dice di solito, se si possono elaborare). Un calcolatore non altro che un elaboratore di dati. Larchetipo di tutti i calcolatori la cosiddetta macchina di Turing, dal nome del grande matematico inglese Alan Turing (1912-1954) che partecip nel 1942 alla costruzione del primo calcolatore del mondo (il Colossus), usato per decodificare i messaggi segreti dei nazisti. La macchina di Turing un dispositivo in grado di leggere e modificare un nastro su cui sono scritti dei numeri (lequivalente di una memoria per calcolatore). Il nastro teoricamente illimitato (se la testina arriva in fondo al nastro se ne pu aggiungere dellaltro). Una determinata macchina di Turing caratterizzata da una lista di istruzioni che dicono che cosa deve fare quando legge un certo valore sul nastro. Le azioni che pu effettuare sono quattro: cancellare il numero che ha letto e scriverne un altro al suo posto spostarsi a sinistra spostarsi a destra fermarsi

I numeri scritti sul nastro prima che la macchina entri in funzione rappresentano il cosiddetto input, o dati iniziali. Al termine dellattivit della macchina sul nastro ci saranno altri numeri, il cosiddetto output (il risultato dei calcoli). Una macchina di Turing, ad esempio, potrebbe avere le seguenti istruzioni: se trovi un 0, scrivi 1 e spostati a destra se trovi 1, spostati a destra

51

se trovi uno spazio vuoto, fermati

facile vedere che lattivit (o computazione) di questa macchina di Turing trasforma tutti gli 0 dellinput in 1 (ipotizzando che linput sia di tipo binario ed al suo interno non vi siano spazi vuoti). Una macchina di Turing pu anche avere uno stato interno, e cio un numero che descrive la condizione in cui si trova; lo stato considerato nellesecuzione delle istruzioni e pu essere modificato ogni volta. Consideriamo ad esempio una macchina che pu avere due stati: falso (lo stato iniziale) oppure vero. Lo stato indica se il numero immediatamente precedente a quello appena letto era un 1. Questa macchina ha le seguenti istruzioni: se sei nello stato falso e trovi uno 0, spostati a destra se sei nello stato falso e trovi un 1, spostati a destra e passa allo stato vero se sei nello stato falso e trovi uno spazio, fermati se sei nello stato vero e trovi uno 0, spostati a destra e torna allo stato falso se sei nello stato vero e trovi un 1, scrivi 0, spostati a destra e torna allo stato falso se sei nello stato vero e trovi uno spazio, fermati

Questa macchina di Turing elimina tutte le occorrenze consecutive di 1. Infatti, se si nello stato vero e si legge un 1, ci si trova di fronte a due 1 successivi, e si rimpiazza il secondo con uno 0. Questa macchina di Turing non potrebbe essere realizzata senza uno stato interno; in caso contrario, incontrando un 1, non ci sarebbe modo di ricordare che anche il numero precedente era 1. Con le macchine di Turing si possono realizzare anche operazioni pi utili, come moltiplicare per due un numero espresso in forma binaria, composto da cifre 0 e 1 scritte sul nastro. Una macchina di Turing pu essere descritta come un oggetto matematico preciso; il logico Alonzo Church (1903-1995) ipotizz che ogni funzione calcolabile potesse essere calcolata con una macchina di Turing. Questa affermazione (la Tesi di Church) non

52

mai stata esplicitamente dimostrata ma generalmente considerata vera.

53

Il modello di Von Neumann I calcolatori del 2005 sono lontani parenti della macchina di Turing. Il modello di calcolatore che utilizziamo il modello di Von Neumann, dal nome del matematico John Von Neumann (1903-1957), che nel 1946 realizz insieme ad un gruppo di scienziati statunitensi il primo calcolatore vero e proprio. Questa macchina, chiamata Eniac, era composta da 18.000 valvole ed occupava una superficie di 180 metri quadri. Qualsiasi elaborazione che un calcolatore moderno pu effettuare potrebbe essere realizzata anche con una macchina di Turing, come afferma la tesi di Church, ma nei calcolatori reali i dati iniziali possono essere modificati da un dispositivo esterno, come una tastiera, come si vedr nel prossimo capitoletto. Una macchina di Turing pu emulare il comportamento di un calcolatore soltanto per le elaborazioni che non prevedono modifiche dei dati iniziali. In ogni caso descrivere un calcolatore moderno secondo il modello di Turing sarebbe incredibilmente complesso; il modello di Von Neumann consente delle semplificazioni decisive. In un calcolatore moderno, ad esempio, ogni byte della memoria, che ne pu contenere diversi miliardi, pu essere utilizzato per indicare uno stato; la descrizione del comportamento di un calcolatore moderno dovrebbe contemplare diversi miliardi di possibili stati. La prima semplificazione introdotta dal modello di Von Neumann la possibilit di accedere direttamente a qualsiasi posizione della memoria, mentre la macchina di Turing pu spostarsi solo di una posizione alla volta. Per accedere ad una posizione di memoria in maniera diretta se ne utilizza lindirizzo. chiaro che anche una macchina di Turing potrebbe spostarsi in qualsiasi punto del suo nastro, ma avrebbe bisogno di un passo per ogni posizione e dovrebbe utilizzare un valore di stato contenente il numero di posizioni di cui muoversi, da diminuire di uno ad ogni passo. Unaltra limitazione della macchina di Turing il fatto che le sue istruzioni sono fisse, ed anzi caratterizzano una determinata macchina. In modo pi flessibile, i calcolatori possono eseguire un gran numero di istruzioni generiche. Come rappresentarle? A questo

54

punto la soluzione ovvia: i numeri, oltre che caratteri, possono rappresentare istruzioni: ad esempio nel calcolatore Motorola 68000 il numero binario: 0100 1110 0111 0010 (20.082 se espresso in decimale, 0x4E72 in esadecimale) rappresenta listruzione Stop, che termina lelaborazione; il numero binario 0101 0010 0000 0001 (20.993 se espresso in decimale, 0x5201 in esadecimale) rappresenta listruzione che aumenta di 1 il valore del registro 1 (i registri sono locazioni di memoria interne alla unit centrale del calcolatore). Questi numeri possono essere anche loro contenuti in una memoria, che a volte viene chiamata memoria istruzioni per distinguerla dalla memoria di cui si parlato fino ad ora, la memoria dati. Normalmente un calcolatore esegue le istruzioni in sequenza, una dopo laltra, ma pu anche saltare ad una istruzione qualsiasi, specificandone lindirizzo. In sintesi, le istruzioni di un calcolatore gli possono fare compiere tre tipi di azioni: modificare in un certo modo una posizione di memoria e passare allistruzione successiva se in una posizione di memoria c un determinato valore, saltare ad una determinata istruzione (in caso contrario, passare allistruzione successiva) fermarsi

In un calcolatore moderno non c distinzione tra lo stato ed il contenuto delle posizioni di memoria. Il valore di qualsiasi posizione pu influenzare il comportamento del calcolatore. Le azioni indicate possono essere specificate con un elevato livello di dettaglio; ad esempio vi pu essere una istruzione che somma il contenuto di una prima locazione di memoria ad unaltra locazione di memoria e scrive il risultato in una terza locazione. Linsieme delle

55

istruzioni che vengono caricate nella memoria istruzioni di un calcolatore detto anche programma. I principi di realizzazione di un calcolatore sono abbastanza semplici. Le operazioni aritmetiche sono eseguite nel modo che abbiamo visto per laddizione. Il passaggio allistruzione successiva avviene utilizzando una particolare locazione di memoria, interna al calcolatore, detta contatore di programma, che indica la prossima istruzione da eseguire. Dopo lesecuzione di ogni istruzione il valore del contatore di programma viene incrementato della lunghezza (espressa in bytes) dellistruzione. Il controllo della presenza di un determinato valore in una posizione di memoria pu essere realizzato applicando ad ogni byte il circuito visto nel capitoletto Verificare luguaglianza; se tutte le operazioni hanno come risultato 1, i due valori sono uguali. In questo caso, anzich incrementare il valore del contatore di programma, vi si copia lindirizzo della istruzione a cui saltare. Per fermarsi, infine, il calcolatore semplicemente smette di accedere al contenuto della locazione di memoria indicata dal contatore di programma; per ripartire sar necessario un intervento esterno (detto interrupt) che costringa il calcolatore a ricominciare lesecuzione a partire da una determinata istruzione.

56

Comunicare con lesterno La memoria di un calcolatore pu contenere dati importantissimi, ma se non trova modo di comunicare con lesterno non serve a nulla. Di solito un calcolatore riceve istruzioni tramite una tastiera, ed i risultati delle elaborazioni appaiono su video o vengono inviati ad una stampante che li riproduce su carta. Si potrebbe pensare che a questo scopo servano istruzioni particolari, ma di solito si utilizza un modello molto pi semplice: si attribuisce un significato particolare ai numeri contenuti in certe posizioni di memoria. Un video, ad esempio, pu avere 24 linee di 80 caratteri ognuna, per un totale di 1920 caratteri. Si possono associare le prime 1920 posizioni di memoria (che, come di consueto, vanno da 0 a 1919) ai caratteri del video. Se in una di queste posizioni si inserisce un numero uguale al codice ASCII di una lettera, questultima apparir nella posizione corrispondente del video. Ad esempio, se si vuole far apparire in alto a sinistra la parola CIAO le prime locazioni di memoria devono avere i valori: indirizzo 0: indirizzo 1: indirizzo 2: indirizzo 3: 67 73 65 79

Per realizzare questo prodigio, ovviamente, si utilizza un dispositivo esterno, che legge le posizioni di memoria corrispondenti ai caratteri del video e fa apparire le lettere di cui trova i codici ASCII. Una tastiera funziona in modo simile. Il numero uguale al codice ASCII del tasto che si premuto viene inserito in una determinata posizione di memoria e pu essere utilizzato dal programma in esecuzione. Quando questo avviene, di solito il calcolatore forzato ad andare ad una determinata istruzione dalla quale comincia una porzione di programma che gestisce il nuovo dato di ingresso, con una operazione di interrupt. Allo stesso modo i caratteri da inviare ad una stampante sono inseriti in determinate posizioni di memoria e

57

sono letti da un dispositivo che li invia ad uno a uno sul cavo di collegamento. Un tipo particolare di comunicazione quella con gli hard drives o dischi fissi, dispositivi che possono memorizzare una grande quantit di numeri, in maniera simile alle normali memorie, ma hanno una capacit molto maggiore. I dati memorizzati sui dischi fissi sono particolarmente importanti perch non vengono persi quando si spegne il calcolatore. I calcolatori comunicano con questi dispositivi in modo simile a quello utilizzato con video o tastiera. Per questo motivo laccesso ai dati presenti sui dischi fissi molto pi lento dellaccesso ai dati della memoria principale.

58

Qual il numero di bit migliore? Anche se non esiste un numero pi grande di ogni altro, un calcolatore non pu esprimere numeri pi grandi di un valore determinato. Questo valore dipende dal parallelismo del calcolatore, e cio dal numero di bit elaborati da ogni istruzione. Le istruzioni di un calcolatore con un parallelismo di 16, ad esempio, trattano 16 bit alla volta, con i quali si possono esprimere i numeri da 0 a: 1111 1111 1111 1111 corrispondente a 65535 in forma decimale (o 64K - 1). Poich le cifre binarie vengono considerate in gruppi di otto (un byte), di solito il parallelismo un multiplo di otto. I primi calcolatori paragonabili a quelli attuali avevano un parallelismo di 16 bit e dovevano usare degli artifici per gestire numeri pi grandi di 65535; a met degli anni 80 si affermarono i calcolatori a 32 bit (quattro bytes), che sono ancora i pi diffusi. Con questi calcolatori il massimo numero che si pu esprimere 1111 1111 1111 1111 1111 1111 1111 1111 corrispondente a 4.294.967.295 in forma decimale (o 4G - 1). chiaro che ogni volta che si copia in memoria (organizzata a bytes) un numero espresso da pi di otto bit se ne occupano pi locazioni. Un calcolatore a 16 bit di solito scrive in due locazioni alla volta e quindi utilizza principalmente indirizzi pari. Un calcolatore a 32 bit scrive in quattro locazioni alla volta ed utilizza indirizzi multipli di quattro. La prossima generazione di calcolatori sar a 64 bit (otto bytes). Il massimo numero che possono esprimere, pari a 2 elevato a 64 meno 1, talmente grande da essere scomodo da maneggiare anche in forma decimale: 18.446.744.073.709.551.615

59

oppure 16 Esa 1. Per quanto impressionante, per, questo numero ancora molto piccolo se confrontato con altri numeri usati in matematica. I numeri usati come chiavi crittografiche di cui si parler in seguito hanno pi di 300 cifre, mentre il numero primo pi grande mai scoperto ha addirittura 9 milioni di cifre. Il parallelismo di un calcolatore importante soprattutto perch il numero pi grande che pu esprimere anche il massimo indirizzo che pu indicare e corrisponde alla quantit di memoria utilizzabile. I calcolatori a 32 bit non possono gestire memorie di dimensioni superiori a 4 GBytes, se non ricorrendo ad espedienti macchinosi. Le memorie di uso comune sono vicine a questa dimensione (nel 2005 un PC standard dispone di almeno 512 MBytes di memoria), e questo render presto necessario il passaggio ai calcolatori a 64 bit.

60

Linguaggi di programmazione e sistemi operativi Come si pu arrivare alle sofisticate applicazioni che utilizziamo sui calcolatori con una macchina che riesce ad effettuare poche semplici operazioni aritmetiche e logiche? Limitandosi al campo dei word processors, un calcolatore pu impaginare un testo, correggere gli errori ortografici, proporre delle alternative alle frasi male impostate, tutte attivit che sembrano molto lontane dalle operazioni di AND, OR o di addizione che un calcolatore in grado di eseguire direttamente. Per arrivare ai programmi pi sofisticati e pi vicini al modo di pensare e lavorare degli esseri umani sono necessari diversi livelli di astrazione. Il primo livello riguarda il modo di individuare le istruzioni, che sono dei numeri. chiaro che programmare scrivendo una sequenza di numeri sarebbe molto faticoso. Nulla vieta, per, di associare ad ogni istruzione un termine mnemonico che indichi che cosa fa. Abbiamo visto che esiste una istruzione di Stop; si possono chiamare Move le istruzioni che spostano il contenuto di una cella di memoria in un altra, si pu chiamare Incr una istruzione che aumenta di 1 il contenuto di una cella di memoria. In questo modo possibile scrivere un programma in forma comprensibile da un essere umano. Il compito di i codici mnemonici nella sequenza di numeri che il calcolatore pu eseguire affidato ad uno specifico programma, chiamato assemblatore. Nonostante questo accorgimento, per, scrivere programmi rimarrebbe un lavoro lungo e faticoso. Per facilitarlo necessario passare al secondo livello di astrazione, quello dei linguaggi di programmazione, che permettono di usare istruzioni pi potenti di quelle che i calcolatori possono eseguire direttamente. Una singola riga di questi linguaggi, ad esempio, pu calcolare una funzione matematica oppure ripetere una certa azione fino a che non si verifica una particolare condizione. Per ogni linguaggio di programmazione (uno dei principali il C, sviluppato da Brian W. Kernighan e Dennis Ritchie dei Bell Laboratories della AT&T) c un programma, chiamato compilatore, che traduce quanto scritto

61

con il linguaggio di programmazione nelle istruzioni macchina, direttamente eseguibili dal calcolatore. Un livello di astrazione ancora superiore richiede un altro componente dei calcolatori, il sistema operativo, il primo programma ad essere eseguito da un calcolatore allaccensione. Il sistema operativo crea una sorta di gabbia attorno a tutti gli altri programmi che possono essere eseguiti e permette che ne siano attivi molti contemporaneamente. La sua funzione principale fornire interfacce ai programmi, in modo che con una sola istruzione di un linguaggio di programmazione possano comunicare con lesterno o eseguire operazioni complesse. Se si deve scrivere una pagina su una stampante, ad esempio, non necessario copiare i codici ASCII del testo uno ad uno nella locazione di memoria dedicata alla comunicazione con la stampante (aspettando poi ogni volta che vengano trasmessi sulla linea), ma si pu chiamare una interfaccia del sistema operativo. Ci si pu comportare allo stesso modo per mostrare sullo schermo una finestra con un messaggio, una operazione che richiede migliaia di istruzioni macchina. Per scrivere un programma sofisticato e che possa essere utilizzato anche da utenti che non conoscono approfonditamente il funzionamento dei calcolatori, come un word processor, si deve estendere il concetto dei livelli di astrazione successivi. Inizialmente si scrivono blocchi di istruzioni che realizzano delle interfacce per le operazioni di base, ad esempio il controllo della correttezza ortografica di una parola, oppure linserimento di una frase in un testo. A partire da questo livello si possono realizzare interfacce sempre pi sofisticate, fino ad arrivare ad un programma potente e semplice da usare. La complessit nascosta che permette di godere di questa illusoria semplicit impressionante; una operazione che pu sembrare semplice, come scrivere una frase con un word processor, pu richiedere milioni di istruzioni elementari.

62

Files e directories Una importante funzione di un sistema operativo consiste nel raggruppare le sequenze di numeri che servono ad un determinato scopo (ad esempio, la sequenza che descrive un testo) in entit separate, chiamate files, attribuendo loro un nome. Un file di testo contenente una lettera con cui si effettua un ordine, ad esempio, si potrebbe chiamare ordine.txt. Di solito i files vengono memorizzati su un disco fisso e possono essere raggruppati in directories, organizzate in modo gerarchico: in un normale PC ci possono essere migliaia di files, e se non ci fossero suddivisioni sarebbe molto difficile individuarli. C una directory di partenza, chiamata root, nella quale si trovano alcuni files particolarmente importanti ed altre directories, che a loro volta possono contenere delle directories di livello inferiore. In un calcolatore, ad esempio, nella root si potrebbero trovare le directories sistema (per i files utilizzati dal sistema operativo), temp (per i files temporanei) ed una directory per ogni utente che usa il calcolatore, in cui pu inserire i suoi files privati:
root

marco

alberto

sistema

temp

Se lutente alberto crea un file di nome prova.txt nella sua directory, il file potr essere identificato come /alberto/prova.txt. Nella directory dellutente marco ci potrebbe essere un altro file di nome prova.txt, che per sarebbe identificato come /marco/prova.txt. Lutente alberto potrebbe decidere di creare nella sua directory delle altre directories, ad esempio per raggruppare files che contengono musica, foto o testi:

63

root

marco

alberto

sistema

temp

musica

foto

documenti

In ognuna di queste directory lutente potrebbe definirne altre ancora, ad esempio per suddividere le foto secondo il periodo in cui sono state scattate:
root

marco

alberto

sistema

temp

musica

foto

documenti

estate 2003 inverno 2003

estate 2005

64

In questo caso un file di nome foto1.jpg, contenuto nella directory inverno 2003, sarebbe identificato come /alberto/foto/inverno2003/foto1.jpg.

65

Il software libero I sistemi operativi sono stati tradizionalmente sviluppati e gestiti dalle aziende produttrici di calcolatori, come ad esempio VMS per i calcolatori della Digital, e non potevano essere modificati dagli utenti. Il sistema operativo pi noto, Unix, nato ad opera di Ken Thompson e Dennis Ritchie dei Bell Laboratories della AT&T negli anni 70. Unix scritto in linguaggio C ed il suo codice stato reso disponibile a molte universit, ma rimane un sistema operativo di propriet di una azienda, nonostante il suo codice sia molto noto a studenti e ricercatori. Negli ultimi anni si per affermato, per iniziativa di Richard Stallmann, un movimento per lo sviluppo e la diffusione di programmi liberi, per i quali non si debbano pagare diritti, la Free Software Foundation. Lidea di questo movimento che i programmi (il software) evolvono pi efficacemente se possono essere modificati da chiunque vi abbia interesse, e non soltanto dallazienda che ne ha la propriet. Secondo questo schema il software non propriet di nessuno e chiunque pu apportare i miglioramenti che ritiene opportuni purch a sua volta li metta a disposizione della comunit degli sviluppatori. In questo modo sono stati sviluppati programmi di ogni genere. Nel 1990 lo studente finlandese Linus Torvalds ha scritto un sistema operativo con caratteristiche simili a quelle di Unix, chiamato Linux, che pu essere utilizzato gratuitamente. Il nucleo iniziale di Linux stato ampliato da una comunit di programmatori che hanno dato il loro contributo senza contropartite economiche, sia per linteresse del progetto in s che per farsi un nome e ottenere lavoro come consulenti indipendenti, ed diventato uno dei sistemi operativi pi comuni.

66

Un calcolatore su ogni scrivania La maggior parte dei circa 500 milioni di calcolatori del mondo sono personal computer (PC) ed utilizzano il sistema operativo Windows della Microsoft, che fornisce una interfaccia grafica piuttosto sofisticata. Sullo schermo di questi calcolatori ci sono piccole immagini (icone) che si possono selezionare per mandare in esecuzione vari programmi. Ormai difficile trovare un posto di lavoro in una nazione evoluta che faccia a meno di un PC. La composizione dei testi, ad esempio, avviene quasi esclusivamente in forma elettronica, ed i testi sono stampati su carta solo se effettivamente necessario. La contabilit e la gestione degli archivi non possono fare a meno dei calcolatori. Il controllo delle macchine utensili in ogni fabbrica moderna governato dai calcolatori. Un tipico PC di oggi (2005) costa attorno ai 1000 dollari ed molto pi potente di qualsiasi calcolatore di dieci o venti anni fa. La dimensione media della memoria e la velocit hanno continuato ad aumentare nel corso degli anni, ma il loro tasso di incremento rimasto sorprendentemente costante. Nel 1965 Gordon Moore, uno dei fondatori della Intel (lazienda che produce le unit centrali pi diffuse), formul la cosiddetta legge di Moore, secondo la quale ogni 18 mesi, a parit di costo, la potenza dei calcolatori raddoppia. Nel 2000, ad esempio, i PC pi diffusi avevano una velocit di circa 300 MHz, il che significa che potevano eseguire circa 300 milioni di istruzioni al secondo. Al momento in cui si scrive questo libro (2005), dopo tre periodi di 18 mesi, i PC utilizzano di solito processori con una velocit tre volte raddoppiata (circa 2.4 GHz, equivalenti a 2.4 miliardi di istruzioni al secondo). Una configurazione standard prevede inoltre una memoria di 512 MBytes ed un disco fisso di 40 GBytes o pi.

67

Altre acrobazie

I due modi per ridurre lo spazio In una sequenza di numeri si possono individuare delle regolarit. Prendiamo ad esempio la sequenza: 12121212121212121212 chiaro che linformazione presente nella sequenza limitata, perch la si pu descrivere in maniera pi compatta come 10 volte la sequenza 1 2. Si possono trovare anche altri tipi di regolarit, ad esempio un andamento lineare crescente: 1 3 5 7 9 11 13 15 17 19 21 che si pu descrivere come i numeri dispari da 1 a 21. Nelle sequenze di numeri utilizzate dai calcolatori molto frequente che si trovino regolarit di questo tipo, oppure che buona parte delle locazioni di memoria contenga lo stesso numero, di solito lo 0. chiaro che non serve riempire locazioni di memoria con numeri che possono essere ricavati in maniera semplice. Si sono quindi elaborate delle regole (o algoritmi) di compressione, che permettono di descrivere una sequenza di numeri con uno spazio minore di quello che sarebbe necessario (e ovviamente di ricostruire in seguito il formato originale). La compressione dei dati non comporta nessuna perdita di informazioni, ma a volte necessario ridurre ulteriormente loccupazione di spazio. In questi casi necessario perdere informazioni. Ad esempio, se unimmagine stata scomposta in un numero molto elevato di punti (o, come si usa dire, ha una elevata risoluzione) per memorizzarla possono servire molti Mbytes, il che pu rappresentare un problema. In questo caso lo spazio necessario pu essere ridotto eliminando i numeri che descrivono colore e luminosit di determinati punti, ad esempio eliminando alcune

68

colonne ed alcune righe. Il risultato sar equivalente alla stessa immagine con una risoluzione pi bassa. La qualit sar inferiore, ma potrebbe restare accettabile.

69

Larte della compressione Comprimere i dati diventato unarte in cui si sono raggiunti risultati eccezionali. Tutti i PC dispongono di programmi di compressione che riducono rapidamente la dimensione di un file che contiene un testo a meno della met. Non sempre, per, una sequenza di numeri si lascia ridurre facilmente: se si prova a comprimere un file che contiene istruzioni del calcolatore di solito lo spazio occupato si riduce di poco. La possibilit di ridurre le dimensioni di un file dipende dal suo grado di prevedibilit. Se un file composto solo da zeri binari fornisce pochissime informazioni e la sua prevedibilit massima; pu quindi essere facilmente compresso. Se invece un file contiene numeri che variano continuamente (come i files che contengono istruzioni del calcolatore) quasi del tutto imprevedibile e non pu essere compresso se non in modo molto limitato. Il grado di imprevedibilit di un file pu essere visto come una misura del suo livello di disordine: un file composto da soli zeri estremamente ordinato. Per comprimere un file se ne pu sostituire ogni byte con un codice binario che corrisponde al suo valore, in modo da minimizzare la lunghezza. I codici pi brevi, di dimensione inferiore al byte, sono assegnati ai valori pi frequenti. I codici non devono rispettare i confini dei byte; il file compresso pu essere visto come una sequenza ininterrotta di bit, ottenuta affiancando il contenuto di ogni byte. Consideriamo ad esempio un file di caratteri ASCII che riporta il risultato di pi lanci di una moneta. Una lettera a indica che uscito testa, una lettera b indica che uscito croce. possibile sostituire ogni lettera a con un solo bit con valore 0, ogni lettera b con un solo bit con valore 1. Se invece un file di testo contiene 100 volte la lettera a ed una sola volta ognuna delle altre 25 lettere dellalfabeto, conviene assegnare alla lettera a un codice molto breve. Si pu, ad esempio, utilizzare per la a un codice composto da un solo bit con valore 0 ed assegnare a tutte le altre lettere codici

70

pi lunghi che iniziano con un bit con valore 1, come nella tabella riportata pi sotto: a b c d e .. 0 10000001 10000010 10000011 10000100 ...........

In termodinamica il grado di imprevedibilit di uno stato fisico corrisponde alla grandezza detta entropia. Nel 1948 Claude Shannon utilizz lo stesso termine per misurare il livello di imprevedibilit di una sequenza di numeri, corrispondente alla quantit di informazione che contiene. Utilizzando questo concetto si pu definire lentropia di un file come il numero medio di bit che si devono usare per ogni byte nella codifica che rende minima la dimensione del file compresso. Lentropia del file che contiene 100 volte la lettera a si pu calcolare dividendo la sua dimensione in bit (100 bit per le cento a, otto bit per ognuna delle altre 25 lettere, per un totale di 300 bit) per il numero di caratteri che contiene, 125. La sua entropia quindi di 2.4 bit. Per comprimere un file ASCII che contiene soltanto le quattro lettere a, b, c e d, ognuna con la stessa frequenza, si possono usare quattro codici della stessa lunghezza: a b c d 00 01 10 11

Poich le quattro lettere hanno la stessa probabilit non avrebbe senso utilizzare codici di lunghezze diverse. In questo caso si dice che il file ha entropia 2, perch si devono usare due bit per ogni byte. Se invece un file completamente imprevedibile ha entropia 8,

71

perch non si pu diminuire il numero di bit che rappresentano il valore di ogni byte, ma se ne devono usare comunque 8.

72

I codici di Huffmann Uno degli algoritmi di compressione pi conosciuti dovuto a David Huffmann, che lo elabor nel 1952, quando era studente del Massachusetts Institute of Technology. Questa serie di regole (o algoritmo) per comprimere una sequenza di numeri relativamente semplice ed utilizza delle strutture ad albero binario, trattate in modo da assegnare automaticamente i codici pi brevi ai caratteri pi frequenti. Consideriamo un file di 100 lettere (che prima della compressione occupa 100 bytes) che contiene soltanto le lettere a, b, c, d, e, f, g ,h con queste frequenze: a b c d e f g 5 8 21 12 29 10 15

si prendono le due lettere con le frequenze pi basse (a e b) e le si raggruppano a formare un albero:

a cui si d come valore la somma delle frequenze (13). Si prendono quindi le due lettere con frequenze pi basse rimaste (f e d) e si ripete il procedimento:

73

Il gruppo (f e d) ha come valore 22. A questo punto la situazione dei gruppi la seguente: a e b g c f e d e 13 15 21 22 29

I due valori pi bassi sono quelli del gruppo a e b (13) e della lettera g (15). Li si raggruppano in questo modo:

e si attribuisce a questo nuovo gruppo la somma dei valori, 28. A questo punto i due valori pi bassi sono quelli della lettera c (21) e del gruppo f e d (22). Li raggruppiamo in modo analogo:

74

e diamo a questo nuovo gruppo la somma dei valori, 43. A questo punto la situazione la seguente: g e (a e b) e c e (f e d) 28 29 43

Prendiamo il gruppo composto g e (a e b) (valore 28) e la lettera e (valore 29), raggruppandoli in questo modo:

Il valore di questo nuovo gruppo sar 57. A questo punto sono rimasti solo due gruppi e li uniamo a formare lalbero definitivo:

75

Se si associa ad ogni diramazione dellalbero un valore binario, 0 per il ramo a sinistra ed 1 per il ramo a destra, si possono attribuire dei codici alle varie lettere:

c 00

01

10

e 11

f 010

d 011

100

g 101

a 1000

b 1001

76

La tabella definitiva quindi: lettera a b c d e f g frequenza codifica 5 1000 8 1001 21 00 12 011 29 11 10 010 15 101

Con questo procedimento le lettere pi frequenti vengono aggiunte allalbero per ultime ed automaticamente vengono rappresentate da un codice breve perch si trovano in posizione pi alta. Le lettere pi frequenti, la c e la e, sono rappresentate da un codice di soli 2 bit, mentre le lettere a e b, che compaiono pi raramente, sono rappresentate da un codice di 4 bit. Ognuno dei codici che abbiamo ricavato non genera ambiguit; ad esempio, c ha la codifica 00 e nessuna altra lettera ha un codice che inizia allo stesso modo. Se il file inizia con 00, questo significa che la sua prima lettera una c e che dal bit successivo si trover un altro carattere. In questo modo si pu sostituire ogni lettera con il suo codice senza preoccuparsi del fatto che ogni codice pu occupare un numero di bit diverso. Se moltiplichiamo la frequenza di ogni lettera per il numero di bit occupati dal suo codice otteniamo la dimensione finale del file compresso: lettera a b c d e f g frequenza 5 8 21 12 29 10 15 lunghezza 4 4 2 3 2 3 3 occupazione totale 20 32 42 36 58 30 45

77

per un totale di 263 bit, equivalenti a 33 bytes. Il numero medio di bit utilizzati per ogni lettera, ovvero lentropia del file, di 2.63. Le operazioni che abbiamo eseguito possono sembrare lunghe e laboriose, ma la velocit dei calcolatori moderni tale che richiedono solo una infinitesima frazione di secondo.

78

La compressione della musica I files musicali hanno dimensioni rilevanti. Su un normale CD ogni minuto di musica occupa circa 10 Mbytes di spazio; un CD dalla capacit di circa 700 MBytes pu contenere circa 70 minuti di musica, poco pi di un tradizionale album a 33 giri su vinile. Se fosse trasmessa via rete o memorizzata su un lettore portatile questa quantit di dati porrebbe seri problemi. La soluzione potrebbe essere la compressione dei dati, ma i files ottenuti dal campionamento di un brano musicale di solito presentano una entropia elevata; se vengono compressi con i metodi tradizionali le loro dimensioni si riducono di poco. Per ridurre la dimensione di un file musicale quindi necessario perdere delle informazioni. Si per scoperto che possibile comprimere notevolmente questi files senza un sensibile peggioramento della qualit della riproduzione, perch molte delle informazioni che contengono non sono rilevanti ai fini dellascolto. Il primo passo la scomposizione della sorgente sonora nelle frequenze che contiene. Lorecchio umano in grado di percepire soltanto le frequenze tra 20 Hz e 20000 Hz, con particolare risalto per le frequenze tra 2000 Hz e 5000 Hz. quindi possibile eliminare senza danno tutte le frequenze esterne a questa gamma di valori. Si rilevato, inoltre, che l'udito umano non in grado di rilevare le frequenze immediatamente vicine a quelle di una sorgente dominante, per cui possibile tralasciare le frequenze adiacenti a quelle pi marcate. Queste ricerche sono iniziate nel 1988 lo CSELT di Torino ad opera di un gruppo diretto da Leonardo Chiariglione ed hanno permesso di definire diversi standard di compressione per i files audiovisivi. La codifica per i files musicali pi diffusa detta mp3 (o, pi esattamente, MPEG layer 3) e comprende anche altre ottimizzazioni; ad esempio si sfrutta la somiglianza tra campioni sonori vicini tra loro per descrivere i campioni successivi al primo in maniera compatta, riportando solamente le loro differenze. La codifica mp3 permette una riduzione del 90% nelle dimensioni dei files musicali mantenendo una ottima qualit della riproduzione.

79

Esistono altri algoritmi di compressione che permettono una riduzione ancora maggiore, fino al 95%, ma al prezzo di un peggioramento della qualit del suono. La compressione della musica ha reso possibile il successo delle vendite via rete dei brani musicali, che nel 2005 hanno superato in Inghilterra le vendite dei CD tradizionali. In questo tipo di operazione allacquirente non viene inviato nulla di tangibile, n un CD n un nastro, ma viene venduto soltanto il diritto ad accedere con il suo calcolatore alla sequenza di numeri che costituiscono il brano musicale. I vantaggi sono evidenti: la musica arriva subito, non c niente da maneggiare e a cui trovare un posto in casa. I brani scaricati in questa maniera possono essere ascoltati con un PC o con tutti i dispositivi che riescono a gestire i formati utilizzati dai calcolatori. Il principale strumento di ascolto, per, il lettore portatile, che ha ormai sostituito il tradizionale walkman. Di solito questi dispositivi contengono un disco fisso da 20 o da 40 GBytes e le batterie permettono una autonomia di circa 12 ore. Collegandoli al calcolatore su cui si scaricato il file musicale dalla rete, il brano viene copiato sul disco fisso e pu essere ascoltato dovunque. La capacit di questi dispositivi impressionante: il modello con 40 GB di capacit pu memorizzare circa 10000 canzoni, quasi 1000 album: si pu facilmente portare con s tutta la propria collezione di dischi. Al momento in cui si scrive questo libro (2005), il commercio della musica via rete sembra lunica attivit di questo genere effettivamente profittevole. Il libro elettronico, infatti, non decolla, probabilmente perch i lettori sono ancora affezionati al formato cartaceo, mentre i filmati, nonostante tutte le forme di compressione, hanno ancora dimensioni eccessive per poter essere distribuiti in maniera massiccia via rete.

80

Scegliere la parola giusta Una tastiera collegata ad un calcolatore uno strumento molto efficiente per scrivere dei testi, ma a volte si devono utilizzare mezzi pi rudimentali. Per mandare un SMS da cellulare, ad esempio, si deve utilizzare una tastiera ridotta a 12 tasti, di cui soltanto 8 corrispondono a lettere. Di solito la tastiera dei cellulari configurata nel modo descritto dalla standard ITU 161, definito dalla International Telecomunication Union. Ad ogni tasto numerico possono corrispondere pi lettere: 1 2 3 4 5 6 7 8 9 0 * # riservato abc def ghi jkl mno pqrs tuv wxyz riservato riservato riservato

Quando il telefonino nella modalit di composizione di testo, se si preme una volta un tasto si scrive la prima lettera tra quelle che corrispondono a quel numero, se lo si preme due volte si scrive la seconda lettera e cos via. Per scrivere buongiorno si devono premere i tasti in questo modo: b: 2 volte il tasto 2 u: 2 volte il tasto 8 o: 3 volte il tasto 6 n: 2 volte il tasto 6

81

....

chiaro che scrivere un testo di una certa lunghezza diventa piuttosto laborioso; sarebbe molto meglio poter scrivere premendo un solo tasto per ogni lettera. Ma come risolvere il problema della corrispondenza di pi lettere ad ogni singolo tasto? Ad esempio, premendo i tasti 243, la prima lettera potrebbe essere a, b, oppure c, la seconda g, h, oppure i, la terza d, e, oppure f. Il problema pu essere risolto prendendo in considerazione tutte le possibili combinazioni di lettere. Nella prima posizione dello parola si hanno tre possibilit, ma ognuna di queste deve essere moltiplicata per il numero di possibilit della seconda posizione (nuovamente tre) e il tutto deve essere moltiplicato per il numero di possibilit della terza posizione (altre tre). Il risultato complessivo uguale al prodotto di tre per tre per tre, e cio 27. Le 27 combinazioni sono: agd, age, agf, ahd, ahe, ahf, aid, aie, aif bgd, bge, bgf, bhd, bhe, bhf, bid, bie, bif cgd, cge, cgf, chd, che, chf, cid, cie, cif

Si vede immediatamente che, tra tutte le combinazioni, esiste una sola parola italiana di senso compiuto, che. Se il piccolo calcolatore incorporato nel cellulare dispone di un dizionario, esaminando le possibili combinazioni di caratteri la si pu trovare con facilit. In questo modo, premendo i tasti 243 si pu comporre immediatamente la parola che. Nel caso ci siano ambiguit, ovviamente, lutente pu scegliere tra le possibili alternative; inoltre pu disabilitare in ogni momento questa funzione, per essere in grado di introdurre qualsiasi combinazione di lettere. Che probabilit ci sono che questa funzione indovini la parola giusta senza che ci siano ambiguit? Per calcolarla si deve considerare la probabilit di ottenere una parola sensata combinando dei caratteri a caso. Se le probabilit sono molto basse, significa che se esiste una parola del dizionario tra le possibili alternative molto probabile che sia quella giusta, perch la probabilit di ottenerla andando a caso bassa.

82

In italiano la lunghezza media delle parole di circa cinque caratteri. Per calcolare le possibili combinazioni di cinque caratteri qualsiasi si deve moltiplicare il numero di caratteri (26) per s stesso per cinque volte. Il risultato circa otto milioni (7.962.624). Questo numero andr diviso per il numero di parole di non pi di cinque lettere dotate di senso. difficile stabilire il numero di parole della lingua italiana, che dipende dalla scelta di includere o meno termini specialistici o particolari, ma dellordine delle centomila. Le parole comuni di non pi di cinque lettere che di solito vengono caricate nel dizionario di un cellulare sono qualche migliaio. La probabilit di ottenere una parola comune scrivendo a caso, quindi, ben inferiore a 1 su mille, per cui quasi sempre la composizione rapida funziona correttamente. I word processor, i programmi per calcolatore che hanno rimpiazzato le tradizionali macchine per scrivere, dispongono di uno strumento di correzione ortografica che utilizza principi simili. Ogni parola viene confrontata con un dizionario; se non la si trova, si cerca di indovinare che cosa lutente intendeva dire, considerando tutte le possibili alternative ottenute sostituendo una o pi lettere per volta. Se una di queste alternative fa parte del dizionario viene proposta allutente. Se ad esempio si scrive telavisione, esaminando tutte le combinazioni che si possono ottenere modificando una lettera per volta si trova nel dizionario la parola televisione, che verr proposta allutente. chiaro che lutente pu decidere che voleva scrivere proprio telavisione ed anche aggiungerla al dizionario, in modo che in seguito non venga pi segnalata come errore.

83

Mantenere la parit Le memorie dei calcolatori sono realizzate con componenti elettronici di grande affidabilit, ma sono cos enormi che possibile che ci siano degli errori. Il sistema pi usato per rilevarli si basa sullaggiunta di informazioni ridondanti (e cio non strettamente necessarie) che permettono di attribuire caratteristiche particolari ai dati. Se queste caratteristiche non sono presenti al momento della lettura dei dati si in presenza di un errore. Le cifre binarie (bit) di solito sono raggruppate a formare un byte, che ne comprende 8. Se ad ogni byte si aggiunge un ulteriore bit con un valore calcolato in modo che il numero totale di bit con valore uno sia pari, un eventuale errore di una delle cifre binarie pu essere immediatamente rilevato, perch il numero di bit posti a uno non sar pi pari. Ad esempio, un byte che contiene il numero 21 espresso in binario : 00010101 In questo byte ci sono tre cifre binarie che valgono 1. Per garantire la parit il bit aggiuntivo deve essere anchesso 1, il che viene realizzato in modo automatico da un apposito dispositivo (il controllore di memoria) quando il calcolatore scrive un dato: 00010101 1 Quando il calcolatore avr bisogno di leggere questo dato, il controllore di memoria verificher che il numero di bit posti a 1 (incluso il bit di parit) sia pari; in caso contrario segnaler un errore. Se i bit in errore sono due, il controllo di parit non permette di rilevare il malfunzionamento. per raro che un bit abbia un errore, e la possibilit che in un byte vi siano due bit in errore veramente molto bassa. Ipotizzando che un errore di un singolo bit abbia una probabilit di uno su un milione, la probabilit di un doppio errore sarebbe di uno su mille miliardi.

84

Il controllo di parit permette anche di ricostruire il dato originale se non si riesce a leggere il valore di un bit. Se ad esempio non si riesce a leggere il quarto bit di un byte, ma si ottiene: 000x0101 1 il controllo di parit permette di risalire al valore originale, 1, che rende pari il numero di bit posti ad uno.

85

Il disco di parit Una applicazione dei controlli di parit rappresentata dai dischi fissi di tipo RAID (Redundant Array of Inexpensive Disks, in italiano vettore ridondante di dischi a basso costo), descritti da David A. Patterson, Garth A. Gibson and Randy H. Katz dellUniversit di Berkeley in un articolo del 1988. Questa applicazione permette di evitare la perdita dei dati anche se uno dei dischi utilizzati per mantenerli si rompe. Vi sono diversi tipi di RAID; il pi usato il tipo 5, con il quale si aggiunge ai dischi utilizzati un disco di parit. I dati del disco di parit sono calcolati ogni volta che si scrive qualcosa su uno dei dischi in modo che ogni suo bit realizzi la parit tra tutti i bit degli altri dischi. Se una successiva lettura da uno dei dischi ritorna un errore (ad esempio perch fallisce un controllo interno al disco), si pu ricostruire il dato leggendo tutti gli altri dischi ed il disco di parit: il valore mancante sar quello che permette che in ogni posizione la somma di tutti i bit sia pari. Immaginiamo che ci sia un dispositivo con tre dischi che contengono dati ed un disco di parit. Un tentativo di lettura di un determinato byte sul disco 3 riporta un errore. Leggendo lo stesso byte su tutti gli altri dischi si ha questa situazione: Disco 1 Disco 2 Disco 3 Disco parit 0000 1111 1010 0111 xxxx xxxx 1100 1000

Considerando che il numero di bit con valore uno in ogni singola posizione deve essere pari, si pu cos risalire alla situazione originale: Disco 1 Disco 2 Disco 3 0000 1111 1010 0111 0110 0000

86

Disco parit

1100 1000

Se un disco va in errore, ogni lettura richiede che si acceda a tutti gli altri dischi. Aumentando il numero di dischi che costituiscono il RAID 5, quindi, aumenta anche limpatto in caso di malfunzionamento, perch il numero di operazioni da effettuare per ogni lettura diventa maggiore. Per calcolare correttamente i valori del disco di parit, ogni volta che si deve scrivere un determinato byte necessario leggere il valore preesistente sia sul disco di dati che sul disco di parit. Ogni bit che non viene modificato sul disco di dati non va modificato nemmeno sul disco di parit. Se invece un bit viene modificato sul disco di dati, va modificato anche sul disco di parit (cambiando il valore di due bit non si altera la parit). Ad esempio, per scrivere il byte 1100 1111 sul disco due si dovrebbero leggere i valori preesistenti sul disco due stesso e sul disco di parit: Disco 1 Disco 2 Disco 3 Disco parit xxxx xxxx 1010 0111 xxxx xxxx 1100 1000

Poich cambiano il secondo, il terzo ed il quinto bit del dato del disco due, vanno modificati i bit corrispondenti del disco di parit; in questo modo si garantisce la parit rispetto ai valori di tutti e tre i dischi di dati senza conoscere il contenuto del disco uno e del disco tre: Disco 1 Disco 2 Disco 3 Disco parit xxxx xxxx 1100 1111 xxxx xxxx 1010 0000

Con il RAID 5, quindi, ogni scrittura richiede due accessi al disco in lettura e due accessi in scrittura, per un totale di quattro. Di solito le scritture rappresentano circa il 40% degli accessi al disco e le

87

letture il restante 60%; per cento operazioni RAID 5 si devono quindi effettuare questi accessi al disco: 160 per la scrittura (4 accessi per 40 operazioni di scrittura logiche) + 60 letture = 220 Il numero di accessi va quindi moltiplicato per 2,2. Questo comporta un ovvio rallentamento, ma ampiamente ripagato dalla maggiore affidabilit dei dati.

88

Liberi dallerrore Negli anni 40 il matematico Richard Hamming (1915-1998) lavorava presso i Bell Laboratories con un calcolatore i cui dati di ingresso erano scritti su schede perforate. Questo sistema era inaffidabile e spesso il lavoro doveva essere iniziato da capo a causa degli errori di lettura. Hamming inizi allora a studiare la possibilit di una codifica che permettesse, oltre alla rilevazione degli errori, anche la loro correzione automatica. Lidea di base di utilizzare pi di un bit di parit, ognuno dei quali calcolato su una configurazione diversa dei bit di dati. Ogni bit controllato da una diversa configurazione di bit di parit e, quando uno o pi di questi bit segnalano un errore, si pu risalire alla cifra binaria da correggere. Un modo per avere una diversa configurazione di controllo per ogni cifra binaria di farla controllare dai bit di parit che corrispondono ai bit che sono a 1 nel suo indirizzo; in questo caso per non si pu partire dallindirizzo 0, perch nella configurazione con tutti 0 il bit non sarebbe controllato del tutto. Se abbiamo, ad esempio, 7 bit di dati, i loro indirizzi a partire da uno sono: 001 010 011 100 101 110 111 Il primo bit di dati dovr quindi essere controllato dal bit di parit p1, il secondo da p2, il terzo da p2 e p1, il quarto da p3, il quinto da p3 e p1, il sesto da p3 e p2, il settimo da p3, p2 e p1, come si vede nella tabella della prossima pagina:

89

p3 1 2 3 4 5 6 7

p2

p1

Se la prima cifra binaria in errore, fallir il controllo su p1, se in errore la seconda fallir il controllo su p2, se in errore la terza falliranno entrambi i controlli su p2 e p1, e cos via. Immaginiamo ad esempio che la sequenza originale sia 0111001 p1 controlla le cifre binarie nelle posizioni prima, terza, quinta e settima, che sono rispettivamente 0, 1, 0, 1, e dovr essere 0. p2 controlla le cifre binarie nella seconda, terza, sesta e settima posizione, che sono rispettivamente 1, 1, 0 e 1, e per garantire la parit dovr essere 1 p3 controlla le ultime quattro cifre (1001) , e sar 0 perch tra questi bit ci sono due valori 1

La sequenza originale, quindi, sar accompagnata da questi bit di parit: 0111011 p1=0 p2=1 p3=0

Immaginiamo che la lettura del secondo bit sia in errore e che si legga la sequenza 0011011 p1=0 p2=1 p3=0

90

I controlli di parit avranno questi risultati: p1, con valore 0 e confrontato con la prima, terza, quinta e settima posizione, che sono ancora 0, 1, 0, 1 garantisce la parit p2, con valore 1 e confrontato con la seconda, terza, sesta e settima posizione, che ora sono rispettivamente 0, 1, 0 e 1 rileva un errore p3, con valore 0 e confrontato con 1001 garantisce la parit

Fallisce quindi il solo controllo di parit su p2, e dalla tabella si risale alla posizione 2, in cui si verificato lerrore. Invertendo il valore del secondo bit si riesce quindi ad ottenere il dato originario, 0111011.

91

Controllare i controllori Il controllo sui bit di parit permette di ricostruire un dato sbagliato, ma anche i bit di parit possono essere sbagliati. Un controllo di parit potrebbe fallire non perch una delle cifre binarie sbagliata, ma perch sbagliato uno dei bit di parit. In questo caso, cercando di correggere un errore che non esiste, se ne introdurrebbe uno nuovo. La soluzione a questo problema semplice: basta inserire i bit di parit tra i bit controllati. Nel nostro esempio, si possono inserire i tre bit di parit nelle posizioni indicate; i bit di dati si riducono a quattro (d1, d2, d3, d4): p3 p1 p2 d1 p3 d2 d3 d4 p2 p1

Come si pu vedere, ogni bit di parit lunico a controllare la posizione in cui si trova. Se fallisce soltanto il controllo che esso stesso realizza, il bit di parit si autocorregge senza conseguenze sui bit di dati. Ogni bit di dati, invece, controllato da almeno due bit di parit. Se i dati sono : 0110 (e cio d1=0, d2=1, d3=1, d4=0)
p1 (che controlla d1, d2 e d4, rispettivamente 0, 1 e 0) dovr essere 1 p2 (che controlla d1, d3 e d4, rispettivamente 0, 1 e 0) dovr essere 1 p3 (che controlla d2, d3 e d4, rispettivamente 1, 1 e 0) dovr essere 0

92

Il dato completo composto in questo modo: p1 p2 d1 p3 d2 d3 d4 e il suo valore sar: 1100110 p1=1 p2=1 p3=0

Se si verifica un errore per p1 e si legge la sequenza: 0100110 p1=0 p2=1 p3=0

I controlli di parit avranno questi risultati: il controllo (p1) sulla prima, terza, quinta e settima posizione, che ora sono rispettivamente 0, 0, 1 e 0 rileva un errore il controllo (p2) sulla seconda, terza, sesta e settima posizione, che sono ancora 1, 0, 1, 0 verifica la parit il controllo (p3) sulle ultime quattro posizioni, a 0110, verifica la parit

Fallisce quindi il solo controllo di parit su p1, e dalla tabella si risale alla posizione 1, e cio al bit di parit p1 stesso. I bit di dati, quindi, non presentano errori. La codifica del tipo p1 p2 d1 p3 d2 d3 d4 detta codice di Hamming. Una limitazione di questa codifica lelevato numero di bit di parit rispetto ai dati controllati: per avere a disposizione quattro bit di dati ne servono sette in tutto. Questa tecnica, per, pu essere estesa ad un numero maggiore di cifre binarie; utilizzando quattro bit di parit, ad esempio, si possono controllare quindici posizioni e si hanno a disposizioni undici bit di dati, come si vede nella tabella della prossima pagina:

93

p4 p1 p2 d1 p3 d2 d3 d4 p4 d5 d6 d7 d8 d9 d10 d11

p3

p2

p1

La tecnica pu essere estesa ancora; i bit di parit si devono trovare nelle posizioni che corrispondono ad una potenza di 2, coperte da un solo controllo, con la sequenza: 1 (uguale a 2 elevato 0), 2, 4, 8, 16, 32, 64...... Tutte le altre posizioni sono disponibili per i dati. Con 6 bit di parit si possono controllare 63 bit (la sessantaquattresima posizione richiederebbe un settimo bit di parit), di cui 57 per i dati. Normalmente le memorie dei calcolatori sono organizzate a blocchi di 32 bit, quattro byte, talvolta chiamati una parola. Per proteggere 32 bit con i codici di Hamming sono sufficienti 6 bit di parit, con un grado di efficienza accettabile. Che cosa succede, per, se due bit sono in errore? In questo caso uno o pi controlli di parit falliscono, ma non si riesce a risalire al valore originario, perch la tecnica si basa sullassunzione che non ci possa essere pi di un errore. Si pu rilevare un doppio errore (non

94

correggibile) ma non lo si distingue da un errore semplice (correggibile). Nellesempio in cui i bit di dati sono: 0110 e il dato completo (composto nel solito modo p1 p2 d1 p3 d2 d3 d4) : 1100110 p1=1 p2=1 p3=0

Immaginiamo che ci sia un errore sui primi due bit di dati d1 e d2 e si legga: 1110010 p1=1 p2=1 p3=0

I controlli di parit avranno questi risultati: il controllo (p1) sulla prima, terza, quinta e settima posizione, che ora sono rispettivamente 1, 1, 0 e 0 verifica la parit il controllo (p2) sulla seconda, terza, sesta e settima posizione, che sono ancora 1, 1, 1, 0 rileva un errore il controllo (p3) sulle ultime quattro posizioni, a 0010, rileva un errore

Seguendo la tabella, quindi, si penserebbe alla presenza di un errore nella posizione d3, ma in realt d3 corretto e ci sono due errori nelle posizioni d1 e d2. Per riconoscere un errore doppio, in cui due cifre binarie sono sbagliate, si pu aggiungere un ulteriore bit di parit, che copra tutte le cifre binarie indistintamente, dati e bit di controllo. Se si verifica un errore di un solo bit, alcuni dei controlli di parit specializzati falliscono, ma fallisce anche il controllo di parit generale. Se invece si verifica un errore doppio, falliranno uno o pi controlli di parit specializzati, ma non fallir il controllo di parit generale. In questo caso inutile tentare la correzione, ma si deve segnalare un errore non rimediabile.

95

Limportanza dellordine Limportanza dellordine Nella maggior parte delle lingue loggetto che negli ultimi anni ha provocato i maggiori cambiamenti della nostra vita ha un nome che descrive la sua funzione principale, quella di effettuare dei calcoli: computer in inglese, calcolatore in italiano. Il nome francese, ordinateur, pone invece laccento su una in particolare tra le tante operazioni che un calcolatore pu effettuare: lordinamento di una sequenza di numeri. Questo nome non inappropriato, perch i calcolatori dedicano buona parte del loro tempo ad ordinare numeri. Negli anni 70 la percentuale era stimata al 25 per cento e rimane notevole anche oggi, pur essendo diminuita per il peso delle elaborazioni grafiche. Ma perch cos importante ordinare dei numeri o degli oggetti? Il motivo principale che tra elementi ordinati molto pi facile trovare qualcosa. Un elenco telefonico che riportasse tutti gli abbonati in modo casuale sarebbe completamente inutile. Anche nella vita comune ordiniamo continuamente gli oggetti; quando svuotiamo la lavapiatti, ad esempio, mettiamo in posizioni diverse i coltelli, le forchette, i cucchiai per poterli ritrovare facilmente in seguito. Nella nostra biblioteca, probabilmente, i libri seguono qualche criterio di ordinamento, come il nome dellautore o la collana. A favore dellordine, infine, ci pu essere un motivo estetico. Se un gruppo di oggetti ordinato, pi agevole formarsene unimmagine mentale e risulta pi piacevole. Le pattuglie militari in parata non hanno alcun motivo per essere ordinate secondo laltezza dei soldati, se non la necessit di dare unimmagine pi compatta e gradevole. Lordinamento delle sequenze di numeri una parte importante della scienza dei calcolatori. Donald Knuth, che sta scrivendo unopera monumentale dal titolo Larte della programmazione dei computer, vi ha dedicato un intero libro, nel quale esamina circa 25

96

diversi algoritmi, e cio 25 diversi modi di ottenere lordine. Nei prossimi capitoletti vedremo alcuni di questi metodi.

97

Criteri di ordinamento Per ordinare un elenco telefonico contenuto in un file non basta confrontare ogni byte con gli altri, ma si deve considerare il modo in cui i bytes sono disposti. Di solito i files sono suddivisi in pi elementi, ognuno dei quali (un record) corrisponde ad un abbonato ed composto da pi bytes. Allinterno del record i bytes possono avere significati diversi. Il contenuto principale di ogni record il nome dellabbonato, che memorizzato sotto forma di caratteri ASCII, un byte per ogni lettera. Altri contenuti sono lindirizzo dellabbonato, anchesso sotto forma di caratteri ASCII, ed il numero telefonico, che pu essere memorizzato direttamente come numero oppure come serie di caratteri ASCII; un carattere ASCII, infatti, oltre che una lettera pu rappresentare una cifra. Se si torna alla tabella riportata nel capitoletto Come memorizzare le lettere, ad esempio, si vede che la cifra 1 corrisponde al numero 49. Se il numero telefonico da memorizzare, per ipotesi, fosse 1234 lo si potrebbe rappresentare in questo modo: indirizzo 0: indirizzo 1: indirizzo 2: indirizzo 3: 49 50 51 52

Le varie parti in cui suddiviso il record sono dette campi e di solito hanno una lunghezza fissa; immaginiamo che nel file degli abbonati del telefono il nome dellabbonato sia lungo al massimo 30 bytes, lindirizzo 40 ed il numero telefonico 10. Il record si potrebbe rappresentare in questo modo: campo nome indirizzo numero telefonico Totale record lunghezza 30 40 10 80

98

Questo record ha lunghezza fissa, il che facilita lindividuazione dei dati. Il primo record si trova alla posizione zero del file, il secondo alla posizione 80, il terzo alla posizione 160, il quarto alla posizione 240, e cos via. Il centunesimo record, ad esempio, si trova alla posizione 8000. Per ordinare un file indispensabile stabilire il criterio di ordinamento, definendo quale campo utilizzare per lordinamento. Per un elenco telefonico, ad esempio, conviene utilizzare il nome dellabbonato, non certo lindirizzo o il numero di telefono; un elenco ordinato secondo il numero di telefono non sarebbe molto utile. Un campo numerico pu essere ordinato in maniera crescente o decrescente, mentre un campo di tipo ASCII di solito viene ordinato in modo alfabetico. Il contenuto di un file prima dellordinamento pu essere il seguente: Nome Alberti, Mario Binda, Giorgio Delvecchio, Gianni Conti, Luigi Elli, Paolo Indirizzo Via Verdi 15 Via Rossini, 6 Via Pergolesi, 50 Via Cimarosa, 10 Via Bellini, 9 Telefono 02 66145781 02 12345782 02 12935689 02 34783333 02 45697305

0 80 160 240 320

Lordinamento alfabetico sul campo Nome lo trasforma in questo modo: Nome Alberti, Mario Binda, Giorgio Conti, Luigi Delvecchio, Gianni Elli, Paolo Indirizzo Via Verdi 15 Via Rossini, 6 Via Cimarosa, 10 Via Pergolesi, 50 Via Bellini, 9 Telefono 02 66145781 02 12345782 02 34783333 02 12935689 02 45697305

0 80 160 240 320

Ordinare in modo alfabetico semplice, perch i valori numerici dei codici ASCII aumentano in modo congruente allordine alfabetico dei caratteri, come si pu vedere consultando la tabella ASCII gi vista. Il valore numerico della lettera C maggiore di

99

uno del valore numerico della lettera B, che maggiore del valore della A. Per questo motivo il confronto alfabetico tra due campi che contengono caratteri ASCII si riduce al confronto aritmetico tra il primo byte di entrambi i campi: se sono diversi (ad esempio in uno c il valore 65 che corrisponde alla A e nellaltro il valore 66 che corrisponde alla B) si pu stabilire subito quale dei due record viene per primo, se sono uguali si confrontano tra loro i bytes successivi fino ad incontrare una differenza.

100

Il primo algoritmo di ordinamento Immaginiamo di dover ordinare una semplice sequenza di numeri (che possono essere visti come record composti da un solo campo numerico). La sequenza questa: 503,087,512,061,908,170 Utilizziamo un insieme di regole (un algoritmo) molto semplice. Si considera un numero alla volta partendo dal secondo e lo si confronta con i numeri che lo precedono; se il numero immediatamente precedente pi grande si inverte la posizione dei due numeri. In questo modo ogni elemento viaggia verso sinistra fino a trovare la sua posizione. Nellesempio si confronta 87 con 503 (i numeri da confrontare sono sottolineati); poich 503 maggiore di 87 si effettua uno scambio di posizione, indicato dal simbolo . 503 087 512 061 908 170 503 087 512 061 908 170 087 503 512 061 908 170 Si passa quindi a confrontare il terzo numero con il numero che lo precede; in questo caso 503 minore di 512, e quindi non c bisogno di invertire i due numeri. 087 503 512 061 908 170 chiaro che non necessario confrontare 512 anche con il numero in prima posizione, perch la parte sinistra del file gi stata ordinata; se 512 pi grande di 503 sicuramente pi grande di tutti i numeri che lo precedono. Quando un confronto d esito negativo non necessario procedere oltre. Si pu quindi passare a confrontare il quarto numero con quello che lo precede: 087 503 512 061 908 170

101

In questo caso 512 pi grande di 61, e quindi i due numeri vanno invertiti, dopo di che bisogna continuare con i controlli procedendo verso sinistra: 087 503 512 061 908 170 087 503 061 512 908 170 087 503 061 512 908 170 Anche questo confronto indica che i due numeri vanno invertiti: 087 503 061 512 908 170 087 061 503 512 908 170 A questo punto si confrontano tra loro i primi due numeri, che vanno anchessi invertiti: 087 061 503 512 908 170 087 061 503 512 908 170 061 087 503 512 908 170 Terminate le operazioni per il quarto numero, che si spostato fino alla prima posizione del file, si passa ad esaminare il quinto numero, che non richiede spostamenti, ed infine il sesto ed ultimo, che richiede tre spostamenti: 061 087 503 512 908 170 061 087 503 512 908 170 061 087 503 512 908 170 061 087 503 512 170 908 061 087 503 512 170 908 061 087 503 170 512 908 061 087 503 170 512 908 061 087 170 503 512 908 A questo punto, arrivati ad esaminare lultimo elemento, si sicuri che lintero file ordinato. Sono stati necessari sette spostamenti e dieci confronti.

102

Il numero degli spostamenti ed il numero dei confronti sono legati tra loro. Per ogni elemento tranne il primo si effettua un confronto, dopo di che serve un confronto in seguito ad ogni scambio, ad eccezione degli scambi che portano un elemento in prima posizione. Il numero dei confronti, quindi, uguale al numero degli scambi (nel nostro caso sette) pi il numero degli elementi meno uno (nel nostro caso cinque). A questo vanno sottratti gli scambi che hanno portato un elemento in prima posizione (due, per i numeri 87 e 61). Si pu quindi calcolare immediatamente che sono stati necessari dieci confronti.

103

Dodici elementi Le cose cambiano se il numero degli elementi da ordinare aumenta. Immaginiamo di estendere a dodici elementi la sequenza da ordinare: 503,087,512,061,908,170,897,275,653,426,154,509 Per rendere pi compatta la descrizione utilizzeremo una sola riga per ogni confronto, indicato con il simbolo se richiede uno spostamento, con la sottolineatura se non lo richiede. I confronti che abbiamo gi considerato per ordinare i primi sei numeri, fino a 170 compreso, sono dieci in tutto: 503 087 512 061 908 170 897 275 653 426 154 509 087 503 512 061 908 170 897 275 653 426 154 509 087 503 512 061 908 170 897 275 653 426 154 509 087 503 061 512 908 170 897 275 653 426 154 509 087 061 503 512 908 170 897 275 653 426 154 509 061 087 503 512 908 170 897 275 653 426 154 509 061 087 503 512 908 170 897 275 653 426 154 509 061 087 503 512 170 908 897 275 653 426 154 509 061 087 503 170 512 908 897 275 653 426 154 509 061 087 170 503 512 908 897 275 653 426 154 509 I tre numeri successivi, 897 in settima posizione, 275 in ottava posizione e 653 in decima richiedono rispettivamente due, cinque e tre confronti. 061 087 170 503 512 908 897 275 653 426 154 509 061 087 170 503 512 897 908 275 653 426 154 509 061 087 170 503 512 897 908 275 653 426 154 509 061 087 170 503 512 897 275 908 653 426 154 509 061 087 170 503 512 275 897 908 653 426 154 509 061 087 170 503 275 512 897 908 653 426 154 509 061 087 170 275 503 512 897 908 653 426 154 509

104

061 087 170 275 503 512 897 908 653 426 154 509 061 087 170 275 503 512 897 653 908 426 154 509 061 087 170 275 503 512 653 897 908 426 154 509 Il numero in decima posizione, 426, richiede sei confronti: 061 087 170 275 503 512 653 897 908 426 154 509 061 087 170 275 503 512 653 897 426 908 154 509 061 087 170 275 503 512 653 426 897 908 154 509 061 087 170 275 503 512 426 653 897 908 154 509 061 087 170 275 503 426 512 653 897 908 154 509 061 087 170 275 426 503 512 653 897 908 154 509 Il numero in undicesima posizione, 154, richiede nove confronti: 061 087 170 275 426 503 512 653 897 908 154 509 061 087 170 275 426 503 512 653 897 154 908 509 061 087 170 275 426 503 512 653 154 897 908 509 061 087 170 275 426 503 512 154 653 897 908 509 061 087 170 275 426 503 154 512 653 897 908 509 061 087 170 275 426 154 503 512 653 897 908 509 061 087 170 275 154 426 503 512 653 897 908 509 061 087 170 154 275 426 503 512 653 897 908 509 061 087 154 170 275 426 503 512 653 897 908 509 Il numero in ultima posizione, infine, richiede cinque confronti 061 087 154 170 275 426 503 512 653 897 908 509 061 087 154 170 275 426 503 512 653 897 509 908 061 087 154 170 275 426 503 512 653 509 897 908 061 087 154 170 275 426 503 512 509 653 897 908 061 087 154 170 275 426 503 509 512 653 897 908 Il numero totale di spostamenti 31, il numero di confronti 40, il quadruplo di quelli necessari ad ordinare sei elementi. Questo risultato era prevedibile: ogni numero che viene considerato nellalgoritmo deve essere inserito nella posizione

105

corretta nella parte a sinistra del file, che gi ordinata. Poich non c motivo di pensare che il numero da inserire sia pi grande o pi piccolo di quelli gi ordinati, in media dovr essere confrontato con la met dei numeri che lo precedono prima di trovare la sua posizione. Raddoppiando il numero degli elementi, quindi, raddoppiano sia il numero delle volte in cui si considera un elemento, sia il numero medio di confronti che ogni elemento deve effettuare; in questo modo il numero totale quadruplica. Il tempo necessario ad ordinare un file con questo algoritmo cresce quindi in modo proporzionale al quadrato della sua dimensione. Se il file da ordinare fosse mille volte pi grande e contenesse non sei, ma seimila elementi, il numero di operazioni necessarie sarebbe un milione (mille per mille) di volte maggiore. Se il file da ordinare fosse un milione di volte pi grande e contenesse sei milioni di elementi (il che potrebbe accadere, ad esempio, per lelenco telefonico di una grande citt) il tempo necessario per ordinare il file originale andrebbe moltiplicato per mille miliardi (un milione per un milione). Questo algoritmo, in definitiva, molto semplice ma adatto solo a files di dimensioni contenute. Per ordinare dei files pi grandi in tempi ragionevoli sono necessari algoritmi pi sofisticati.

106

Linserzione binaria Il metodo che abbiamo visto per inserire un numero in un file gi ordinato richiede un confronto con ogni elemento che lo precede, fino allidentificazione della posizione corretta. Un metodo molto pi efficace prevede invece di confrontare il numero da inserire con lelemento che si trova nella posizione centrale del file; se i due numeri sono uguali, il confronto termina immediatamente e si pu inserire il nuovo numero a fianco dellelemento centrale. In caso contrario si comunque pi che dimezzato il campo della ricerca; se il numero da inserire minore il suo posto nella parte sinistra del file, altrimenti nella parte destra. A questo punto si pu ripetere il procedimento; si considera il numero che si trova nella posizione centrale della met del file in cui il numero deve essere inserito, e si determina a quale met della met destinato, riducendo il campo della ricerca a meno di un quarto (anche il numero oggetto del secondo confronto pu essere escluso). Si continua a dividere in due il file fino ad arrivare al singolo elemento e a trovare la posizione corretta per il numero da inserire. Ritorniamo al passo dellordinamento che riguarda il numero in undicesima posizione, che richiedeva nove confronti per trovare la posizione corretta: 061 087 170 275 426 503 512 653 897 908 154 509 Invece di confrontarlo con il numero in decima posizione e poi con tutti gli altri, confrontiamolo con il numero nella quinta posizione, 426, a met della parte del file gi ordinata. 061 087 170 275 426 503 512 653 897 908 154 509 Il confronto indica che 154 deve essere inserito nel primo quarto del file; lo si confronta allora con 170: 061 087 170 275 426 503 512 653 897 908 154 509

107

Questo confronto ha lo stesso esito; la posizione del numero da inserire a sinistra di 170, dove si trovano due numeri; consideriamo come centrale il secondo, 087. 061 087 170 275 426 503 512 653 897 908 154 509 Questultimo confronto determina la posizione finale di 154, tra il secondo ed il terzo elemento. Sono stati necessari tre confronti invece di nove. Si pu calcolare facilmente il numero di confronti necessari per ordinare un determinato numero di elementi. Se c un unico elemento, serve un solo confronto per sapere se il nuovo numero va inserito a sinistra o a destra; con due confronti si possono ordinare tre elementi: il primo confronto esclude lelemento centrale e rimanda ad un confronto con il primo o il terzo elemento.

abc
Con tre confronti si arriva a sette elementi (il primo confronto sullelemento d, il secondo sullelemento b o f, il terzo su a, c, e o g):

abc d efg
In linea generale, aumentando di uno il numero di confronti, si pu ordinare un numero di elementi pari al doppio pi uno di quelli che si potevano ordinare prima.

108

La progressione questa: 1 3 7 15 31 63 127 ... Un file di 127 elementi richiede al massimo sette confronti (uno dei confronti potrebbe trovare un numero esattamente uguale a quello da inserire e velocizzare le cose), invece di una media di 63 con il vecchio algoritmo. Se si aggiunge uno ad ogni elemento di questa progressione, si ottiene esattamente la progressione delle potenze di due: 1 2 4 8 16 32 64 128 ... Il numero massimo di confronti necessario per ordinare un file il numero di volte per cui si deve moltiplicare due per s stesso per ottenere la lunghezza del file pi uno. Il numero di volte per cui si deve moltiplicare due per s stesso per ottenere un numero dett o logaritmo in base due del numero. Anche se non stata descritta esplicitamente, abbiamo gi visto una progressione logaritmica: il numero di bit di indirizzamento necessari a gestire una certa quantit di memoria corrisponde al logaritmo della sua dimensione. Ad esempio, come si visto nel Un kilobyte non mille bytes, per indirizzare una memoria di 65536 bytes servono 16 bit, e 16

109

appunto il logaritmo di 65536. Per indirizzare una memoria di 1.048.576 servono 20 bit, il valore del logaritmo di 1.048.576. Il logaritmo di un numero cresce molto lentamente al crescere del numero. Un file di 65535 elementi richiede sedici confronti, invece dei 32768 in media dellalgoritmo pi semplice. Per un file di un milione di elementi servono venti confronti invece di mezzo milione. Il numero di spostamenti, invece, non cambia, perch per muovere un numero da una posizione ad unaltra si devono spostare tutti i numeri che si trovano nelle posizioni intermedie. Un essere umano che utilizza carta e penna pu inserire in modo semplice un numero in qualunque posizione in un elenco, ma un calcolatore che lavora su una memoria ad indirizzi fissi non pu fare diversamente. Lefficienza globale di questo algoritmo resta quindi piuttosto bassa. Questi tipo di ricerca della posizione corretta di un elemento detta ricerca binaria, perch ogni volta si suddivide in due il suo campo. Lalgoritmo di ordinamento corrispondente detto ad inserzione binaria ed stato proposto da John Mauchly nel 1946, nel primo articolo sullordinamento di numeri con un calcolatore pubblicato da una rivista scientifica.

110

Lalgoritmo di Shell Utilizzando linserzione binaria si pu ridurre il numero di confronti necessari per ordinare un file, ma non il numero di spostamenti. Per ridurre anche questultimo si devono trovare altri accorgimenti, e lunica soluzione aumentare lampiezza degli spostamenti. Un algoritmo proposto nel 1959 da Donald Shell affronta il problema confrontando elementi che si trovano in posizioni distanti nel file e scambiandoli tra loro se richiesto uno spostamento. Utilizziamo la consueta sequenza di dodici numeri e dividiamola in sei sequenze di due numeri, che ordiniamo separatamente con un solo confronto, scambiandoli tra loro se non sono nellordine corretto. I gruppi sono composti dal primo e dal settimo elemento, dal secondo e dallottavo, e cos via:

503 087 512 061 908 170 897 275 653 426 154 509
In questo primo passo si scambia soltanto il quinto elemento, 908, con lundicesimo, 154, e si ottiene: 503 087 512 061 154 170 897 275 653 426 908 509 A questo punto suddividiamo il file in tre gruppi di quattro elementi, ognuno distanziato di tre posizioni; il primo gruppo composto dal primo, quarto, settimo e decimo elemento:

503 087 512 061 154 170 897 275 653 426 908 509
Il secondo gruppo comprende gli elementi nelle posizioni due, cinque, otto e undici, il terzo gruppo gli elementi nelle posizioni tre, sei, nove e dodici:

111

503 087 512 061 154 170 897 275 653 426 908 509 Per ordinare ognuno di questi gruppi si pu usare il primo algoritmo che abbiamo visto, che per un piccolo numero di elementi sufficientemente efficace. Il primo gruppo si ordina in tre spostamenti: 503 061 897 426 061 426 503 897 Il secondo gruppo (087 154 275 908) non ha bisogno di spostamenti. Il terzo gruppo, infine, richiede anchesso tre spostamenti; 512 170 653 509 170 509 512 653 A questo punto il file gi piuttosto ordinato: 061 087 170 426 154 509 503 275 512 897 908 653 e lo si pu ordinare completamente con otto spostamenti, ottenendo la sequenza finale: 061 087 154 170 275 426 503 509 512 653 897 908 Il numero totale di spostamenti quindici, meno della met di quelli necessari con i primi due algoritmi che abbiamo visto. Questo algoritmo viene detto ordinamento con incremento a diminuzione, perch la distanza tra gli elementi dei gruppi in cui il file suddiviso diminuisce ad ogni passo. La sequenza 1, 3, 6 che prevede la suddivisione in sei gruppi, poi tre ed infine in un unico gruppo non privilegiata. Se il numero di elementi da ordinare elevato diventa molto importante trovare la sequenza ottimale, che ha richiesto complessi studi matematici e che dipende dal grado di ordinamento iniziale del file. La sequenza migliore, partendo dallultima suddivisione (che deve essere in un unico gruppo) fino a raggiungere un valore maggiore o uguale al numero degli elementi, sembra essere:

112

1, 4, 13, 40, 123, ... ed generata triplicando ogni volta il valore dellincremento ed aggiungendovi uno. Ad esempio, se si deve ordinare un file di 120 elementi il primo passo consiste nel dividerlo in 40 gruppi di tre elementi. Il secondo passo richiede la suddivisione in tredici gruppi (di cui tre di dieci elementi e dieci di nove), il terzo la suddivisione in quattro gruppi di trenta elementi. Lultimo passo, infine, con incremento uno, equivale allordinamento completo.

113

Il quicksort Lultimo algoritmo di ordinamento che esaminiamo il quicksort o ordinamento rapido, che venne proposto nel 1962 da C.A. Hoare. Questo algoritmo richiede un numero limitato di scambi ed estremamente veloce perch molti confronti riguardano il medesimo elemento, rendendo particolarmente efficiente la sua realizzazione con un programma di calcolatore. Il quicksort effettua scambi tra elementi che si trovano in posizioni lontane tra loro, in modo simile allalgoritmo di Shell, ma utilizza una diversa strategia; ogni volta si prende in considerazione il primo elemento e si suddivide il resto del file in due parti, una composta da tutti gli elementi pi piccoli del primo elemento, laltra da tutti gli elementi pi grandi. Il processo viene ripetuto pi volte, suddividendo le parti in cui il file stato diviso fino ad arrivare ai singoli elementi. Consideriamo la sequenza consueta: 503 087 512 061 908 170 897 275 653 426 154 509 Il modo migliore per dividere gli elementi tra quelli pi piccoli e quelli pi grandi di 503 consiste nel partire dal secondo elemento fino a trovare un numero che fuori posto, perch pi grande di 503 e deve stare nella parte destra del file (nellesempio, il 512). Subito dopo si parte dallultimo numero del file e si esaminano i numeri precedenti fino a trovare un numero pi piccolo di 503, che deve stare nella parte sinistra del file (nellesempio, il 154): 503 087 512 061 908 170 897 275 653 426 154 509 A questo punto si scambiano tra loro i due numeri e si continua con gli elementi immediatamente successivi da entrambe le parti del file: 503 087 154 061 908 170 897 275 653 426 512 509

114

Il processo va ripetuto fino a che la progressione da sinistra a destra e la progressione da destra a sinistra si incontrano: 503 087 154 061 426 170 897 275 653 908 512 509 503 087 154 061 426 170 275 897 653 908 512 509 A questo punto si scambia il primo elemento con lultimo elemento a cui arrivata la progressione verso destra (nellesempio, il 275), e si ottiene un file diviso in due parti, la prima composta dagli elementi minori di 503, la seconda dagli altri elementi. Fino a questo momento sono stati necessari quattro spostamenti. [275 087 154 061 426 170] 503 [897 653 908 512 509] Il procedimento va ripetuto su ognuna delle due parti, suddividendole rispetto al primo elemento che contengono, in un caso 275, nellaltro caso 897: [[170 087 154 061] 275 [426]] 503 [[512 653 509] 897 [908]] Per arrivare a questo punto sono stati necessari altri quattro spostamenti. Si ripete il procedimento per i due gruppi rimasti non ordinati (il primo [170 087 154 061], il secondo [512 653 509]), con altri tre spostamenti: [[[061 087 154] 170] 275 [426]] 503 [[[509] 512 [653]] 897 [908]] A questo punto il file completamente ordinato, con un totale di undici spostamenti, il numero pi basso incontrato finora. Le analisi matematiche confermano la velocit di questo algoritmo, che ha una caratteristica molto particolare: le sue prestazioni migliorano se il file disordinato. Nel caso di un file gi ordinato ogni passo praticamente inutile e vengono effettuate molte suddivisioni superflue. Contrariamente agli altri algoritmi, al quicksort piacciono i files disordinati.

115

La ricerca allinterno di un file Immaginiamo di dover cercare il nome di una persona di cui conosciamo il numero di telefono utilizzando un normale elenco telefonico. Non ci sono particolari considerazioni da fare; lunico metodo la ricerca sequenziale: si legge un numero alla volta, fino a trovare quello che cerchiamo. Se per qualche motivo il numero che ci hanno dato non compare, lunico modo per scoprirlo arrivare alla fine dellelenco, effettuando tanti confronti quanti sono i suoi elementi. Nel caso, invece, il numero ci sia, il numero medio di confronti necessari la met della dimensione dellelenco. chiaro che lo scenario cambia completamente se il file che contiene i dati ordinato secondo il campo sul cui valore si effettua la ricerca. In questo caso lalgoritmo migliore la ricerca binaria, gi visto nel capitoletto dedicato allinserzione binaria. Questo algoritmo confronta lelemento che si cerca con lelemento che si trova nella posizione centrale del file, dimezzando il campo della ricerca, e procede in questo modo continuando a dimezzare il file fino a trovare lelemento cercato. Immaginiamo di dover cercare il numero 154 in una sequenza ordinata di quindici elementi: 061 087 154 170 275 426 503 509 512 653 897 908 910 983 999 Il primo confronto con lelemento centrale, 509: 061 087 154 170 275 426 503 509 512 653 897 908 910 983 999 Il confronto ci dice che dobbiamo cercare nella parte a sinistra, di cui consideriamo lelemento centrale, 170 061 087 154 170 275 426 503 Anche questo confronto ci porta a cercare nella parte a sinistra, nella quale consideriamo lelemento in seconda posizione, 087: 061 087 154

116

Lultimo confronto con lelemento a sinistra di 087, per verificare che sia effettivamente il numero che cerchiamo. Il confronto d esito positivo; in caso contrario avremmo concluso che il numero richiesto non presente nel file. Sono stati necessari quattro confronti, pari al logaritmo in base due della dimensione del file pi uno, come si visto nel capitoletto sullinserzione binaria. Seguendo questa regola, possiamo calcolare che per ricercare un elemento in un file di 127 elementi servono sette confronti, per un file di un milione di elementi ne servono venti. Se per lelemento cercato viene individuato prima dellultimo confronto, come sarebbe avvenuto se avessimo ricercato proprio il 509, si possono evitare tutti i passi successivi ed il numero effettivo di confronti minore. Se dobbiamo fare pi volte una ricerca su un file non ordinato, pu essere utile ordinarlo preventivamente. Il numero di ricerche oltre al quale diventa opportuno un passo di ordinamento dipende dalla sua dimensione e non facile da calcolare; in linea di massima si pu dire che ordinare con un buon algoritmo un file di un migliaio di elementi diventa conveniente se si prevede di effettuare almeno alcune decine di ricerche.

117

Indici e liste Gli indici Una compagnia telefonica deve essere in grado non solo di comunicare il numero di un abbonato, ma anche di risalire rapidamente dal numero di un abbonato al suo nome. A questo scopo servirebbero due elenchi telefonici, uno ordinato alfabeticamente secondo il nome dellabbonato, laltro ordinato secondo il numero; nel caso le informazioni siano gestite da calcolatori, servirebbero due files. Per evitare di dover gestire pi files si pu utilizzare un particolare accorgimento; invece di utilizzare due files ed ordinarli completamente secondo due diversi criteri, si usa un solo file lasciandolo immutato e si creano degli indici, composti dagli indirizzi di tutti i suoi record. Nel caso dellelenco telefonico abbiamo ipotizzato che il record abbia una lunghezza fissa di 80 bytes. Un file di indice, quindi, avrebbe nel suo primo elemento lindirizzo del primo record, che zero, nel secondo elemento lindirizzo del secondo record, ottanta, e cos via. Come abbiamo visto nel capitoletto Il criterio di ordinamento, il centunesimo record ha indirizzo 8000. Se il file dellelenco telefonico contenesse un milione di elementi, lindirizzo dellultimo record si otterrebbe moltiplicando ottanta per 999.999, ottenendo 79.999.920. Di solito gli indirizzi sono memorizzati in forma numerica, e non come caratteri ASCII; utilizzando quattro bytes per ogni indirizzo, dato che il numero pi grande che si pu esprimere con 32 bit 4.294.967.295, si in grado di indirizzare un file di pi di quattro miliardi di record. Il file degli indici, quindi, molto pi piccolo del file originale: ogni suo elemento richiede solo quattro bytes invece di ottanta. In che modo si pu utilizzare un file di indice per ordinare il file originale?

118

Immaginiamo che il file sia il seguente (per comodit vicino ad ogni record indichiamo anche il suo indirizzo): Nome Alberti, Mario Binda, Giorgio Delvecchio, Gianni Conti, Luigi Elli, Paolo Indirizzo Via Verdi 15 Via Rossini, 6 Via Pergolesi, 50 Via Cimarosa, 10 Via Bellini, 9 Telefono 02 66145781 02 12345782 02 12935689 02 34783333 02 45697305

0 80 160 240 320

Il file degli indici corrispondente molto semplice: 0 80 160 240 320 Quando si rileva che necessario scambiare il terzo record (Delvecchio, Gianni) con il quarto (Conti, Luigi), invece di spostare completamente i due record, ci si limita a scambiare il terzo indice con il quarto:
Indice 0 80 240 160 320 Nome Alberti, Mario Binda, Giorgio Delvecchio, Gianni Conti, Luigi Elli, Paolo Indirizzo Via Verdi 15 Via Rossini, 6 Via Pergolesi, 50 Via Cimarosa, 10 Via Bellini, 9 Telefono 02 66145781 02 12345782 02 12935689 02 34783333 02 45697305

0 80 160 240 320

A questo punto, il file originale non ordinato, ma il file degli indici segue lordine alfabetico dei record del file originale. Per effettuare una ricerca binaria si parte dallelemento centrale del file di indici, 240, che contiene lindirizzo del record dellabbonato Conti, Luigi, che sarebbe il record centrale nel file ordinato. Se il nome che si ricerca, ad esempio Binda, Giorgio precede il valore del record con indirizzo 240, Conti, Luigi, si pu essere certi che lindice che punta al nome che si cerca si trova in posizione

119

precedente a quella centrale. Si passa quindi allelemento centrale della met del file di indici rimasta, 80, che punta al record dellabbonato Binda, Giorgio e la ricerca ha termine. Il primo vantaggio dellindicizzazione ovvio: invece di spostare un record di ottanta bytes, sufficiente spostare un indice di quattro bytes. Il secondo vantaggio la possibilit di creare pi files di indici, ognuno ordinato secondo un criterio diverso. Si pu facilmente creare un secondo file di indici ordinato secondo il numero di telefono, senza bisogno di duplicare il file completo ed ordinarlo secondo il nuovo criterio. Il primo indice, 80, punta al record dellabbonato con il numero di telefono pi basso, 02 12345782, lultimo indice, 0, punta al record dellabbonato con il numero pi alto, 02 66145781.
Indice 2 80 160 240 320 0 Nome Alberti, Mario Binda, Giorgio Delvecchio, Gianni Conti, Luigi Elli, Paolo Indirizzo Via Verdi 15 Via Rossini, 6 Via Pergolesi, 50 Via Cimarosa, 10 Via Bellini, 9 Telefono 02 66145781 02 12345782 02 12935689 02 34783333 02 45697305

0 80 160 240 320

Il terzo vantaggio dellindicizzazione ancora pi importante: fino ad ora abbiamo considerato files composti da elementi di lunghezza fissa, in modo che fosse possibile calcolare facilmente lindirizzo di qualsiasi record. Questa esigenza viene meno se si utilizzano gli indici, perch ogni accesso ai record avviene tramite gli indici. In questo modo ogni record pu contenere soltanto i bytes effettivamente necessari; per memorizzare il record: Nome Alberti, Mario Indirizzo Via Verdi 15 Telefono 02 66145781

bastano in effetti 14 bytes per il nome, 12 per lindirizzo, 10 per il numero di telefono, per un totale di 36 invece degli 80 che abbiamo dovuto occupare per tenere conto della possibile presenza di nomi o indirizzi molto lunghi. Rimane il problema di indicare la fine di ogni campo di un record, che pu essere risolto aggiungendo alla fine di ogni campo un byte posto a zero, che non pu essere confuso con un codice ASCII. In

120

questo caso la lunghezza effettiva del record dellesempio sarebbe di 39 bytes, ed il secondo record comincerebbe allindirizzo 39:
Indice 0 39 80 127 168 0 39 80 127 168 Nome Alberti, Mario Binda, Giorgio Delvecchio, Gianni Conti, Luigi Elli, Paolo Indirizzo Via Verdi 15 Via Rossini, 6 Via Pergolesi, 50 Via Cimarosa, 10 Via Bellini, 9 Telefono 02 66145781 02 12345782 02 12935689 02 34783333 02 45697305

Ovviamente, questo file di indici pu essere elaborato come se i record avessero lunghezza fissa.

121

Un indice per ogni parola Prima dellavvento dei calcolatori, per creare lindice dei nomi di un libro si leggevano le bozze e si prendeva nota di ogni nome e della pagina in cui compariva, o si aggiungeva un nuovo numero di pagina se il nome era gi presente nellindice. Se il libro stato scritto con un calcolatore ed contenuto in un file il procedimento molto pi rapido. Il curatore indica ad un programma tutte i nomi presenti nel libro e viene creato un file, simile al file di indici visto nel precedente capitoletto, in cui ogni record contiene un nome e lindirizzo della sua posizione allinterno del file. Al momento di stampare il libro facile risalire da questi indirizzi al numero di pagina in cui compaiono i nomi (nellesempio, il nome Einstein compare due volte):

Einstein Bohr Schroedinger Heisenberg

0 159 165 179

244

I record di questo file sono a lunghezza variabile, perch la lunghezza dei nomi non fissa. In ogni record, dopo il nome, conviene indicare quante volte compare, il che richiede un ulteriore campo numerico. Per questo motivo, per accedere al file dellindice dei nomi serve un altro file di indici, che rappresenta lindice dellindice. Per ordinare alfabeticamente lindice dei nomi ci si pu quindi limitare ad ordinare i suoi indici.

Einstein

244

122

21 0 55 34

0 21 34 55

21 34 Einstein 55

Bohr 1 159 Schroedinger 1 165 Heisenberg 1 179

Bohr 159 Schrdinger 165 2 0 244 Heisenberg 179

In questo modo si possono ritrovare facilmente allinterno del file i nomi indicati dal curatore. Ma se volessimo poter ritrovare qualsiasi parola, e non solo i nomi? Si pu estendere il procedimento e creare un indice non per parole selezionate, come i nomi di persona, ma per tutte le parole. Lindice completo di un testo piuttosto grande, ma meno di quanto si potrebbe immaginare. Per ridurne le dimensioni, infatti, si possono eliminare tutte le parole che non caratterizzano il file e su cui non ha senso effettuare una ricerca, come gli articoli, le congiunzioni, le proposizioni, i pronomi. In questo modo di solito si riduce il numero delle parole da indicizzare a meno della met. In ogni testo, inoltre, vi sono parole che si ripetono molto frequentemente; ogni volta che si trova una parola gi presente nellindice non si deve creare un nuovo record, ma sufficiente aggiungere al record gi esistente lindicazione della posizione della nuova occorrenza, risparmiando spazio. Le ricerche su di un testo indicizzato in questo modo non sono limitate alle singole parole, ma possono riguardare anche le combinazioni di parole. Se si cerca, ad esempio, meccanica quantistica, si devono individuare soltanto quelle occorrenze della parola meccanica che sono seguite immediatamente dalla parola quantistica. Questa ricerca pressoch immediata se si utilizza lindicazione della posizione delle parole presente in ogni record.

123

Hashing Fino ad ora abbiamo dato per scontato che ricerche rapide su di un file richiedano che il file sia ordinato. Per garantire la velocit delle ricerche, per, si pu usare un altro metodo: basta inserire ogni record in modo che con un particolare accorgimento lo si possa ritrovare immediatamente, per quanto grande sia il file. A questo scopo serve una funzione che generi in maniera univoca un indirizzo in cui inserire il file in base al campo su cui si effettua la ricerca (ad esempio il nome, nel caso dellelenco telefonico). Per ritrovare quel particolare record sar sufficiente usare la stessa funzione per scoprire la posizione del record. Il risultato di questa funzione deve avere la stessa probabilit per tutti gli indirizzi possibili, per sfruttare tutte le posizioni del file e fare in modo che ogni record finisca con buona probabilit in una posizione libera. Se la funzione desse lo stesso risultato per parecchi nomi, ci sarebbe una elevata possibilit di trovare quella locazione di memoria gi occupata. Questa funzione dovrebbe quindi fornire risultati il pi possibile casuali; in realt le funzioni che si utilizzano sono pseudocasuali, perch nelle elaborazioni dei calcolatori nulla dipende davvero dal caso. Una funzione semplice ma abbastanza efficace si pu ricavare sommando i valori ASCII dei caratteri del nome. Prendiamo come esempio il nome Conti Luigi e confrontiamo ogni carattere con la tabella dei codici ASCII riportata nel capitoletto Come memorizzare le lettere:
C o n t i L u i g i Totale 67 111 110 116 105 76 117 105 103 105 1015

124

Nellipotesi che la tabella da riempire abbia una dimensione di 100 record, per ottenere un valore da 0 a 99 basta prendere il resto della divisione di 1015 per 100 ed inserire il record nella posizione 15 (in effetti la sedicesima posizione, perch il primo record si trova nella posizione 0). Se nel file tutti i record hanno una lunghezza fissa di 80 bytes, il record Conti Luigi va inserito a partire dal byte 1200. Quando si cercher il numero di telefono di Conti Luigi sar sufficiente ripetere queste operazioni per ricavare che si trova nella posizione 15.
Conti Luigi

hash = 15

... 14 15 16 ...

.....
Conti Luigi via Cimarosa 10 0234783333 .......

Immaginiamo ora di dover inserire un secondo record, corrispondente allabbonato Binda Giorgio: sufficiente ripetere il procedimento:

125

B i n d a G i o r g i o Totale

66 105 110 100 97 71 105 111 114 103 105 111 1198

Prendiamo il resto della divisione di 1198 per 100 ed inseriamo il record nella posizione 98, a partire dal byte 7840:
Conti Luigi

hash = 15
14 15

......
Conti Luigi via Cimarosa 10 0234783333 .....

Binda Giorgio

hash = 98
98 99

....
Binda Giorgio via Rossini 6 0212345782

....

126

Questa tecnica detta hashing, che in italiano si pu tradurre come affettare il file. Quando la si utilizza necessario creare un file pi grande del necessario; in caso contrario, sarebbe molto probabile trovare gi occupate le posizioni calcolate dalla funzione pseudocasuale prima di avere finito di inserire tutti i record. Un file con 100 record, ad esempio, adatto per inserirne un massimo di 60 o 70.

127

Il paradosso dei compleanni Che cosa succede se la posizione calcolata dalla funzione pseudocasuale gi occupata? Si potrebbe pensare che questa probabilit sia molto bassa se la funzione studiata bene ed il file di destinazione sufficientemente grande, ma in realt molto difficile evitare che questo evento (la collisione hash) avvenga con una certa frequenza. Secondo il famoso paradosso dei compleanni, se ci sono ventitr persone ad una festa c una probabilit maggiore del 50 per cento che due o pi di loro festeggino il compleanno nello stesso giorno. Questo significa che una funzione effettivamente casuale (la data di nascita di una persona) applicata per 23 record che devono essere inseriti in un file con ben 365 posizioni ha una probabilit maggiore del 50 per cento di generare una collisione. Per calcolare questo valore conviene calcolare prima la probabilit che tutti le ventitr persone siano nate in giorni diversi, e poi invertire il risultato. La probabilit che due persone prese a caso siano nate in giorni diversi molto vicina a uno, ed esattamente 364 diviso 365 (perch c una probabilit su 365 che siano nate nelle stesso giorno). La probabilit che tre persone siano nate in giorni diversi 364 diviso 365 moltiplicato per 363 diviso 365; infatti per la terza persona si devono escludere i due giorni in cui sono nate le altre. Procedendo in questo modo, si devono moltiplicare tra loro per ventidue volte i numeri decrescenti a partire da 364 e fino a 342, e dividere il tutto per 365 elevato alla ventiduesima potenza. Il risultato di questi calcoli circa 0.493: di conseguenza la probabilit di collisione del 50.7 per cento. Il paradosso dei compleanni porta a concludere che non conviene utilizzare files molto grandi sperando di evitare la collisione hash, ma che necessario gestirla. Il modo pi semplice consiste nel passare al record successivo quando si trova un record occupato; se anchesso occupato si deve continuare in sequenza fino a trovare un record libero.

128

Il maggiore impatto della collisione hash si ha in fase di ricerca. Quando la funzione pseudocasuale d un valore 58 per il nome Rossi, Mario, si deve verificare che il nome nel record che si trova alla posizione 58 sia effettivamente quello che ci aspettiamo. Se la posizione occupata da un record diverso da quello che cerchiamo si deve passare al record in posizione successiva, continuando fino a trovare il record che ci serve. Se si trova una posizione non occupata, invece, si pu concludere che il nome cercato non presente nellelenco. Per ridurre limpatto delle collisioni, oltre ad utilizzare una funzione che abbia effettivamente la stessa probabilit di indicare ognuna delle posizioni disponibili, si deve fare in modo che rimanga un numero sufficiente di posizioni libere anche quando si inseriscono gli ultimi record. Se si utilizzasse un file in grado di contenere esattamente il numero di record richiesti, ad esempio, lultimo record andrebbe quasi sicuramente in collisione e si dovrebbe cercare lunica posizione rimasta libera confrontandolo con molti altri record (in media, la met del totale). Il criterio indicato nel precedente capitoletto, che prevede di lasciare almeno il 30% di spazio disponibile alla fine degli inserimenti, rappresenta un ragionevole compromesso tra velocit e risparmio di locazioni di memoria.

129

Sempre pi veloci Nella vita di tutti i giorni teniamo le cose che ci servono frequentemente in posti ben accessibili; anche se disponiamo di parecchi vestiti nel guardaroba, probabilmente gli abiti che utilizzeremo questa sera sono in un piccolo armadio o su una sedia vicina al letto. Quando si avvicina la primavera, riponiamo i vestiti invernali nel guardaroba e teniamo gli abiti estivi a portata di mano. Non si pu avere tutto in posizione comoda, e quindi importante scegliere bene che cosa mettere nelle poche, preziose, posizioni dallaccesso agevole. La programmazione dei calcolatori utilizza lo stesso criterio. In linea di massima i calcolatori dispongono di due tipi di memoria: quella principale, composta da circuiti elettronici, che richiede pochi nanosecondi per ogni accesso (un nanosecondo corrisponde ad un miliardesimo di secondo), e quella secondaria, composta dai dischi fissi, con tempi di accesso dellordine dei millisecondi, circa un milione di volte pi lenta. Tutti i files sono memorizzati nella memoria secondaria, perch ha una capacit molto pi grande e permette di mantenere i dati anche quando il calcolatore viene spento. Se si dovesse accedere ai dischi fissi ogni volta che si ha bisogno di leggere un file, il funzionamento dei calcolatori sarebbe intollerabilmente lento. Il rapporto tra la velocit di accesso alla memoria principale e alla memoria secondaria lo stesso che c tra il tempo necessario a trovare qualcosa in tasca (1 secondo) ed un viaggio di dieci giorni (circa un milione di secondi) in una localit difficilissima da raggiungere per procurarsi un oggetto raro. I calcolatori riescono a funzionare velocemente perch tengono parte del contenuto dei files nella memoria veloce, proprio come noi destate teniamo a portata di mano i vestiti leggeri. La porzione della memoria principale dedicata a questo scopo di solito va dal dieci al venti per cento del totale ed detta cache. Sia il disco che la cache sono organizzati a blocchi; ogni volta che si accede al disco fisso se ne prende un intero blocco, di solito composto da 4096 bytes, perch

130

probabile che si debbano effettuare altri accessi alle locazioni di memoria immediatamente precedenti o immediatamente successive. Ma come scegliere la parte dei files da tenere in cache? Si possono seguire diversi criteri: se si prevede di effettuare delle ricerche su di un file che contiene lelenco telefonico, conviene mantenere nella cache i record che vengono richiesti pi di frequente, come quelli dei ristoranti, dei cinema, delle farmacie, degli uffici comunali. Se un calcolatore viene usato per ascoltare brani musicali, opportuno tenere in cache tutti i files che contengono le canzoni ascoltate pi spesso. Definire questi criteri potrebbe essere molto complicato, per cui di solito si utilizza un criterio empirico: quando si richiede un blocco lo si mette nella cache, quando bisogna liberare un blocco di cache si libera quello che da pi tempo non viene letto. In questo modo la cache si popola con i blocchi pi usati e si riempir automaticamente con i record di cinema e negozi e con i pezzi musicali pi ascoltati. Alla partenza del calcolatore la cache vuota. Se ha una dimensione di diecimila elementi, i primi diecimila blocchi del disco fisso che vengono letti sono copiati in cache. ovvio che ogni ulteriore lettura di questi blocchi trover i dati nella cache e sar estremamente rapida; per questo motivo, ad esempio, la seconda volta che si apre un file con un programma di videoscrittura il testo appare sul video molto pi rapidamente. Dopo avere riempito diecimila blocchi la cache completamente occupata; da questo momento ogni volta che si cerca un blocco si deve considerare la possibilit che non sia presente in cache. In questo caso si deve caricare in memoria il nuovo blocco di disco, riutilizzando il blocco di cache che da pi tempo non viene letto. Per individuare immediatamente il blocco da sacrificare si potrebbe controllare lora dellultima lettura di ogni blocco, ma questa ricerca sarebbe piuttosto lenta. Per rendere pi rapida questa operazione, invece, si adotta un accorgimento che richiede che i blocchi della cache siano organizzati in un modo particolare e che verr descritto nel prossimo capitoletto.

131

La gestione delle liste Una lista una catena di record, che nel nostro caso corrispondono a blocchi di memoria, che di norma non hanno indirizzi consecutivi ma si possono trovare in qualsiasi posizione. In ognuno dei blocchi c un indice (detto anche puntatore) che contiene lindirizzo dellelemento immediatamente precedente ed un indice che contiene lindirizzo dellelemento immediatamente successivo:

Questa struttura si chiama doubly-linked list (in italiano, lista a concatenamento doppio) ed molto flessibile. Per togliere dalla lista il terzo elemento, ad esempio, si individuano, tramite i puntatori che contiene, lelemento precedente e lelemento successivo e li si fanno puntare tra loro.

Una lista potrebbe prevedere solo il puntamento verso lelemento successivo (la lista a concatenamento semplice), ma in questo caso, ad esempio, non ci sarebbe modo di conoscere lindirizzo del blocco che precede il terzo se non percorrendo tutta la lista. Aggiungere un elemento ad una lista altrettanto semplice; si devono fare puntare al nuovo blocco i due blocchi tra cui deve essere inserito:

132

Per gestire i blocchi della cache, li si mantengono in una lista a concatenamento doppio. Il sistema operativo conosce lindirizzo del primo e dellultimo blocco della lista

primo

ultimo

Quando si riempie la cache allinizio, i blocchi vengono aggiunti uno alla volta in prima posizione; in questo modo si vengono a trovare automaticamente nellordine di accesso. Quando si deve riutilizzare il blocco presente nella cache da pi tempo lo si pu individuare immediatamente usando il puntatore allultimo blocco. Il passo successivo la rimozione dalla lista:

133

primo

ultimo

Nel blocco cos liberato si copia il contenuto del blocco di disco richiesto. A questo punto diventato il pi recente di tutti e va inserito in prima posizione:

primo

ultimo

Una nuova richiesta di un blocco da riutilizzare individuer il blocco che adesso indirizzato come ultimo dal sistema operativo. Quando invece viene letto un blocco che si trova nella cache, lo si toglie dalla sua posizione e lo si mette in cima alla lista, perch diventato il blocco utilizzato da meno tempo e lo si considera un buon candidato a soddisfare una nuova richiesta.

134

La ricerca allinterno della cache Quando si deve leggere un blocco di un file, prima di accedere al disco fisso si controlla se si trova nella cache; in questo caso potr essere letto molto pi rapidamente. Ma come verificare se il blocco richiesto in cache? Si potrebbero effettuare una ricerca sequenziale, controllando tutti i blocchi della lista, ma questo richiederebbe parecchio tempo. Per velocizzare queste ricerche si usa il meccanismo di hashing. A questo scopo si crea una tabella di indici con tanti elementi quanti sono i blocchi di cache, ad esempio diecimila. La funzione di hash individua un elemento di questa tabella e il sistema operativo vi inserisce lindirizzo del blocco da utilizzare. La funzione di hash pu essere molto semplice, ad esempio il resto della divisione del numero del blocco per la dimensione della cache. Se si deve copiare il contenuto del blocco di disco 12480 in un blocco di una cache con 10000 elementi, si individua lelemento 2480 della tabella degli indici e vi si memorizza lindirizzo del blocco di memoria utilizzato, ad esempio 1000000. A questo indirizzo si memorizzer, oltre ai dati, anche il numero di blocco per riconoscerlo in seguito

135

... 2479 2480 2481 ...

......
1000000

........

Blocco 12480

Se successivamente si cercher di leggere il contenuto del blocco di disco 12480, si risalir allelemento 2480 della tabella degli indici, trovando il contenuto del disco gi disponibile nella cache. Anche in questo caso si deve tenere conto delle collisioni hash; se si cercasse di leggere da disco il blocco 22480, ad esempio, si giungerebbe allo stesso puntatore. Per gestire in modo efficiente la collisione hash, anzich utilizzare un semplice indice che punta ad un blocco di memoria si utilizza una lista a concatenamento semplice. Allinterno del blocco c un puntatore al blocco successivo della lista. Quando si inserisce un nuovo blocco, se nella posizione indicata dalla funzione hash allinterno della tabella dei puntatori si trova gi lindirizzo di un altro blocco, il nuovo elemento viene aggiunto alla lista. Allo stesso modo, quando si controlla se un determinato blocco si trova nella cache si percorre tutta la lista e si verifica nellintestazione di ogni elemento se esso contiene effettivamente il blocco di disco richiesto.

136

2479 2480 2481

........
1000000

........

Blocco 12480

Blocco 22480

Con queste impostazioni, ogni elemento della tabella degli indici punta ad una lista con una lunghezza media di un solo blocco, permettendo ricerche molto rapide.

137

La memoria che non esiste I sistemi operativi permettono che pi programmi siano attivi contemporaneamente (un programma in esecuzione detto anche processo). La memoria fisica, per, unica e non a completa disposizione di ogni processo. Per risolvere questo problema gli accessi alla memoria sono modificati da un componente (la MMU, Memory Management Unit, in italiano unit di gestione della memoria) che traduce ogni indirizzo utilizzato da un programma in un indirizzo fisico della memoria principale. Nellimmagine si possono vedere gli indirizzi utilizzati da due processi e gli indirizzi fisici corrispondenti:

processo 0
4096

4096

8192 8192

12288

processo 1
4096

8192

138

Nellesempio la memoria organizzata a pagine di 4096 bytes. Per il processo 0 gli indirizzi da 0 a 4095 e da 4096 a 8191 corrispondono agli stessi indirizzi fisici, ma gli indirizzi da 8192 a 12287 corrispondono agli indirizzi fisici da 12288 a 16383; ad esempio, se il processo 0 vuole leggere il contenuto dellindirizzo 8192, la sua richiesta viene ridiretta dalla MMU allindirizzo fisico 12288. Per il processo 1, invece, gli indirizzi da 0 a 4095 corrispondo agli indirizzi fisici da 8192 a 12287. Lattribuzione della memoria pu cambiare durante la vita del processo: una pagina che era assegnata ad un processo pu essere annullata e riutilizzata da un altro processo. In questo caso il contenuto della pagina viene salvato sul disco e sar caricato in unaltra pagina di memoria soltanto quando sar effettivamente necessario. Da un punto di vista pratico, la MMU indica al processo che la pagina invalida, e se il processo cerca di accedervi il sistema operativo si fa carico di trovare una nuova pagina fisica disponibile e di copiarvi il contenuto salvato su disco. Nel frattempo il processo che ha richiesto la pagina rimane in attesa, ma il calcolatore non rimane inutilizzato perch pu andare in esecuzione un altro processo. Nellimmagine della prossima pagina si vede un esempio di accesso ad un indirizzo invalido:

139

processo 0
4096

4096 8192

invalida: blocco disco

xxxx

8192

12288

processo 1
4096

8192

Se si utilizza questa tecnica, la somma della memoria necessaria a tutti i processi pu essere maggiore della memoria fisica disponibile, perch una sua parte si pu trovare sul disco. persino possibile che un processo utilizzi una quantit di memoria maggiore della dimensione della memoria fisica; la memoria vista dal processo una memoria virtuale, una memoria che potrebbe non esserci. Il sistema operativo cerca di mantenere sempre un certo numero di pagine libere, in modo da poterle utilizzare subito per caricare le pagine di disco necessarie, e di distribuire la memoria tra i processi in modo che tutti possano essere eseguiti rapidamente. Lalgoritmo con cui vengono scelte le pagine da scaricare su disco per liberare memoria simile a quello utilizzato per la cache: si mantengono in memoria le pagine pi richieste. Le analogie tra i meccanismi di

140

caching e di memoria virtuale, per, non si fermano qui. Da un certo punto di vista la memoria rappresenta una cache del disco; anzich tenere nella memoria principale i blocchi di disco acceduti pi frequentemente, si tengono sul disco fisso le pagine di memoria accedute pi raramente. I meccanismi di memoria virtuale hanno rappresentato un importante passo in avanti dellarte dei sistemi operativi, migliorando notevolmente le potenzialit dei calcolatori. Il primo sistema di questo genere ad avere unampia diffusione stato il VMS (per lappunto, Virtual Memory System) della Digital, negli anni 80, mentre oggi questa tecnica consolidata ed adottata anche dai calcolatori pi economici.

141

La ragnatela intorno al mondo

Lunione fa la forza Un calcolatore pu fare molte cose interessanti anche da solo: lo si pu usare per scrivere una lettera, per tenere la contabilit di una azienda, per elaborare delle immagini, per pilotare la produzione di una macchina utensile. Le cose che pu fare da solo, per, sono soltanto una minima frazione di quanto pu fare se collegato ad altri calcolatori. Nelle aziende ogni reparto ha i suoi calcolatori, ma non devono restare isolati: allufficio marketing possono servire i dati contenuti nei calcolatori della produzione, i dati dei calcolatori dellufficio personale possono essere utili a chi gestisce il palazzo (ad esempio per controllare laccesso dei dipendenti). Per questo motivo tutti i calcolatori di una azienda sono collegati tra loro in una cosiddetta rete locale. Quasi tutti i dipendenti hanno un calcolatore ad uso personale, ma parte dei dati su cui devono lavorare possono servire anche ad altri. Questi dati sono quindi memorizzati su un server (un calcolatore di potenza maggiore, che pu offrire servizi a pi utenti contemporaneamente) a cui possono accedere tutti i calcolatori personali. Aumentando il numero dei nodi collegati ad una rete le potenzialit di ogni singolo nodo aumentano in modo proporzionale. Robert Metcalfe, uno dei primi sviluppatori dei protocolli che permettono ai calcolatori di comunicare tra loro, ha definito la cosiddetta legge di Metcalfe che afferma che lutilit globale di una rete cresce con il quadrato dei nodi collegati. Se una rete composta da dieci calcolatori, ad esempio, ognuno di essi vale nove, quanti sono gli altri calcolatori con cui pu interagire, e linsieme della rete vale novanta. Se i calcolatori della rete sono cento, ognuno di essi vale novantanove, e tutta la rete novemilanovecento, circa cento volte pi della rete di dieci nodi.

142

chiaro che una rete di calcolatori raggiunge il massimo livello di utilit se collega tutti i calcolatori del mondo. Dopo alcuni tentativi infruttuosi, alla fine si affermata una rete nata negli Stati Uniti su iniziativa del Ministero della Difesa, chiamata Internet. Oggi Internet una realt consolidata ed diventata un luogo di scambio di informazioni riconosciuto da tutti; praticamente tutti i 500 milioni di calcolatori del mondo sono in grado di accedervi.

143

La storia di Internet Linizio delle ricerche che hanno portato ad Internet risale al 1969, quando il governo degli Stati Uniti cre la Advanced Research Projects Agency (arpa), con lo scopo di realizzare una rete di calcolatori che potesse continuare a funzionare dopo un bombardamento nucleare. Limpianto divenne attivo il 2 settembre 1969, con il nome di arpanet, collegando tra loro quattro universit. Le comunicazioni tra i calcolatori avveniva utilizzando una nuova tecnica, la commutazione di pacchetto. In quel periodo, per parlare tra loro, due calcolatori richiedevano un collegamento diretto. Con la nuova tecnica, i messaggi che i calcolatori si scambiano vengono suddivisi in pacchetti di lunghezza fissa ed ogni pacchetto pu viaggiare sulla rete in modo autonomo. In questo modo un pacchetto pu utilizzare reti diverse collegate tra loro e pu percorrere vie alternative ed arrivare anche se il collegamento diretto non disponibile. Non indispensabile che i pacchetti che compongono un messaggio arrivino nello stesso ordine, perch ognuno di essi contiene al proprio interno informazioni sufficienti a ricostruire la sequenza. La definizione dei vari protocolli a commutazione di pacchetto, tra cui il pi conosciuto tcp-ip, risale a quegli anni e venne formalizzata nel 1974 in un articolo di Vincent Cerf e Robert Kahn. Negli anni successivi arpanet divenne sempre pi importante per le universit di tutto il mondo; nel 1983 il Ministero della Difesa realizz una rete separata, milnet, lasciando arpanet completamente disponibile per le attivit scientifiche. Nel 1986 arpanet venne rimpiazzata da una nuova infrastruttura con maggiori potenzialit, nsfnet. La prima dorsale nsfnet aveva una capacit di 56 Kbps, era cio in grado di trasmettere circa 56000 cifre binarie al secondo. Per lepoca era un valore notevole, mentre adesso la velocit che i PC meno potenti utilizzano per un singolo collegamento. Nel 1988 la velocit della dorsale principale sal a 1.5 Mbps (circa 1.500.000 cifre binarie al secondo), nel 1995 a 155 Mbps ed ha continuato ad aumentare, mentre altre dorsali sono state aggiunte e collegate in molti paesi del mondo.

144

La grande forza di Internet la possibilit di far comunicare tra loro ogni genere di dispositivo, dai PC dei singoli utenti ai maggiori calcolatori dei grandi centri di calcolo, utilizzando qualsiasi tipo di collegamento, cavi telefonici, cavi coassiali, cavi in fibra, collegamenti via satellite, onde radio, infrarossi, grazie alla flessibilit del suo protocollo che diventato uno standard universale. La connessione pi comune tra un PC ed un punto di accesso ad Internet avviene su cavo telefonico, con un dispositivo detto modem; il PC chiama un numero di telefono a cui collegato il punto di accesso ed il modem permette di trasmettere sulla linea telefonica i dati binari. I collegamenti pi veloci e le dorsali, invece, utilizzano cavi coassiali oppure in fibra.

145

Quattro miliardi di indirizzi Ogni calcolatore che si affaccia su Internet identificato dal suo indirizzo tcp-ip, un numero di 32 bit. In questo modo si hanno a disposizione 4 Giga (4.294.967.295) di indirizzi. Per facilit duso lindirizzo tcp-ip viene scomposto nei quattro byte che lo compongono, ognuno dei quali pu assumere un valore da 0 a 255 espresso in forma decimale. Un esempio di indirizzo tcp-ip ha la forma: 31.55.120.18 Per sapere a che numero corrisponde un indirizzo tcp-ip la cosa pi semplice convertire ogni byte in esadecimale. Lindirizzo dellesempio corrisponde a: 0x1F377812 Il valore decimale di questo indirizzo tcp-ip, se interessasse, 523.728.914. Gli indirizzi tcp-ip non sono assegnati individualmente, ma a classi. Vi sono tre tipi di classi, dette A, B, C. Le classi si tipo A comprendono tutti gli indirizzi in cui il primo b yte ha un determinato valore. Una classe di tipo A, ad esempio, pu essere: 18.xx.xx.xx Questa classe comprende tutti gli indirizzi tcp-ip che vanno da 18.0.0.0 a 18.255.255.255, esattamente 16 Mega, 16.777.216, quanti se ne riescono ad esprimere con i 24 bit che possono variare. Le classi di tipo A sono molto preziose e ognuna di esse stata assegnata ad una grande azienda o organizzazione, come la IBM o la Hewlett-Packard (che in effetti ne ha due, avendone ereditata una dalla Digital, che ha incorporato). Alle classi di tipo A sono attribuiti met degli indirizzi disponibili, quelli che vanno da 0.0.0.0 a 127.255.255.255, ad esclusione degli indirizzi riservati a funzioni particolari della rete.

146

Le classi di tipo B comprendono indirizzi in cui i primi due bytes hanno un determinato valore, ad esempio: 160.20.x.x Ogni classe di tipo B comprende 65536 indirizzi. Alle classi di tipo B sono attribuiti un quarto degli indirizzi utilizzabili, quelli che vanno da 128.0.0.0 a 191.255.255.255. Tutte le classi di tipo A e di tipo B sono state assegnate, mentre rimangono disponibili delle classi di tipo C, che comprendono indirizzi in cui i primi tre bytes hanno un determinato valore, come ad esempio: 200.24.40.x Ogni classe di tipo C comprende 256 indirizzi. Alle classi di tipo C sono attribuiti gli indirizzi restanti, da 192.0.0.0 a 255.255.255.255, tranne gli indirizzi riservati a funzioni particolari della rete.

147

Quante parole per descrivere il mondo? Gli indirizzi tcp-ip sono piuttosto difficili da ricordare, come i numeri telefonici o i numeri delle carte di credito. Per rendere pi comoda lindividuazione di ogni calcolatore su Internet si associano agli indirizzi tcp-ip dei nomi logici, che entro certi limiti ogni organizzazione si pu scegliere. Il principale requisito di questa nomenclatura lunivocit dei nomi. A questo scopo stata creata una infrastruttura centrale, che rappresenta una delle poche componenti gerarchiche nella struttura distribuita di Internet. Lorganizzazione che coordina lassegnazione degli indirizzi ip e la loro traduzione la ICANN (Internet Corporation for Assigned Names and Numbers). La ICANN gestisce i cosiddetti domini di primo livello e delega ad altre organizzazioni la gestione dei domini di livello inferiore. I domini di primo livello rappresentano una prima suddivisione di tutti i calcolatori di Internet a seconda del tipo di organizzazione a cui appartengono, se commerciale, universitaria, militare. I principali domini di primo livello sono: com edu mil net org aziende commerciali scuole e universit esercito degli Stati Uniti fornitori di servizi Internet altre organizzazioni

In alternativa a questa suddivisione, possibile utilizzare un identificativo di nazione.

148

Ad ogni paese del mondo assegnato un codice univoco di due lettere, che il pi delle volte coincide con le prime due lettere del nome della nazione nella sua lingua ufficiale, ad esempio: it de uk fr br ru va Italia Germania Regno Unito (Gran Bretagna) Francia Brasile Russia Citt del Vaticano

I codici nazionali definiti sono 240. Utilizzando due lettere, ognuna delle quali pu assumere 26 valori, si potrebbero ottenere 676 possibili combinazioni, ed il rischio che ci siano nazioni che dovrebbero utilizzare lo stesso codice elevato. In questi casi (ad esempio Austria e Australia) si modifica la seconda lettera del codice: at au Austria Australia

Lautorit centrale non gestisce direttamente i vari domini, generici o nazionali, ma per ognuno di essi delega una o pi organizzazioni. Il dominio it, assegnato allItalia, gestito dal CNR di Pisa. Allinterno di ogni dominio di primo livello si possono definire (o registrare, come si dice abitualmente) i domini di secondo livello, che definiscono una specifica azienda o organizzazione. Lazienda Frescopresto, ad esempio, potrebbe chiedere allautorit che gestisce i domini commerciali il dominio: frescopresto.com oppure potrebbe chiedere allautorit italiana il dominio: frescopresto.it

149

I due domini potrebbero anche essere assegnati a due aziende diverse. Allinterno dei domini di primo livello vi possono essere problemi di omonimia, in particolare per il dominio com, il pi affollato, che contiene circa 30 milioni di domini di secondo livello (il dominio it, invece, ne contiene un milione circa). Come si visto nel capitoletto Scegliere la parola giusta, se i nomi fossero lunghi 5 caratteri ci sarebbero 8 milioni di possibili combinazioni, che non sarebbero sufficienti (nemmeno considerando tutte le combinazioni impronunciabili). Per questo motivo i nomi di poche lettere (pi ricercati perch facili da ricordare) sono gi quasi tutti assegnati e per molti nuovi utenti necessario richiedere nomi piuttosto lunghi. La competizione per i nomi pi significativi pu diventare molto aspra: ad esempio, vi sono certamente milioni di pizzerie che ambirebbero ad ottenere il dominio pizza.com Questo ha fatto nascere un mercato ai limiti della legalit. Vi sono degli speculatori che registrano un gran numero di domini (il contributo di registrazione abbastanza basso) per cederli ad altri dietro compenso. Lo stesso Bill Gates, il fondatore della Microsoft, ha scritto un articolo scherzando sul fatto che il dominio billgates.com fosse in vendita per un milione di dollari, anche se di solito le cifre richieste sono molto pi basse. Se il nome che una azienda desidera gi stato registrato, e non si vuole pagare chi lo detiene, si riesce per quasi sempre a trovare un nome accettabile, aggiungendo delle lettere o modificando qualcosa. Se ad esempio il comune di Roma volesse un proprio dominio di tipo it e scoprisse che roma.it gi assegnato, potrebbe sbizzarrirsi con le possibili alternative: cittadiroma.it romacapitale.it comunediroma.it comune-roma.it romaurbe.it ...

150

Lindice globale dei domini di secondo livello contiene tutte le entit che hanno bisogno di essere identificate su Internet, sostanzialmente tutte le aziende e le organizzazioni esistenti nel mondo. Per descrivere il mondo sono sufficienti due parole, una che identifica il dominio di primo livello ed una per il dominio di secondo livello.

151

La traduzione dei nomi Internet Ogni organizzazione pu definire domini di livello inferiore allinterno del suo dominio di secondo livello. Una azienda, ad esempio, pu scegliere di suddividere i suoi calcolatori a seconda della funzione aziendale, ad esempio progettazione o marketing. Un esempio di dominio di terzo livello potrebbe essere: marketing.frescopresto.com I nomi dei calcolatori dellorganizzazione possono essere definiti nel suo dominio di secondo livello o nei domini di livello inferiore, ad esempio: serverposta.frescopresto.com oppure serverposta.marketing.frescopresto.com In questo modo ogni calcolatore pu avere un nome unico in Internet, che viene spesso chiamato FQDN (fully qualified domain name, in italiano nome di dominio completamente definito). Ogni volta che un calcolatore cerca di accedere ad un altro calcolatore utilizzando il nome simbolico deve effettuare la traduzione in indirizzo tcp-ip. Linfrastruttura che la realizza si chiama DNS (domain name service, o servizio dei nomi di dominio) ed composta da innumerevoli server, ognuno dei quali responsabile per una parte della traduzione del nome. La radice di questa infrastruttura costituita dai server DNS della ICANN, che rimandano ad altri server DNS per ognuno dei domini di primo livello. I server che gestiscono il dominio .it, ad esempio, sono gestiti dal CNR di Pisa. Di solito ci sono diversi server responsabili per ogni dominio, ognuno con le stesse informazioni replicate, per garantire la continuit del servizio nel caso un server fosse fermo.

152

I server responsabili dei domini di primo livello a loro volta rimandano ai server che gestiscono i domini di secondo livello: nel nostro esempio lazienda frescopresto dovrebbe indicare uno o pi server che gestiscono frescopresto.com. Questi server possono conoscere il nome e lindirizzo ip di tutti i calcolatori del loro dominio, oppure possono rimandare ad altri server ancora per eventuali domini di livello inferiore. Il server DNS che gestisce frescopresto.com, ad esempio, potrebbe non conoscere i calcolatori di marketing.frescopresto.com, ma rimandare ad un altro server DNS responsabile per questultimo dominio. Quando un calcolatore ha necessit di tradurre un nome logico in indirizzo tcp-ip, deve contattare uno dei server DNS che gestiscono il suo dominio. Questo server pu rispondere immediatamente (per le richieste interne al dominio), oppure pu farsi carico di contattare uno dei server DNS della ICANN per sapere chi gestisce il relativo dominio di primo livello, e poi tutti gli altri server DNS della catena. Se ad esempio si deve tradurre server1.marketing.frescopresto.com, per prima cosa necessario sapere quali server DNS gestiscono il dominio di primo livello com.

153

utente Server ICANN

Dominio com

Server DNS interno Dominio frescopresto.com

In seguito il server DNS interno contatta i server che gestiscono .com per sapere quale server DNS gestisce il dominio di secondo livello frescopresto.

154

utente Server ICANN

Dominio com

Server DNS interno Dominio frescopresto.com

Il server che gestisce frescopresto pu contenere linformazione richiesta, oppure pu rinviare ad un altro server DNS ancora, responsabile per il dominio di terzo livello marketing. In ogni caso linformazione viene passata al server DNS richiedente, che infine la trasmette al calcolatore che ha dato origine alla ricerca.

155

utente Server ICANN

Dominio com

Server DNS interno Dominio frescopresto.com

Il pi delle volte, per, queste operazioni non sono necessarie grazie ai meccanismi di caching. Ogni server DNS mantiene una cache di tutti i domini e i nomi logici che ha tradotto; se un nome gi stato richiesto, le traduzioni successive sono immediate. Se si gi fatto riferimento ad un dominio di primo livello, per conoscere i server che lo gestiscono non necessario chiamare di nuovo i server della ICANN. molto probabile, ad esempio, che si richieda alla ICANN chi gestisce il dominio com una volta sola, dopo di che linformazione rimane acquisita.

156

La ragnatela della conoscenza Lutilizzo principale di Internet laccesso al cosiddetto world wide web (in italiano ragnatela estesa quanto il mondo), un immenso archivio di testi, immagini, filmati, suoni che chiunque pu visionare. I documenti pubblicati sul web sono di tipo ipertestuale, e cio contengono riferimenti (gli hyperlink) ad altri documenti del Web a cui si pu accedere con un semplice click del mouse. Nella pagina web dedicata ad un autore, ad esempio, probabile che ci sia un hyperlink ad un periodico con cui collabora. Se si clicca sul nome del periodico si viene immediatamente rimandati alla sua pagina web, da cui si pu poi ritornare alla pagina di partenza. Di solito le parole che contengono gli hyperlink sono sottolineate.

157

Per accedere al web si usa un apposito programma, chiamato web browser. Il primo browser a raggiungere una vasta grande diffusione stato Netscape, mentre adesso il pi comune Internet Explorer della Microsoft, integrato nel diffusissimo sistema operativo Windows. Lutilizzo universale del web possibile perch tutti i browser utilizzano lo stesso protocollo per comunicare con i calcolatori che mettono a disposizione le pagine web, i web server, e tutti testi hanno lo stesso formato. Il protocollo usato per la comunicazione detto http (hypertext transfer protocol), i testi sono descritti usando il formato html (hypertext markup language). La pagina web riprodotta sopra, ad esempio, descritta da questo file in formato html:

Come si pu vedere, un file html composto da sezioni (ad esempio HTML, che comprende tutto il file, HEAD, che comprende il titolo, BODY, che comprende la parte principale del testo). Ogni sezione inizia con il proprio nome e finisce con lo stesso nome preceduto da / (ad esempio, /BODY). Nel testo ci sono le indicazioni del file che contiene limmagine da mostrare (alberto.jpg), delle parole che devono apparire (come Tuttoscienze), del colore, del tipo e dimensione dei caratteri da usare: nellesempio si usa il carattere Arial, con dimensione (size) 3. Nel file html, infine, ci deve essere il riferimento delle pagina web a cui gli hyperlink rimandano se ci si clicca sopra (come www.lastampa.it/_settimanali/tSt). Il formato html si diffuso di

158

pari passo con lespansione del web, ed ormai diventato una specie di esperanto dei calcolatori, riconosciuto da ogni programma. Una raccolta di pagine web collegate tra loro da hyperlink viene detta sito; oggi praticamente tutte le organizzazioni hanno un proprio sito web che descrive le loro attivit o i loro prodotti, realizzato con uno o pi server che rispondono alle richieste di tipo http. Di solito un sito registrato nel DNS con il nome del dominio dellorganizzazione a cui appartiene preceduto dal prefisso www ed realizzato con uno o pi web server che rispondono alle richieste di tipo http; lazienda frescopresto probabilmente disporrebbe di un sito registrato come: www.frescopresto.com Anche se spesso viene omesso, il nome di un sito dovrebbe comprendere lindicazione del protocollo usato, e cio http; nel nostro caso il nome completo del sito dovrebbe essere: http://www.frescopresto.com Non soltanto le aziende, per, dispongono di siti web. Ogni utente si pu creare un proprio sito, ospitato da qualche fornitore di servizi Internet (o Internet provider) sui propri server. Di solito il nome di un sito personale composto dal nome del sito del provider seguito dal nome dellutente, ad esempio: http://www.mioprovider.com/mariorossi La definizione del protocollo http e del formato html si deve a Tim Berners-Lee, che li svilupp nei primi anni 90 mentre lavorava presso il CERN di Ginevra. A Tim Berners-Lee si deve anche il primo sito web del mondo, http://info.cern.ch, realizzato nel 1991. Uno dei principali protagonisti dello sviluppo dei browser stato invece Marc Andreesen, ai tempi uno studente dellUniversit dellIllinois. Marc Andreesen cur in particolare laspetto grafico del web ed in seguito divenne multimiliardario fondando la prima societ impegnata nella produzione di questi programmi, la Netscape.

159

Una comune metafora dellutilizzo del web la navigazione. Limmagine del mare rende bene lidea della dimensione del web: il numero delle pagine disponibili in rete non conosciuto con esattezza, ma superiore ai dieci miliardi; ogni pagina a sua volta pu contenere decine di scritti o immagini. Come in un oceano, per, facile perdersi nel web e non trovare le informazioni che ci servono; per districarsi indispensabile una buona dose di abilit e di esperienza.

160

Levoluzione dei motori di ricerca Nel mondo di Internet il settore pi attivo e profittevole sembra essere il campo dei motori di ricerca, di cui si parlato in uno dei primi capitoli di questo libro. Nel 2005 stata quotato in borsa il maggiore di essi, Google, con un successo che ha ricordato i tempi felici della new economy. In poco tempo questa azienda di poco pi di un migliaio di persone ha raggiunto un valore di borsa maggiore di quello di colossi come la General Motors o la Ford. Google (www.google.com) non stato il primo motore di ricerca Internet ( nato nel 1998, mentre Altavista ha iniziato nel 1995), ma si decisamente affermato e conta circa 200 milioni di utilizzatori ogni giorno, nonostante vi siano molti concorrenti con eccellenti caratteristiche (ad esempio Yahoo!, Msn, Aol ed Altavista stesso). Ormai cercare su Google diventato sinonimo di cercare su Internet e si dice googlare qualcuno se si vuole scoprire tutto di una persona tramite una ricerca sul web (una pratica che sembra particolarmente in voga tra i single che vogliono essere preparati per un appuntamento). Quali i motivi del successo? Una ragione sicuramente la completezza del suo database di pagine Internet, che ne contiene pi di 8 miliardi. La crescita di questo elenco stata aiutata dalle semplici modalit per inserirvi il proprio sito ( sufficiente andare alla pagina www.google.com/addurl.html), ma in questo Google non molto diverso dai suoi concorrenti. La tecnica utilizzata per popolare il database la stessa: si parte dalle pagine note, segnalate dagli utenti o presenti in un elenco di partenza. Se le pagine note contengono dei puntatori ad altre pagine, si vanno ad esaminare anche queste ultime e cos via, seguendo tutti i vari hyperlink. Quando si cerca una informazione tramite un motore di ricerca molto probabile che la si trovi, grazie alla dimensione del database, ma questo non sufficiente. Se si inseriscono delle chiavi di ricerca che non siano estremamente specializzate, probabile che venga proposto un numero molto elevato di risposte, che non possono essere prese tutte in considerazione. Se la risposta ad una ricerca propone 1000 pagine di risultati, di solito si esaminano solo le prime

161

2-3. Per questo motivo importante il posizionamento delle risposte. Alcuni motori di ricerca vendono il posizionamento, facendo apparire per primi i siti di chi paga per questo. Altri, per, ritengono questa pratica contraria allinteresse degli utenti e si rifiutano di adottarla, anche se ovviamente accettano di vendere spazi pubblicitari chiaramente identificabili nelle loro pagine ( da questo, ad esempio, che Google trae la maggior parte dei suoi utili). Lalgoritmo in base al quale Google decide il posizionamento stato sviluppato dai suoi fondatori, Sergey Brin e Larry Page, quando erano ancora studenti universitari e privilegia la qualit delle pagine, decisa in base al numero di link alla pagina (e cio quante altre pagine web la referenziano). In questo modo si presentano per prime le pagine pi popolari del web. Vi sono per molti altri criteri, come quante volte le parole chiave compaiono in una pagina, la sequenza e la distanza tra di loro, le parti del documento in cui appaiono. Gli utenti hanno dimostrato di apprezzare lalgoritmo di Google , decretandone il successo, ma esso ha comunque delle debolezze. Alcuni gruppi di attivisti antirepubblicani, ad esempio, hanno riempito il Web di pagine con link in cui il sito della Casa Bianca era associato alle parole miserabile fallimento, per cui chi usava in Google la chiave di ricerca miserable failure viene rimandato alla biografia di George W. Bush. Questa pratica, detta anche google bombing, per per fortuna rimasta un fenomeno marginale.

162

La posta elettronica Per molti utenti di Internet lunica ragione per collegarsi alla rete la cosiddetta posta elettronica, che sta quasi sostituendo la normale posta cartacea per chi ha facilit di collegamento. I messaggi di posta elettronica vengono scritti direttamente su un calcolatore e, se questultimo collegato alla rete globale, possono essere inviati immediatamente. Il paragone tra i due tipi di comunicazione impietoso: se si deve spedire una normale lettera, si deve trovare un foglio su cui scrivere, una busta, un francobollo e ci si deve recare ad una buca delle lettere per depositarla. Il destinatario la ricever, se va bene, tra alcuni giorni e se dobbiamo ricevere una risposta questo tempo va raddoppiato. La posta elettronica, invece, molto pi veloce, facile da utilizzare e non costa nulla. Di norma un messaggio arriva al destinatario dopo pochi secondi, e chi lo riceve pu rispondere immediatamente. Gli indirizzi di posta elettronica, invece di essere composti dalle abituali informazioni (nome, via, citt, provincia, stato), hanno un formato basato sul concetto di dominio, in modo simile agli altri servizi Internet. Come tutti i siti web, ogni casella di posta elettronica deve appartenere al dominio di una organizzazione, che costituisce la parte destra dellindirizzo. La parte sinistra, invece, caratterizza quel particolare utente allinterno del dominio e di solito ne comprende il nome ed il cognome. Le due parti sono separate dal carattere "@". Lutente Mario Rossi, dipendente della azienda Frescopresto, potrebbe avere questo indirizzo di posta elettronica: mario.rossi@frescopresto.com Lutilizzo della "@" stato introdotto da colui che considerato linventore della posta elettronica, Ray Tomlinson. Nel 1971, nel corso delle prime prove di questo genere di comunicazione su arpanet, Tomlinson scelse questo carattere perch era uno dei pochi simboli della tastiera non utilizzati per scrivere i nomi e ben rendeva il significato di "at", ossia "presso" la specifica rete di calcolatori

163

indicata dopo la chiocciola. Gli utenti che non fanno parte di una organizzazione, e quindi non hanno un dominio di riferimento, possono utilizzare caselle di e-mail messe a disposizione da un Internet provider (ad esempio, Hotmail) sul proprio dominio, ad esempio: mario.rossi@hotmail.com Oltre alla possibilit di inviare un messaggio in tempi brevissimi, la posta elettronica eccelle nella gestione della rubrica di indirizzi. Il programma che si usa per accedere alla posta (alcuni tra i pi diffusi sono Microsoft Outlook Express, Eudora, Netscape Mail) in grado di memorizzare tutti gli indirizzi usati, ed possibile aggiungerne facilmente altri. Quando si deve spedire un messaggio, invece di sfogliare le pagine di unagenda di carta alla ricerca del destinatario, sufficiente selezionarlo sullo schermo tra quelli proposti dal programma. Se dobbiamo rispondere ad un messaggio di posta elettronica non necessario scrivere lindirizzo del mittente, ma sufficiente cliccare con il mouse sopra al pulsante Rispondi, e lindirizzo viene composto automaticamente. Naturalmente anche possibile, con un solo click del mouse, aggiungere questo indirizzo alla rubrica elettronica. Unaltra caratteristica che facilita luso della posta elettronica lautocompletamento degli indirizzi: quando si prepara un nuovo messaggio, sufficiente digitare nel campo destinatario le prime lettere del suo nome, e se queste sono sufficienti ad identificarlo in modo univoco il nome viene completato automaticamente. Se, ad esempio, nella nostra rubrica lunico indirizzo che inizia con le lettere ma Mario Rossi, sufficiente digitare due lettere ed il nome viene subito completato. Se ci sono pi indirizzi che iniziano con le lettere ma, invece, vengono tutti proposti e si pu scegliere tra di loro. I messaggi di posta elettronica possono includere files di qualsiasi genere, come documenti, foto, brani musicali, che vengono chiamati allegati. In questo modo si pu inviare facilmente ad ogni altra persona collegata alla rete globale qualsiasi informazione che possa essere digitalizzata.

164

Le infrastrutture di posta elettronica Il numero totale di caselle di posta elettronica si aggira attorno al miliardo, pi dei calcolatori esistenti al mondo. Lo stesso calcolatore, infatti, pu essere utilizzato da pi persone, ognuna con una propria casella, e molti utenti dispongono di due o pi caselle, ad esempio una per esigenze lavorative e laltra di uso personale. I grandi fornitori di servizi di posta elettronica ( provider) gestiscono quantit impressionanti di caselle; il pi grande, hotmail, ne conta circa duecento milioni, yahoo! circa cento milioni. In questo caso in genere laccesso non avviene attraverso un client di posta elettronica, ma direttamente con delle pagine web dinamiche (create al momento) che riportano lelenco dei messaggi ricevuti o il contenuto di un messaggio. I grandi fornitori consentono lutilizzo gratuito della posta elettronica e traggono i propri guadagni dalla pubblicit che inseriscono nelle pagine web usate per visualizzare i messaggi. Il protocollo che permette alla posta elettronica di funzionare si chiama SMTP (Simple Mail Transfer Protocol, in italiano protocollo semplificato di trasferimento della posta). Ogni organizzazione che ospita delle caselle di posta elettronica ha uno o pi server registrati nel DNS che rispondono alle richieste di tipo SMTP. Un calcolatore che riceve un messaggio in questo formato interroga il DNS per sapere quale server gestisce le caselle del dominio del destinatario e vi trasferisce il messaggio. Se ad esempio un messaggio indirizzato a mario.rossi@frescopresto.com, dovr essere trasferito ad uno dei server SMTP del dominio frescopresto.com. Questultimo memorizzer il messaggio in un archivio, in attesa che un programma di posta elettronica richieda i messaggi destinati a Mario Rossi fornendo le opportune credenziali (una sequenza di caratteri che solo lutente in questione pu conoscere, detta password). Il trasferimento del messaggio dal server del dominio al PC dellutente avviene di solito con il protocollo POP3 o con il protocollo IMAP.

165

mittente

destinatario: mario.rossi@frescopresto.com

SMTP

POP3

SMTP

Dominio frescopresto.com

Server e-mail interno

molto difficile valutare il numero totale di messaggi di posta elettronica spediti e ricevuti, perch linfrastruttura globale di posta elettronica non centralizzata: un messaggio che passa da un PC al dominio del destinatario non lascia tracce allesterno dei domini coinvolti. Alcuni analisti, tuttavia, stimano che il numero totale di messaggi spediti e ricevuti ogni giorno si aggiri tra i venti ed i cinquanta miliardi, dai venti ai cinquanta messaggi al giorno per ogni casella.

166

Sommersi dalla spazzatura La posta elettronica ormai pressoch indispensabile per centinaia di milioni di utenti di Internet, ma sta rischiando di diventare inutilizzabile: il motivo lo spamming, linvio di messaggi di pubblicit non richiesti che ingolfa le caselle di quasi tutti i titolari di un indirizzo di e-mail. Capita spesso che un utente riceva decine di messaggi indesiderati al giorno; cancellarli costa tempo e attenzione (per evitare di cancellare inavvertitamente dei messaggi utili). Lo spamming, inoltre, rappresenta una irritante invasione della privacy. A causa dello spamming vi sono utenti che abbandonano i loro indirizzi di posta elettronica, diventati ormai inutilizzabili, e se ne fanno assegnare di nuovi; in questo caso, per, devono notificare del cambio di indirizzo tutti i propri corrispondenti, e spesso il gioco non vale la candela Gli argomenti dei messaggi di spam sono principalmente lofferta di investimenti dai rendimenti mirabolanti, di accesso a siti pornografici, di confezioni di Viagra e cose di questo genere. Per filtrare questi messaggi ed evitare che arrivino alle caselle degli utenti, molti server di posta elettronica dispongono di filtri antispam, ma la loro efficacia limitata (le cifre che ho riportato si riferiscono ai messaggi che arrivano dopo il filtro effettuato dal server). I filtri cercano di individuare se un messaggio indesiderato basandosi sulle parole presenti nel titolo (se presente la parola sex o la parola viagra molto probabilmente il messaggio ricade in questa categoria). Un altro indizio lappartenenza del mittente alle liste di spammer, continuamente aggiornate. Chi invia questi messaggi riesce spesso ad aggirare i controlli, sia cambiando continuamente i testi, sia aggiungendo ai messaggi dei caratteri a caso in posizioni poco significative, che non vengono notati dal destinatario ma rendono inefficace il filtro. Non mancano messaggi con titoli tali da attirare lattenzione del destinatario (ad esempio la tua password scaduta). I pirati, infine, sono in grado di cambiare facilmente identit virtuale, falsificando il campo che indica il mittente.

167

Alcuni programmi antispam chiedono agli utenti di segnalare i messaggi indesiderati ricevuti, in modo da poter fermare altri messaggi provenienti dallo stesso mittente, ma lutilit di questo accorgimento relativa, proprio perch gli spammer cambiano continuamente identit. Ma, soprattutto, non bisogna mai rispondere a quei messaggi di spam che offrono ad un utente di rimuoverlo dalle loro liste di distribuzione; se si risponde, non si fa altro che dare conferma che il proprio indirizzo effettivamente utilizzato, e si pu essere sicuri che i messaggi indesiderati aumenteranno ancora. Lo spam rende inapplicabili le normali regole di cortesia; di solito, se qualcuno si rivolge ad una persona, si ritiene doveroso rispondere, perch chi domanda comunque ha fatto uno sforzo. Gli spammer, per, non fanno alcuna fatica per contattare un singolo destinatario: inviano i messaggi a centinaia di migliaia o a milioni di persone, contando sul fatto che se anche una sola persona su centomila risponde possono trarre un guadagno. Sentirsi obbligati a rispondere a chi offre qualcosa che non abbiamo richiesto non solo sarebbe assurdo, ma pu anche essere pericoloso. Quasi tutti i programmi antispam permettono allutente di selezionare il livello di protezione che vuole ottenere. E meglio evitare un livello di protezione eccessivamente alto, perch filtri troppo severi rischiano di bloccare messaggi del tutto legittimi (il che capitato pi volte anche allautore). In questo caso le conseguenze possono essere ancora peggiori del fastidio arrecato dai messaggi non desiderati; si possono perdere delle occasioni o interrompere relazioni importanti. Per evitarlo ogni utente dovrebbe periodicamente rivedere i messaggi che il suo sistema considera spam per essere certo che non comprendano messaggi utili, ed anche questa una spiacevole conseguenza del proliferare della posta non richiesta. Per arginare lo spam si potrebbero isolare dal resto della rete i server che mandano messaggi indesiderati; alcuni tentativi in questo senso sono gi stati effettuati, ma la maggioranza dei gestori dei server incriminati ha protestato con forza, dimostrando di essere estranea alle attivit di spamming originate dal proprio server. Il protocollo di posta SMTP infatti aperto, e non permette controlli sui mittenti. Uno dei motivi del successo della posta elettronica proprio la sua universalit, per cui chiunque pu inviare un

168

messaggio a chiunque altro senza difficolt; chiudendo in qualche maniera il protocollo si correrebbe il rischio di impedire a molti utenti di inviare dei messaggi legittimi.

169

Una proposta contro lo spam La quantit di messaggi di spam ovviamente difficile da determinare, ma alcuni analisti valutano che si aggiri attorno allottanta per cento circa dei messaggi totali, e cio tra i 16 ed i 40 miliardi al giorno. Buona parte di questi messaggi non raggiunge i destinatari perch viene bloccata dai filtri, ma non si pu negare che questa situazione sia sostanzialmente folle. La virulenza dello spamming dovuta al fatto che inviare questi messaggi non costa praticamente niente. Qualsiasi altra forma di pubblicit a tappeto, mandare lettere, infilare volantini sotto il parabrezza delle auto, riempire le cassette della posta dei condomini, ha un costo ad utente, per basso che possa essere. Inviare posta elettronica ad un utente in pi, invece, non costa niente; una volta perfezionati i meccanismi necessari, se la lista dei destinatari comprende mille o ventimila indirizzi non c differenza. Lunico sistema per eliminare lo spam consiste nel rendere questa pratica costosa. Un articolo del fondatore della Microsoft Bill Gates del 1998 proponeva che per inviare qualsiasi messaggio fosse necessario pagare una cifra molto bassa (ad esempio un centesimo), ma tale da rendere antieconomico linvio massiccio di messaggi di pubblicit. Se il destinatario del messaggio lo legge, il pagamento viene annullato, mantenendo quindi la gratuit delluso legittimo della posta elettronica; gli spammer, per, si vedrebbero addebitati tutti i loro messaggi non desiderati. Questa soluzione potrebbe essere attuata senza impatto sugli utenti, che si limiterebbero a marcare come spam i messaggi indesiderati, come gi fanno. Sarebbe per necessario un accordo tra tutti i principali provider (gli altri dovrebbero adeguarsi rapidamente, per evitare di rimanere isolati). La soluzione richiederebbe una infrastruttura centrale in grado di rilasciare degli attestati elettronici (token) di micropagamento. Ogni gestore di un dominio di posta elettronica dovrebbe depositare una somma per ricevere dallautorit centrale un certo numero di token firmati digitalmente, da includere nei messaggi inviati dai suoi utenti. I messaggi privi di token dovrebbero essere

170

rifiutati dai server di posta dei destinatari, a meno che provengano da una organizzazione che il destinatario considera fidata (ad esempio, due aziende che comunicano molto tra loro con la posta elettronica potrebbero riconoscersi reciprocamente come fonti di messaggi fidati). Se un messaggio non viene marcato come spam si cancella il micropagamento, mantenendo cos la gratuit del servizio. In caso contrario la somma depositata dal provider del mittente viene accreditata al provider del destinatario. importante che il valore del token sia basso, per rendere minimo limpatto degli errori, ma in ogni caso gli spammer non sarebbero in grado di pagare per i milioni di messaggi che inviano. Gli utenti non marcherebbero come spam i messaggi legittimi, per evitare di rimanere isolati (il mittente depennerebbe dai propri corrispondenti chi marca i suoi messaggi come spam). I provider sarebbero costretti a controllare che i loro utenti non inviino spam; potrebbero, ad esempio, fornire cento token ad ogni utente, con un investimento di un dollaro (largamente inferiore al valore che di solito si d ad un utente registrato, che legge sulle pagine web della pubblicit che il suo provider pu vendere). Se pi di cento messaggi inviati da un utente sono riconosciuti come spam dai destinatari e lutente non ha marcato come spam alcun messaggio ricevuto, il suo credito si esaurisce. In questo caso lo si potrebbe cancellare o gli si potrebbe chiedere un contributo; inutile dire, per, che per un utente che si comporta correttamente il bilancio non sar mai negativo. I provider potrebbero anche accreditare dei buoni da spendere in servizi Internet agli utenti che marcano come spam pi di un certo numero di messaggi ricevuti. Se gli utenti di un provider non mandano spam, il suo credito non pu diminuire; nel caso si ritirasse dallattivit potrebbe chiedere la restituzione integrale della somma depositata. Questo approccio non solleva problemi legali, perch il pagamento pu essere considerato come un contributo alle spese dellorganizzazione del destinatario. Se qualcuno pensa che un suo messaggio degno dellattenzione del destinatario, deve essere disposto a correre il rischio di pagarlo. Linfrastruttura centrale dovrebbe essere gestita da un organo riconosciuto universalmente, come la ICANN, ed tecnicamente

171

fattibile. Il numero di messaggi legittimi (gli spammer non richiederebbero i token, che non sarebbero in grado di pagare) va dai quattro ai dieci miliardi al giorno. Questo numero pu essere dimezzato considerando i messaggi scambiati da organizzazioni che si ritengono reciprocamente fidate. I token, inoltre, potrebbero essere richiesti a gruppi. Il numero totale di richieste allautorit centrale dovrebbe quindi essere inferiore al miliardo al giorno, molto meno dei messaggi gestiti da un provider come hotmail (almeno quattro miliardi al giorno). Questa proposta richiederebbe unestensione del protocollo SMTP, per permettere linclusione dei token nei messaggi, e pone indubbie difficolt organizzative, ma lunica soluzione per combattere lo spam mantenendo luniversalit del protocollo e la gratuit del servizio. Se una forma di comunicazione non costa nulla, inevitabile che se ne abusi; questa proposta attribuisce un costo allinvio dei messaggi, ma non richiede alcuna spesa agli utenti che si comportano correttamente.

172

Le parole nascoste

La lingua segreta Chi invia un messaggio desidera che soltanto il destinatario lo possa leggere. Le lettere sono inviate allinterno di una busta chiusa proprio per questo motivo, ma il livello di sicurezza molto basso; se un malintenzionato entra in possesso della lettera pu sciogliere facilmente la colla della busta con il vapore, leggere il messaggio e richiudere la busta senza che il destinatario se ne accorga. Se non possibile consegnare un messaggio di persona, la sua sicurezza a rischio: se scritto su carta pu essere letto da uno degli intermediari (il postino, gli addetti alla raccolta ed allo smistamento), se viaggia via radio pu essere intercettato da chiunque disponga di un apparato ricevente adatto, se viene trasmesso via Internet pu essere catturato su uno dei server da cui transita. C un solo modo per evitare ogni rischio: utilizzare una lingua che nessun altro, al di fuori di noi stessi e del destinatario, sia in grado di leggere. E, se non conosciamo nessuna lingua del genere, la possiamo inventare, come fece Giulio Cesare pi di duemila anni fa.

173

Il cifrario di Cesare Lo storico Svetonio racconta che Giulio Cesare sostituiva ogni lettera dei suoi messaggi privati con la lettera che si trovava tre posizione pi avanti nellordine alfabetico. Ogni a, ad esempio, diventava una d, ogni b una e, e cos via. Le ultime tre lettere dellalfabeto, ovviamente, erano sostituite con le prime tre, ed ogni x diventava una a, ogni y una b, ogni z una c. La tabella di sostituzione era molto semplice: lettera A B C D E F G H codice D E F G H I K L lettera I K L M N O P Q codice M N O P Q R S T lettera R S T V X Y Z codice V X Y Z A B C

In questo modo la frase: GALLIA EST OMNIS DIVISA IN PARTES TRES diventava KDOOMD HXY RPQMX GMZMZD MQ SDVYHX YVHX a prima vista del tutto incomprensibile. Pi in generale, un Cifrario di Cesare composto da una tabella di questo tipo in cui la distanza tra le lettere fissa, e rappresenta uno dei primi esempi di crittografia, o scrittura nascosta, un procedimento con il quale si ottiene da un originale un testo apparentemente incomprensibile. possibile ricostruire loriginale soltanto se si conosce la lingua usata, e cio se si conoscono le modalit di traduzione.

174

Il cifrario di Cesare fornisce un livello di protezione molto basso, almeno secondo i criteri odierni. Esaminando un testo cifrato in questo modo si pu comprendere facilmente che ogni lettera sostituita da unaltra lettera, perch la forma del testo corrisponde a quella di un testo normale: la lunghezza media delle parole di circa cinque caratteri, le parole pi lunghe sono inframmezzate da parole brevi, corrispondenti a congiunzioni o preposizioni. Anche se non si conosce il numero di posizioni di cui ogni lettera spostata, si pu procedere a tentativi, e ci sono tante possibilit quante le lettere dellalfabeto che si utilizza, nel caso dellalfabeto latino ventitr in tutto (lalfabeto latino era privo di j e w e la v aveva anche la funzione vocalica della nostra u). Si pu provare a tradurre la parola KDOOMD spostando le lettere prima di una posizione, poi di due, di tre e cos via, e si scopre facilmente che si ottiene una parola dotata di significato solo nel caso lo spostamento sia di tre posizioni. Un caso particolare di cifrario di Cesare il cosiddetto ROT 13 (ROTazione 13), in cui ogni lettera spostata di 13 posti. Poich lalfabeto moderno composto da 26 lettere, questo particolare cifrario di Cesare viene codificato e decifrato allo stesso modo:

A B C D E F G H I J K L M

N O P Q R S T U V W X Y Z

Luso di questo cifrario diffuso proprio perch facilmente decifrabile. Il suo scopo quello di rendere un testo non immediatamente evidente, come si fa a volte nei giornali enigmistici in cui le risposte ai giochi sono scritte a rovescio. Nelle discussioni su Internet si usa il ROT13 per fare in modo che frasi che potrebbero risultare sgradite o offensive vengano lette soltanto da chi si prende la pena di decodificarle, oppure per riportare le risposte a domande

175

su cui si vuole che il lettore rifletta un po prima di verificare la soluzione. I cifrari monoalfabetici sono unevoluzione del cifrario di Cesare, in cui ogni lettera spostata di un numero di posizioni diverso per ogni lettera dellalfabeto; ad esempio la A tradotta con una D, ma una B non tradotta con una E ma con unaltra lettera. Con un cifrario di Cesare, una volta scoperto lo spostamento di una lettera si pu tradurre lintero testo, mentre con un cifrario monoalfabetico si deve scoprire lo spostamento di ogni singola lettera.

176

Laiuto del demonio A partire dal 1500 luso dei messaggi cifrati si diffuse sempre di pi e si affinarono le tecniche per decodificarli. La pi usata lanalisi delle frequenze delle lettere. In ogni lingua, infatti, ogni lettera compare con una determinata frequenza; in italiano, ad esempio, la lettera che viene utilizzata pi spesso la e. In un messaggio di una certa lunghezza probabile che la frequenza di ogni lettera corrisponda ai valori medi. Se il messaggio originale scritto in italiano, ad esempio, probabile che la lettera che compare pi di frequente nel messaggio criptato corrisponda alla e. Procedendo in questo modo si pu poi trovare la traduzione di tutte le altre lettere. Un maestro in questarte fu il matematico francese Franoise Vite (1540-1603), che faceva parte della corte di Enrico IV e riusciva a leggere regolarmente i messaggi cifrati degli spagnoli. Le loro tecniche erano complicate dalladozione di alcuni accorgimenti: ad esempio una lettera poteva essere tradotta con diversi caratteri da usare indifferentemente, a volte un carattere rimpiazzava una sillaba o un gruppo di lettere, oppure si usavano combinazioni di pi lettere per un carattere poco frequente. Vite considerava ogni aspetto del messaggio cifrato; ad esempio cercava di individuare le cosiddette cifre essenziali, cio numeri non tradotti e che probabilmente erano seguiti da parole come ducati, cavalieri, soldati. Gli spagnoli, inoltre, spedivano pi volte gli stessi messaggi, e spesso la copia di un messaggio gi inviato iniziava con la parola copia di. Vite impiegava non pi di due o tre giorni a decifrare i messaggi che gli venivano consegnati. Una volta, per, per screditare un suo nemico, Enrico IV decise di divulgare un messaggio che era stato decifrato, rendendo cos di dominio pubblico le capacit di decodifica di Vite. Subito il re di Spagna Filippo II chiese al Papa di condannarlo come negromante perch, secondo lui, soltanto con laiuto del demonio era possibile leggere i messaggi cifrati utilizzando le elaborate tecniche dei suoi crittografi.

177

Il cifrario di Vignre Il Cifrario di Vignre unevoluzione del cifrario di Cesare attribuita allo studioso francese Blaise de Vignre (1523-1596). Il testo cifrato viene ottenuto spostando le varie lettere del testo di un numero di posizioni che varia ogni volta, secondo una parola chiave che solo il mittente ed il destinatario conoscono. In questo modo si rende inutilizzabile lanalisi delle frequenze, perch le lettera sono tradotte ogni volta in modo diverso. Ad ogni lettera del messaggio viene sommata la lettera corrispondente della chiave, che indica di quante posizioni si deve spostare la lettera originale. Una volta che stata utilizzata per intero, la chiave viene ripetuta. Nella pratica, per sommare due lettere si utilizza una tabella composta in questo modo, la Tabula recta:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z B C D E F G H I J K L M N O P Q R S T U V W X Y Z A C D E F G H I J K L M N O P Q R S T U V W X Y Z A B D E F G H I J K L M N O P Q R S T U V W X Y Z A B C E F G H I J K L M N O P Q R S T U V W X Y Z A B C D F G H I J K L M N O P Q R S T U V W X Y Z A B C D E G H I J K L M N O P Q R S T U V W X Y Z A B C D E F H I J K L M N O P Q R S T U V W X Y Z A B C D E F G I J K L M N O P Q R S T U V W X Y Z A B C D E F G H J K L M N O P Q R S T U V W X Y Z A B C D E F G H I K L M N O P Q R S T U V W X Y Z A B C D E F G H I J L M N O P Q R S T U V W X Y Z A B C D E F G H I J K M N O P Q R S T U V W X Y Z A B C D E F G H I J K L N O P Q R S T U V W X Y Z A B C D E F G H I J K L M O P Q R S T U V W X Y Z A B C D E F G H I J K L M N P Q R S T U V W X Y Z A B C D E F G H I J K L M N O Q R S T U V W X Y Z A B C D E F G H I J K L M N O P R S T U V W X Y Z A B C D E F G H I J K L M N O P Q S T U V W X Y Z A B C D E F G H I J K L M N O P Q R T U V W X Y Z A B C D E F G H I J K L M N O P Q R S U V W X Y Z A B C D E F G H I J K L M N O P Q R S T V W X Y Z A B C D E F G H I J K L M N O P Q R S T U W X Y Z A B C D E F G H I J K L M N O P Q R S T U V X Y Z A B C D E F G H I J K L M N O P Q R S T U V W Y Z A B C D E F G H I J K L M N O P Q R S T U V W X Z A B C D E F G H I J K L M N O P S R S T U V W X Y

178

Per cifrare un carattere si prende la lettera che si trova all'incrocio tra la riga della lettera chiave e la colonna della lettera del testo originale. Nel caso la chiave sia la parola nascosto, il testo Domattina alle cinque dietro al vecchio monastero verrebbe cifrato in questo modo:
DOMATTINA ALLE CINQUE DIETRO AL VECCHIO MONASTERO NASCOSTON ASCO STONAS COSTON AS COSTONA SCOSTONAS
QOECHLBBN ADNS UBBDUW FWWMFB AD XSUVVVO EQBSLHRRG

Per chi conosce la chiave molto semplice risalire al testo originale: per ogni lettera del testo criptato cerca a che posizione si trova nella riga che corrisponde alla lettera della chiave . Ad esempio, usando la riga della prima lettera della chiave (la N), la prima lettera del testo criptato (la Q) si trova nella quarta posizione e va tradotta con una D. Il cifrario di Vignre fu considerato assolutamente sicuro per pi di duecento anni, ma venne reso inutilizzabile da una nuova e brillante tecnica di decifrazione.

179

Il metodo Kasiski Nel 1863 il maggiore prussiano in pensione Friedrich Kasiski pubblic un testo dal titolo La scrittura segreta e larte di decifrare che avrebbe causato una rivoluzione nella crittografia. Il maggiore Kasiski not che spesso in un crittogramma di Vignre si possono notare delle sequenze di caratteri identiche che si trovano ad una certa distanza fra di loro. In ogni lingua si usano frequentemente delle brevi parole (come gli articoli o le preposizioni) che vengono ripetute molto frequentemente. Se il testo cifrato con il cifrario di Vignre, di norma queste parole sono tradotte in modo diverso, a seconda della lettera della chiave con cui si comincia. Ad esempio, se la parola che si trova allinizio di un testo per il quale si utilizza come chiave la parola nascosto, le tre lettere sono cifrate con le lettere della chiave nas, ottenendo: testo che chiave nas risultato phw

Se unaltra occorrenza della parola che si trova in una posizione in cui viene cifrata con le lettere della parola chiave cos, il risultato diverso: testo che chiave cos risultato evw

La parola che, quindi, pu essere tradotta in parecchi modi diversi, a seconda della lettera della parola chiave con cui si inizia a codificarla.

180

Le sequenze di lettere con cui pu essere cifrata sono: nas asc sco cos ost sto ton ona Come si pu vedere, ogni parola del testo in chiaro pu essere tradotta in tanti modi diversi quante sono le lettere della parola chiave; se il testo sufficientemente lungo probabile che si trovino occorrenze della parola che tradotte allo stesso modo, ad esempio come phw, o evw. Lo stesso ragionamento pu essere applicato ad ogni altra parola che si ripete pi volte nel testo. molto probabile che tutte le sequenze identiche che si ripetono nel testo corrispondano a parole uguali cifrate con la stessa sequenza di lettere della parola chiave, e che quindi si trovino ad una distanza pari alla lunghezza della parola chiave o ad un suo multiplo. sufficiente cercare un numero per cui tutte le distanze tra sequenze simili siano esattamente divisibili (in termini matematici, il loro massimo comune divisore) per scoprire la lunghezza della parola chiave. A questo punto il messaggio cifrato si riduce a tanti messaggi intercalati quante sono le lettere della parola chiave, ognuno codificato con un cifrario di Cesare, su cui si possono utilizzare le tecniche consuete, come lanalisi delle frequenze o i tentativi incrementali. Una volta ricostruita una parte del testo, di solito lo si riesce a completare abbastanza rapidamente. Anche se la prima pubblicazione di questo metodo sicuramente dovuta a Kasiski, forse la stessa scoperta era stata gi fatta dal grande matematico inglese Charles Babbage nel suo lavoro per lesercito inglese che non pot pubblicare per motivi di sicurezza. Babbage fu cos costretto a lasciare al maggiore Kasiski la gloria di questo importante progresso della crittoanalisi.

181

Il cifrario di Che Guevara Quando nel 1967 venne ucciso in Bolivia, il mitico comandante cubano Ernesto Che Guevara aveva con s un foglio contenente una lunga sequenza di numeri apparentemente privi di significato. Lo stesso Guevara aveva raccontato nel suo libro Diario in Bolivia che i fogli che portava con s rappresentavano un cifrario che gli permetteva di comunicare con Fidel Castro in modo sicuro. Il codice usato era simile al cifrario di Vignre (per indicare lo spostamento di ogni carattere non si consideravano le lettere della parola chiave, ma numeri), con una importante modifica: la chiave non si ripeteva mai, ma aveva una lunghezza pari a quella del testo da criptare. Come si pu intuire dal metodo utilizzato per decifrarlo, il cifrario di Vignre tanto pi sicuro quanto pi la chiave lunga, perch diventa pi difficile trovare nel testo criptato delle sequenze di caratteri che si ripetono. Nel 1918 Gilbert Vernam, un ricercatore dei Bell Laboratories della AT&T, propose di perfezionare il metodo di Vignre utilizzando chiavi lunghe quanto i messaggi. In questo modo nel testo cifrato non si trova alcuna informazione che possa gettare luce sul messaggio originale: non ci sono sequenze di caratteri che si ripetono indicando una regolarit nella chiave usata, ma il testo cifrato potrebbe corrispondere a qualsiasi testo in chiaro della stessa lunghezza,. chiaro che la chiave non pu essere riutilizzata per altri messaggi, perch in caso contrario lanalisi Kasiski potrebbe essere effettuata non su un singolo messaggio, ma sullinsieme dei messaggi cifrati con la stessa chiave. Nel 1949 Claude Shannon dimostr che non soltanto un cifrario di Vernam assolutamente sicuro, ma che lunico ad avere questa caratteristica: ogni cifrario teoricamente sicuro un cifrario di Vernam. Questo modo di ottenere la riservatezza, per, ha un prezzo elevato, perch comunicare una chiave lunga come il messaggio comporta molte difficolt pratiche. Di solito, quindi, si usano metodi che prevedono chiavi pi brevi, sempre caratterizzate dal rischio teorico di essere scoperte. La loro sicurezza risiede soltanto nel fatto che la quantit di calcoli necessaria per scoprirle tale da non essere

182

alla portata di nessun dispositivo, nemmeno dei calcolatori pi potenti.

183

La macchina Enigma Le sorti della seconda guerra mondiale, secondo alcuni storici, furono decise dallabilit degli esperti crittografi degli Alleati, che riuscirono a decifrare i codici segreti usati dalle potenze dellAsse. La clamorosa sconfitta italiana nella battaglia navale di Capo Matapan, ad esempio, fu causata dalla conoscenza da parte degli Alleati di tutte le mosse della flotta nemica. Per codificare i messaggi i tedeschi ed i loro alleati utilizzavano un apparato crittografico portatile, chiamato macchina Enigma, che disponeva di una tastiera simile a quella di una macchina per scrivere e di un dispositivo di uscita con tutte le lettere dellalfabeto, ognuna associata ad una spia luminosa. Il messaggio in chiaro veniva scritto alla tastiera; ad ogni carattere battuto si accendeva una delle spie associate ad una lettera dellalfabeto, che indicava con che lettera doveva essere tradotto. La macchina Enigma in realt era stata ideata nel 1918 dallingegnere tedesco Arthur Scherbius per la protezione dei segreti industriali, ma in seguito era stata adottata dallesercito tedesco, che riteneva i messaggi cifrati in questo modo assolutamente inattaccabili. Al suo interno conteneva un dispositivo di ingresso e uscita, che riportava le ventisei lettere dellalfabeto, e tre rotori che giravano seguendo regole precise. Sul primo lato di ogni rotore si trovavano le ventisei lettere dellalfabeto in sequenza, sullaltro lato le stesse lettere ordinate in modo diverso, collegate con dei contatti elettrici:

184

A B C D E F G H
Ingresso

A B C D E F G H

D E H A B G F C

Primo rotore

In questo caso la lettera A spostata dalla prima alla quarta posizione. Ogni rotore era collegato al rotore successivo, di cui attivava la lettera corrispondente alla posizione di uscita.

185

A B C D E F G H
Ingresso

A B C D E F G H

D E H A B G F C

A B C D E F G H

H C B F G D E A

Primo rotore

Secondo rotore

In questo caso nel secondo rotore attivata la lettera in quarta posizione, la D, che viene spostata in sesta posizione. Una trasformazione simile compiuta dal terzo rotore. Oltre ai tre rotori, la macchina conteneva un riflettore, che a sua volta trasformava la lettera in ingresso in unaltra e la rimandava in senso inverso ai tre rotori. Nellimmagine si riporta un esempio di macchina Enigma semplificata, con un alfabeto composto da otto lettere ed i tre rotori nella posizione iniziale:

186

Se, ad esempio, si deve tradurre la A, con il primo rotore nella posizione indicata la lettera non viene modificata nel passaggio dal dispositivo di ingresso, ma viene trasformata nel passaggio dal primo al secondo rotore in una D. I passaggi successivi trasformano la D in F e la F in H, come si pu vedere nella figura:

A questo punto il riflettore trasforma la H in G e innesca un passaggio in senso inverso attraverso i tre rotori: la G viene

187

trasformata in una D, poi in una F ed infine nuovamente in una G, che rappresenta il valore finale:

La trasformazione di una lettera tramite la macchina Enigma ha due importanti caratteristiche: simmetrica (se si trasforma una A, si ottiene una G; se si trasforma una G, si effettuano gli stessi passaggi in senso inverso e si ottiene una A), e una lettera non pu essere trasformata in s stessa (in questo caso i due passaggi attraverso i rotori dovrebbero coincidere, ma la presenza del riflettore garantisce che il passaggio allindietro inizi con una lettera diversa da quella uscita del primo passaggio). Ogni configurazione della macchina Enigma, in sostanza, suddivide le ventisei lettere dellalfabeto in tredici coppie. Questa simmetria aveva unimportante conseguenza: si pu utilizzare la stessa macchina sia per crittografare che per decifrare un testo. Mentre il riflettore ha una posizione fissa, i tre rotori girano di una posizione alla volta. Ad ogni lettera crittografata, il primo rotore avanza di una posizione, cambiando cos le regole di trasformazione. Dopo due rotazioni, ad esempio, ci si trova in questa situazione:

188

Ad ogni giro completo del primo rotore, il secondo avanza a sua volta di una posizione; ad ogni giro completo del secondo rotore, infine, il terzo avanza a anchesso di una posizione. Il numero di possibili posizioni dei rotori di ventisei (il numero delle lettere dellalfabeto) elevato alla terza potenza, corrispondente a 17576. Le macchine Enigma avevano in dotazione cinque rotori, anche se ne utilizzavano soltanto tre, che potevano essere inseriti in qualsiasi ordine. Il numero di ulteriori combinazioni che si potevano ottenere era di cinque (in prima posizione si poteva scegliere uno qualsiasi dei cinque rotori) per quattro (in seconda posizione la scelta era ristretta ai quattro rotori rimasti) per tre, per un totale di 60. La macchina Enigma usata a scopi militari disponeva di un ulteriore livello di trasformazione delle lettere, composto da un apparato detto stecker board che poteva trasformare le lettere inserite alla tastiera prima che venissero elaborate dai rotori. Lo stecker board conteneva dei collegamenti simmetrici tra alcune lettere dellalfabeto (in questo modo, ad esempio, ogni A poteva essere trasformata in una T ed ogni T in una A). Non tutte le lettere erano collegate in questo modo, ma vi erano solo dieci connessioni per un totale di venti lettere. Dopo lelaborazione dei rotori e del riflettore, la lettera passava di nuovo dall o stecker board prima di arrivare al dispositivo di uscita. Le differenti possibili configurazione della stecker board aggiungevano miliardi di varianti alla macchina Enigma.

189

Complicazioni ed ingenuit La macchina Enigma rendeva impossibile ogni attacco basato sullanalisi delle frequenze delle lettere, poich ad ogni passo la matrice di trasformazione cambiava, ed anche le analisi del tipo Kasiski, perch il ciclo completo di modifiche della matrice di trasformazione era molto lungo (17576 passi). Il numero di possibili varianti della configurazione, inoltre, era dellordine dei miliardi, e rendeva i comandi tedeschi tanto certi della sicurezza dei messaggi da fare loro commettere alcune leggerezze fatali. In primo luogo i messaggi tedeschi erano molto formali, il che faceva s che i testi fossero abbastanza prevedibili. Un messaggio indirizzato al reparto al comando di un generale di solito cominciava con le parole Al generale TaldeiTali. I messaggi, inoltre, contenevano spesso dei bollettini meteorologici, il cui contenuto si poteva indovinare con una certa facilit. Spesso i tedeschi ritrasmettevano i messaggi in giorni successivi, ad esempio ad uso dei sottomarini che erano rimasti in immersione per parecchi giorni. Se il primo messaggio era stato tradotto, si poteva utilizzare il testo in chiaro per decifrare anche il codice del giorno della nuova trasmissione. Le porzioni di testo in chiaro conosciute erano dette cribs, il pi famoso dei quali riguardava le previsioni del tempo nel golfo di Biscaglia e venne trasmesso per mesi da una stazione irlandese: WETTERVORHERSAGEBISKAYA (in tedesco wettervorhersage significa previsioni del tempo) Per capire a quale porzione del testo criptato corrispondesse un crib, si poteva sfruttare la caratteristica della macchina Enigma di trasformare ogni carattere in un valore diverso dalloriginale (una A, ad esempio, poteva essere trasformata in una delle venticinque lettere da B a Z, ma non in unaltra A). Se ad esempio il flusso di testo crittografato comprendeva le lettere:

190

QWZWRWIVTYRESXBFOGKUHQBAIWET si poteva ipotizzare che la prima lettera crittografata corrispondesse alla prima lettera in chiaro, in questo modo:
Q W Z W R W I V T Y R E S X B F O G K U H Q B A I W E T W E T T E R V O R H E R S A G E B I S K A Y A

Questa ipotesi, per, da scartare, perch la tredicesima lettera del testo crittografato corrisponde alla tredicesima lettera del testo in chiaro. Si pu allora procedere a tentativi, spostando ogni volta di un carattere il testo ed eliminando le ipotesi non accettabili:
Q W Z W R W I V T Y R E S X B F O G K U H Q B A I W E T W E T T E R V O R H E R S A G E B I S K A Y A

In questo caso la seconda lettera del testo in chiaro corrisponde al testo crittato. Anche i due casi riportati di seguito non sono accettabili:
Q W Z W R W I V T Y R E S X B F O G K U H Q B A I W E T W E T T E R V O R H E R S A G E B I S K A Y A Q W Z W R W I V T Y R E S X B F O G K U H Q B A I W E T W E T T E R V O R H E R S A G E B I S K A Y A

Spostando linizio della sequenza di quattro posizioni, infine, si trova una combinazione di lettere che pu essere valida:
Q W Z W R W I V T Y R E S X B F O G K U H Q B A I W E T W E T T E R V O R H E R S A G E B I S K A Y A

Questi esempi indicano che lintegrit delle sequenze di lettere era importantissima per la crittoanalisi; introdurre di tanto in tanto dei

191

caratteri a caso avrebbe reso i messaggi molto pi sicuri. Se invece di scrivere Al generale TaldeiTali si fosse scritto, ad esempio Al geenerale TaldeiTali oppure Al gennerale TaldeiTali si sarebbero resi inutilizzabili gli strumenti di analisi degli Alleati senza compromettere la comprensione del testo. I tedeschi, per, non pensarono mai ad utilizzare questo semplice espediente.

192

Tre matematici polacchi Ogni giorno le impostazioni di tutte le macchine Enigma delle forze armate tedesche venivano modificate secondo un quaderno distribuito a tutti gli operatori. Nel quaderno erano elencati i rotori da utilizzare e lordine di inserimento nella macchina, la loro posizione iniziale e le lettere collegate tra loro nella stecker board. Se si riuscivano a scoprire in giornata le impostazioni elencate nel libretto, tutti gli altri messaggi del giorno potevano essere facilmente decifrati. I primi attacchi ad Enigma furono compiuti nel 1932 dai tre matematici polacchi Marian Rejewski, Henryk Zygalski e Jerzy Rozicki. La decodifica fu facilitata da unaltra enorme leggerezza operativa dei tedeschi, che ripetevano per due volte una particolare sequenza di tre lettere che serviva ad identificare le trasmissioni della giornata ed era inserita allinizio di ogni messaggio. chiaro che la seconda volta la sequenza veniva tradotta con lettere diverse, ma si era sicuri che tre coppie di caratteri (il primo ed il quarto, il secondo ed il quinto, il terzo e il sesto) corrispondessero alle stesse lettere. Un altro aiuto alla decodifica venne dalle attivit di spionaggio; le informazioni passate ai servizi segreti francesi da un addetto alle macchine Enigma consentirono di ricostruire le connessioni di uno dei rotori. Nel 1937 circa il 70% dei messaggi veniva decifrato, anche se di solito occorrevano diverse giornate per ottenere il testo in chiaro. Nel 1939 i tedeschi cambiarono le loro procedure, eliminando la ripetizione della sequenza iniziale, ed i metodi utilizzati dallufficio cifra polacco persero buona parte della loro efficacia. Il lavoro di Rejewski e dei suoi colleghi, per, serv come base per la clamorosa impresa realizzata dagli inglesi nel corso della seconda guerra mondiale.

193

I crittografi di Bletchley Park I comandi inglesi capirono subito limportanza cruciale di forzare le comunicazioni tedesche che utilizzavano la macchina Enigma e nel 1939 diedero vita ad un gigantesco sforzo organizzativo riunendo in una villa di Bletchley Park, a met strada tra Oxford e Cambridge, centinaia di matematici, enigmisti, esperti di linguistica, ingegneri. I dettagli di ci che avvenne a Bletchley Park rimasero per lungo tempo avvolti nel mistero: dopo la guerra Winston Churchill diede ordine di distruggere tutte le macchine di decrittazione ed il segreto militare sullargomento venne rimosso soltanto nel 1996, cinquantanni dopo la fine della guerra. Il principale strumento di decrittazione elaborato a Bletchley Park fu la Bomba, un gigantesco apparato elettromeccanico concepito da Alan Turing che simulava tutte le possibile configurazioni di una macchina Enigma e venne prodotto in parecchi esemplari. Le Bombe erano parenti degli attuali calcolatori, tanto vero che abbastanza facile simularne il comportamento su un personal computer, utilizzando un programma che alimentato con gli stessi input d gli stessi risultati forniti da una Bomba. La base delle ricerche per scoprire le impostazioni giornaliere delle macchine Enigma era fornita dalle porzioni di testo in chiaro che si conoscevano, i crib. Se non si considera la stecker board introdotta per le macchine Enigma a scopo militare, il funzionamento di una Bomba abbastanza semplice. Il cablaggio interno di ogni rotore, e cio le singole trasformazioni di lettere che poteva effettuare, erano conosciute grazie alle attivit di spionaggio ed a precedenti ricerche. Le variabili da scoprire erano due: quali tra i cinque rotori disponibili (indicati con i numeri romani I, II, III, IV, V) erano utilizzati ed in che ordine la posizione iniziale di ogni rotore

Nella primo esempio di configurazione della macchine Enigma che abbiamo riportato, la posizione dei tre rotori AAA, perch in ogni rotore la lettera in alto a sinistra una A. Criptando la lettera

194

che proviene dalla prima posizione del dispositivo di ingresso (la A) si trasmette al riflettore una H:

Dopo la traduzione di ogni carattere uno dei rotori viene fatto avanzare di una posizione. La prima rotazione porta la macchina nella posizione BAA, la seconda nella posizione CAA e cos via. Dopo tre avanzamenti, ad esempio, ci si trova nella posizione DAA, che trasforma una A in una G:

195

Immaginiamo di esaminare le prime quattro lettere nel testo che abbiamo preso in considerazione negli scorsi capitoletti:
R W I V T Y R E S X B F O G K U H Q B A I T T E R V O R H E R S A G E B I S K A W E T Y A

W E

Per utilizzare quattro lettere, conviene simulare quattro macchine Enigma. Si inizia con la prima combinazione possibile di rotori (I, II, III) e con la prima macchina Enigma nella posizione AAA. chiaro che se la prima lettera stata criptata con questa posizione, la seconda lettera sar stata criptata con la posizione BAA, la terza con la posizione CAA e cos via. Si simulano quindi quattro macchine Enigma con in ingresso le prime quattro lettere del testo crittografato (o del testo in chiaro, dal momento che la macchina simmetrica) e questi settaggi dei rotori:

R
AAA

W
BAA

I
CAA

V
DAA

Se le quattro macchine traducevano i caratteri in ingresso nelle prime quattro lettere del testo in chiaro, WETT, la posizione dei rotori aveva buone probabilit di corrispondere alla effettiva posizione iniziale della giornata. In caso contrario si facevano avanzare tutte le macchine simulate di una posizione, portandole rispettivamente a BAA, CAA, DAA, EAA, e si procedeva con tutte le 17576 possibili combinazioni dei rotori e le loro 60 possibili disposizioni (per un totale di 1054560 tentativi). La forza delle Bombe era proprio la capacit di provare automaticamente in breve tempo un gran numero di posizioni, fermandosi ogni volta che si otteneva la corrispondenza con il testo in chiaro. Lo stecker board introduceva un ulteriore livello di complessit, perch il valore di uscita di ogni macchina Enigma era ulteriormente modificato. Poich le trasformazioni dello stecker board erano costanti nellarco di una giornata, per, si poteva ipotizzare ogni lettera in uscita dal blocco rotori/riflettori venisse sempre tradotta

196

con la stessa lettera. Non tutte le lettere, inoltre, erano trasformate dallo stecker board, ma solo 20 su 26. Supponendo che una lettera non fosse trasformata dallo stecker board, si doveva cercare una serie di trasformazioni che iniziasse con questa lettera e permettesse di ritornarvi, come nellesempio:

Iniziando dalla lettera R, che trasformata in S nella posizione 9, si pu avere questa sequenza chiusa (tutte le trasformazioni sono simmetriche):
R (alla posizione 9) S (19) B (11) E (5) T (4) V (7) R

Nella posizione 9 del testo la R viene trasformata non in S, ma nel carattere che lo stecker board trasforma in S. Qualunque esso sia, per, si pu dedurre che nella posizione 19 del testo quel valore viene trasformato nel carattere che lo stecker board trasforma in B, e cos via. Non serve, quindi, conoscere i valori intermedi, ma basta verificare che dopo tutte le trasformazioni indicate si ottenga ancora una R. Si possono quindi simulare con una Bomba alcune macchine Enigma in serie, in modo che luscita della prima (la lettera che lo stecker board trasforma in S) sia lingresso della seconda, luscita della seconda (la lettera che lo stecker board trasforma in B) sia lingresso della terza e cos via. Gli unici valori conosciuti sono lingresso della prima macchina e luscita dellultima (entrambi R). Ogni macchina effettua la trasformazione che corrisponde alla posizione della lettera su cui opera; se in prima posizione i rotori sono impostati su AAA, se in seconda su AAB e cos via. Nellesempio limpostazione della macchina che trasforma il nono carattere IAA, quella della macchina che trasforma il diciannovesimo carattere SAA, e cos via:

197

IAA

SAA

KAA

EAA

DAA

GAA

19

11

Anche in questo caso si procedeva con tutte le 17576 possibili combinazioni dei rotori e le loro 60 possibili disposizioni. I rotori delle Bombe ruotavano a 120 giri al secondo, e completavano la ricerca in poco pi di due ore. Se si trovava una combinazione con la quale lingresso della prima macchina corrispondeva alluscita dellultima, limpostazione dei rotori poteva essere quella prevista per la giornata. Ripetendo la prova per tutti i loop di lettere conosciuti, si riuscivano a trovare le impostazioni effettive. Le trasformazioni dello stecker board, in seguito, vennero simulate con unaggiunta alla Bomba, la tabella diagonale, concepita dal matematico Gordon Welchmann, che permise di migliorare notevolmente la velocit di decifrazione. Grazie ai crittografi di Bletchley Park, nel corso della guerra le comunicazioni dei tedeschi vennero sistematicamente tradotte in giornata, fornendo un vantaggio decisivo agli Alleati. Nonostante tutti gli indizi, per, lo stato maggiore tedesco si rifiut sempre di credere che le sue comunicazioni potessero essere decifrate dai nemici, dando la colpa delle continue fughe di notizie a non meglio precisate attivit spionistiche.

198

DES ed AES Lavvento dei calcolatori ha completamente trasformato la crittografia; adesso si utilizzano algoritmi che richiedono un numero di operazioni molto elevato, al di l della portata di qualsiasi essere umano o apparato elettromeccanico. chiaro che anche le tecniche di attacco sfruttano le capacit dei calcolatori, innescando una sorta di circolo vizioso: un testo codificato anni fa, quando le capacit dei calcolatori erano molto inferiori, pu essere facilmente decodificato con un attacco a forza bruta con i calcolatori. Questa tecnica, simile a quella utilizzata dalle Bombe, prova tutte le possibili combinazioni della chiave fino a trovarne una che produce un testo di senso compiuto. Lo stato dellarte della codifica crittografica stato rappresentato fino a pochi anni fa dal cosiddetto DES (Data Encryption Standard), definito nel 1977 dal governo degli Stati Uniti. Il DES un algoritmo a blocchi, perch non prende in considerazione i singoli caratteri ma sequenze di 64 bit, che possono contenere 8 caratteri in codifica ASCII. La gestione a blocchi rende impossibile lanalisi delle frequenze delle singole lettere. Se il numero di caratteri di un testo non multiplo di otto, si aggiungono alla fine degli zeri binari per portare il numero totale di bit ad un multiplo di 64. La chiave utilizzata dal DES, che deve essere conosciuta sia dal mittente che dal destinatario, anchessa di 64 bit, ma in realt ne vengono utilizzati soltanto 56 (gli altri 8 sono dei bit di parit, che ne garantiscono lintegrit). Per rappresentare un numero di 64 bit servono 19 cifre decimali; una chiave DES espressa in forma decimale qualcosa del tipo: 5768443022347814473 Lalgoritmo effettua delle permutazioni sia sulla chiave che sul testo da crittografare, scambiando tra loro i bit secondo delle apposite tabelle. La prima elaborazione sui valori della chiave, ad esempio, utilizza questo ordinamento:

199

57 10 63 14

49 2 55 6

41 59 47 61

33 51 39 53

25 43 31 45

17 35 23 37

9 27 15 29

1 19 7 21

58 11 62 13

50 3 54 5

42 60 46 28

34 52 38 20

26 44 30 12

18 36 22 4

La tabella indica in che modo spostare ognuno dei 64 bit della chiave; il cinquantasettesimo bit della chiave originale diventer il primo della chiave permutata, il quarantanovesimo diventer il secondo e cos via. Dopo tutte le elaborazioni preliminari previste, si effettua una operazione di XOR bit a bit tra quanto si ottenuto elaborando il testo e quanto si ottenuto elaborando la chiave. La scelta delloperatore di esclusive or XOR non casuale. Infatti, se si conosce il risultato di una operazione di XOR tra due cifre binarie ed una delle due cifre originali, si pu risalire al valore dellaltra. Loperatore XOR descritto da questa tabella, come si visto nel capitoletto Circuiti logici:

A 0 0 1 1

parametri B 0 1 0 1

risultato C 0 1 1 0

facile vedere che se come parametri si considerano B e C, e si considera A come risultato, la relazione di XOR sempre valida: risultato A 0 0 1 1 parametri B C 0 0 1 1 0 1 1 0

200

In altri termini:
se C = XOR (A,B) allora A = XOR (B,C) e B = XOR (A,C)

Quindi, se si hanno a disposizione sia la chiave che il testo crittato con una operazione di XOR, si pu ottenere il testo originale con unaltra operazione di XOR. Le permutazioni previste dallalgoritmo DES sulla chiave e sul testo in chiaro hanno lo scopo di rendere pi pesanti i calcoli necessari per un attacco a forza bruta, effettuato provando tutte le possibili combinazioni della chiave: ognuna di esse, infatti, deve essere sottoposta a molte elaborazioni prima di verificare se d origine ad un testo di senso compiuto. Il numero di possibili combinazioni di una chiave di 56 bit, ovviamente, di due elevato alla cinquantaseiesima potenza, e cio di 64 Peta, o circa 7 per 10 elevato alla sedicesima potenza, come si visto nel capitoletto Un kilobyte non mille bytes. Per molto tempo si pens che la potenza di calcolo necessaria per un attacco a forza bruta al DES fosse al di l delle possibilit tecniche di qualunque organizzazione; ancora nel 1998 il governo americano sosteneva pubblicamente che la forzatura del DES non era possibile nemmeno per un agenzia governativa con grande disponibilit di capitali come lFBI. Il 17 luglio dello stesso anno, per, un team di tecnici guidati da John Gilmore della Electronic Frountier Foundation, un gruppo per la difesa dei diritti civili, realizz un sistema in grado di forzare un testo criptato con il DES in pochi giorni. Il sistema aveva un costo di circa 200.000 dollari ed era alla portata di moltissime organizzazioni. Con i calcolatori pi recenti forzare un testo codificato con il DES richiede poche ore. Per rendere pi sicura la codifica, si diffuso lutilizzo del Triple DES, che prevede che lo stesso testo venga sottoposto alle trasformazioni del DES per tre volte successive con tre chiavi diverse, rendendo pressoch impossibile un attacco a forza bruta. Negli ultimi anni, infine, il governo degli Stati Uniti ha proposto un nuovo standard, detto AES (Advanced Encryption Standard), sviluppato dai crittografi belgi Joan Daemen e Vincent Rijmen. LAES lavora anchesso su blocchi di testo di 64 bit, ma

201

utilizza chiavi da 128 o 256 bit ed al momento non vulnerabile agli attacchi a forza bruta.

202

La chiave pubblica Tutte le tecniche crittografiche che abbiamo descritto richiedono un segreto condiviso; la chiave utilizzata da chi codifica deve essere conosciuta anche da chi deve decodificare. Comunicare la chiave in modo sicuro pone degli ovvi problemi organizzativi e di sicurezza; se viene intercettata tutti i messaggi crittografati possono essere facilmente letti da un estraneo. chiaro che le cose cambierebbero radicalmente se chi codifica il messaggio non avesse bisogno di una chiave segreta, ma potesse codificare utilizzando delle informazioni pubbliche. Il trucco consiste nellutilizzare una chiave composta da due parti, una pubblica, che pu essere comunicata senza problemi, ed unaltra privata, che soltanto il destinatario conosce. Utilizzando la chiave pubblica si pu creare un messaggio che solo chi possiede la chiave privata corrispondente in grado di leggere. La procedura abbastanza semplice, anche se richiede una grande potenza di calcolo. Chi deve ricevere dei messaggi crittografati genera una propria chiave segreta, privata, che non ha bisogno di comunicare a nessuno. A partire da questa elabora una chiave pubblica, che pu distribuire liberamente. Chiunque gli debba spedire un messaggio segreto in grado creare un testo crittografato che pu essere decodificato soltanto da lui. Il concetto di crittografia a chiave pubblica fu definito nel 1976 da Whitfield Diffie e Martin Hellmann, ma vi sono diversi modi di realizzarla. Una delle tecniche pi diffuse fu sviluppata da Ron Rivest, Adi Shamir e Leonard Adleman, che fondarono unazienda chiamata con il nome delle loro iniziali, RSA, ancora attiva nel campo della crittografia commerciale.

203

Lalgoritmo di Rivest, Shamir e Adleman Lalgoritmo inventato da Rivest, Shamir e Adleman utilizza le propriet dei numeri primi. Come tutti i lettori sapranno, sono chiamati primi i numeri divisibili solo per s stessi e per uno (sono primi, ad esempio, 3,5,7,11). Ogni numero non primo scomponibile in modo univoco in un prodotto di numeri primi (15, a esempio, scomponibile in 3 per 5). Per elaborare le chiavi pubbliche e private serve un numero scomponibile in due soli fattori primi. Chiameremo questo numero n (detto anche modulo) e i due numeri primi p e q. n = pq Chiameremo invece n1 il prodotto: n1 = (p-1)(q-1) Per ottenere la chiave pubblica, si deve trovare un numero e (detto esponente pubblico) minore di n e che non abbia fattori comuni con n1; in altri termini, non devono esistere numeri per cui sia e che n1 siano esattamente divisibili. Per ottenere la chiave privata, invece, si deve trovare un numero d (detto esponente) tale che il risultato della sua moltiplicazione per e, diminuito di 1, sia esattamente divisibile per n1; in altri termini, il risultato della divisione: (ed 1) / n1 deve essere un numero intero. La chiave pubblica composta dai numeri e ed n, la chiave privata dai numeri d ed n. I numeri utilizzati possono essere anche molto piccoli, come nellesempio che segue. Immaginiamo che i numeri primi scelti siano 3 e 11. Il loro prodotto n uguale a 33, mentre n1 uguale a 20. Come esponente pubblico e si pu scegliere 3, che non ha fattori comuni

204

con 20, come esponente privato d 7, che soddisfa la formula riportata sopra. I numeri da utilizzare per codificare e decodificare sono quindi: n = 33 e=3 d=7

Per crittografare un messaggio m, si deve trasformare un numero che rappresenti i suoi caratteri, ad esempio un numero di 64 bit che pu contenere otto caratteri ASCII, secondo questa formula: c = (m elevato ad e) modulo n In altri termini, si deve moltiplicare m per s stesso tante volte quanto il valore di e e prendere il resto della divisione per n (questa operazione detta modulo). Chi riceve il messaggio c pu risalire al valore originario di m con questa formula: m = (c elevato a d) modulo n Immaginiamo che il numero da trasmettere sia 7; il valore del testo crittografato diventa: c = (7 elevato a 3) modulo 33 Il risultato della moltiplicazione di 7 per s stesso per tre volte 343. Il resto della divisione di 343 per 33, che d come risultato 10, 13. c = 13 Chi riceve questo valore, pu risalire al numero originale con loperazione: m = (13 elevato a 7) modulo 33 Il risultato della moltiplicazione di 13 per s stesso per sette volte 62.748.517. Prendendo il resto della divisione di 62.748.517 per 33 (che d come risultato 1.901.470) si ottiene il numero originale, 7.

205

Anche se lesempio che abbiamo visto corretto, nella pratica si utilizzano numeri primi molto pi grandi, tali da richiedere comunque luso di un calcolatore. Di solito il valore del modulo n espresso in forma binaria occupa 512 bit, che corrispondono a 128 cifre esadecimali oppure a 155 cifre decimali, qualcosa come: 1094173864157052742180970732204035761200373294544920599 0913842131476349984288934784717997257891267332497625752 899781833797076537244027146743531593354333897 Il motivo dellutilizzo di numeri cos grandi la necessit di rendere molto difficile la scomposizione in fattori primi del modulo, che accessibile a tutti perch fa parte della chiave pubblica. Infatti, se si conoscono sia i due fattori primi p e q che e, anchesso parte della chiave pubblica, molto facile risalire a d ed alla chiave privata. Decomporre in fattori primi il modulo che abbiamo utilizzato (33) banale, mentre per decomporre il numero indicato sopra possono servire molti anni di calcoli.

206

La chiave di sessione La crittografia a chiave pubblica detta anche asimmetrica, perch usa chiavi diverse per la codifica e la decodifica, ed molto pi lenta rispetto agli algoritmi simmetrici come il DES. Per codificare un testo di 100 KBytes utilizzando una chiave con un modulo di 512 bit pu servire un secondo, unenormit nel mondo dei calcolatori. Se il modulo pi grande, come molte volte richiesto per motivi di sicurezza, lalgoritmo RSA diventa ancora pi lento. Al confronto, il DES circa 100 volte pi veloce. Per sfruttare i benefici di entrambi i sistemi di crittografia, di solito non si codifica un intero testo con la chiave pubblica, ma si usa un sistema misto. Il calcolatore che deve crittografare il messaggio genera una chiave di sessione DES o AES, di 64 o 128 bit, e la spedisce come contenuto di un messaggio crittografato. A questo punto il mittente ed il destinatario condividono un segreto, la chiave di sessione, e possono utilizzare senza problemi un algoritmo simmetrico molto veloce. Lutilizzo delle chiavi di sessione facilita anche linvio dello stesso messaggio a pi destinatari in modo sicuro: con la crittografia asimmetrica lo si dovrebbe codificare in modo diverso per ogni destinatario, basandosi sulle rispettive chiavi pubbliche, mentre se si usa una chiave di sessione basta codificarla in modo diverso per ogni destinatario. Il messaggio crittografato sar composto dal testo codificato con la chiave di sessione e da una breve sezione privata per ogni destinatario, contenente la chiave di sessione crittografata con la sua chiave pubblica. Tra i due segreti, la chiave privata di gran lunga il pi importante. Se si scopre la chiave di sessione si pu leggere soltanto un singolo messaggio, mentre se si scopre la chiave privata si possono intercettare tutte le chiavi di sessione e leggere tutti i messaggi inviati ad uno specifico destinatario.

207

La firma digitale Uno dei modi per verificare lidentit di una persona chiedergli una parola dordine, e cio richiedere che sia a conoscenza di un segreto. Comunicare questo segreto alle persone autorizzate, per, pu essere pericoloso; se non ci si pu incontrare di persona si deve trovare un sistema sicuro di comunicazione e, ad ogni modo, qualcuno potrebbe sentire la parola dordine quando viene pronunciata. La magia della crittografia asimmetrica viene in aiuto anche in questo caso; non solo permette luso di una chiave che non si conosce, ma anche di essere certi che qualcuno possegga un segreto senza bisogno di comunicarlo. Chi possiede la chiave privata pu generare un numero che solo lui in grado di calcolare, senza rischio che si possa risalire alla sua chiave privata. La verifica dellautenticit del numero generato pu essere fatta da chiunque a partire dalla chiave pubblica del mittente. Le formule da utilizzare sono molto simili a quelle per la crittografia dei messaggi. Per firmare digitalmente un messaggio, e cio per garantire che il mittente sia proprio chi possiede la chiave privata che corrisponde ad una chiave pubblica conosciuta, in primo luogo si genera a partire dal messaggio un numero h di 64 o pi bit con una funzione hash, simile a quelle viste nel capitoletto sullhashing. In seguito, per ottenere il numero s che rappresenta la firma digitale del messaggio si applica la formula: s = (h elevato a d) modulo n dove d rappresenta lesponente privato, conosciuto soltanto dal mittente, ed n il modulo. La firma digitale viene inviata in coda al messaggio. Chi riceve il messaggio applica la funzione hash concordata tra le parti al contenuto del messaggio. Subito dopo separa la parte di firma digitale s ed usa la formula: h = (s elevato ad e) modulo n

208

dove e rappresenta lesponente pubblico. Se i due risultati sono identici il mittente sicuramente chi dice di essere, perch solo lui avrebbe potuto calcolare quel numero. Utilizziamo le stesse chiavi pubbliche e private dellesempio precedente: n = 33 e=3 d=7

Se lhash del messaggio da trasmettere 5, il valore della firma digitale diventa: s = (5 elevato a 7) modulo 33 Il risultato della moltiplicazione di 5 per s stesso per sette volte 78.125. Il resto della divisione di 78.125 per 33, che d come risultato 2367, 14. s = 14 Chi riceve il messaggio pu calcolare il suo hash, ottenendo 5, e poi controllare la firma digitale con loperazione: h = (14 elevato a 3) modulo 33 Il risultato della moltiplicazione di 14 per s stesso per tre volte 2.744. Il resto della divisione di 2.744 per 33 (che d come risultato 83) proprio 5, il valore dellhash. La firma digitale, oltre a garantire lidentit del mittente, garantisce anche lintegrit del messaggio. Infatti, se il messaggio viene modificato nel corso della trasmissione, il suo hash cambia e la verifica della firma digitale fallisce. La chiave pubblica pu essere conosciuta da tutti senza problemi, ad esempio pu essere riportata su di un sito web, ma si deve essere certi che corrisponda proprio allutente a cui associata. In caso contrario, un malintenzionato potrebbe calcolare una coppia di chiavi privata e pubblica, e diffondere la falsa chiave pubblica attribuendola ad un utente di cui vuole falsificare la firma. Chi utilizzasse questa

209

chiave pubblica inevitabilmente prenderebbe per autentici i messaggi firmati con la chiave privata del malintenzionato. Per essere sicuri che una chiave pubblica appartenga ad un utente si usano i certificati digitali, che sono composti dal nome di un utente e dalla sua chiave pubblica, il tutto firmato digitalmente da una certification authority, una organizzazione universalmente riconosciuta, come VeriSign, SecureNet, GTE CyberTrust. Prima di rilasciare un certificato ad un utente, una certification authority verifica che sia proprio lui, ad esempio chiedendo che si presenti con un documento di identit. Ma, infine, come si pu essere certi dellidentificazione della certification authority stessa, e cio dellautenticit della chiave pubblica usata per firmare un certificato? Queste chiavi sono hardcoded, e cio comprese direttamente nel software, nei programmi utilizzati per leggere i messaggi di posta elettronica o per navigare sul Web. Il programma Internet Explorer di Microsoft, ad esempio, contiene le chiavi pubbliche di decine di certification authorities. Per un malintenzionato intervenire a questo livello sarebbe davvero difficile.

210

Il prezzo della chiave segreta Come ogni genere di immagini, anche i programmi televisivi possono essere digitalizzati, e cio ridotti a sequenze di numeri. Questo rende possibile applicare la crittografia in modo che soltanto chi paga un canone li possa vedere; basta trasmetterli in maniera criptata e fornire la chiave di decodifica a chi sottoscrive un abbonamento. Dal punto di vista pratico, chi si abbona riceve un apparecchio decodificatore da inserire tra lantenna ed il televisore, in grado di ricostruire quasi istantaneamente le immagini originali una volta conosciuta la chiave segreta. Mentre si pu essere abbastanza sicuri che chi non possiede la chiave non possa vedere i programmi, la distribuzione della chiave pone problemi ancora maggiori del solito. Normalmente, infatti, il destinatario di un messaggio segreto ha interessi in comune con il mittente e cerca di tenere segreta la codifica; in questo caso, invece, chi riceve i programmi non ha motivo di collaborare e non si pu contare su di lui perch mantenga la segretezza delle chiavi. Nulla impedisce agli abbonati che ricevono la chiave segreta di comunicarla ad amici e conoscenti. Per superare questo problema, non si manda agli abbonati un codice da digitare sul decodificatore ma si fornisce una cosiddetta smart card. Questo dispositivo, che ha laspetto esteriore di una carta di credito, non solo pu memorizzare il codice in modo sicuro ma permette di variarlo continuamente. Le smart card contengono al loro interno un piccolo calcolatore con una certa quantit di memoria, in cui memorizzata una chiave crittografica. Esse sono costruite in modo che non sia possibile leggerne la memoria interna; ogni tentativo di accesso le distrugge. Ogni minuto o poco pi il codice usato per crittografare le trasmissioni viene cambiato; immediatamente prima di ogni cambiamento si trasmette il nuovo codice crittografato con la chiave contenuta nella smart card. La smart card lo traduce e lo comunica al decodificatore; se anche venisse diffuso, poco male: sarebbe gi scaduto prima di riuscire ad utilizzarlo.

211

Nonostante queste precauzioni, spesso i pirati informatici hanno trovato il modo di rendere visibili le trasmissioni televisive criptate anche a chi non aveva pagato labbonamento, utilizzando delle smart card contraffatte, in grado di emulare il comportamento di quelle autentiche. Alcuni esperti hanno ipotizzato che questo sia avvenuto con il tacito consenso delle televisioni stesse, che hanno utilizzato algoritmi deboli con chiavi di dimensione insufficiente ed in questo modo hanno potuto ampliare notevolmente la platea di spettatori, allargandola a chi in prima battuta non sarebbe stato disposto a sottoscrivere un abbonamento. In seguito, rendendo pi difficile la decodifica, ad esempio distribuendo agli abbonati un nuovo tipo di smart card, hanno spinto gli spettatori non autorizzati a sottoscrivere un regolare abbonamento per non perdere un servizio a cui erano ormai abituati.

212

Sicuri su Internet Su Internet sostanzialmente non esiste sicurezza dei dati. I pacchetti che viaggiano tra un calcolatore e laltro possono seguire qualsiasi strada ed essere intercettati in qualsiasi punto. Daltra parte , Internet ormai lo strumento principale di comunicazione tra i calcolatori ed necessario utilizzarla anche per inviare dati riservati, come le informazioni bancarie. Per garantire la sicurezza dei dati la soluzione ovvia la crittografia, ma criptare i singoli messaggi o le singole transazioni sarebbe molto macchinoso. La soluzione pi elegante consiste nel criptare tutto il canale di comunicazione tra due calcolatori, intervenendo direttamente al livello della trasmissione dei dati. A questo scopo si utilizza il protocollo SSL (secure socket layer, in italiano strato sicuro dei socket, il componente software usato per i protocolli di rete), con il quale i programmi in esecuzione su due calcolatori possono comunicare in modo sicuro senza altri accorgimenti. Per realizzare le trasmissioni SSL si utilizza, come di consueto, una combinazione di crittografia simmetrica e di crittografia a chiave pubblica. I calcolatori che forniscono servizi SSL devono avere una loro chiave pubblica. Un calcolatore che richiede un servizio elabora una chiave di sessione, la codifica con la chiave pubblica del server e gliela invia. Tutte le comunicazioni successive sono crittografate con la chiave di sessione, utilizzando algoritmi come DES o AES. In questo modo si garantisce anche lintegrit dei dati. Su Internet in teoria si potrebbe intercettare un messaggio e sostituirne una sua parte, ad esempio trasformando limporto di un ordine di bonifico da 100 a 1000 euro e lasciando inalterato tutto il resto. Se i dati sono crittografati , invece, non si possono leggere e quindi neppure modificare: la loro integrit garantita. Il protocollo SSL utilizzato dalla maggioranza dei siti web che trattano informazioni riservate, come i siti che permettono di accedere ai conti correnti bancari. Quando un sito adotta SSL il suo nome contiene la sigla https, che sta per http sullo strato SSL, ad esempio:

213

https://www.miabanca.com I programmi utilizzati per accedere al web, i browser, indicano in modo grafico che le comunicazioni utilizzano un protocollo sicuro, mostrando limmagine di un lucchetto. Il dialogo sicuro tra due calcolatori pu essere esteso alle comunicazioni di un intero gruppo di calcolatori, ad esempio tutti quelli che fanno parte della rete di unazienda. Anche se si trovano su Internet, questi calcolatori devono essere in grado di comunicare tra loro in modo riservato, come se fossero collegati ad una rete privata. La soluzione, nota con il nome di VPN (Virtual private network, rete privata virtuale), consiste nel crittografare con la stessa chiave tutte le comunicazioni tra i calcolatori del gruppo. Gli altri calcolatori vedranno girare sulla rete soltanto dei pacchetti di dati privi di significato. Questa soluzione utile in particolare se un dipendente si trova fuori sede, ma in un posto da cui si pu collegare ad Internet (il che oggi significa sostanzialmente in qualsiasi posto nel mondo), ed ha bisogno di accedere con il suo calcolatore portatile alla rete aziendale. Prima della comparsa di questa tecnologia era necessario che il dipendente si collegasse direttamente alla sede con una costosa chiamata telefonica via modem, mentre con una VPN la riservatezza garantita qualsiasi tipo di collegamento si utilizzi.

214

Quanto sono sicuri i metodi crittografici?

Lattacco a forza bruta il metodo principale per scoprire le chiavi crittografiche. Questa tecnica simile a quella utilizzata dalle Bombe e prova tutte le possibili combinazioni di una chiave fino a trovarne una che produca una serie di parole di senso compiuto. Linformazione che si sfrutta che il testo trasmesso deve avere coerenza interna. C sempre, per, la possibilit di ottenere, provando con uno dei possibili valori della chiave, un testo sensato ma diverso dalloriginale. Se si considera ad esempio lalgoritmo DES, ogni blocco di dati comprende 8 bytes (64 bit) mentre la chiave di 56 bit. Il numero di possibili valori che il testo pu assumere di due elevato alla sessantaquattresima potenza, e cio 16 Esa, circa 16.000.000.000.000.000.000 mentre il numero di possibili combinazioni della chiave di due elevato alla cinquantaseiesima potenza, e cio 64 Peta, circa 64.000.000.000.000.000 Poich il numero di possibili valori della chiave inferiore al numero di possibili valori del testo, procedendo a forza bruta si pu ottenere soltanto una frazione di questi ultimi. Per calcolarla si deve dividere due elevato a 64 per due elevato a 56; utilizzando le propriet delle potenze viste nel capitoletto La scala esponenziale, si pu utilizzare lesponente ottenuto sottraendo 56 a 64: il risultato due elevato alla ottava, ed esattamente 256. In altri termini, procedendo a forza bruta si pu ottenere un duecentocinquantaseiesimo delle combinazioni di lettere possibili; tra queste vi saranno non solo il testo originale ma anche altri testi dotati di senso, il cui numero si pu ottenere dividendo per 256 il numero totale di combinazioni sensate di otto lettere. Queste combinazioni comprendono la maggior parte delle parole della

215

lingua italiana, che sono diverse decine di migliaia, e molte combinazioni di parole pi corte di otto lettere; inutile cercare di calcolarne il numero esatto, ma si pu dire che dellordine dei milioni: dividendolo per 256, si ottiene un numero dellordine delle migliaia. Provando a caso su un blocco di otto caratteri tutti i possibili valori di una chiave di 56 bit, quindi, si otterranno assieme al testo originale almeno un migliaio di falsi positivi, testi dotati di senso ma diversi dalloriginale. A questo punto chiaro che trovare una chiave che traduce correttamente un solo blocco non significa niente; per essere sicuri che sia quella giusta, si deve verificare che riesca a tradurre anche altri blocchi. Per rendere impossibile un attacco a forza bruta, quindi, si deve evitare di cifrare pi blocchi con la stessa chiave. Un metodo ancora pi sicuro consiste nel fare in modo che le possibili combinazioni della chiave siano uguali alle possibili combinazioni dellintero testo, utilizzando una chiave con una lunghezza paragonabile a quella del messaggio. In questo caso non si pu in alcun modo sfruttare la coerenza del testo, perch provando a caso i valori della chiave si pu trovare indifferentemente qualsiasi combinazione di lettere, sia il testo originale che un sonetto di Shakespeare. Questo genere di codifica assolutamente sicura non altro che la codifica di Vernam, di cui si gi parlato nel capitoletto Il cifrario di Che Guevara e che genera difficolt pratiche insormontabili. Di solito, quindi, si utilizza la stessa chiave per tutti i blocchi di un messaggio e ci si assume il rischio che un attacco a forza bruta possa tradurlo, confidando sulle difficolt causa dellenormit del numero di combinazioni da provare. In effetti, poich qualsiasi combinazione ha le stesse probabilit di essere quella giusta, un attacco a forza bruta potrebbe avere successo al primo colpo. La sicurezza dei metodi crittografici non assoluta, ma probabilistica. Queste considerazioni potrebbero sembrare inquietanti, perch facciamo affidamento sulla crittografia per inviare in modo sicuro dati bancari ed ogni genere di informazioni della massima riservatezza. Fortunatamente la probabilit che un attacco a forza bruta abbia successo al primo colpo cos bassa che non vale la pena prenderla in considerazione, come non prendiamo in considerazione innumerevoli eventi che si potrebbero verificare con

216

una probabilit minima. Nel caso di una codifica DES, la probabilit del successo immediato di un attacco a forza bruta appunto di uno su due elevato alla cinquantaseiesima potenza, e cio di uno su 64 Peta, o circa uno su 64.000.000.000.000.000. Per confronto, si ritiene che la frequenza con cui si verifica limpatto di un meteorite da "catastrofe globale", in grado di provocare la morte di un quarto della popolazione mondiale, sia di una ogni milione di anni circa; in altri termini, la probabilit che questo accada nel prossimo minuto di uno su: 1.000.000 x 525.600 (numero di minuti in un anno) circa 500.000.000.000. La probabilit di una catastrofe globale nel prossimo minuto pi di 100.000 maggiore della probabilit che un attacco ad una codifica DES abbia successo al primo colpo. Questa probabilit cos bassa che si pu dire, trasformando un aspetto quantitativo in un aspetto qualitativo, che semplicemente non esiste.

217

Caccia ai numeri primi Scomporre in fattori primi un numero qualsiasi un importante esercizio matematico; se vi sentite particolarmente portati a questa attivit, potreste vincere 10.000 dollari (i dettagli sono disponibili sul
sito http://www.rsasecurity.com/rsalabs/challenges/factoring/numbers.html)

scomponendo in fattori primi questo numero: 1881988129206079638386972394616504398071635633794173827 0076335642298885971523466548531906060650474304531738801 1303396716199692321205734031879550656996221305168759307 650257059 Troppo semplice? Potreste allora puntare al primo premio (200.000 dollari) scomponendo, anzich questo numero di 174 cifre decimali, un ben pi corposo numero di 617 cifre. Il lavoro difficile, ma c una traccia per gli aspiranti scopritori: i fattori primi di questo numero sono solamente due, il che significa che si devono trovare due numeri (primi) che moltiplicati tra loro producono questo risultato. Quali siano questi due numeri non lo sa nessuno, neppure gli esperti dei laboratori RSA che propongono il concorso. Il numero stato prodotto con un programma di generazione casuale che stato fatto girare su un PC il cui disco fisso stato distrutto. Questo premio sponsorizzato dalla stessa RSA e, come i lettori avranno gi capito, il suo scopo garantire che la scomposizione del modulo delle chiavi pubbliche non sia fattibile. In caso contrario, come si gi visto, sarebbe molto semplice risalire alla corrispondente chiave privata. Per scomporre un numero in fattori primi ci sono algoritmi banali (basta provare con tutti i numeri primi pi piccoli del numero di partenza) e algoritmi molto sofisticati, ma anche con questi ultimi necessario molto tempo ed una potenza di calcolo impressionante per numeri come quelli del concorso. Si stimato che per scomporre un numero di 232 cifre decimali (pari a 768 cifre binarie, premio da

218

50.000 dollari) sarebbe necessario che 215.000 calcolatori lavorassero per un anno intero. Un vecchio premio per la scomposizione di un numero con 155 cifre decimali stato vinto nel 1999 da un team di ricercatori che ha utilizzato circa 300 calcolatori per diversi mesi. Questo risultato ha dimostrato che i numeri con 155 cifre decimali (pari a 512 cifre binarie), usati fino a qualche anno fa come modulo delle chiavi pubbliche, non possono pi essere ritenuti sicuri, perch la loro scomposizione alla portata dei calcolatori attuali. Adesso si utilizzano chiavi pubbliche con 768 o 1024 cifre binarie (pari a 232 o 309 cifre decimali). Un giorno, per, con laumentare della potenza di calcolo dei calcolatori, possibile che si riescano a scomporre in un tempo ragionevole anche numeri di queste dimensioni, e che diventi quindi necessario utilizzare chiavi pubbliche ancora pi grandi.

219

Nel mare dei numeri

Nulla di nuovo sotto il sole? I tag RFID sono una delle tecnologie in maggiore sviluppo e sono stati descritti nel capitoletto Un numero per qualsiasi oggetto. I numeri che si possono esprimere con i 96 bit di un tag RFID sono ampiamente sufficienti ad attribuire un numero univoco a qualsiasi oggetto con cui qualsiasi essere umano possa avere a che fare nel corso della propria vita. Ma le cose cambierebbero se si considerasse un orizzonte temporale pi ampio? Proviamo a considerare interi periodi storici, mantenendo la disponibilit di trentasei miliardi di miliardi di combinazioni per ogni secondo (sei miliardi per ognuno dei sei miliardi di esseri umani che sono al mondo). Lera moderna, il cui inizio si fa coincidere con il 1492, anno della scoperta dellAmerica, dura da circa 500 anni; il numero di secondi trascorsi si pu calcolare moltiplicando il numero di minuti di un anno (525.000, come si visto nel capitoletto Quanto sono sicuri i metodi crittografici?) per il numero di secondi in un minuto ed infine per 500: 525.000 x 60 x 500 ed di circa 15 miliardi. Il numero totale di combinazioni necessarie sarebbe quindi di circa 540 miliardi di miliardi di miliardi. Poich servono 90 bit per superare di poco un miliardo di miliardi di miliardi e con nove bit ci sono 512 combinazioni, si pu concludere che servirebbero 99 bit in tutto, con una estensione minima rispetto alle dimensioni attuali dei tag. La civilt attuale, per, ha avuto una durata molto breve se confrontata con alcune civilt del passato, come la civilt degli antichi Egizi che durata migliaia di anni. Lhomo sapiens esiste da circa 100.000 anni, i primi ominidi sono apparsi due milioni di anni fa, i primi dinosauri duecento milioni di anni fa, e la stessa Terra

220

esiste da cinque miliardi di anni. Il numero di secondi da cui esiste la Terra : 525.000 x 60 x 5.000.000.000 circa 150 milioni di miliardi. In questo caso, continuando a considerare trentasei miliardi di miliardi di combinazioni al secondo, servirebbero circa 5 miliardi di miliardi di miliardi di miliardi. Oltre ai 90 bit necessari per il consueto miliardo di miliardi di miliardi, ne servono altri trenta per lulteriore miliardo, pi tre, in totale 123 bit. Le cose cambierebbero di poco per arrivare allet delluniverso, calcolata in 18 miliardi di anni trascorsi dal Big Bang, che circa il triplo dellet della Terra; in totale, 125 bit. A questo punto chiaro che il gioco pu essere portato avanti a piacere; se dovessimo considerare, anzich un solo mondo, un miliardo di mondi, basterebbe arrivare a 155 bit, perch aggiungendo 30 bit si moltiplica il numero di combinazioni per un altro miliardo. Alcune filosofie sostengono che tutto quelle che avviene gi successo nel passato e che gli eventi inevitabilmente si devono ripetere, un concetto espresso dalla frase latina nihil sub sole novi (non c niente di nuovo sotto il sole). Per quanto ci riguarda, invece, si pu affermare che nel corso della nostra vita ci pu essere sempre qualcosa di nuovo o, almeno, un nuovo numero per descriverlo.

221

Un numero per ogni formula Uno dei pi importanti teoremi della matematica del XX secolo dovuto al logico austriaco Kurt Goedel (1906-1978). Nei primi decenni del secolo il principale tema della ricerca matematica era il cosiddetto programma di Hilbert, basato sulle idee del matematico tedesco David Hilbert (1862-1943), che aveva lobbiettivo di giungere ad una completa formalizzazione delle matematiche. Il teorema di Goedel inferse un colpo mortale a questo progetto, dimostrando che era irrealizzabile. Nel suo teorema, Goedel associa ad ogni formula di un linguaggio matematico un numero intero. Ogni formula pu essere considerata come una sequenza di simboli, che possono essere costanti, ad esempio 0, oppure =, e di variabili, che possono assumere il valore di qualsiasi numero (una lettera usata spesso a questo scopo la x). Una formula, ad esempio, potrebbe essere: x=0 e pu essere vista come una sequenza ordinata di simboli {s_1, s_2, s_3, ...,} dove s_1 x, s_2 =, s_3 0. Per la codifica di una formula si potrebbe pensare di usare lo stesso accorgimento adottato per la codifica delle parole. Nella memoria dei calcolatori le parole sono memorizzate come pi caratteri ASCII, ognuno dei quali occupa un byte (otto cifre binarie); la parola CIAO, ad esempio, composta dai numeri (decimali) 67, 73, 65 e 79, che corrispondono ai numeri binari: 0100 0011 0100 1001 0100 0001 0100 1111

222

Poich ogni cifra esadecimale corrisponde esattamente a quattro cifre binarie, questi numeri possono essere espressi in forma esadecimale: 0x43 0x49 0x41 0x4F Di solito i dati nella memoria dei calcolatori sono considerati un byte alla volta, ma a volte si prendono pi bytes contigui come se fossero un solo numero, ad esempio quattro bytes nel caso dei calcolatori a 32 bit. La parola CIAO potrebbe quindi essere vista come un unico numero: 0x4349414F chiaro che il procedimento pu essere ripetuto a volont; una parola di otto lettere pu essere vista come un numero con sedici cifre esadecimali, un testo di cento lettere come un numero con duecento cifre esadecimali. Si pu pensare di usare lo stesso procedimento per descrivere una formula, ottenendo un numero in cui ogni gruppo di due cifre esadecimali rappresenta un simbolo. Ad esempio, se si assegnassero le cifre esadecimali ai simboli in questo modo: 0 0x1 = 0x2 x 0x3 La formula x=0 potrebbe essere descritta dal numero esadecimale: 0x30201 Questo metodo, per, non adeguato se il numero di simboli previsto dal linguaggio maggiore del numero di valori che si possono esprimere con un byte, 256; in questo caso si dovrebbe usare un numero maggiore di cifre per ogni simbolo. Se ad esempio i

223

simboli diversi fossero 65000, servirebbero 4 cifre esadecimali (2 bytes), con le quali si possono esprimere 65536 numeri. I simboli di un linguaggio matematico, per, non sono limitati n a 256 n a 65536, ma sono teoricamente infiniti: il numero di costanti fisso, ma le variabili non hanno limitazioni. Per ottenere il suo scopo, quindi, Goedel dovette utilizzare un metodo diverso.

224

Ancora i numeri primi La tecnica utilizzata da Goedel sfrutta il teorema sui numeri primi di cui si gi parlato a proposito dellalgoritmo RSA. Sono chiamati primi i numeri divisibili solo per s stessi e per uno (come, ad esempio, 2,3,5,7,11). Ogni numero non primo scomponibile in modo univoco in un prodotto di numeri primi (15, a esempio, scomponibile in 3 per 5). chiaro che ogni numero primo pu essere presente pi volte nella scomposizione; 40, ad esempio, scomponibile come 2 x 2 x 2 x 5, oppure due elevato alla terza potenza per cinque. Per ottenere un numero univoco da una sequenza di simboli, Goedel assegna come di consueto un valore ai simboli del linguaggio e poi costruisce un numero i cui fattori comprendono tanti numeri primi (a partire dal pi piccolo, 2, e a crescere) quanti sono i simboli della sequenza, ognuno con un esponente pari al valore del simbolo. Il numero ottenuto in questo modo identifica la sequenza senza possibilit di fraintendimenti, perch la scomposizione in fattori primi univoca. Se i simboli della formula sono in successione 3, 2 e 1, come nellesempio del capitoletto precedente, il numero di goedel della formula si ottiene in questo modo: 2 elevato alla terza per 3 elevato alla seconda per 5 elevato alla prima oppure 8 per 9 per 5 Il numero di goedel della formula quindi 360. Con questa tecnica non ci sono limitazioni al numero di simboli, perch si pu elevare un numero primo a qualsiasi potenza. Contrariamente alla codifica tradizionale, i valori assegnati ai simboli devono partire da uno e non da zero, perch se si eleva un qualsiasi numero alla potenza zero si ottiene uno: non ci sarebbe modo di rilevare la presenza di un simbolo con valore zero nellultima posizione di una formula.

225

I numeri di goedel sono sempre pari, perch il primo simbolo di ogni formula utilizzato come esponente del primo numero primo, 2: di conseguenza il numero ottenuto deve essere divisibile per due. Goedel applic il suo metodo alle formule del sistema dei Principia mathematica di Bertrand Russell e Alfred Whitehead. In questo sistema le costanti sono sette: 0 f (il successore) ~ (non) (oppure) (per ogni) ( (parentesi aperta) ) (parentesi chiusa) Non c bisogno di definire simboli che possono essere descritti a partire dagli altri, come ad esempio =; questi simboli sono detti abbreviazioni. Lunico numero lo 0: tutti gli altri numeri si possono ottenere applicando il simbolo successore: f(0) uno f(f(0)) due e cos via. Uno dei postulati del sistema (i postulati sono formule evidenti di per s dalle quali si pu ricavare tutto il resto) questo: ~(fx = 0) che significa che non esiste alcun numero di cui 0 sia il successore, perch zero il primo numero.

226

Goedel assegna alle costanti questi valori: costante 0 f ~ valore 1 3 5 7 9 11 13

( )

Come si pu vedere, i numeri utilizzati sono tutti dispari, in modo che il valore di un simbolo sia immediatamente distinguibile dal numero di goedel di una formula, che sempre pari. possibile assegnare un valore anche alle abbreviazioni; lunica che ci serve =: costante = valore 15

Anche alle variabili vanno assegnati dei numeri, e possiamo assegnare alla variabile x il numero 17: costante x valore 17

Calcolare il numero di Goedel della maggior parte delle formule porta ad ottenere numeri enormi; utilizziamo di nuovo la semplice formula: x=0 I simboli della formula sono, in successione, 17, 15 e 1. Dobbiamo calcolare:
2 elevato alla diciassettesima potenza per 3 elevato alla quindicesima potenza per 5

oppure

227

131.072 per 14.348.907 per 5 e quindi 9.403.699.691.520 Non tutti i numeri pari sono numeri di goedel, ma soltanto quelli in cui gli esponenti dei numeri primi in cui li si pu scomporre corrispondono a valori assegnati ai simboli. Non tutti i numeri di goedel, inoltre, corrispondono a formule ben formate, ma potrebbero portare ad una sequenza di simboli senza senso, che non rispetta le regole del linguaggio.

228

Fino a che numero sai contare? Quando un bambino inizia ad usare i numeri, uno dei modi per valutare i suoi progressi chiedergli fino a che numero sappia contare. Questo criterio ha una sua ragione dessere: allinizio ogni numero in pi una conquista, non c alcun modo di immaginare che, ad esempio, dopo il cinque viene il sei. Nel contare da dieci a venti, invece, il nome di ogni nuovo numero in certa misura prevedibile: "undici" deriva da "uno", "dodici" deriva da "due", anche se si dice "diciassette" e non "settedici". Nei nomi dei numeri da dieci a venti presente una certa quantit di informazione, ma in misura minore rispetto ai nomi dei numeri da uno a dieci. Quali altre informazioni sono necessarie per contare fino a cento? I nomi delle decine sono abbastanza prevedibili; si ottengono aggiungendo il suffisso "anta", come settanta, ottanta, novanta. Nonostante alcune irregolarit ("quaranta" e non "quattranta"), imparare a contare da venti a cento ancora pi facile che imparare a contare fino a venti. E per i numeri pi grandi? Le informazioni necessarie non sono molte; dobbiamo conoscere le parole "cento", "mille", "milione", "miliardo". Per numeri ancora pi grandi, se non si vuole ricorrere alle notazioni di cui si parler in seguito, si possono ripetere i nomi conosciuti. Il numero di molecole che si trovano in un litro di acqua, ad esempio, dellordine di dieci milioni di miliardi di miliardi. E noi, fino a che numero sappiamo contare? In linea di principio ognuno di noi, se possiede un minimo di abilit aritmetica, sa contare fino a qualsiasi numero; non esistono altre informazioni che sia necessario apprendere. Le informazioni necessarie per contare da uno ad un miliardo sono esattamente uguali a quelle necessarie per contare da un miliardo a due miliardi; non c' alcuna sorpresa, alcuna informazione nell'apprendere che dopo il numero "un miliardo tremilacentoventi" viene il numero "un miliardo tremilacentoventuno". sempre possibile, dato un numero, trovare il nome di un numero pi grande utilizzando regole note, fino ad arrivare a numeri cos grandi che diventa difficile concepirli.

229

E i calcolatori, invece, fino a che numero sanno contare? Come si visto nel capitoletto Qual il numero di bit migliore, il numero pi grande che un calcolatore pu esprimere molto ben definito. Esistono anche degli artifici per permettere ad un calcolatore di esprimere numeri ancora pi grandi, in particolare con una notazione esponenziale, ma in ogni caso questo numero sempre ben definito. Da questo punto di vista, si pu dire che la mente umana ha ancora in vantaggio decisivo nei confronti dei calcolatori.

230

Le scimmie scrittrici Supponiamo di aver addestrato un milione di scimmie a battere a caso sui tasti di una macchina da scrivere e che lavorino con ardore dieci ore al giorno con un milione di macchine da scrivere di tipi diversi. Che i sorveglianti illetterati raccolgano i fogli anneriti e li rileghino in volumi. Nel giro di un anno questi volumi conterranno la copia esatta dei libri di ogni genere e di ogni lingua conservati nelle biblioteche pi ricche del mondo. Questa citazione del matematico Emile Borel (1871-1956) e risale allinizio del XX secolo. Borel parlava di un milione di scimmie che lavorano per un anno, ma peccava decisamente di ottimismo. Quanti tentativi servono per riuscire a scrivere, ad esempio, una cantica della Divina Commedia, composta da circa centocinquantamila lettere? Per rendere il calcolo pi comprensibile, ci si pu chiederci quante varianti possa avere uno scritto che usi soltanto le lettere a e b ed abbia una lunghezza di tre lettere. Le combinazioni possibili sono evidentemente: aaa aab aba abb baa bab bba bbb Nella prima posizione dello scritto ci pu essere una delle due lettere (e si hanno quindi due possibilit), ma ognuna di queste deve essere moltiplicata per il numero di possibilit relative alla seconda posizione dello scritto (nuovamente due) e il tutto deve essere moltiplicato per il numero di possibilit relative alla terza posizione (altre due). Il risultato complessivo uguale al prodotto di due per due per due, in altri termini uguale a due elevato alla terza potenza.

231

Le lettere che compongono una cantica della Divina Commedia sono circa centocinquantamila, il numero dei caratteri usati nell'opera di circa venticinque, considerando anche lo spazio ed i segni di interpunzione. Il numero di tentativi necessari, immaginando che ogni tentativo dia un risultato diverso, quindi dato da venticinque elevato alla centocinquantamillesima potenza, circa 10 elevato a duecentomila. Questo numero (esprimibile con un 1 seguito da duecentomila zeri) molto pi grande di tutti gli altri numeri che abbiamo finora considerato. Se ogni scimmia scrivesse circa 300 caratteri al minuto, come un eccellente dattilografo, arriverebbe a circa 18.000 caratteri allora e gli servirebbero pi di otto ore per un singolo tentativo (una intera giornata lavorativa, considerando che anche le scimmie hanno bisogno di mangiare e dormire). Un milione di scimmie, quindi, impiegherebbe un anno per effettuare circa 350 milioni di tentativi, e servirebbero tre anni per raggiungere il miliardo. Seguendo le solite regole aritmetiche, per dividere 10 elevato a duecentomila per un miliardo (10 elevato alla nona potenza) sufficiente diminuire di nove il numero di zeri del primo numero: servirebbe quindi un numero di anni uguale a tre per 10 elevato a 199.991 Come ha suggerito qualcuno, Perch usare un milione di scimmie ? I calcolatori sono pi veloci." Effettivamente un solo calcolatore potrebbe scrivere nei suoi files dei libri generati a caso ad una velocit maggiore di un milione di scimmie. Immaginando, per fare un esempio, che riesca a scrivere su un suo disco fisso (qualsiasi memoria avrebbe dimensioni insufficienti) alla velocit di cento tentativi al secondo, e che lavori ventiquattro ore al giorno, la sua produzione giornaliera sarebbe di circa 8 milioni di tentativi. Infatti, in un giorno ci sono 86.400 secondi, come si pu calcolare moltiplicando sessanta secondi per sessanta minuti per ventiquattro ore; moltiplicando 86.400 per 100 si ottiene 8.640.000. Arrotondando a 10 milioni di tentativi, si pu calcolare che un singolo calcolatore impiegherebbe un decimo del tempo necessario al milione di scimmie. Il tempo necessario non cambierebbe di molto: per dividerlo per 10 basta diminuire ulteriormente di uno il numero di zeri, e si ottiene che servirebbe un periodo di tre anni per 10 elevato a 199.990.

232

E se si usassero un milione, oppure un miliardo di calcolatori? Per calcolare il tempo che impiegherebbero, basta diminuire rispettivamente di 6 e di 9 il valore dellesponente, ed ottenere tre per 10 elevato a 199.984 e 199.981. Anche qua, siamo molto lontani da ogni possibile risultato pratico. Questa enorme e impossibile biblioteca avrebbe una caratteristica importante: conterrebbe non solo tutte le opere che siano mai state scritte, ma anche ogni nuova opera che possa essere scritta in futuro. Si pu anche descrivere ogni libro con un solo numero, usando il procedimento gi visto: si pu assegnare ad ogni carattere il suo valore ASCII, composto da due cifre esadecimali, e considerarli tutti assieme come un unico numero. Questo numero descrive completamente il libro. Ci sarebbe modo di ottenerlo a caso? Certo, sarebbe un po come vincere ad una lotteria molto particolare. Se si comprano tutti i biglietti di una lotteria si sicuri di vincere; allo stesso modo, provando tutte le combinazioni di lettere si pu comporre qualsiasi libro. La probabilit di vincere questa curiosa lotteria, per, estremamente bassa, come si pu capire dal numero di anni che servirebbero al milione di scimmie per giungere alla met dei tentativi (e quindi ad una probabilit del 50%): un anno e mezzo per 10 elevato alla 199.991. Anche se unopera darte pu essere descritta completamente da un numero, la sua unicit garantita dalla difficolt di trovare proprio quello che la caratterizza, confuso nel mare dei numeri. Questa difficolt giustifica anche la richiesta di diritti di autore per ci che, in fondo, non altro che un numero. Nello scorso capitolo si detto che inutile preoccuparsi che un codice crittografico sia scoperto con un piccolo numero di tentativi di un attacco a forza bruta; allo stesso modo, la probabilit di comporre unopera darte utilizzando il metodo delle scimmie scrittrici cos piccola che sostanzialmente non esiste.

233

Limportanza di conoscere un numero Una spia in una citt nemica in tempo di guerra pu avere salva la vita se conosce un numero, il numero di telefono di un abitante della citt che sta dalla sua parte. In modo molto pi prosaico, quando si arriva in albergo con una prenotazione effettuata via Internet, solo la conoscenza del codice di prenotazione ci d la sicurezza di trovare una camera. La conoscenza del codice bancomat ci permette di prelevare dei soldi e si potrebbe continuare con molti altri esempi. In tutti questi casi un particolare numero significativo solo per una specifica persona, ma vi sono numeri che hanno unimportanza del tutto generale, come quello che esprime il rapporto tra una circonferenza ed il suo diametro (indicato con il simbolo , pi greco). A rigore non lo si pu conoscere con esattezza, perch un numero irrazionale, composto da un numero infinito di cifre decimali, senza alcuna regolarit. Come tutti i lettori sapranno, le sue prime cifre (in base dieci) sono: 3,141592 .... Sono state calcolate pi di mille miliardi di cifre di pi greco. Ovviamente non sono state scritte tutte: di solito una pagina di un libro contiene circa duemila caratteri, e servirebbero cinquecento milioni di pagine, mezzo milione di libri di mille pagine luno. Tutte queste cifre sono state ottenute con un calcolatore, e non ha senso memorizzarle in altro posto che nella sua memoria. Molti altri numeri hanno significati particolari; la sezione aurea o costante di Fidia, indicata con il simbolo , quel numero per cui vale la relazione: + 1 = e le sue prime cifre in base dieci sono: 1,618033 ...

234

I Greci pensavano che la sezione aurea rappresentasse la proporzione ideale tra parti del corpo come il viso e il torso, o tra gli arti e il corpo intero, e fu usata frequentemente nella pittura e nella scultura. La diagonale di un quadrato con i lati di lunghezza 1 corrisponde ad un altro numero irrazionale con propriet particolari. Applicando il teorema di Pitagora si ottiene che il suo valore uguale alla radice di 2, e cio 1,4142 ... Se si affiancano due rettangoli simili in cui il rapporto tra il lato pi lungo ed il lato pi corto uguale a questo numero, si ottiene un rettangolo con la medesima forma. Questa propriet utilizzata nei fogli di carta che si usano abitualmente; il formato A4 ha un lato di 21 centimetri e laltro di 29,7 centimetri. Se si affiancano due fogli A4 dalla parte del lato pi lungo si ottiene un foglio A3, con un lato di 29,7 centimetri e laltro di 42 centimetri. In entrambi i casi il rapporto tra i due lati corrisponde alla radice di 2.

235

Numeri magici Un numero pu avere molti significati: 5 pere" non possono essere sommate a 5 mele, perch i due numeri si riferiscono ad oggetti diversi. Un numero pu misurare quanti soldi si possiedono, che distanza si deve percorrere, quanto tempo si deve aspettare. Un numero pu indicare un codice, una matricola, lidentificativo di una carta di credito o qualsiasi altra cosa. Quando diciamo 3.14, per, non pensiamo a tre euro e quattordici centesimi, ma alla costante che indica il rapporto tra la circonferenza ed il diametro di un cerchio, il pi greco. Quando diciamo 1984 pensiamo allanno 1984 oppure allopera omonima di George Orwell. Alcuni numeri ricorrono tanto frequentemente in determinate situazioni che restano associati a significati particolari. Lelenco potrebbe continuare a lungo. Per un italiano, un numero di dieci cifre che comincia con 06 viene subito identificato come un numero di telefono della rete di Roma; un numero di 15 cifre che comincia con 3752 fa pensare ad una carta di credito American Express. Questo sistema di identificazione implicita del significato, ovviamente, tuttaltro che sicuro; un prezzo potrebbe essere effettivamente di 3.14 euro. Molto spesso, per, funziona. Il pi delle volte chi indica un numero di questo tipo non si sente in dovere di specificare che cosa vuol dire, perch lo ritiene gi chiaro dal contesto. Questo tipo di indicazione del significato di un numero una forma di compressione, perch permette di risparmiare lo spazio che sarebbe necessario per dare anche questa informazione, e pu funzionare perch i numeri con significati particolari sono una assoluta minoranza del grande mare dei numeri. molto raro che vi siano collisioni di significati, situazioni in cui uno stesso numero pu far pensare a pi cose. Anche per i calcolatori molto importante che sia chiaro il senso della serie di numeri che costituisce un file: potrebbero rappresentare i codici ASCII di un testo oppure un brano di musica o unimmagine. Se non si conosce il significato dei numeri contenuti in un file si rischia di interpretare un testo come se fosse un suono, ottenendo una

236

cacofonia, oppure un brano musicale come se fosse un testo, ricavando una sequenza di lettere incomprensibili. Per interpretare il significato di un file si potrebbe cercare di capire se i numeri che contiene hanno significati impliciti; se il valore della maggior parte dei numeri di un file tra 65 e 90 (i valori ASCII delle lettere maiuscole) o tra 97 e 122 (i valori ASCII delle lettere minuscole) molto probabile che si tratti di un file di testo. Alcuni strumenti (come il comando file del sistema operativo Unix) utilizzano anche questo metodo per capire di che tipo sia il contenuto di un file. Di solito, per, si preferisce fornire una indicazione esplicita. Il metodo pi comune consiste nel codificare nella parte finale del nome di un file il suo tipo, come fa ad esempio il sistema operativo Windows. I file che finiscono con .txt, come lettera.txt sono dei file di testo, i files che finiscono con .mp3 sono dei files di musica che seguono la codifica mp3, i files che finiscono con .exe contengono codice macchina e cos via. In maniera pi elegante, il sistema operativo Unix inserisce lindicazione del significato allinizio del file, nei primi numeri che lo compongono. Un particolare file di sistema, /etc/magic indica che cosa significano i numeri magici allinizio della maggior parte dei files. Nellimmagine della pagina seguente riportato un esempio di file /etc/magic:

237

In ogni riga indicato un particolare tipo di file. Il primo numero indica in che posizione si deve trovare il numero magico; 0 significa che si trova allinizio, >16 significa che si trova a partite dal sedicesimo bit, dopo due bytes, e cos via. Il secondo numero indica la lunghezza del numero magico: short indica che occupa due bytes, long che ne occupa quattro. Il terzo numero, invece, il numero magico vero e proprio.

238

Il codice macchina di tipo DOS, ad esempio, inizia con due bytes con valori esadecimali 0x5a e 0xd4. Il codice macchina Berkeley (dalluniversit di Berkeley in California, in cui fu sviluppata una delle prime versioni di Unix) ha invece un numero magico di quattro bytes il cui valore espresso in ottale (la rappresentazione dei numeri a base otto, in cui una cifra corrisponde a tre bit; per convenzione, come si considera esadecimale un numero che comincia con 0x, si considera ottale un numero che inizia con uno zero). Esplicitando in forma binaria le tre cifre 407 si ottiene: 100 000 111 Ricomponendo questi bit a gruppi di quattro, come nella numerazione esadecimale, si ottiene: 0000 0001 0000 0111 Nel caso di questi eseguibili, quindi, il primo bytes 0, il secondo 0x1, il terzo ancora 0 ed il quarto 0x7. Un file di tipo cpio (che rappresenta un archivio, e cio un file che contiene altri files, in modo da poterli trattare pi comodamente tutti assieme) inizia con due bytes che contengono il numero ottale 070707, e cio: 111 000 111 000 111 Ricomponendoli di nuovo a gruppi di quattro, si ottiene: 0111 0001 1100 0111 che si pu esprimere in esadecimale come 0x71c7. Un archivio cpio pu essere anche di tipo ASCII, nel qual caso il numero magico sempre 070707, ma espresso sotto forma di caratteri ASCII, che corrispondono ai numeri: 48 (0x30) 55 (0x37) 48 (0x30)

239

55 (0x37) 48 (0x30) 55 (0x37) Un file di questo tipo, quindi, inizia con una sequenza di sei bytes che pu essere descritta come: 0x303730373037.

240

I conti tornano Due pi due non soltanto fa quattro, ma fa sempre quattro. Questa osservazione non cos scontata come si potrebbe pensare; il filosofo tedesco Ludwig Wittgenstein (1889-1951) diceva: Immaginiamo che voi tutti abbiate fatto aritmetica soltanto in questa stanza. E immaginiamo che poi andiate nella stanza accanto. Ci non renderebbe legittimo un 2+2=5? La realt che percepiamo coerente; gli oggetti con cui abbiamo a che fare si comportano in maniera prevedibile. Un corpo abbandonato a mezzaria cade esattamente nello stesso modo in cui cadeva ieri, gli elementi chimici si combinano sempre nella stessa maniera, un esperimento di fisica pu essere ripetuto e d sempre lo stesso risultato. La conoscenza scientifica possibile proprio perch il comportamento della realt non cambia. Possiamo costruire un ponte proprio perch le leggi fisiche verificate in innumerevoli esperimenti sono valide anche per il nuovo ponte. Nel mondo dei calcolatori la coerenza della realt particolarmente evidente. Lesecuzione di una transazione bancaria, come ad esempio un versamento, affidata completamente ai calcolatori e richiede milioni di istruzioni aritmetiche e logiche elementari. Nelle banche di tutto il mondo si effettuano ogni giorno centinaia di milioni di transazioni, e vanno tutte a buon fine. Se fallisse una sola istruzione elementare su molti miliardi, lattuale sistema bancario potrebbe chiudere i battenti. Il funzionamento dei calcolatori talmente sicuro che la nostra civilt si potuta affidare completamente alle loro elaborazioni. Per quanto possiamo vedere, i calcolatori non sbagliano mai.

241

La piramide del software Laffidabilit dei calcolatori dipende prima di tutto dalle unit di elaborazione e dalle memorie. Questi dispositivi sono provvisti di controlli di ogni genere, come i bit di parit ed i codici di Hamming. Raggiungere laffidabilit dei dispositivi fisici che compongono i calcolatori (spesso chiamati hardware), per, relativamente semplice; il problema pi serio il buon funzionamento dei programmi, il software. I programmi pi complessi, come quelli che gestiscono il funzionamento di un grosso stabilimento o di una centrale nucleare, richiedono lesecuzione di miliardi di istruzioni elementari. Anche se queste fossero eseguite sempre in modo corretto, basterebbe che il programma che indica quali istruzioni eseguire contenesse un solo errore per non fare funzionare pi niente. Come si riesce a dominare questa impressionante complessit? Il problema pu essere risolto soltanto se lo si affronta a piccoli passi. Il primo passo (come si visto nel primo capitolo) consiste nel creare un programma assemblatore che permette di scrivere un programma utilizzando codici di facile comprensione, come Move o Incr e li trasforma nei numeri che corrispondono alle istruzioni macchina. Il secondo passo la creazione di un compilatore, che permette di scrivere i programmi con istruzioni molto pi potenti. Successivamente si scrivono moduli software sempre pi complessi, raggruppati in livelli; ogni livello sfrutta i moduli forniti dal livello sottostante. Realizzare tutti gli strati di questa piramide incomparabilmente pi agevole che affrontare il problema senza suddividerlo in piccole parti. Anche in questo modo, per, quando si scrive un modulo software le cose non funzionano mai al primo colpo, si deve provare e riprovare, correggere e modificare le istruzioni. Spesso il programma si comporta in maniera incomprensibile e trovare lerrore richiede tempo e fatica. Ad un certo punto, per, le cose cominciano a funzionare e la coerenza della realt riprende il sopravvento.

242

Il lavoro degli altri In tutte le attivit umane ci sono tecniche consolidate che si utilizzano quasi senza pensare a come sia stato difficile ottenerle. Per noi ovvio che un mezzo di locomozione molto pi efficiente se provvisto di ruote, ma nel passato intere civilt non conoscevano questo accorgimento. Nel nostro mondo molto semplice individuare la propria posizione ed orientarsi, grazie alla rete di satelliti che forniscono i segnali GPS, ma anche senza arrivare a questo livello di sofisticazione la conoscenza di un dispositivo semplicissimo, la bussola, permette di orientarsi senza problemi. Una malattia infettiva che faceva stragi, come la polmonite, pu essere guarita rapidamente utilizzando una muffa, la penicillina, e gli altri antibiotici. Per ottenere questi risultati sono serviti innumerevoli tentativi e lunghe prove, ma poi la nuova tecnica diventata di uso comune ed adesso la si usa quasi senza pensare a quanta fatica abbia richiesto. Ci che sembrava difficilissimo diventato apparentemente semplice. Si riutilizza il lavoro degli altri; se hanno fatto tutto come si deve, lo si pu usare come se lo avessimo realizzato noi stessi. Di solito applicare una nuova tecnica costa tempo e fatica e richiede ladattamento di macchine e dispositivi. Nel campo dei calcolatori, invece, il progresso incomparabilmente pi rapido. Un nuovo modulo software non altro che una serie di numeri ed facilissimo riutilizzarlo. Se, ad esempio, si scrive un modulo che permette di ordinare dei record in modo pi efficiente di quanto sia mai stato fatto, per utilizzarlo basta caricare nella memoria di un calcolatore tutte le istruzioni che lo compongono ed impostare nel contatore di programma lindirizzo iniziale. Una immagine od un suono digitalizzati possono essere inseriti in un programma ed utilizzati con la stessa rapidit. La facilit di adottare ogni nuovo sviluppo sicuramente uno dei motivi che hanno permesso ai calcolatori di evolvere cos rapidamente. In questo modo, passo dopo passo, si sono ottenuti gli oggetti pi complessi di tutta la nostra civilt.

243

Indice dei nomi


Adleman; 202; 203 AES; 200; 206; 212 Altavista; 160 American Express; 235 Andreesen; 158 Aol; 160 Arpa; 143 Arpanet; 143; 162 AT&T; 37; 60; 65; 181 Babbage; 180 Bell Laboratories; 60; 65; 88; 181 Berkeley; 85; 238 Berners-Lee; 158 Bletchley Park; 193; 197 Boole; 28 Borel; 230 Borges; 12 Brin; 161 Bush; 161 Castro; 181 Cerf; 143 Cesare; 173; 174; 175; 177; 180 Che Guevara; 181; 215 Chiariglione; 78 Church; 51 Churchill; 193 CNR; 148; 151 cpio; 238 CSELT; 78 Daemen; 200 DES; 198; 200; 206; 212; 214; 216 Diffie; 202 Digital; 65; 140; 145 DNS; 16; 151; 152; 153; 154; 155; 158; 164 DOS; 238 Edison; 7 Electronic Frountier Foundation; 200 Enrico IV; 176 EPC; 15 Eudora; 163 Fibonacci; 20 Fidia; 233 Filippo II; 176 Gates; 149; 169 Gibson; 85 Gilmore; 200 Giulio Cesare; 172; 174 Goedel; 221; 223; 224; 225; 226 Google; 13; 160; 161 GTE CyberTrust; 209 Hamming; 88; 92; 93; 241 Hellmann; 202 Hewlett-Packard; 145 Hilbert; 221 Hoare; 113 Hotmail; 163 html; 157; 158; 160; 217 http; 157; 158; 212; 217 Huffmann; 72 IBM; 2; 37; 145 ICANN; 147; 151; 152; 155; 170 IMAP; 164 Intel; 66 Internet; 16; 142; 143; 144; 145; 147; 150; 151; 156; 157; 158; 160; 162; 163; 166; 170 ITU 161; 80 Kahn; 143 Kasiski; 179; 180; 181; 189 Katz; 85 Kernighan; 60 Knuth; 95

244 Leibniz; 26 Linux; 65 Lycos; 13 macchina Enigma; 183; 185; 187; 188; 189; 193; 195 Mauchly; 109 Mediaset; 15 Metcalfe; 141 Microsoft; 66; 149; 157; 163; 169; 209 milnet; 143 MIT; 15 Moore; 66 Motorola; 54 Msn; 160 Netscape; 157; 158; 163 nsfnet; 143 ONS; 16 Orwell; 235 Page; 161 Patterson; 85 Pitagora; 234 POP3; 164 RAID; 85; 86 Rejewski; 192 RFID; 15; 16 Rijmen; 200 Ritchie; 60; 65 Rivest; 202; 203 Rozicki; 192 RSA; 202; 206; 217; 224 Russell; 225 Scherbius; 183 SecureNet; 209 Shakespeare; 20; 215 Shamir; 202; 203 Shannon; 70; 181 Shell; 110 SMTP; 164; 167; 171 SSL; 212 Stallmann; 65 Svetonio; 173 tcp-ip; 143; 145; 147; 151; 152 Thompson; 65 Tomlinson; 162 Torvalds; 65 Turing; 50; 51; 53; 193 Unix; 65; 236; 238 Van Gogh; 5 VeriSign; 16; 209 Vernam; 181; 215 Vite; 176 Vignre; 177; 178; 179; 181 VMS; 65; 140 Von Neumann; 53 VPN; 213 Watson; 2 Welchmann; 197 Whitehead; 225 Windows; 66; 157; 236 Wittgenstein; 240 world wide web; 156 Yahoo!; 13; 160; 164 Zygalski; 192

245 La rivincita dei computer .............................................................................. 2 Da cinque a cinquecento milioni........................................................... 2 Le immagini nei numeri ........................................................................ 3 La musica nei numeri ............................................................................ 7 Una vita in quattro milioni di dischi ................................................... 10 Il felice disordine del web ................................................................... 12 Un numero per qualsiasi oggetto ........................................................ 15 Come funzionano i calcolatori .................................................................... 17 I numeri intorno a noi ......................................................................... 17 Numeri romani .................................................................................... 18 La scoperta dello zero ......................................................................... 20 La scala esponenziale.......................................................................... 22 Dieci dita............................................................................................. 24 Zero e uno ........................................................................................... 26 Circuiti logici ...................................................................................... 28 Verificare luguaglianza ..................................................................... 32 Il circuito di addizione ........................................................................ 33 Come memorizzare le lettere .............................................................. 37 Bit e bytes ........................................................................................... 39 Conversioni ......................................................................................... 41 Un Kilobyte non mille bytes ............................................................ 43 Come ricordano i calcolatori............................................................... 46 I numeri allopera ....................................................................................... 50 La macchina di Turing ........................................................................ 50 Il modello di Von Neumann ............................................................... 53 Comunicare con lesterno ................................................................... 56 Qual il numero di bit migliore? ........................................................ 58 Linguaggi di programmazione e sistemi operativi .............................. 60 Files e directories ................................................................................ 62 Il software libero ................................................................................. 65 Un calcolatore su ogni scrivania ......................................................... 66 Altre acrobazie ............................................................................................ 67 I due modi per ridurre lo spazio .......................................................... 67 Larte della compressione ................................................................... 69 I codici di Huffmann ........................................................................... 72 La compressione della musica ............................................................ 78 Scegliere la parola giusta .................................................................... 80 Mantenere la parit ............................................................................. 83 Il disco di parit .................................................................................. 85 Liberi dallerrore ................................................................................. 88 Controllare i controllori ...................................................................... 91

246 Limportanza dellordine ............................................................................ 95 Limportanza dellordine .................................................................... 95 Criteri di ordinamento ......................................................................... 97 Il primo algoritmo di ordinamento .................................................... 100 Dodici elementi ................................................................................. 103 Linserzione binaria .......................................................................... 106 Lalgoritmo di Shell .......................................................................... 110 Il quicksort .................................................................................... 113 La ricerca allinterno di un file ......................................................... 115 Indici e liste .............................................................................................. 117 Gli indici ........................................................................................... 117 Un indice per ogni parola.................................................................. 121 Hashing ............................................................................................. 123 Il paradosso dei compleanni ............................................................. 127 Sempre pi veloci ............................................................................. 129 La gestione delle liste ....................................................................... 131 La ricerca allinterno della cache ...................................................... 134 La memoria che non esiste ................................................................ 137 La ragnatela intorno al mondo .................................................................. 141 Lunione fa la forza .......................................................................... 141 La storia di Internet ........................................................................... 143 Quattro miliardi di indirizzi .............................................................. 145 Quante parole per descrivere il mondo? ........................................... 147 La traduzione dei nomi Internet ........................................................ 151 La ragnatela della conoscenza .......................................................... 156 Levoluzione dei motori di ricerca .................................................... 160 La posta elettronica ........................................................................... 162 Le infrastrutture di posta elettronica ................................................. 164 Sommersi dalla spazzatura................................................................ 166 Una proposta contro lo spam ............................................................ 169 Le parole nascoste..................................................................................... 172 La lingua segreta ............................................................................... 172 Il cifrario di Cesare ........................................................................... 173 Laiuto del demonio .......................................................................... 176 Il cifrario di Vignre ....................................................................... 177 Il metodo Kasiski .............................................................................. 179 Il cifrario di Che Guevara ................................................................. 181 La macchina Enigma ..................................................................... 183 Complicazioni ed ingenuit .............................................................. 189 Tre matematici polacchi.................................................................... 192 I crittografi di Bletchley Park ........................................................... 193 DES ed AES ..................................................................................... 198

247 La chiave pubblica ............................................................................ 202 Lalgoritmo di Rivest, Shamir e Adleman ........................................ 203 La chiave di sessione ........................................................................ 206 La firma digitale ............................................................................... 207 Il prezzo della chiave segreta ............................................................ 210 Sicuri su Internet ............................................................................... 212 Quanto sono sicuri i metodi crittografici?......................................... 214 Caccia ai numeri primi ...................................................................... 217 Nel mare dei numeri ................................................................................. 219 Nulla di nuovo sotto il sole? ............................................................. 219 Un numero per ogni formula ............................................................ 221 Ancora i numeri primi ...................................................................... 224 Fino a che numero sai contare?......................................................... 228 Le scimmie scrittrici ......................................................................... 230 Limportanza di conoscere un numero ............................................. 233 Numeri magici .................................................................................. 235 I conti tornano ................................................................................... 240 La piramide del software .................................................................. 241 Il lavoro degli altri ............................................................................ 242 Indice dei nomi ......................................................................................... 243