venerdì 12 maggio 2017

VON NEUMANN E BACH: ARCHITETTURA DEL COMPUTER ED ARTE DELLA FUGA

L'ungherese (poi naturalizzato statunitense) John von Neumann (1903-1957) è stato uno dei matematici più proficui del XX secolo, fornendo decisivi contributi in svariati campi della matematica, ma anche in fisica, in economia e in informatica.
Si dice infatti di lui che fu probabilmente l'ultimo dei matematici ad avere una visione completa di tutta la matematica.
Per farsi un'idea delle capacità mostruose della mente di von Neumann, basta leggere l'aneddoto di cui ho parlato qui.
Ma che c'entra von Neumann con Johann Sebastian Bach (1685-1750), il grandissimo compositore tedesco, noto anche ai non patiti di musica classica grazie alla celebre Aria sulla quarta corda, divenuta sigla del programma Superquark?



Il nonno di von Neumann era un grande appassionato di musica e ai tempi era una delle poche persone a possedere un grammofono.
Nelle famiglie borghesi dell'epoca si era soliti formare, nei limiti delle possibilità, piccole orchestre da camera familiari.
Il piccolo János (nome di von Neumann all'anagrafe) imparò a suonare il violino e, anche se alla fine abbandonò l'intento di una carriera da musicista per sviluppare le sue notevoli doti da matematico, non perse mai la sua passione per la musica.
Una delle opere musicali che suscitò maggiormente l'interesse di von Neumann fu appunto l'Arte della fuga, un insieme di 14 fughe e 4 canoni che Bach compose al fine di esemplificare le tecniche del contrappunto.
Secondo la testimonianza del fratello Nicholas, l'Arte della fuga di Bach fu la fonte di ispirazione che, anni dopo, fece pensare von Neumann alla possibilità che un computer non avesse un programma previo assegnato, spingendolo così verso la realizzazione dell'archittetura dei computer che porta il suo nome.
Ci proponiamo dunque di spiegare in modo semplice la storia e le basi dell'architettura di von Neumann e poi l'Arte della fuga di Bach.
Nel luglio 1943 alla Moore School of Electrical Engineer dell'Università della Pennsylvania, situata a Philadelphia, si incominciò a costruire un computer che avrebbe segnato una vera e propria pietra miliare nella storia della computazione: l'ENIAC (Electronic Numerical Integrator and Computer).
Si trattava di un progetto top secret, il cui nome in codice era PX.
L'ENIAC viene ritenuto da alcuni il primo vero computer della storia, anche se forse il primato andrebbe attribuito al Colossus, attivato verso la metà di febbraio del 1944 e progettato dal matematico Max Newmann, ispiratosi ai lavori del padre dell'informatica, Alan Turing, di cui abbiamo parlato approfonditamente qui.
L'ENIAC costò circa 8.000 dollari e venne finanziato dall'esercito.
Misurava 30 metri di lunghezza e pesava 32 tonnellate.
Funzionava grazie a 17.468 valvole a vuoto che dissipavano così tanto calore che la temperatura della stanza in cui la macchina lavorava spesso e volentieri si innalzava sino a 50 °C.
L'ENIAC era in grado di memorizzare soltanto 20 numeri, ma il suo difetto principale consisteva nel fatto che per cambiare un programma bisognava riconfigurare i suoi circuiti, operazione che poteva durare anche svariati giorni.
Un ulteriore grosso problema del suddetto computer era il fatto che il tempo in cui funzionava correttamente era assai inferiore al tempo in cui era guasto.
Nonostante tutte queste problematiche non di poco conto, l'ENIAC fu utilizzato per 10 anni, compiendo in quel lasso di tempo più calcoli matematici di quelli realizzati fino ad allora nella storia dell'umanità.
E von Neumann?
Il suo contatto con l'ENIAC fu del tutto casuale.
Il matematico statunitense Herman Heine Goldstine (1913-2004) si arruolò nell'esercito all'inizio della Seconda Guerra Mondiale.
Lavorò con il grado di tenente nel BRL, ovvero il laboratorio di ricerca balistica di Aberdeen, nel Maryland.
Da esperto nella preparazione di tavole da tiro si era reso conto dell'impellente necessità di rendere automatici i noiosi e lunghi calcoli attraverso un qualche tipo di calcolatore elettronico.
Non sorprende dunque che costui accettò di fare da intermediario tra la Moore School (a Philadelphia), incaricata della costruzione dell'ENIAC, e Aberdeen.
Nell'estate del 1944, Goldstine incontrò per caso von Neumann nell'atrio della stazione ferroviaria di Aberdeen.
Goldstine non lo conosceva di persona, tuttavia aveva partecipato a diverse sue conferenze e decise perciò di avvicinarlo.
Gli argomenti iniziali della conversazione furono di poca importanza, sino a quando Goldstine non si lasciò sfuggire che stava lavorando alla costruzione di un nuovo computer.
A questo punto l'atteggiamento di von Neumann mutò improvvisamente e, secondo quanto racconta lo stesso Goldstine, gli fece il terzo grado.
Dallo stile delle domande, Golstine capì che aveva di fronte un esperto in quel campo, così decise di invitare von Neumann al centro di ricerche di Moore per metterlo direttamente in contatto con gli ingegneri John Mauchly e Prosper Eckert, coloro che si stavano occupando della progettazione dell'ENIAC.
Di fronte al nuovo computer, von Neumann chiese a Eckert la struttura logica del sistema, una domanda chiave affinché gli ingegneri dell'ENIAC gli aprissero le porte a una collaborazione duratura.
Von Neumann ragionò sulla possibilità di progettare un insieme di istruzioni che fossero un riflesso fedele di tutti i passaggi che si facevano con carta e penna nella risoluzione di un problema e che, a sua volta, tale insieme di istruzioni potesse venir memorizzato nella memoria centrale.
Per consentire che questo insieme di dati potesse entrare in un computer, bisognava dotarlo di una nuova unità, differente da quella dedicata ai calcoli, di modo che da un lato si potessero far entrare indistintamente dati e programmi e dall'altro raccogliere i risultati.
Un'idea questa di von Neumann che anticipò il concetto a noi molto familiare di software.
Pertanto, nel 1945, nel Laboratorio Nazionale di Los Alamos si incominciò a lavorare al progetto di un nuovo computer che avesse dei programmi memorizzati.
L'architettura di von Neumann corrisponde nientemeno che al concetto di programma memorizzato.
Oggi esistono computer con programmi memorizzati, per esempio una calcolatrice tascabile con cui è possibile eseguire una serie di calcoli complessi, ma con cui non si può scrivere un testo.
In un pc, invece, se abbiamo bisogno di un determinato programma che ci consenta di scrivere testi, è sufficiente installarlo e lavorarci sopra.
Ma non è stato sempre così.
Abbiamo infatti già osservato come nei primi computer, ENIAC compreso, cambiare programma significava cambiare la struttura, e per farlo si doveva realizzare uno schizzo con carta e penna per poi cambiare il cablaggio della macchina.
Von Neumann eseguì numerose tipologie di rifacimento del cablaggio al fine di rendere più scorrevoli le operazioni dell'ENIAC, tuttavia era conscio che per quanto ottimizzasse il sistema, avrebbe avuto sempre dei seri limiti.
La geniale ideale di von Neumann fu che i dati del programma, i quali potevano essere espressi in bit come 0 e 1, fossero memorizzati nella memoria insieme agli altri dati.
Ciò permetteva di modificare gli indirizzi di memoria e pure gli stessi programmi durante la loro esecuzione.
Gran parte dei computer moderni si basa proprio sulla suddetta architettura.
5 sono i componenti fondamentali di questa architettura:

1) CPU (o unità di lavoro o processore centrale) a sua volta suddivisa in:

- unità operativa, che comprende l'unità aritmetico-logica (ALU);
- unità di controllo.

2) Memoria;
3) Unità di input:
4) Unità di output;
5) Bus di sistema (un canale che collega tutti i componenti tra loro).

Vediamo brevemente gli aspetti fondamentali di tali componenti, incominciando dalla memoria.