HTG forklarer: Hvordan fungerer en CPU egentlig?

Innholdsfortegnelse:

HTG forklarer: Hvordan fungerer en CPU egentlig?
HTG forklarer: Hvordan fungerer en CPU egentlig?

Video: HTG forklarer: Hvordan fungerer en CPU egentlig?

Video: HTG forklarer: Hvordan fungerer en CPU egentlig?
Video: 2.4 GHz vs 5 GHz WiFi: What is the difference? - YouTube 2024, Mars
Anonim
De fleste ting i en datamaskin er relativt enkle å forstå: RAM, lagring, periferiutstyr, og programvaren fungerer sammen for å lage en datamaskinfunksjon. Men hjertet av systemet ditt, CPU, virker som magi, selv til mange tech folk. Her vil vi gjøre vårt beste for å bryte det ned.
De fleste ting i en datamaskin er relativt enkle å forstå: RAM, lagring, periferiutstyr, og programvaren fungerer sammen for å lage en datamaskinfunksjon. Men hjertet av systemet ditt, CPU, virker som magi, selv til mange tech folk. Her vil vi gjøre vårt beste for å bryte det ned.

Mesteparten av forskningen for denne artikkelen kommer fra "Men hvordan vet det?" Av J. Clark Scott. Det er en fantastisk lese, går inn i mye mer dybde enn denne artikkelen vil, og er vel verdt parpengene på Amazon.

Ett notat før vi begynner: Moderne CPUer er størrelsesordener mer komplekse enn det vi beskriver her. Det er nesten umulig for en person å forstå hver nyanse av en brikke med over en milliard transistorer. Men de grunnleggende prinsippene for hvordan alt sammen passer, forblir det samme, og forståelse av det grunnleggende vil gi deg en bedre forståelse av moderne systemer.

Starter liten

Datamaskiner opererer i binær. De forstår bare to stater: på og av. For å utføre beregninger i binær, bruker de det som kalles en transistor. Transistoren tillater bare at kildestrømmen strømmer gjennom den til avløpet hvis det er strøm over porten. I hovedsak danner dette en binær bryter som kutter av ledningen avhengig av et andre inngangssignal.
Datamaskiner opererer i binær. De forstår bare to stater: på og av. For å utføre beregninger i binær, bruker de det som kalles en transistor. Transistoren tillater bare at kildestrømmen strømmer gjennom den til avløpet hvis det er strøm over porten. I hovedsak danner dette en binær bryter som kutter av ledningen avhengig av et andre inngangssignal.

Moderne datamaskiner bruker milliarder transistorer til å utføre beregninger, men på de laveste nivåene trenger du bare en håndfull til å danne de mest grunnleggende komponentene, kjent som porte.

Logiske porter

Stakk noen transistorer riktig, og du har det som kalles en logisk gate. Logiske porter tar to binære innganger, utfører en operasjon på dem, og returnerer en utgang. ELLER-porten, for eksempel, returnerer sann hvis en av inngangene er ekte. AND-porten kontrollerer om begge innganger er sanne, XOR kontrollerer om bare en av inngangene er sanne, og N-varianter (NOR, NAND og XNOR) er inverterte versjoner av deres baseporter.
Stakk noen transistorer riktig, og du har det som kalles en logisk gate. Logiske porter tar to binære innganger, utfører en operasjon på dem, og returnerer en utgang. ELLER-porten, for eksempel, returnerer sann hvis en av inngangene er ekte. AND-porten kontrollerer om begge innganger er sanne, XOR kontrollerer om bare en av inngangene er sanne, og N-varianter (NOR, NAND og XNOR) er inverterte versjoner av deres baseporter.

Å gjøre matte med porter

