Von Neuman machine

advertisement
Von Neumann machine (theoretisch computer model)
Als we even terug kijken naar de eerste computers, dan hadden
die vaste programma’s. Deze waren moeilijk aan te passen.
Wilde men die aanpassen, dan kwam dat er op neer dat de
computer zelf moest worden aangepast (als dat al mogelijk was
voor wat gewenst was).
Stel je maar eens voor dat je ineens een spelletje pac-man zou
willen spelen op je gewone zakrekenmachine.
In een volgende generatie computers (EDVAC, ENIAC en later)
ging men werken met computers met een opgeslagen
programma.
Een theoretisch model hiervoor is het Von Neumann
architectuur model.
In dit model is de scheiding tussen opslag en de processing unit
eigenlijk impliciet.
Door het maken van een instructieset architectuur en het
voorstellen van een berekening als een serie instructies (een
programma), werden deze computers een pak flexibeler.
Door: Steven Ophalvens
Dit soort computers noemt men daarom ook wel eens
computers met een instructieset architectuur.
Een instructieset is het deel van de computer architectuur dat
verbonden is aan programmeren.
Dit houdt ook het volgende in:






Registers
Datatypen eigen aan de computer
Instructies
Addresseer modes
Geheugen architectuur
Interrupt en exception behandeling (wat
moet er gebeuren met een
fout/uitzondering?)
o "0xff" of “0x00”
 external I/O
Een veelgebruikte instructieset is de x86 instructieset. Dit is de
instructieset die je in de meeste PC’s zal terugvinden, maar is
zeker niet de enige instructieset:


















Alpha AXP (DEC Alpha)
ARM (Acorn RISC Machine) (Advanced RISC Machine now ARM Ltd)
IA-64 (Itanium)
MIPS
Motorola 68k
PA-RISC (HP Precision Architecture)
IBM 700/7000 series
IBM POWER
PowerPC
SPARC
SuperH
System/360
Tricore (Infineon)
Transputer (STMicroelectronics)
UNIVAC 1100/2200 series
VAX (Digital Equipment Corporation)
x86 (IA-32, Pentium, Athlon) (AMD64, EM64T)
EISC (AE32K)
Deze list trouwens niet volledig! Oude architectuur kan verlaten
worden en nieuwe worden vrij regelmatig uitgevonden.
Door: Steven Ophalvens
Wel moet een onderscheid gemaakt worden tussen de
microarchitectuur en de instructieset architectuur. De
microarchitectuur is de set van processor design technieken die
gebruikt wordt om de instructieset architectuur de
implementeren.
Computers met een radicaal verschillende microarchitectuur
kunnen toch dezelfde instructieset architectuur delen.
De Intel Pentium en de AMD Athlon implementeerden beide
bijna identiek dezelfde versie van de x86 instructieset, maar
gebruikten daarvoor wel heel verschillende interne ontwerpen
voor.
Terug over de Von Neumann architectuur: de mogelijkheid om
instructies als data te behandelen, maakte programma’s als
assemblers, compilers en andere geautomatiseerde
programmeer tools mogelijk.
Het is mogelijk om “programma’s te schrijven met andere
programma’s”.
Bij die eerste computers moest je eerst je computer aanpassen.
Er zijn wel een aantal nadelen aan het Von Neumann ontwerp :
dat programma’s andere programma’s kunnen schrijven of
wijzigen, houdt ook in dat die wijzigingen heel schadelijk
kunnen zijn. Een programma dat (al dan niet onbedoeld)
zichzelf, andere programma’s of zelfs het operating systeem
aanpast, kan mogelijk leiden tot een crash. Een buffer overflow
is daar een voorbeeld van.
Geheugen beveiliging en andere vormen van toegangscontrole
kunnen helpen om te beschermen tegen zowel opzettelijke als
onbedoelde aanpassing van programma code. Zo zul je bvb in
Windows 2000 een pak minder een crash meemaken waardoor
heel je systeem vastloopt dan met Windows ME, waar een
dergelijke bescherming nog niet voldoende was
geïmplementeerd.
Door: Steven Ophalvens
De Von Neumann flessenhals (bottleneck)
De scheiding tussen de CPU en het geheugen is wat ook wel is
gekend als de von Neumann bottleneck.
Het debiet (data transfer rate) waarmee gegevens tussen de
processor en het geheugen wordt verplaatst is vrij klein in
vergelijking met de hoeveelheid geheugen. In moderne
machines is dat debiet ook heel klein in vergelijking met de
snelheid van de processor. In sommige omstandigheden (waar
de processor grote hoeveelheden gegevens minimaal moet
verwerken), kan dit een grote belemmering zijn van de
algemene effectiviteit van de verwerking: de CPU moet dan
eigenlijk continue wachten op vitale data die uit het geheugen
moet worden overgezet.
Om dit probleem wat op te lossen of te verlichten, wordt er een
soort cache geïmplementeerd. Deze cache is een kopie van een
verzameling van data die elders is opgeslagen, of eerder is
berekend door de processor. Dit cache geheugen is veel sneller
en staat ook veel dichter bij de processor.
Eens data in het cache geheugen zit, dan kan die data gebruikt
worden in plaats van data uit het geheugen te halen of zelfs te
gaan herbereken. Hierdoor ligt de gemiddelde toegangstijd een
stuk lager.
Het cache geheugen is wel een tijdelijk geheugen. Het is ook
een veel kleiner geheugen dan het veel grotere voornaamste
geheugen (RAM).
Trouwens, het principe van een cache komen we ook nog op
andere plaatsen tegen: ook de harde schijf en bijvoorbeeld je
webbrowser maken gebruik van een cache. In het geval van de
harde schijf noemen we dit een disk buffer, disk cache of cache
buffer.
Een ander voorbeeld van een mechanisme om de von Neumann
bottleneck aan te pakken, is het gebruik maken van “branch
prediction” algoritmen. In computer architectuur is een branch
Door: Steven Ophalvens
predictor (een ‘tak voorspeller’) een onderdeel van de processor
die beslist of een bepaalde conditionele tak in een instructie
stroom mogelijk gekozen zal worden of niet. Dit noemen we
“branch prediction”. In huidige moderne computers hebben die
branch predictors een cruciale rol om hoge performantie te
halen. Ze staan processors toe om instructies te halen en uit te
voeren, nog voor een bepaalde tak/branch is uitgevoerd.
Bijna alle pipelined processors hebben nu branch prediction,
omdat ze moeten raden wat het adres is van de volgende
instructie die ze moeten halen, nog voor de huidige instructie
verwerkt is.
Het moderne functionele programmeren en het
objectgeoriënteerde programmeren zijn gelukkig wel een pak
minder georiënteerd op het heen-en-weer duwen van massieve
aantallen getallen of woorden dan vroegere talen zoals Fortran.
Maar intern is dat nog altijd waar computers zich het meeste
met bezig houden.
Door: Steven Ophalvens
Download