# Computersystemen/Processor
## Doelstellingen

Onderstaande doelstellingen komen in meer of mindere mate aan bod. De grijze doelstellingen komen hier niet aan bod. Dat zijn bv. praktijkoefeningen die aansluiten bij deze theorie, maar die in dit Wikibook niet behandeld worden. Of bv. theorie die in een ander hoofdstuk wordt behandeld.
Uit het leerplan van Applicatie- en Databeheer, een deel van leerplandoel 23:
* LPD 23: De leerlingen lichten de opbouw en werking van een computersysteem met zijn basiscomponenten en optionele componenten toe.
** Aansluitingen en connectoren
** Functie van controller en driver
* Lexicon. De basiscomponenten van een computersysteem zijn: moederbord, processor, intern geheugen (werkgeheugen, cache geheugen, systeemgeheugen, CMOS), koeling, voeding, grafische kaart, klok.
* Lexicon. De optionele componenten van een computersysteem zijn hardwarecomponenten die dienen voor invoer, uitvoer of opslag
* Wenk. Enkel de gangbare actuele basiscomponenten en optionele componenten van een computersysteem worden besproken. Je kan ook sensoren als mogelijk invoerapparaat voor een smartphone behandelen.
Uit het leerplan Toegepaste Informatica van de richting Informaticabeheer:
* 1.2.3 De belangrijkste componenten van een processor toelichten en hun samenhang schematisch weergeven, onder meer stuurorgaan, rekenorgaan, enkele registers, klok, cachegeheugen.
* 1.2.4 De belangrijkste stappen onder meer halen, interpreteren en uitvoeren, van de verwerking van eenvoudige instructies beschrijven en de functie van de klok daarbij toelichten.
* 1.4.1 Van een computer de systeemspecificaties vaststellen, onder meer type processor, capaciteit van opslagmedia en intern geheugen, aangesloten componenten en uitbreidingsmogelijkheden.
* 1.4.2 Verschillende actuele processoren en combinaties toelichten en deze vergelijken op basis van de performantie en het toepassingsgebied.
* 1.5.1 De vereiste voorzorgsmaatregelen bij de manipulatie van computercomponenten toelichten en toepassen.
* 1.5.2 Bij de installatie van nieuwe componenten, rekening houden met compatibiliteit, standaardisering en bedrijfszekerheid.
* 1.5.3 Verschillende componenten fysisch aansluiten op of in een computer, configureren binnen het besturingssysteem, de werking controleren en zo nodig bijsturen, bijvoorbeeld intern geheugen, opslagmedia, uitbreidingskaart.

## Definitie

De processor, ook bekend als CPU (Engels: central processing unit), is de hardware in een computer die de instructies van een computerprogramma uitvoert. De processor bepaalt voor een groot deel de snelheid van het volledige systeem. Natuurlijk zal bij een snelle processor met een traag opslagmedium, deze laatste de snelheid voor het volledige systeem negatief beïnvloeden.
Er zijn verschillende soorten processoren:
* Bij een desktop, laptop en server gaat het om socketprocessoren. Zo'n processor kan je dan loshalen van de socket op het moederbord (zie verder).
* Bij tablets en smartphone is het vaak SoC (System on a chip): dan heb je bv. CPU, GPU en geheugen op één enkele chip, "vastgesoldeerd" aan een soort van moederbord. Ook bij andere embedded toepassingen wordt dit gebruikt.
* Bij het gebruik van de term microcontroller heeft men het vaak over een minder krachtige SoC, bv. de microcontroller ATmega328P op het board van Arduino UNO. Dit is voor embedded toepassingen die minder geheugen of geen GPU nodig hebben.

## Plaatsing

