◷ Storia dell'informatica

Architettura di von Neumann: l'idea del programma in memoria

Il First Draft del 1945, il Manchester Baby del 1948 e l'EDSAC: come nacque il computer a programma memorizzato e che cos'è il collo di bottiglia.

Quasi tutti i computer che usiamo, dal telefono al server, condividono un'organizzazione di base: una memoria che contiene sia i dati sia le istruzioni, e un processore che preleva le istruzioni una dopo l'altra e le esegue. Questa organizzazione è chiamata architettura di von Neumann. Il nome è in parte ingiusto, come vedremo, ma l'idea che descrive è il vero atto di nascita del computer moderno.

Il problema lasciato aperto da ENIAC

ENIAC era velocissimo nel calcolo, ma per cambiare problema bisognava ricablarlo. Già durante la sua costruzione, Eckert, Mauchly e i loro collaboratori discutevano di una macchina successiva, chiamata EDVAC, che avrebbe superato questo limite conservando le istruzioni nella stessa memoria dei numeri.

Nel 1944 il matematico John von Neumann, consulente per diversi progetti militari, venne a conoscenza del lavoro su ENIAC e iniziò a partecipare alle discussioni sul nuovo progetto.

Il First Draft del 1945

Nel giugno 1945 von Neumann scrisse un documento intitolato First Draft of a Report on the EDVAC. Era una descrizione logica, non ingegneristica, della macchina: ne definiva le parti e il loro funzionamento senza entrare nei dettagli dei circuiti.

Il collaboratore Herman Goldstine fece circolare il documento con il solo nome di von Neumann come autore. Il testo ebbe un'enorme diffusione e divenne il riferimento per i progettisti di computer in tutto il mondo. Eckert e Mauchly ritennero che le idee fossero in gran parte frutto del lavoro collettivo e che la loro attribuzione fosse stata oscurata. La circolazione pubblica del documento ebbe anche conseguenze sui brevetti, perché rese di dominio pubblico concetti che avrebbero potuto essere brevettati. La questione dell'attribuzione è discussa ancora oggi dagli storici.

Le parti del computer

Il First Draft descriveva una macchina composta da:

  • un'unità aritmetica, che esegue le operazioni;
  • un'unità di controllo, che interpreta le istruzioni e coordina le altre parti;
  • una memoria, che conserva sia i numeri sia le istruzioni, codificati nello stesso modo;
  • dispositivi di ingresso e uscita, per comunicare con l'esterno.

Il documento proponeva inoltre di usare il sistema binario e di eseguire le operazioni una alla volta, in sequenza, invece che in parallelo come in ENIAC. Era una scelta di semplicità.

Il ciclo fondamentale

Il funzionamento si riduce a un ciclo che ogni processore ripete miliardi di volte al secondo:

ripeti:
    preleva l'istruzione all'indirizzo indicato dal contatore di programma
    decodifica l'istruzione
    esegui l'operazione, leggendo o scrivendo in memoria se necessario
    aggiorna il contatore di programma

Poiché le istruzioni stanno in memoria come i dati, un'istruzione di salto può cambiare il valore del contatore di programma e quindi il flusso di esecuzione. Inoltre un programma può leggere e scrivere altri programmi: è ciò che permette l'esistenza di compilatori, sistemi operativi e caricatori.

Le prime macchine reali

Il primo computer a eseguire un programma memorizzato non fu EDVAC, che fu completato in ritardo, ma una piccola macchina sperimentale costruita a Manchester.

Il Manchester Baby

Il 21 giugno 1948 la Small-Scale Experimental Machine, soprannominata «Baby», eseguì il suo primo programma. Era stata costruita da Frederic Williams, Tom Kilburn e Geoff Tootill soprattutto per collaudare un nuovo tipo di memoria basato su tubi a raggi catodici, il tubo di Williams. Il primo programma cercava il massimo divisore proprio di un numero, provando le divisioni con sottrazioni successive. Era un compito banale, ma dimostrava che l'architettura funzionava.

L'EDSAC

Nel maggio 1949, a Cambridge, il gruppo di Maurice Wilkes mise in funzione l'EDSAC, un computer a programma memorizzato progettato per essere usato regolarmente da scienziati per calcoli reali. Wilkes e i suoi collaboratori svilupparono anche una delle prime librerie di sottoprogrammi riutilizzabili, un'idea che è alla base della programmazione moderna.

Il collo di bottiglia

L'architettura di von Neumann ha un limite strutturale. Processore e memoria sono collegati da un unico canale, attraverso il quale passano sia le istruzioni sia i dati. Se il processore è molto più veloce della memoria, passa gran parte del tempo ad aspettare.

L'espressione «collo di bottiglia di von Neumann» fu resa celebre da John Backus nella conferenza per il premio Turing del 1977, nella quale criticava anche lo stile di programmazione che questa architettura induce.

Come lo si aggira oggi

I processori moderni usano diverse tecniche per attenuare il problema:

Tecnica Idea
Cache Copie veloci dei dati usati più spesso, vicino al processore
Cache separate per istruzioni e dati Due canali distinti nei livelli più vicini al processore
Prefetch Caricamento anticipato dei dati che probabilmente serviranno
Esecuzione fuori ordine Lavorare su altre istruzioni mentre si attende la memoria

La separazione delle cache richiama la cosiddetta architettura Harvard, dal nome del calcolatore Harvard Mark I, che conservava istruzioni e dati in supporti distinti. Molti processori attuali sono quindi un ibrido: von Neumann nella memoria principale, Harvard nelle cache di primo livello.

In sintesi

  • Il First Draft del 1945, firmato solo da von Neumann, descrisse un computer con istruzioni e dati nella stessa memoria; l'attribuzione delle idee è tuttora discussa.
  • Il Manchester Baby eseguì il primo programma memorizzato il 21 giugno 1948.
  • L'EDSAC di Maurice Wilkes, operativo dal 1949, fu tra i primi computer di questo tipo in servizio regolare.
  • Il canale unico tra processore e memoria crea il «collo di bottiglia», attenuato oggi con cache e altre tecniche.
MM
Marco Marzaduri

Marco Marzaduri si occupa di cybersecurity, informatica forense e sviluppo web. Laureato in informatica e in psicologia, unisce l'analisi tecnica alla comprensione del fattore umano.

Leggi anche