Med bare to porter kan du gjøre grunnleggende binær tillegg. Dette diagrammet ovenfor viser en halv adder, opprettet ved hjelp av Logicly, en gratis online lekeplass for logiske porter. XOR-porten her vil slå på hvis bare en av inngangene er på, men ikke begge deler. AND-porten slås på hvis begge innganger er på, men forblir av hvis det ikke er inngang. Så hvis begge er på, holder XOR seg av, og AND-porten slås på, og kommer til riktig svar på to:
Med bare to porter kan du gjøre grunnleggende binær tillegg. Dette diagrammet ovenfor viser en halv adder, opprettet ved hjelp av Logicly, en gratis online lekeplass for logiske porter. XOR-porten her vil slå på hvis bare en av inngangene er på, men ikke begge deler. AND-porten slås på hvis begge innganger er på, men forblir av hvis det ikke er inngang. Så hvis begge er på, holder XOR seg av, og AND-porten slås på, og kommer til riktig svar på to:
Dette gir oss et enkelt oppsett med tre forskjellige utganger: null, en og to. Men en bit kan ikke lagre noe høyere enn 1, og denne maskinen er ikke så nyttig som den bare løser en av de enkleste matteproblemer som er mulig. Men dette er bare en halv adder, og hvis du kobler to av dem med et annet innspill, får du en full adder:
Dette gir oss et enkelt oppsett med tre forskjellige utganger: null, en og to. Men en bit kan ikke lagre noe høyere enn 1, og denne maskinen er ikke så nyttig som den bare løser en av de enkleste matteproblemer som er mulig. Men dette er bare en halv adder, og hvis du kobler to av dem med et annet innspill, får du en full adder:
Hele adderen har tre innganger - de to tallene som skal legges til, og en "bære". Bæren brukes når sluttnummeret overskrider det som kan lagres i en enkeltbit. Fulle adders vil bli koblet i en kjede, og bærebiten går fra en adder til den neste. Bæren legges til resultatet av XOR-porten i første halvdel, og det er en ekstra ELLER-port for å håndtere begge tilfellene når det som skulle være nødvendig.
Hele adderen har tre innganger - de to tallene som skal legges til, og en "bære". Bæren brukes når sluttnummeret overskrider det som kan lagres i en enkeltbit. Fulle adders vil bli koblet i en kjede, og bærebiten går fra en adder til den neste. Bæren legges til resultatet av XOR-porten i første halvdel, og det er en ekstra ELLER-port for å håndtere begge tilfellene når det som skulle være nødvendig.

Når begge innganger er på, slår bære på og sender den til neste fulle adder i kjeden:

Og dette handler om så komplisert som tillegg blir. Å flytte opp til flere biter betyr egentlig bare flere fulle adders i en lengre kjede.
Og dette handler om så komplisert som tillegg blir. Å flytte opp til flere biter betyr egentlig bare flere fulle adders i en lengre kjede.

De fleste andre matematiske operasjoner kan gjøres med tillegg; Multiplikasjon er bare gjentatt tillegg, subtraksjon kan gjøres med litt fancy bit inversjon, og divisjon er bare gjentatt subtraksjon. Og mens alle moderne datamaskiner har maskinvarebaserte løsninger for å øke hastigheten på mer kompliserte operasjoner, kan du teknisk sett gjøre alt sammen med full adder.

Bussen og minnet