Bij een moederbord is er niet één universele processoraansluiting (zoals bv. bij USB het geval is). Zo werken bv. Intel en AMD al met verschillende sockets, maar ook binnen Intel en AMD zijn er verschillende sockets in gebruik. Op één socket passen wel meerdere families van processoren. Bij de keuze van een processor lees je best ook altijd de handleiding en bekijk je de specificaties van je moederbord. Zo kan je weten of de processor wel optimaal kan samenwerken met je moederbord.
| Socket | Familie | Processor |
| AM3-socket | AMD Phenom II | |
| AM3-socket | AMD Athlon II | |
| AM3-socket | AMD Sempron | Regor Sargas |
| LGA 1155=Socket H2 | Intel Sandy Bridge | Core i5 2550K Core i7 3930K |
| LGA 1155=Socket H2 | Intel Ivy Bridge | |
Voor het verbinden van de processor met het moederbord, wordt bijna altijd een CPU socket gebruikt, waarbij ZIF (zero insertion force) wordt gebruikt, waardoor je heel weinig kracht moet uitoefenen om de processor te plaatsen:
* Zet de hendel omhoog.
* Bekijk goed de onderkant van de processor en de socket, zodat je deze juist plaatst en niet beschadigt.
* Plaats de processor gelijkmatig in de socket en dus niet eerst de ene kant en dan pas de andere kant. Je hoeft hiervoor amper kracht uit te oefenen.
* Als je merkt dat hij goed vlak zit, kan je de hendel naar beneden halen om deze te plaatsen.
* Vergeet vanzelfsprekend heatsink en ventilator niet aan te sluiten!

## Componenten

Als de grootte van de processor vergeleken wordt met wat hij allemaal kan, dan is dit een knap staaltje techniek! Bovendien is de eigenlijke microchip (Engels: die) nog een pak kleiner: er is een omhulling nodig om de microchip hanteerbaar te maken. In de processor vind je onderstaande componenten terug.

### ALU (rekenorgaan)

De Arithmetic logic unit is het centrale onderdeel van de processor van een computer dat o.a. de rekenkundige (arithmetic: +, -, *, /,...) en logische (logic: AND, NOT, OR, XOR) bewerkingen uitvoert. Met deze eenvoudige basisbewerkingen kunnen andere complexe bewerkingen worden uitgevoerd.

### Controle unit (stuurorgaan)

De CU of controle unit is het controlecentrum van de CPU. Zo vertelt de CU hoe het RAM-geheugen en andere onderdelen moeten reageren op instructies van een programma.

### Registers

De processor is niet bekend voor het opslaan van gegevens: daarvoor gebruiken we bv. RAM-geheugen, harde schijven of SSDs. Het probleem is echter dat zelfs het RAM-geheugen veel te traag is voor de processor. Dus heeft men besloten om heel snel geheugen rechtstreeks op de processor te plaatsen: het snelste geheugen is registergeheugen. Omwille van de kostprijs en de beperkte oppervlakte is dit geheugen echter ook klein.
Er zijn verschillende soorten registers:
* Werkregisters: dit zijn registers met een algemeen doel, bv. voor het bewaren van (tussen)resultaten.
* Instructieregister: niet alleen data, maar ook instructies zijn belangrijk, anders kan de processor niets doen. De huidige uit te voeren instructie wordt hierin bewaard.
* Adresregister (program counter): bevat het (RAM-geheugen)adres van de eerst volgende uit te voeren instructie. Deze instructie moet dan nl. worden opgehaald, zodat deze in het instructieregister terecht kan komen. Dit adresregister houdt dus bij hoe ver het programma al gevorderd is.
* Vlagregister: in dit register kunnen verschillende zaken worden bijgehouden, bv.:
** De zero-vlag geeft aan of het resultaat van een aftrekking 0 was of dat twee elementen gelijk waren.
** De sign-vlag wordt gezet bij een negatief getal.

### Caches

In het hoofdstuk "Basiskennis informatica" lees je dat als er tussen twee samenwerkende onderdelen een snelheidsverschil is, de uiteindelijke snelheid wordt bepaald door de snelheid van de traagste component. Door gebruik te maken van een cache wordt dit snelheidsverschil verkleind: binnen deze snellere opslag worden zaken bewaard in de hoop dat ze (opnieuw) nodig zijn. Deze info hoeft dan niet van het tragere deel opgehaald te worden.
Bij de CPU heeft men al een snelle geheugenvorm op de processor: de registers. Deze bleken echter te klein te zijn om aan alle eisen te kunnen voldoen. Het RAM-geheugen was dan wel groot genoeg, maar de geheugenbus is te traag t.o.v. processorsnelheid. Dus bedacht men een tussenstap: de CPU-caches. De eerste keer haalt de CPU sowieso de data van het RAM-geheugen, maar deze data wordt ook in de caches opgeslagen. Daarna wordt eerst de cache bekeken in de hoop dat er data of instructies te vinden zijn, zodat deze niet meer van het tragere RAM-geheugen gehaald moeten worden.

