# Von Neumann-architectuur

De Von Neumann-architectuur (ook wel bekend als het Von Neumann-model of het Princeton-architectuur) is een computerarchitectuur, die gebaseerd is op wat in 1945 door de wis- en natuurkundige John von Neumann en anderen werd beschreven in First Draft of a Report on the EDVAC. Dit document beschrijft een ontwerparchitectuur voor een elektronische digitale computer, waar de delen bestaan uit een centrale verwerkingseenheid (CPU), die op zijn beurt uit een rekenkundig-logische eenheid (ALU) en processorregisters bestaat, een besturingseenheid (Control Unit), bestaande uit een instructieregister en programmateller, een computergeheugen (Memory Unit) om zowel data als de instructiesets op te slaan en ten slotte externe massaopslag en input en output-mechanismen (Input en Output Devices).
In de loop der tijd is de betekenis van een Von Neumann-architectuur geëvolueerd tot elke stored program-computer waarin het ophalen van een instructie en een bewerking op de data niet op hetzelfde moment kunnen plaatsvinden, dit omdat zij een gezamenlijke bus delen. Dit wordt wel aangeduid als de Von Neumann-flessenhals en is vaak een beperkende factor in de prestaties van een computersysteem.

## Eenvoudig uitgelegd

In de door Von Neumann ontworpen computer staat de processor (CPU) centraal. De CPU communiceert met het geheugen. Externe invoer en uitvoer stuurt de CPU naar de randapparatuur.
       GEHEUGEN ↔ CPU ↔ RANDAPPARATUUR
De cpu haalt stap voor stap zijn instructies uit het geheugen. De werking van de cpu is gebaseerd op het Turingprincipe, waarbij instructies een voor een opgehaald en uitgevoerd worden. Ook kan de cpu het geheugen benutten voor (tijdelijke) opslag van gegevens. Dit wordt wel de Von Neumann-cyclus genoemd.

## Geschiedenis

De vroegste rekenmachines hadden vaste programma's. Sommige zeer eenvoudige computers maken nog steeds gebruik van zo’n ontwerp, ofwel vanwege de eenvoud ofwel voor trainingsdoeleinden. Een rekenmachine maakt bijvoorbeeld in principe gebruik van een vaste-programma computer. Men kan er weliswaar op rekenen, maar een rekenmachine kan niet als tekstverwerker of gamingconsole worden gebruikt. Het veranderen van een programma op een vaste-programma machine vereist nieuwe bedrading en herstructurering of herinrichten van de machine. De vroegste computers werden niet zozeer "geprogrammeerd" als wel "ontworpen". Het "herprogrammeren" was, wanneer het überhaupt al mogelijk was, een moeizaam proces, te beginnen met stroomschema’s en notities op papier, gevolgd door gedetailleerde technische ontwerpen, en dan het vaak moeizame proces van het fysiek opnieuw bedraden en opbouwen van de machine. Het kon op de ENIAC wel drie weken duren om een nieuw programma eerst in te richten en het dan werkend te krijgen.
Dit veranderde met het voorstel van de stored-programma. Een stored-programma computer bevat in het ontwerp een instructieset en kan in het geheugen een verzameling van instructies (een programma) opslaan dat de computatie detailleert.
Een stored-program ontwerp staat ook zelfmodificerende code toe. Één vroege motivatie voor een dergelijke faciliteit was de behoefte aan een programma om het adresgedeelte van de instructies uit te breiden of anderszins te wijzigen, wat in eerdere ontwerpen handmatig moest gebeuren. Dit werd minder belangrijk toen indexregisters en indirecte adressering gebruikelijke features in de machine-architectuur werden. Een ander gebruik was om vaak gebruikte data in te bedden in de instructiestroom door gebruik te maken van onmiddellijke adressering. Zelfmodificerende code is grotendeels uit de gratie geraakt, aangezien het meestal moeilijk te begrijpen en te debuggen is, maar ook omdat het onder moderne processorpipelining en cachingschema’s inefficiënt is.
Op grote schaal is de mogelijkheid om instructies als data te behandelen dat wat assemblers, compilers, linkers, laders en andere geautomatiseerde programmeertools mogelijk maakt. Men kan "programma's schrijven die programma's schrijven" Op een kleinere schaal, werden repetitieve I/O-intensieve operaties zoals de BITBLT-beeldmanipulatie primitieve van pixel en vertex shaders in de moderne 3D-computergraphics, als te inefficiënt beschouwd om zonder maatwerk-hardware te kunnen draaien. Deze operaties konden echter op universele processoren met "on the fly compilatie" ("just-in-time compilatie")-technologie worden versneld, bijvoorbeeld door code-genererende programma’s - een vorm van zelf-modificerende code die populair is gebleven.
Er zitten ook nadelen aan het ontwerp van Von Neumann. Afgezien van de Von Neumann-flessenhals, zoals hierboven is beschreven, kunnen programmawijzigingen, hetzij per ongeluk of hetzij per fout ontwerp heel schadelijk zijn. In een aantal eenvoudige stored-programma computerontwerpen, kan een slecht werkend programma zichzelf, andere programma's of zelfs het besturingssysteem beschadigen, wat tot een computercrash kan leiden. Geheugenbescherming en andere vormen van toegangscontrole kunnen meestal tegen zowel accidentele als ook kwaadwillige programmamodificaties beschermen.

## Ontwikkeling van het stored-programma concept

In 1944 realiseerde Von Neumann zijn ideeën door de bouw van de IAS-computer. Hoewel elektrische calculators voor die tijd bestonden, kan het Von Neumann model als revolutionair worden gezien. Von Neumann wordt dan ook beschouwd als de grondlegger van de huidige computerarchitectuur, maar de vraag is of dit terecht is. In 1936 deed Konrad Zuse namelijk al een patentaanvraag op het principe van het stap voor stap ophalen van de programma-instructies uit het werkgeheugen.$^{[1]}$ Duitsland verloor echter de Tweede Wereldoorlog, waardoor Zuse vluchtte en in vergetelheid raakte, zijn werk was in de Verenigde Staten niet bekend en dus ook niet bij John von Neumann.

## Von Neumann-architectuur versus Harvard-architectuur

Alle moderne computers voor algemeen gebruik werken volgens de Von Neumann-architectuur. Embedded computers daarentegen zijn vaak opgezet met een Harvard-architectuur, waarin het programma en de gegevens van elkaar zijn gescheiden.

## Uitvoer en randapparaten

Uitvoer gaat naar een van de randapparaten. Randapparaten zijn bijvoorbeeld:
* een ponskaartlezer
* een printer
* een magneetband
* een magneetschijf
* een toetsenbord
* een beeldscherm
* een optische schijf.

## Voetnoten

* 1 2 John von Neumann, First Draft of a Report on the EDVAC, 1945, zie hier
* ↑ Markgraf, Joey D., The Von Neumann bottleneck, 2007
* ↑ Copeland, 2006, blz. 104
* ↑ MFTL (My Favorite Toy Language) entry Jargon File 4.4.7..

## Externe link

* Vergelijking tussen Von Neumann-architectuur en de architectuur van Konrad Zuse door zijn zoon