INDIETRO SU AVANTI

Architettura di Von Neumann

L'architettura di un computer moderno deriva da idee degli anni 1940 di Von Neumann ed altri.

L'idea di base e' che sia i programmi che i dati condividono le stesse locazioni fisiche di memoria. Non vi sono luoghi di storaggio differenti tra le celle di memoria contenenti istruzioni eseguibili e le celle contenenti dati.

Non e' possibile decidere a priori se un byte contenga dati oppure una istruzione destinata al processore, soltanto ispezionandolo. La differenza tra dati e istruzioni e' decidibile soltanto dal contesto.

I programmi sono semplici data stream: solo se il processore carica nel registro Program Counter l'esatto indirizzo d'inizio di un programma, questo puo' venire eseguito. In caso diverso si presentano tre possibilita':

Sperabilmente una delle ultime due evenienze si verifica subito, prima che si verifichi la prima.

Notare che agli albori dei linguaggi assembler ed esadecimali per i microprocessori ve ne erano alcuni composti da un numero molto limitato di istruzioni (p.es. MC 6502), ma combinabili con una grande varieta' di operandi (insieme di istruzioni altamente ortogonale). Questi processori avevano meno rischi di eseguire istruzioni dannose perche' fuori fase.

La decisione di standardizzare l'indirizzo d'inizio di un programma fu presa per la prima volta per il processore Z80. La memoria direttamente indirizzabile da uno Z80 era di 64 Kbyte: il programma veniva caricato direttamente in memoria a indirizzi reali, bassi, e lo spazio dati seguiva direttamente lo spazio programmi fino al limite massimo di memoria disponibile (la Ramtop), che poteva essere anche meno di 64 Kbyte.

La parte iniziale della RAM era riservata a dati riassuntivi di sistema (vettore di interrupt, indirizzi di I/O), quindi il programma eseguibile iniziava a offset 0x100.

Quando piu' tardi si passo ai processori 8086 e superiori, che si portarono dietro il retaggio di una memoria segmentata, gli eseguibili ".COM" del DOS continuarono a venir caricati dall'indirizzo 0x100 di offset del segmento di memoria.

Una conseguenza positiva dell'architettura di Von Neumann e' la facilita' di implementazione di compilatori. Un compilatore genera un file che esso tratta alla stregua di dati, ma che in seguito verra' trattato come programma eseguibile.

Una conseguenza negativa e' la facilita' di omplementazione di virus: quelli che possono sembrare dei semplici dati, se letti in maniera opportuna possono contenere una sequenza di istruzioni malefiche.