### Hulpprocessor

Een processor is zodanig ontworpen dat hij verschillende soorten van berekeningen en bewerkingen kan uitvoeren. Soms wordt besloten om naast de "gewone" processor ook een "hulpprocessor" te voorzien. Dit kan de volgende voordelen hebben:
* De gewone processor wordt zo ontlast.
* Deze hulpprocessor kan gespecialiseerd zijn in iets, waardoor hij het ook sneller kan uitvoeren dan de gewone processor.
De bekendste hulpprocessor is waarschijnlijk de GPU en als die op dezelfde chip is uitgevoerd als de CPU spreekt men over IGP (integrated graphics processor). Zo heb je bij AMD de accelerated processing unit (APU), bij Intel HD Graphics en bij Nvidia Project Denver.

## Specificaties

Als specificaties worden de caches en de eventuele hulpprocessor (bv. IGP) vaak vermeld, maar er zijn er nog.
* De wet van Moore
* Dual processor
* AMD Bulldozer Quad-Core die
* AMD Bulldozer Quad-Core block diagram

### Kloksnelheid

De kloksnelheid is wellicht de bekendste spec van een processor. Meer uitleg hierover staat in het Wikibook Basiskennis informatica > Snelheid > Kloksnelheid.
Doordat men steeds meer transistoren op eenzelfde oppervlakte kon krijgen (zie verder bij x nm), kon met de kloksnelheid laten toenemen. Daar meer en meer de grenzen worden opgezocht van wat natuurkundig mogelijk is, zocht men (ook) naar andere manieren om de snelheid van een systeem te laten toenemen (zie verder bij multicpu, multicore en hyper-threading).

### Caches

Bij de componenten las je al over het idee van de caches. Grotere caches hebben een hogere hit rate: de kans is groter dat data er al inzit. Helaas zijn grotere caches vaak ook trager. Vandaar bestaat er een multi-level cachehiërarchie: eerst wordt de kleinere maar snelle L1-cache bekeken, daarna de iets grotere, maar tragere L2-cache.
* Generic Multi-Level Cache Organization
* Cache Organisatie bij Intel Nehalem
* Cache hiërarchie
* Cache miss rate
De cache is te klein om alles te bewaren. Dus moet er soms ruimte vrijgemaakt worden. Het groter maken van een cache betekent niet per definitie snelheidswinst: als je iets bewaart in de cache dat in de toekomst toch niet meer nodig is, zal je geen snelheidswinst halen. Vandaar is niet op ieder systeem een L3-cache aanwezig.

### Multicpu

Een mogelijkheid om het systeem sneller te maken is om op één moederbord twee of meerdere processoren gebruiken, elk met hun eigen socket. Dit zorgt ervoor dat het ontwerp van het moederbord duurder is en de afstand tussen de processoren is (relatief gezien) groot, wat onderlinge communicatie niet gemakkelijk maakt. Het is dan ook niet zo'n populair ontwerp. Strikt gezien is een multicpu geen eigenschap van een processor, maar eerder van het moederbord. Het wordt hier toch vermeld, om het verschil met multicore duidelijk te maken.

### Multicore

Bij een multikernprocessor worden op de processorchip (de die) twee of meerdere kernen (Engels: cores) gebruikt, waarbij iedere kern vaak zijn eigen L1- en L2-cache heeft en een eventueel gedeelde L3-cache. Bij een dubbelkernprocessor (Engels: dualcore) zitten er op één chip als het ware twee complete processors, die één enkele verbinding met het hoofdgeheugen delen — wat dan ook de flessenhals van multikernprocessors is.
Het plaatsen van meerdere kernen op een processor heeft als voordeel dat relatief veel snelheid gewonnen kan worden met een geringe investering. Toch zijn er ook nadelen:
* Software maakt veelal niet automatisch gebruik van meerdere kernen: de software moet ofwel uit meerdere processen bestaan, ofwel gebruikmaken van multithreading (zie ook het Wikibook Besturingssystemen > Functies > Multithreading). Klassieke applicaties met slechts een enkele thread profiteren nauwelijks van multikernprocessors.
* Het productieproces van de processors vereist dat alle processorkernen tegelijk succesvol gefabriceerd worden.
* Een verdubbeling van het aantal kernen betekent vrijwel een verdubbeling van het energieverbruik van de processor (en dus ook warmte). Als het koelsysteem niet kan volgen, moet soms teruggeklokt worden. Sommige systemen zullen bij het belasten van slechts één kern, de overige kernen uitschakelen om energie te besparen en minder warmteontwikkeling te hebben. Als de belasting wegvalt, worden alle kernen weer ingeschakeld en de kloksnelheid teruggebracht (bv. Turbo Boost bij de Nehalem Core i7 architectuur).

### Hyper-threading

Bij hyper-threading (HT) lijkt het alsof een dualcore plots een quadcore wordt. Fysiek gaat het bij HT nog steeds om een dualcore, maar een fysieke processorkern doet zich voor als twee logische kernen (die de caches delen). Als er bepaalde CPU-kernonderdelen niet gebruikt worden door thread X, dan kunnen die gebruikt worden om thread Y uit te voeren: in de meeste gevallen wordt het hierdoor mogelijk dat 1 processorkern twee threads tegelijk uitvoert. Zonder hyper-threading kan het voorkomen dat een thread moet wachten, alhoewel de meeste CPU-kernonderdelen op dat moment misschien niets aan het doen zijn.
Hyper-threading vereist dat de software hiervoor ondersteuning biedt, waarbij het besturingssysteem een dualcore met Hyper-Threading meestal als quadcore zal voorstellen.
Over hyper-threading is men niet altijd onverdeeld positief. Zo wordt gezegd dat een processor met deze technologie aanzienlijk meer energie verbruikt. Ook wordt de cache zwaarder gebruikt; doordat er twee threads tegelijk lopen, treden er meer cache-misses op, wat een negatieve uitwerking heeft op de performance en het energieverbruik.

### TDP

Bij de TDP-waarde zou je bv. 65 W kunnen zien staan. Watt is de eenheid van vermogen, waardoor je geneigd kan zijn om deze waarde te gebruiken om het verbruik van de CPU te bepalen. Dat is hier fout: TDP verwijst nl. naar een hoeveelheid (thermische) energie per tijdseenheid, meer specifiek naar de maximale hoeveelheid warmte die het koelsysteem van de chip geacht wordt nog af te voeren. Deze 'Thermal Design Point'-waarde helpt dus om te bepalen welk koelsysteem je (minstens) moet voorzien voor die processor, om te vermijden dat de CPU instabiel wordt.

### x nm

Bij de specificaties van de processor merk je bv. 14 nm. Dit verwijst naar de grootte van het productieproces om elektronica (transistoren) in een chip te krijgen. Ter info: 1 'nanometer' is 10$^{-9}$ meter, dus 0,000 000 001 meter of een miljardste van een meter. In een nanometer passen zo'n vijf atomen. Door betere technologie slaagt men erin dit productieproces kleiner te maken (zie de Wet van Moore).
Hoe kleiner dit productieproces kan (rekening houdende met stabiliteit en warmte), hoe meer je per kloktik kan doen, omdat er meer transistoren op eenzelfde oppervlakte zijn om het werk te doen. De kloksnelheid kan ook omhoog, omdat kleinere transistoren sneller schakelen. Men blijft zoeken naar manieren om alles kleiner te maken, gezien de voordelen hiervan.

### Instructieset

