sabato 24 gennaio 2009

L'Architettura di Von Neumann

Il 16 febbraio del 1946 J. Presper Eckert e John Mauchly, due ingegneri della Moore School of Electrical Engineering dell'Università di Pennsylvania presentavano ufficialmente ENIAC (Electronic Numerical Integrator And Computer), il primo computer elettronico della storia. Si trattava di una macchina gigantesca, un ammasso enorme di valvole, condensatori e interruttori da trenta tonnellate di peso. Prendeva così corpo il progetto di dispositivo per il calcolo automatico più ambizioso che si fosse mai visto fino a quel momento, motivato, incoraggiato e finanziato durante la seconda guerra mondiale, per possibili applicazioni belliche (ad esempio calcoli balistici).

Ma ENIAC risultava essere una macchina limitata, soprattutto perchè la sua programmazione avveniva tramite cavi elettrici di collegamento sui pannelli, che dovevano essere ogni volta scollegati e ricollegati, in modo che ogni configurazione consentisse al computer di risolvere un diverso problema. Questa attività era particolarmente onerosa e il programma risultava dipendere molto dalle caratteristiche fisiche della macchina. ENIAC era una macchina costruita per svolgere solo ben determinate operazioni (come le calcolatrici tascabili di oggi), non dava certo l'idea di flessibilità, inoltre il programma era concettualmente e praticamente disgiunto dai dati su cui operava.

ENIAC non era una macchina programmabile nel senso che si intende al giorno d'oggi. E probabilmente non esisteva ancora neppure con sufficiente chiarezza l'idea di macchina programmabile, sicuramente molti di quelli che lavoravano in questo campo non l'avevano ancora maturata. La citazione seguente, di ben 10 anni successiva alla realizzazione di ENIAC, rende bene questo concetto: "Se risultasse che le logiche di base di una macchina progettata per la soluzione numerica di equazioni differenziali coincidono con quelle di una macchina destinata a preparare le fatture di un grande magazzino, penserei che si tratta della più stupefacente coincidenza di tutta la mia vita" (Aiken, 1956).

John Von Neumann entra in contatto con ENIAC subito dopo alcune esperienze con macchine calcolatrici (Herman Goldstine, Howard Aiken) e lo utilizza per alcune applicazioni scientifiche, in particolare per realizzare i primi calcoli metereologici.

Von Neumann è uno dei più grandi scienziati del ventesimo secolo, nella sua carriera si è occupato dei più svariati problemi nei campi più importanti del sapere, tra cui quello della logica matematica. Proprio questa lo portò a partecipare ad uno storico congresso che si tenne a Königsberg nel 1930, in cui il grande logico Kurt Gödel annunciò i risultati preliminari del suo famoso teorema di incompletezza (pubblicato in forma definitiva l'anno seguente). Si tratta di un risultato che ha segnato una svolta nella storia della logica, condizionando ogni ricerca successiva in questo campo. Von Neumann fu l'unico tra gli scienziati presenti in quel congresso a capirne subito fino in fondo la portata. Egli, successivamente a tale episodio, abbandonò definitivamente le ricerche di logica matematica. Il suo interesse per questo tipo di argomenti riemerse solo alcuni anni più tardi e principalmente in ragione del loro rapporto con il calcolo automatico. In questo campo spiccava il lavoro importantissimo di Alan Turing con la sua Macchina Universale (1936), un lavoro peraltro legato in maniera molto stretta a quello già citato di Gödel. Si trattava in breve di uno studio in cui si formalizzava in modo estremamente generale l'attività di calcolo. Il lavoro era di tipo teorico ma Von Neumann si accorse che alcune idee potevano essere direttamente utilizzate per formulare la struttura logica di un computer. E lo fece.

Il 30 giugno 1945, in qualità di consulente del gruppo di lavoro che stava progettando EDVAC (Electronic Discrete Variable Automatic Computer), il successore di ENIAC, John Von Neumann fece circolare una bozza di un centinaio di pagine dal titolo "First Draft of a Report on the EDVAC", in cui forniva per la prima volta la descrizione di quella che sarà da quel momento in poi l'architettura dei calcolatori moderni. A tutt'oggi questo schema di progettazione è noto come "Architettura di Von Neumann" o "Macchina di Von Neumann". A parte i dettagli l'aspetto essenziale di questa architettura sta nel fatto che essa si distingue per la caratteristica di immagazzinare all'interno dell'unità di memoria, sia i dati dei programmi in esecuzione che il codice di questi ultimi. Dati e programmi sono fra loro indistinguibili e vengono memorizzati su un’unica memoria, usando le stesse tecniche di gestione. In questo modo è possibile collegare fra loro più programmi, modificarne agevolmente la struttura ed eventualmente scambiarli fra macchine diverse.

Si tratta di una schematizzazione molto sintetica ma che si è rivelata molto potente. Con essa infatti i computer diventano definitivamente delle Macchine di Turing Universali, rendendo finalmente credibile l'idea che una stessa macchina possa svolgere compiti diversissimi, purchè opportunamente programmata. Anche in questo caso utilizzo una citazione per sottolineare l'importanza che questa struttura ha avuto nella storia dell'informatica e che ha tuttora: "In pratica tutti gli odierni calcolatori, dalle supermacchine da dieci milioni di dollari a quei minuscoli chip che fanno andare i telefoni cellulari, hanno una cosa in comune: sono tutti Macchine di Von Neumann, varianti dell'architettura di base che John Von Neumann, proseguendo il lavoro di Alan Turing, elaborò negli anni quaranta" (TIME, 1999).

Nessun commento: