# Computerarchitectuur

Met de computerarchitectuur wordt de opbouw van de fundamentele operationele structuur van een computersysteem bedoeld. Een weergave van een computer- of processorarchitectuur bevat de functionele omschrijving van de vereisten, in het bijzonder snelheden en verbindingen, en ontwerptoepassingen van een computer of processor. Sinds 2015 zijn smartwatches ongeveer de kleinste computers omdat een smartwatch over een CPU beschikt waarmee de gebruiker verschillende programma's kan uitvoeren. Grotere computersystemen, zoals mainframes, supercomputers en computerclusters, bestaan uit meerdere computers die in een computernetwerk met elkaar verbonden zijn. De grens tussen computerarchitectuur en netwerkarchitectuur begint te vervagen als het bijvoorbeeld om het onderscheid tussen computers en cloudcomputing of (deels) gedistribueerde databases gaat.

## Systeemarchitectuur

Multikernprocessoren in moderne computersystemen, zoals servers, pc's en laptops, zijn gewoonlijk opgebouwd uit een aantal processorkernen, een GPU en cachegeheugen en controllers, die samen in een SoC zijn ondergebracht. Doorgaans wordt een multikernprocessor in een processorsocket op het moederbord van de computer vastgeklemd. Op het moederbord wordt het werkgeheugen aangebracht en een chipset verzorgt de verbindingen met de randapparatuur. Soms worden in de SoC van een tabletcomputer of een smartphone verschillende soorten CPUs gebruikt.

### Processorarchitectuur

De eerste figuur rechts laat het processchema zien van de verwerking van een instructie door een MIPS RISC-processor. In de figuur daaronder is het halfgeleidermateriaal in een MIPS-R5000-processor, de zogenaamde die, afgebeeld. Het processchema geeft de stappen weer in de verwerking van een instructie door een eenvoudige CPU met een Von Neumann-processorarchitectuur.

#### Instructieverwerking

Een eenvoudige MIPS-processor verwerkt elke instructie in een cyclus waarin vijf stappen onderscheiden kunnen worden:
* de instructie en de gegevens worden tijdens de IF-stap (Instruction Fetch) uit de level1-cache van het cachegeheugen opgehaald en de Program Counter wordt verhoogd,
* de instructie, geheugenadressen en data worden tijdens de ID-stap (Instruction Decode) in het instructieregister en de adres- en dataregisters geplaatst,
* de instructie en de gegevens in de registers worden tijdens de EX-stap (EXecute) verwerkt,
* de resultaten in de registers worden tijdens de MEM-stap (MEMory access) in het cachegeheugen opgeslagen,
** als de instructie helemaal is uitgevoerd dan wordt de volgende instructie uitgevoerd (IF-stap, stap 1),
** als de instructie nog niet helemaal is uitgevoerd, dan volgt de WB-stap, stap 5,
* tijdens de WB-stap (Write Back) wordt opdracht gegeven om de volgende ID-stap, stap 2 in de verwerkingscyclus, uit te voeren.
In het schema is de rol van functionele eenheden, zoals arithmetic logic units (ALU's) en multiplexers (MUX), in het verwerkingsproces met symbolen weergegeven.
De verwerking van elke instructie verloopt volgens een reeks stappen en cycli die begint bij stap 1 en uiteindelijk hoort te eindigen bij stap 4:
waarbij n het aantal cycli is dat doorlopen moet worden om de operatie te voltooien.

#### Verwerkingscycli

De waarde van het aantal verwerkingscycli n van een instructie is afhankelijk van het soort operatie en de waarden van de te verwerken gegevens in de registers. Voor het uitvoeren van een zogenaamde NOP-instructie, dat wil zeggen een "No OPeration"-instructie, is n gelijk aan 0. Tijdens het uitvoeren van een NOP-instructie worden geen gegevens uit het geheugen opgehaald of naar het geheugen weggeschreven, maar de waarde van de programmateller (Program Counter, PC) wordt voor het uitvoeren van een NOP-instructie wel verhoogd.
Hoeveel verwerkingscycli nodig zijn voor het uitvoeren van een instructie hangt af van de instructie, de processorarchitectuur en de aanwezigheid van coprocessoren. Een binaire bits-gewijze logische operatie kan over het algemeen in een enkele cyclus uitgevoerd worden. Voor het uitvoeren van een optelling van twee gehele getallen zijn meerdere cycli nodig. Het uitvoeren van een vermenigvuldiging vraagt om een veelvoud van het aantal verwerkingscycli dat voor een optelling nodig is.

#### Cachegeheugen en werkgeheugen

Sinds de introductie van de Intel 80486 SX en de 80486 DX2/66, met 8 kB cachegeheugen en een cachecontroller in de CPU, werden steeds meer processoren voorzien van een ingebouwd cachegeheugen. Bovendien had de DX2/66 versie een ingebouwde 80487 floating-point coprocessor en een interne klokfrequentie die tweemaal zo hoog was als de 33 MHz klokfrequentie van de systeembus.
Het gebruik van een relatief klein, duur, maar snel, SRAM-cachegeheugen is noodzakelijk omdat de CPU de meeste instructies sneller verwerkt dan ze via de systeembus uitgewisseld kunnen worden tussen de CPU en de grote, goedkope, maar trage DRAM-modules van het werkgeheugen. Het beheer van het cachegeheugen en de datacommunicatie met het werkgeheugen, wordt door speciale microcontrollers verricht die de geheugenhiërarchie van de computer beheren.
Het werkgeheugen bevindt zich in de RAM-modules op het moederbord, terwijl het cachegeheugen en de cachecontrollers sinds het begin van de jaren negentig van de vorige eeuw in de CPU-chip zijn geïntegreerd. In de schema's wordt met de rood gekleurde vakjes het cachegeheugen in de processor bedoeld. Als processoren sneller worden, waardoor het verschil in verwerkingssnelheid tussen CPU, uitgedrukt in MIPS of FLOPS, en werkgeheugen toeneemt, worden er meer levels of lagen cachegeheugen gebruikt. Het aantal lagen cachegeheugen kan tegenwoordig tot drie lagen oplopen, terwijl die lagen steeds groter worden en sneller werken.

### Virtueel geheugen

Als er te weinig werkgeheugen op het moederbord geïnstalleerd is om de actieve de processen en de benodigde gegevens op te slaan, dan kan het virtueel geheugen geactiveerd en gebruikt worden. De VMM van het besturingssysteem kan blokken uit het werkgeheugen uitwisselen tegen blokken uit het virtuele geheugen op een harde schijf. Voor het virtuele geheugen kan een swap-bestand of een speciale swap-partitie gebruikt worden. Meestal wordt tweemaal zoveel virtueel geheugen op een swap-partitie aangemaakt als er werkgeheugen op een moederbord aanwezig is. De microcontroller die de blokken tussen het werkgeheugen en de swap-file of de swap-partitie uitwisselt, heet Direct Memory Access (DMA).
Omdat RAM-modules steeds goedkoper worden, en omdat swappen een computer sterk vertraagt, wordt steeds vaker voor uitbreiding van het werkgeheugen gekozen als het virtuele geheugen veel wordt gebruikt, zonder dat het virtuele geheugen wordt uitgebreid. Als een computer twee of vier RAM-slots heeft, dan kan het werkgeheugen een paar keer uitgebreid worden, bijvoorbeeld tot twee-, vier- of eventueel tot achtmaal de oorspronkelijke hoeveelheid werkgeheugen. Als het virtueel geheugen (VM) gelijk blijft en de hoeveelheid werkgeheugen (RAM) de eerste keer wordt verdubbeld, dan is VM = RAM. Als het werkgeheugen wordt verviervoudigd, dan is VM = RAM / 2.
Tegenwoordig raden steeds meer systeemontwerpers aan om op drukke en kwetsbare servers het werkgeheugen uit te breiden en het beschikbare virtuele geheugen beperkt of zo klein mogelijk te houden, bijvoorbeeld VM = 2 GiB, ongeacht of RAM = 1 GiB, RAM > 2 GiB of RAM > 16 GiB. Omdat het gebruik van virtueel geheugen de prestaties van een computersysteem door thrashing sterk kan verlagen, en omdat conflicten tussen cachemanagers en de DMA het systeem kan laten hangen of laten crashen, overwegen sommige systeemontwikkelaars (begin 2017) zelfs om swap-partities geheel uit het besturingssysteem van sommige servers te verwijderen.

### FPUs, GPUs en parallellisatie

Een floating point unit (FPU) verwerkt instructies voor berekeningen met zwevendekommagetallen. FPUs en vectorprocessoren kunnen de complexe berekeningen met goniometrische functies en arrays in minder cycli uitvoeren dan een floating-point emulator. Een floating-point emulator wordt bijvoorbeeld op een computer met een Intel 80386 of een ARMv7 gebruikt als vervanging van een FPU. Voorbeelden van moderne coprocessors voor zwaar, wetenschappelijk rekenwerk zijn de Xeon Phi coprocessors, zoals de Xeon Phi 7120, met 61 FPUs en 244 threads, en de Xeon Phi 7290F, met 72 FPUs en 288 threads. Deze FPUs kunnen vier threads per processor verwerken. Ze worden in supercomputers toegepast waarmee onder andere weersverwachtingen en klimaatmodellen doorgerekend worden. Omdat deze coprocessors groot zijn en veel energie verbruiken, worden ze op een PCI Express-kaart geplaatst of in een speciale processorsocket geklemd.
Voor een videospel kan een graphics processing unit (GPU) bijvoorbeeld affiene transformaties en vectorafbeeldingen van OpenGL- of WebGL-objecten verwerken en een 3D-computergraphics omgeving renderen. De parallellisatie die door GPU's toegepast wordt vertoont veel overeenkomsten met de parallelle verwerking van gegevens door de vectorprocessoren en transputers, die halverwege de jaren tachtig van de vorige eeuw, voor wetenschappelijke doeleinden ontwikkeld werden. Een bekend voorbeeld van parallellisatie is raytracing met een programma als POV-Ray. Een aantal animaties voor de film Jurassic Park van Steven Spielberg, zijn door Industrial Light & Magic met behulp van een raytracer gemaakt.
Coprocessors voor het uitvoeren van speciale taken, zoals encryptie of biometrische patroonherkenning, kunnen eventueel met een ASIC ontworpen worden.

### Multikernprocessoren

Anno 2017 gebruiken CPUs in servers, desktops en laptops vrijwel uitsluitend de x86-instructieset. Mobiele apparatuur maakt vooral gebruik van de ARM-instructieset omdat RISC-processoren energiezuiniger zijn. In de nabije toekomst zou er verandering in deze situatie kunnen komen omdat AMD hard werkt aan een nieuwe generatie, energiezuinige Opteron A processoren op basis van ARM Cortex A57 kernen.

#### Servers, pc's en laptops

Sinds de introductie van de Intel Sandy Bridge en de AMD Fusion multikernprocessoren zijn de processorkernen, samen met twee of drie lagen cachegeheugen, een GPU en verschillende controllers, in een CPU/SoC of een APU geïntegreerd. De verschillende levels van het cachegeheugen werken op verschillende klokfrequenties, die een veelvoud zijn van de klokfrequentie van de systeembus, die de CPU met de perifere hardware verbindt.
De klokfrequentie van de front-side bus (FSB) ligt anno 2017 voor de meeste processorkernen ergens tussen de 2 en 4,5 GHz, dat is rond de 20 tot 45 keer hoger dan de klokfrequentie van de systeembus. Door de integratie van verschillende processoren en controllers binnen een SoC, kan de IPC tussen de processorkernen, binnen de gemeenschappelijke delen van het cachegeheugen, ook gemakkelijker verlopen.
De processoren kunnen meestal in een LGA-processorsocket op een moederbord vastgeklemd worden. Na Intels introductie van de Platform Controller Hub (PCH) in 2008, en introductie van de A-series en 9-series chipsets door AMD, is de southbridge van de moederborden verdwenen. De nieuwe chipsets verzorgen onder meer de communicatie tussen de multikernprocessor en de PCI Express-, SATA-, DMI- en USB-aansluitingen.

#### Smartphones en tablets

De meeste chips in smartphones, tablets, singleboardcomputers en smartwatches, zijn opgebouwd rond een multikernprocessor met een ARM-architectuur. ARM propageert de big.LITTLE technologie waarin verschillende processorkernen voor verschillende taken op een SoC gecombineerd worden. Door lichte taken aan energiezuinige processoren, en de zwaardere taken aan de krachtigste processoren over te laten, zou volgens de filosofie van ARM energie bespaard kunnen worden. Bekende voorbeelden zijn de Qualcomm Snapdragon-chips die rond een Krait-processorkern, met twee of vier ARMv7-kernen, zijn opgebouwd en die in talloze mobiele apparaten worden toegepast. Een andere populaire ARM-processor is de Broadcom-SoC die door de Raspberry Pi wordt gebruikt.
De NVIDIA Tegra K1 heeft vijf ARMv7 kernen, waarvan een kern een laag vermogen heeft en vier kernen hoge prestaties kunnen leveren. De Tegra X1 heeft een cluster met vier energiezuinige Cortex-A57 en een cluster met vier krachtige Cortex-A58 processoren. MediaTek richt zich met de Helio chips ook op energiebesparing. De X30-SoC heeft tien kernen, waaronder zes Cortex-A72 kernen, waarvan vier op 2,5 en twee op 2,0 GHz draaien, en vier Cortex-A53 kernen, waarvan twee op 1,5 en twee op 1,0 GHz draaien. De Samsung Exynos 7 Octa en Exynos 8 Octa zijn met een vergelijkbare filosofie ontworpen. De Exynos 7 Octa heeft vier Cortex-53 en vier Cortex-A57 kernen die respectievelijk op maximaal 1,3 en 1,9 GHz draaien.

## Cloudcomputing en netwerkarchitectuur

In hedendaagse toepassingen worden vaak meerdere CPUs met grotere functionele eenheden, zoals FPUs, een GPU, DMA en een USB-hub, samen op een system-on-a-chip of SoC ondergebracht. Computerarchitectuur kan in een breder verband ook gedefinieerd worden als de wetenschap en de kunst van het selecteren en verbinden van hardware-onderdelen om computers te bouwen die voldoen aan eisen van functionaliteit, prestatie en kostprijs. De term wordt bijvoorbeeld gebruikt voor:
* het ontwerp van de CPU, de instructieset en de adressering op de kleinste schaal,
* een SoC die toegepast kan worden in embedded systems, smartphones, tabletcomputers en toepassingen voor mobiel internet,
* een moederbord met een videokaart en de aansluitmogelijkheden voor randapparatuur van desktopcomputers en gaming computers,
* hardware-ontwerp op een bredere schaal, zoals in het geval van mainframes, supercomputers en computerclusters.
De verzameling machine-eigenschappen moeten ontwikkelaars van besturingssystemen en toepassingen begrijpen om de computer te kunnen programmeren.
Computerarchitectuur wordt als vak op alle informaticascholen behandeld.