De instructieset is de verzameling van alle elementaire opdrachten die de processor als machine begrijpt en dus ook kan decoderen en uitvoeren. Deze instructies worden als binaire codes in het geheugen gezet.
Ter info geven we mee welke elementaire opdrachten dit zouden kunnen zijn:
* ophalen van een waarde uit een geheugenplaats
* terugschrijven van een waarde naar een geheugenplaats
* diverse rekenkundige (+, *, ...) en logische functies (AND, OR,...)
* testfuncties (is x gelijk y?)
* sprongfuncties, al dan niet voorwaardelijk (bv. if-then)
* afhandelen van interrupts (bv. bij bewegen muis)
Je merkt dat bovenstaande lijst beperkt is. Wil je iets programmeren met deze elementaire opdrachten, dan is dit heel tijdrovend. Programmeurs werken liever met een hogere programmeertaal dan met machinetaal en laten het vertalen naar machinetaal over aan de interpreter (bv. bij JavaScript, PHP) of compiler (bv. bij Java, C, C++).
AMD en Intel processoren zijn verschillende merken van processoren die toch (ongeveer) eenzelfde instructieset hebben. Hierdoor kan software, bijvoorbeeld een besturingssysteem, zowel op een AMD- als op Intel-platform worden geïnstalleerd. ARM is een voorbeeld van een processor die een andere instructieset heeft dan AMD/Intel: zo kan de binaire code van het ophalen van een waarde uit een geheugenplaats tussen AMD/Intel en ARM er volledig anders uitzien. Dat is ook de reden dat naast Windows, ook Windows RT is ontwikkeld: een versie van Windows op ARM-apparaten. Wil je iets werkende krijgen op AMD/Intel én op ARM, dan zal je de broncode eens moeten compileren voor AMD/Intel en eens voor ARM.
Uit onderstaande tabel van een AMD Phenom en Intel i5 processor merk je inderdaad dat ze een gelijkaardige instructieset hebben, terwijl de Raspberry Pi helemaal afwijkt . Bepaalde zaken komen vaak terug, dus zijn ze belangrijk om even uit te leggen:
* AMD-V (AMD) of VT-X (Intel) helpt bij het virtualiseren van hardware.
* x86-64 (ook aangegeven als EM64T, AMD64, IAMD64 of x64) betekent dat de processor een 64-bit-processorarchitectuur heeft, compatibel met een 32-bit architectuur.
* x86 wordt gebruikt bij een zuivere 32-bit architectuur.
Windows op Arm-laptops: eindelijk een einde aan de x86-hegemonie?
Tijdens de Computex was er naast AI als trend ook de trend van opmars van laptops waarin een ARM-chip zit in plaats van een x86 processor. De vorige poging om Windows naar ARM-devices te brengen is niet gelukt: één van de redenen was softwarecompatibiliteit. Niet ieder programma dat werkt op x86, werkt ook op ARM. Voorheen moesten veel toepassingen nog in x86-x64-emulatiemodus gedraaid worden, terwijl steeds meer toepassingen nu native voor Arm (en x86 natuurlijk) worden geschreven.
(nl) Windows op ARM-laptops. tweakers.net (2024-06-07).

## Werking

Een processor kan niet onmiddellijk iets uitvoeren, want er zijn minstens eerst nog twee andere stappen nodig:
* De processor is geen geheugenopslag: de eigenlijke programma's staan op een opslagmedium. Vervolgens worden deze bij het uitvoeren geladen in het RAM-geheugen en tenslotte moet de processor deze nog ophalen. Dit laatste staat bekend als fetch uit RAM.
* Dan weet de processor nog niet wat hij moet doen: voor het uitvoeren van een optelling moet hij zichzelf anders organiseren, dan bij het uitvoeren van een deling. Hij zal dus eerst nog de instructie moeten decoderen in de CU, om te weten wat hij moet doen.
* Dan pas kan de processor iets uitvoeren. Dit staat bekend als execute in de ALU.
* Tenslotte moet een eventueel resultaat terug opgeslagen worden: store in RAM.
Deze drie stappen (fases) worden steeds herhaald: hoe hoger dus de klok, hoe sneller deze stappen elkaar opvolgen. Zoals je al kon lezen in de basiscursus zijn kloksnelheid en processorsnelheid wel geen synoniemen (cfr. de Megahertz myth)!
Hoe worden instructies dan gecodeerd? Stel dat we een héél eenvoudige processorarchitectuur hebben, die enkel kan optellen en delen. Er moeten natuurlijk ook getallen uit het geheugen gehaald kunnen worden en ze moeten er ook terug in opgeslagen worden. Dan zou de instructietabel er als volgt kunnen uitzien:
Instructietabel :
| 00 | /, nl. delen |
| 01 | +, nl. optellen |
| 10 | get from memory |
| 11 | store to memory |
We weten ook al dat de processor werkt met (werk)registers. Stel dat we vier registers hebben, met onderstaande informatie. In de eerste twee kolommen staat het adres (eens decimaal, eens binair), in de derde kolom de binaire inhoud en in de laatste kolom de overeenkomstige decimale waarde van die inhoud.
Inhoud werkregisters :
| adres | adres (bin) | inhoud (bin) | inhoud (dec) |
| R0 | 00 | 0101100 | 44 |
| R1 | 01 | 1011101 | 93 |
| R2 | 10 | 1110110 | 118 |
| R3 | 11 | 0001010 | 10 |
Stel nu de processor de instructie 010111 heeft opgehaald. Wat wordt er verwacht dat de processor doet? Deze instructie 010111 bestaat uit de instructie zelf (01) en twee operands (01 en 11), wat het geheel 010111 maakt. Om te weten wat hij moet doen, moet de processor in zijn instructietabel (zie hoger) opzoeken wat '01' betekent, en dat blijkt de optelling te zijn. De eerste operand is 01 en is dus het tweede register, terwijl de tweede operand 11 is en dus het derde register. Na uitvoer wordt de inhoud van de registers:
Inhoud werkregisters (na instructie 010111) :
| adres | adres (bin) | inhoud (bin) | inhoud (dec) |
| R0 | 00 | 0101100 | 44 |
| R1 | 01 | 1100111 | 103 |
| R2 | 10 | 1110110 | 118 |
| R3 | 11 | 0001010 | 10 |
Ter info: dit is een sterk vereenvoudigde werking van een processor. In het echt is dit een stuk complexer doordat er meer dan drie stappen zijn en doordat men technieken toepast die het geheel sneller maken (bv. pipelining, dynamic branch prediction of de compiler die instructies in een andere volgorde plaats).
* ↑ Leerplan Informatica- en communicatiewetenschappen B + S - 3de graad - D-finaliteit
* ↑ Meer informatie op leerplan D/2015/7841/003
* ↑ Cfr. de lijst van 80x86 sockets en slots.
* ↑ En ze willen de techniek nog verbeteren: Tweakers.net: Klein, kleiner, kleinst: de weg naar 5nm-chips
* ↑ In de filmpjes How a CPU is made, How do they make Silicon Wafers and Computer Chips? of Silicon Wafer Processing Animation kan je mooi enkele processen zien van hoe een CPU is gemaakt.
* ↑ Een uitgebreide review van AMD Kaveri staat op AMD Kaveri Review - Cpu en gpu op gelijke voet
* ↑ Sommige kenmerken komen aan bod in de review op Tweakers.net van Intels Broadwell-E.
* ↑ Meer details over de werking van deze caches kan je lezen op extremetech.com: How L1 and L2 CPU caches work, and why they’re an essential part of modern chips.
* ↑ Meer uitleg vind je in het Tweakers.net artikel Tdp: minder simpel dan het lijkt.
* ↑ Bron: What is "nm" mean in CPU. Ook de Tweakers.net-artikels Als nanometers te groot worden, TSMC deelt eerste details over 3nm-procedé en Arm: het boeit ons niet dat de Wet van Moore dood is zijn interessant om lezen.
* ↑ Bij bv. een browser zou je a.h.w. ook kunnen spreken over een vorm van “instructieset”, nl. het feit dat een browser bv. HTML 4.01, XHTML 1.1, JavaScript 1-1.7 “begrijpt”.
* ↑ Een overzicht van instructiesets van een aantal processors: www.chipdir.nl/iset.
* ↑ Merk op: naast de machinetaal is ook het besturingssysteem belangrijk. Programmeurs maken vaak gebruik van specifieke besturingssysteem API's, waardoor een Windows-programma niet noodzakelijk ook zomaar werkt op Linux, alhoewel beide misschien een AMD-processor hebben.
* ↑ Een uitgebreidere uitleg over de werking staat op Processor (computer) > Werking van een processor.
* ↑ Pipelining wordt mooi voorgesteld bij The Megahertz Myth (YouTube), waarin Apple het belang van de architectuur op de snelheid uitlegt. Op eastaughs.fsnet.co.uk kan je een animatie bekijken en op Ars Technica kan je bij Pipelining: An Overview een diepgaand artikel lezen.