Startpagina » hoe » HTG legt uit Hoe werkt een CPU eigenlijk?

    HTG legt uit Hoe werkt een CPU eigenlijk?

    De meeste dingen op een computer zijn relatief eenvoudig te begrijpen: het RAM, de opslag, de randapparatuur en de software werken allemaal samen om een ​​computerfunctie te krijgen. Maar het hart van je systeem, de CPU, lijkt zelfs voor veel technische mensen magisch. Hier doen we ons best om het te doorbreken.

    Het meeste onderzoek voor dit artikel komt van "Maar hoe weet het?" Door J. Clark Scott. Het is een fantastisch lezen, gaat veel diepgaander dan dit artikel zal doen, en is de moeite van het paar geld op Amazon zeker waard.

    Eén opmerking voordat we beginnen: moderne CPU's zijn orden van grootte complexer dan wat we hier beschrijven. Het is bijna onmogelijk voor een persoon om elke nuance van een chip met meer dan een miljard transistors te begrijpen. De basisprincipes van hoe alles in elkaar past, blijven echter hetzelfde en inzicht in de basisbeginselen geeft u een beter begrip van moderne systemen.

    Klein beginnen

    Computers werken in binair. Ze begrijpen slechts twee toestanden: aan en uit. Om berekeningen in binair uit te voeren, gebruiken ze wat een transistor wordt genoemd. De transistor staat alleen toe dat de bronstroom er doorheen stroomt naar de afvoer als er stroom is over de poort. In wezen vormt dit een binaire schakelaar, die de draad afsnijdt afhankelijk van een tweede ingangssignaal.

    Moderne computers gebruiken miljarden transistors om berekeningen uit te voeren, maar op de laagste niveaus heb je maar een handvol nodig om de meest elementaire componenten te vormen, bekend als poorten.

    Logische poorten

    Stapel een paar transistors op de juiste manier en je hebt wat bekend staat als een logische poort. Logische poorten nemen twee binaire ingangen, voeren een bewerking uit en retourneren een uitvoer. De OF-poort retourneert bijvoorbeeld waar als een van de ingangen waar is. De EN-poort controleert of beide ingangen waar zijn, XOR controleert of slechts één van de ingangen waar is en de N-varianten (NOR, NAND en XNOR) zijn geïnverteerde versies van hun basispoorten.

    Math met poorten doen

    Met slechts twee poorten kunt u elementaire binaire toevoeging doen. Dit diagram hierboven toont een halve opteller, gemaakt met Logicly, een gratis online speelplaats voor logische poorten. De XOF-poort wordt hier ingeschakeld als slechts één van de ingangen is ingeschakeld, maar niet beide. De EN-poort wordt ingeschakeld als beide ingangen zijn ingeschakeld, maar blijf uit als er geen invoer is. Dus als beide aan staan, blijft de XOR uit en gaat de EN-poort aan en komt bij het juiste antwoord van twee:

    Dit geeft ons een eenvoudige setup met drie verschillende uitgangen: nul, één en twee. Maar een bit kan niets hoger dan 1 opslaan, en deze machine is niet zo nuttig omdat het slechts één van de eenvoudigste wiskundige problemen mogelijk oplost. Maar dit is slechts een halve opteller, en als u er twee met een andere ingang verbindt, krijgt u een volledige opteller:

    De volledige opteller heeft drie ingangen - de twee nummers die moeten worden toegevoegd, en een "carry". De carry wordt gebruikt wanneer het definitieve aantal groter is dan wat in een enkele bit kan worden opgeslagen. Volledige adders worden in een keten gekoppeld en de carry wordt van de ene opteller naar de volgende overgedragen. De carry wordt toegevoegd aan het resultaat van de XOR-poort in de eerste halve opteller, en er is een extra OF-poort om beide gevallen te behandelen wanneer dat zo zou moeten zijn.

    Wanneer beide ingangen zijn ingeschakeld, wordt de overdracht ingeschakeld en verzonden naar de volgende volledige opteller in de keten:

    En dit is ongeveer net zo complex als toevoeging krijgt. Opgaan naar meer bits betekent in essentie gewoon meer volledige adders in een langere keten.

    De meeste andere wiskundige bewerkingen kunnen met toevoeging worden uitgevoerd; vermenigvuldiging is gewoon herhaalde optelling, aftrekken kan gedaan worden met een of andere fancy bit inversie, en deling is gewoon herhaald aftrekken. En hoewel alle moderne computers hardware-gebaseerde oplossingen hebben om meer gecompliceerde bewerkingen te versnellen, kunt u technisch alles doen met de volledige opteller.

    De bus en het geheugen

    Op dit moment is onze computer niets meer dan een slechte rekenmachine. Dit komt omdat het zich niets kan herinneren en niets doet met zijn uitvoer. Hierboven is een geheugencel te zien die dat allemaal kan doen. Onder de motorkap worden veel NAND-poorten gebruikt en in het echt kan dit behoorlijk verschillen, afhankelijk van de opslagtechniek, maar de functie is hetzelfde. Je geeft het wat invoer, zet het 'write' bit aan en het zal de inputs in de cel opslaan. Dit is niet alleen een geheugencel, we hebben ook een manier nodig om er informatie uit te lezen. Dit gebeurt met een enabler, een verzameling EN-poorten voor elk bit in het geheugen, allemaal gebonden aan een andere invoer, het "lees" -bit. De schrijf- en leesbits worden ook vaak "set" en "enable" genoemd.

    Dit hele pakket is ingepakt in wat bekend staat als een register. Deze registers zijn verbonden met de bus, wat een bundel draden is die rond het hele systeem lopen, verbonden met elk onderdeel. Zelfs moderne computers hebben een bus, hoewel ze mogelijk meerdere bussen hebben om de multitasking-prestaties te verbeteren.

    Elk register heeft nog steeds een schrijf- en leesbit, maar in deze opstelling zijn de invoer en uitvoer hetzelfde. Dit is eigenlijk goed. Bijvoorbeeld. Als je de inhoud van R1 naar R2 wilt kopiëren, zou je het leesbit voor R1 inschakelen, waardoor de inhoud van R1 op de bus zou worden gedrukt. Terwijl de leesbit aanstaat, zou u de schrijfbit voor R2 inschakelen, die de businhoud naar R2 zou kopiëren.

    Registers worden ook gebruikt om RAM te maken. RAM wordt vaak ingedeeld in een raster, met draden die in twee richtingen gaan:

    De decoders nemen een binaire ingang en schakelen de overeenkomstige genummerde draad in. Bijvoorbeeld, "11" is 3 in binair, het hoogste 2-bits getal, dus de decoder zou de hoogste draad inschakelen. Op elke kruising staat een register. Al deze zijn verbonden met de centrale bus en met een centrale schrijf- en leesinvoer. Zowel de lees- als de schrijfinvoer worden alleen ingeschakeld als de twee draden die over het register lopen ook aan staan, waardoor u effectief het register kunt selecteren voor schrijven en lezen. Nogmaals, moderne RAM is veel gecompliceerder, maar deze opzet werkt nog steeds.

    De klok, de stepper en de decoder

    Registers worden overal gebruikt en vormen het basistool voor het verplaatsen van gegevens en het opslaan van informatie in de CPU. Dus wat hen vertelt om dingen te verplaatsen?

    De klok is de eerste component in de kern van de CPU en schakelt uit en weer in met een ingesteld interval, gemeten in Hertz, of cycli per seconde. Dit is de snelheid die naast de CPU's wordt geadverteerd; een 5 GHz-chip kan 5 miljard cycli per seconde uitvoeren. De kloksnelheid is vaak een zeer goede maatstaf voor hoe snel een CPU is.

    De klok heeft drie verschillende statussen: de basisklok, de inschakelklok en de ingestelde klok. De basisklok staat een halve cyclus aan en uit voor de andere helft. De activeringsklok wordt gebruikt om registers in te schakelen en moet langer aan staan ​​om ervoor te zorgen dat de gegevens zijn ingeschakeld. De ingestelde klok moet altijd aanstaan ​​op hetzelfde moment als de inschakelklok, anders kunnen er onjuiste gegevens worden geschreven.

    De klok is verbonden met de stepper, die meetelt van de één tot de maximale stap en zichzelf terugzet naar één wanneer deze klaar is. De klok is ook verbonden met EN-poorten voor elk register waarnaar de CPU kan schrijven:

    Deze EN-poorten zijn ook verbonden met de uitvoer van een andere component, de instructiedecoder. De instructiedecoder neemt een instructie zoals "SET R2 TO R1" en decodeert deze in iets dat de CPU kan begrijpen. Het heeft zijn eigen interne register, het "Instruction Register", waar de huidige bewerking wordt opgeslagen. Hoe dit precies gebeurt, komt neer op het systeem waarop je draait, maar zodra het is gedecodeerd, schakelt het de juiste set in en activeren bits voor de juiste registers, die volgens de klok afgaan.

    Programma-instructies worden opgeslagen in RAM (of L1-cache op moderne systemen, dichter bij de CPU). Omdat programmagegevens in registers worden opgeslagen, net als elke andere variabele, kan deze on-the-fly worden gemanipuleerd om door het programma te springen. Dit is hoe programma's hun structuur krijgen, met loops en if-statements. Een springinstructie stelt de huidige locatie in het geheugen in die de instructiedecoder van naar een andere locatie leest.

    Hoe het allemaal samenkomt

    Nu is onze grove oversimplificatie van hoe een CPU werkt compleet. De hoofdbus bestrijkt het hele systeem en maakt verbinding met alle registers. De volledige adders, samen met een aantal andere bewerkingen, zijn verpakt in de rekenkundige logica-eenheid of de ALU. Deze ALU heeft verbindingen met de bus en heeft ook eigen registers voor het opslaan van het tweede nummer waarop het werkt.

    Om een ​​berekening uit te voeren, worden programmagegevens vanuit het systeem-RAM geladen in de besturingssectie. De besturingssectie leest twee getallen uit het RAM, laadt de eerste in het instructieregister van de ALU en laadt vervolgens de tweede in de bus. Ondertussen stuurt het de ALU een instructiecode die vertelt wat hij moet doen. De ALU voert dan alle berekeningen uit en slaat het resultaat op in een ander register, waar de CPU vanaf kan lezen en vervolgens door kan gaan met het proces.

    Beeldcredits: Rost9 / Shutterstock