Von Neumann-arkitektur

Ved von Neumann-arkitektur eller Princeton-arkitektur forstås det princip for en computer, at det program, der styrer maskinens handlinger, befinder sig i maskinens lager, ved siden af de data, der skal behandles. Dette kaldes stored program computer. Modsætningen, der anvendtes på de tidligste computere, er at programmet, rækkefølgen af instruktioner, befinder sig på et eksternt medie som f.eks. en hulstrimmel eller består i indstillinger af kontakter og opkoblinger på koblingstavler. Opbevaring af programmet i maskinens lager muliggør en hurtigere afvikling af programmet og gør spring, dvs. ændringer af rækkefølgen af de enkelte instruktioner, betydeligt enklere og hurtigere. Til gengæld kræver det et større lager, noget der i den første lange del af computerens historie var særdeles kostbart. Anvendelse af teknikker som virtuelt lager gør dog, at det ikke er nødvendigt at have hele programmet eller alle data inde i hovedlageret på samme tid.

Selvmodificerende kode
At have programmet liggende i det let modificerbare lager gjorde det muligt at lave selvmodificerende kode, dvs. et program kan ændre sine egne instruktioner. Tidlige computere manglede ofte et indeksregister, så det var en måde at få et program til systematisk at ændre de adresser, der refereredes. I dag anses det for en dårlig ting, da programmerne let bliver uigennemskuelige. Dette udnyttes dog bevidst ved mange malware-programmer.

Historie
Arkitekturen er beskrevet af John von Neumann i 1946 i ”First Draft of a Report on the EDVAC”, men ideen kan føres tilbage til Alan Turing. Tyskeren Konrad Zuse har også beskæftiget sig med ideen.

Maskinens opbygning
Maskinen består af en CPU, der indeholder en aritmetisk-logisk enhed (ALU) med et antal registre til behandling af data, og en kontrolenhed, der har et instruktionsregister med den binære kode for den aktuelle instruktion og et instruktionspegeregister/programtæller (IP), der peger på den adresse i lageret, der indeholder den næste instruktion. Ud over lageret består maskinen af et baggrundslager og enheder til indlæsning og udlæsning af data (og programmer).

Problemer og Harvard-arkitektur

Data og instruktioner overføres via den samme bus (der findes en databus, en adressebus og en kontrolbus med styresignaler), hvilket let giver anledning til ventetid (”von Neumann-flaskehalsen”), når bussen er optaget. Dette er søgt løst i Harvard-arkitekturen, hvor data overføres over én bus, mens instruktioner overføres over en særskilt bus. 
Den første maskine med en von Neumann-arkitektur var Manchester Small-Scale Experimental Machine, også kendt som Manchester Baby, der kørte første gang i 1948.

I dag
I dag benyttes adskilte busser mest mellem selve cpu'en og de forskellige cache-lagre knyttet til cpu'en. Der skelnes altså ikke specielt mellem von Neumann-arkitektur eller Harvard-arkitektur. Ligeledes behandles instruktionerne i en pipeline, dvs. de fortolkes efterhånden, således at maskinen går i gang med at hente de næste instruktioner og de data, de skal benytte, mens maskinen samtidig er ved at afslutte de foregående instruktioner. Der kan også være tale om metoder til at forudse betingede hop til andre steder i programmet og hente instruktioner derfra i stedet.

Kilder og henvisninger
 Kap. 2 i Computer Science – A Second Course Using MODULA-2 USA 1988 / Allen B.  Tucker
 side 14-18 i Elementær datamatik – København 1970 / Søren Lauesen, eksempel på selvmodificerende kode
 Harvard versus von Neumann

Computerarkitektur
Uløste problemer