L' architettura nota come architettura di von Neumann è un modello per un computer che utilizza un'unica struttura di archiviazione per memorizzare sia le istruzioni che i dati richiesti o prodotti dal calcolo. Tali macchine sono anche note come computer con programma registrato . La separazione tra memoria e processore è implicita in questo modello.
Questa architettura è così chiamata in riferimento al matematico John von Neumann che nel giugno 1945 sviluppò come parte del progetto EDVAC la prima descrizione di un computer il cui programma è archiviato nella sua memoria.
Alan Turing, John von Neumann così come John William Mauchly e John Eckert (durante il loro lavoro su ENIAC), hanno utilizzato questo concetto in modo indipendente.
Herman Goldstine (un collega di John von Neumann) fece circolare una descrizione incompiuta, intitolata " Prima bozza di un rapporto sull'EDVAC" basata sul lavoro di Eckert e Mauchly sotto il solo nome di von Neumann.
Il documento è stato letto da dozzine di colleghi di von Neumann in America e in Europa e ha ispirato diverse macchine in costruzione.
L' architettura di von Neumann scompone il computer in quattro parti distinte:
Trattando le istruzioni allo stesso modo dei dati, un computer che ha un programma archiviato in memoria può facilmente modificare le istruzioni. Un motivo importante che ha indotto tale possibilità è stata la necessità per un programma di incrementare o modificare il campo dell'indirizzo delle istruzioni (per creare loop, ad esempio). Questo motivo è diventato meno importante con l'avvento dell'uso dei registri di indice e dell'indirizzamento indiretto come caratteristica standard dei processori .
L'attuale architettura dei computer rende inutile modificare le istruzioni del programma - il suo "codice" - su piccola scala, poiché ciò renderebbe inefficienti le tecniche di gestione della cache e della pipeline nel processore . Questa pratica è quindi obsoleta fino ad oggi. Ovviamente, su una scala più ampia, la capacità di trattare le istruzioni allo stesso modo dei dati è ciò che consente la scrittura di compilatori . Questa è anche una funzionalità sfruttata dai virus quando aggiungono una copia del proprio codice a un programma esistente. Il problema della copia non autorizzata del codice può essere evitato utilizzando un sistema di protezione della memoria e, in particolare, dal gestore della memoria virtuale .