Akkurat nå er datamaskinen vår ikke noe mer enn en dårlig kalkulator. Dette er fordi det ikke kan huske noe, og gjør ingenting med sine utganger. Vist over er en minnecelle, som kan gjøre alt dette. Under hetten bruker den mange NAND-porter, og i virkeligheten kan det være ganske forskjellig avhengig av lagringsteknikken, men funksjonen er den samme. Du gir det noen innganger, slår på "skrive" -biten, og den lagrer inngangene inne i cellen. Dette er ikke bare en minnecelle, da vi også trenger en måte å lese informasjon fra den. Dette er gjort med en enabler, som er en samling av AND-porter for hver bit i minnet, alle knyttet til en annen inngang, "les" -biten. Skrive- og lesebiter kalles også "sett" og "aktiver" også.
Akkurat nå er datamaskinen vår ikke noe mer enn en dårlig kalkulator. Dette er fordi det ikke kan huske noe, og gjør ingenting med sine utganger. Vist over er en minnecelle, som kan gjøre alt dette. Under hetten bruker den mange NAND-porter, og i virkeligheten kan det være ganske forskjellig avhengig av lagringsteknikken, men funksjonen er den samme. Du gir det noen innganger, slår på "skrive" -biten, og den lagrer inngangene inne i cellen. Dette er ikke bare en minnecelle, da vi også trenger en måte å lese informasjon fra den. Dette er gjort med en enabler, som er en samling av AND-porter for hver bit i minnet, alle knyttet til en annen inngang, "les" -biten. Skrive- og lesebiter kalles også "sett" og "aktiver" også.

Hele denne pakken er pakket inn i det som er kjent som et register. Disse registre er koblet til bussen, som er et bunt av ledninger som kjører rundt hele systemet, koblet til hver komponent. Selv moderne datamaskiner har en buss, selv om de kan ha flere busser for å forbedre multitaskingsytelsen.

Hvert register har fortsatt en skrive- og lesebit, men i dette oppsettet er inngang og utgang det samme. Dette er faktisk bra. For eksempel. Hvis du ønsket å kopiere innholdet av R1 til R2, ville du slå på lesebiten for R1, som ville skyve innholdet av R1 på bussen. Mens lesebiten er på, slår du på skrivebiten for R2, som vil kopiere bussinnholdet til R2.
Hvert register har fortsatt en skrive- og lesebit, men i dette oppsettet er inngang og utgang det samme. Dette er faktisk bra. For eksempel. Hvis du ønsket å kopiere innholdet av R1 til R2, ville du slå på lesebiten for R1, som ville skyve innholdet av R1 på bussen. Mens lesebiten er på, slår du på skrivebiten for R2, som vil kopiere bussinnholdet til R2.

Registerene brukes til å lage RAM også. RAM legges ofte ut i et rutenettet, med ledninger som går i to retninger:

Dekodene tar en binærinngang og slår på den tilsvarende nummererte ledningen. For eksempel er "11" 3 i binær, det høyeste 2-bits tallet, slik at dekoderen slår på den høyeste ledningen. Ved hvert skjæringspunkt er det et register. Alle disse er koblet til sentralbussen, og til en sentral skrive- og leseinngang. Både lese- og skriveinngangen vil bare slå på hvis de to ledningene krysser over registret, er også på, slik at du kan velge registeret hvor du skal skrive og lese. Igjen er moderne RAM langt mer komplisert, men dette oppsettet virker fortsatt.
Dekodene tar en binærinngang og slår på den tilsvarende nummererte ledningen. For eksempel er "11" 3 i binær, det høyeste 2-bits tallet, slik at dekoderen slår på den høyeste ledningen. Ved hvert skjæringspunkt er det et register. Alle disse er koblet til sentralbussen, og til en sentral skrive- og leseinngang. Både lese- og skriveinngangen vil bare slå på hvis de to ledningene krysser over registret, er også på, slik at du kan velge registeret hvor du skal skrive og lese. Igjen er moderne RAM langt mer komplisert, men dette oppsettet virker fortsatt.

Klokken, Stepper og dekoderen

Registerene brukes overalt og er det grunnleggende verktøyet for å flytte data rundt og lagre informasjon i CPU. Så hva forteller dem å flytte ting rundt?

Klokken er den første komponenten i kjernen til CPUen og vil slå av og på med et bestemt intervall målt i hertz eller sykluser per sekund. Dette er hastigheten du ser annonsert sammen med CPUer; en 5 GHz-chip kan utføre 5 milliarder sykluser per sekund. Klokkehastighet er ofte en veldig god beregning for hvor rask en CPU er.

Klokken har tre forskjellige tilstander: baseklokke, aktiveringsklokke og innstilt klokke. Baseklokken vil være på for en halv syklus, og av for den andre halvdelen. Aktiver klokken brukes til å slå på registre og må være på for lenger for å sikre at dataene er aktivert. Den angitte klokken må alltid være på samtidig med aktiveringsklokken, ellers kan feilaktige data skrives.
Klokken har tre forskjellige tilstander: baseklokke, aktiveringsklokke og innstilt klokke. Baseklokken vil være på for en halv syklus, og av for den andre halvdelen. Aktiver klokken brukes til å slå på registre og må være på for lenger for å sikre at dataene er aktivert. Den angitte klokken må alltid være på samtidig med aktiveringsklokken, ellers kan feilaktige data skrives.

Klokken er koblet til trinnet, som vil telle fra et til det maksimale trinnet, og tilbakestille seg tilbake til en når den er ferdig. Klokken er også koblet til OG-porter for hvert register som CPU kan skrive til:

Disse OG-portene er også koblet til utgangen av en annen komponent, instruksjonsdekoderen. Instruksjonsdekoderen tar en instruksjon som "SET R2 TO R1" og dekoder den til noe som CPUen kan forstå. Den har sitt eget interne register, kalt "Instruksjonsregister", som er der den gjeldende operasjonen er lagret. Hvor nøyaktig det kommer, kommer dette ned til systemet du kjører på, men når det er avkodd, vil det slå på riktig sett og aktivere biter for de riktige registerene, som vil avfyres i henhold til klokken.
Disse OG-portene er også koblet til utgangen av en annen komponent, instruksjonsdekoderen. Instruksjonsdekoderen tar en instruksjon som "SET R2 TO R1" og dekoder den til noe som CPUen kan forstå. Den har sitt eget interne register, kalt "Instruksjonsregister", som er der den gjeldende operasjonen er lagret. Hvor nøyaktig det kommer, kommer dette ned til systemet du kjører på, men når det er avkodd, vil det slå på riktig sett og aktivere biter for de riktige registerene, som vil avfyres i henhold til klokken.

Programinstruksjonene lagres i RAM (eller L1-cache på moderne systemer, nærmere CPU). Siden programdata lagres i registre, kan det, som alle andre variabler, manipuleres på flyet for å hoppe rundt programmet. Dette er hvordan programmer får sin struktur, med sløyfer og om setninger. En hoppinstruksjon angir gjeldende plassering i minnet som instruksjonsdekoderen leser fra til et annet sted.

Slik kommer det sammen

Nå er vår brutale overforenkling av hvordan en CPU fungerer, fullført. Hovedbussen spenner over hele systemet og kobler seg til alle registre. De fulle adders, sammen med en rekke andre operasjoner, er pakket inn i den aritmetiske logiske enheten, eller ALU. Denne ALU vil ha tilkoblinger til bussen, og vil også ha egne registre for lagring av det andre nummeret som det opererer på.
Nå er vår brutale overforenkling av hvordan en CPU fungerer, fullført. Hovedbussen spenner over hele systemet og kobler seg til alle registre. De fulle adders, sammen med en rekke andre operasjoner, er pakket inn i den aritmetiske logiske enheten, eller ALU. Denne ALU vil ha tilkoblinger til bussen, og vil også ha egne registre for lagring av det andre nummeret som det opererer på.

For å utføre en beregning lastes programdata fra system-RAM til kontrollseksjonen. Kontrollseksjonen leser to tall fra RAM, laster den første inn i ALUs instruksjonsregister, og laster deretter den andre på bussen. I mellomtiden sender den ALU en instruksjonskode som forteller hva som skal gjøres. ALU utfører deretter alle beregningene og lagrer resultatet i et annet register, som CPU kan lese fra og deretter fortsette prosessen.

Anbefalt: