Articles

HTG förklarar: hur fungerar en CPU faktiskt?

  • Anthony Heddings

    @anthonyheddings

  • Uppdaterad 28 februari 2020, 4:58PM EDT
CPU
rost/

de flesta saker i en dator är relativt enkla att förstå: RAM, lagring, Kringutrustning och programvara fungerar alla tillsammans för att göra en datorfunktion. Men hjärtat i ditt system, CPU, verkar som magi även för många tekniska människor. Här gör vi vårt bästa för att bryta ner det.

det mesta av forskningen för den här artikeln kommer från ”men hur vet den?”av J. Clark Scott. Det är en fantastisk läsning, går in mycket mer djup än den här artikeln kommer, och är väl värt paret dollar på Amazon.

en anteckning innan vi börjar: moderna processorer är storleksordningar mer komplexa än vad vi beskriver här. Det är nästan omöjligt för en person att förstå varje nyans av ett chip med över en miljard transistorer. De grundläggande principerna för hur allt passar ihop förblir dock desamma, och att förstå grunderna ger dig en bättre förståelse för moderna system.

starta små

datorer fungerar i binärt. De förstår bara två stater: på och av. För att utföra beräkningar i binär använder de det som kallas en transistor. Transistorn tillåter endast källströmmen att strömma genom den till avloppet om det finns ström över porten. I huvudsak bildar detta en binär omkopplare, som skär av ledningen beroende på en andra ingångssignal.

relaterat: Vad är binärt, och varför använder datorer det?

annons

moderna datorer använder miljarder transistorer för att utföra beräkningar, men på de lägsta nivåerna behöver du bara en handfull för att bilda de mest grundläggande komponenterna, kända som grindar.

logiska grindar

Stack några transistorer ordentligt, och du har vad som kallas en logisk grind. Logiska grindar tar två binära ingångar, utför en operation på dem och returnerar en utgång. Or-porten returnerar till exempel true om någon av ingångarna är true. Och gate kontrollerar om båda ingångarna är sanna, xor kontrollerar om bara en av ingångarna är sanna, och n-varianterna (NOR, NAND och XNOR) är inverterade versioner av sina basportar.

gör matematik med grindar

med bara två grindar kan du göra grundläggande binär tillägg. Detta diagram ovan visar en halv adder, skapad med Logicly, en gratis online lekplats för logiska grindar. XOR-porten här slås på om bara en av ingångarna är på, men inte båda. Och porten slås på om båda ingångarna är på, men håll dig avstängd om det inte finns någon ingång. Så om båda är på, stannar XOR av och och porten slås på och kommer till rätt svar på två:

annons

detta ger oss en enkel inställning med tre distinkta utgångar: noll, en och två. Men en bit kan inte lagra något högre än 1, och den här maskinen är inte så användbar eftersom den bara löser ett av de enklaste matematiska problemen som möjligt. Men det här är bara en halv adderare, och om du ansluter två av dem med en annan ingång får du en full adderare:

den fullständiga adderaren har tre ingångar—de två siffrorna som ska läggas till och en ” bär.”Bärningen används när det slutliga numret överstiger vad som kan lagras i en enda bit. Full adders kommer att länkas i en kedja, och bärningen överförs från en adderare till nästa. Bärningen läggs till resultatet av XOR-porten i första halv adderaren, och det finns en extra eller grind för att hantera båda fallen när så det skulle behöva vara på.

När båda ingångarna är på slås bäraren på och skickar den till nästa hela adderare i kedjan:

och det här är ungefär lika komplicerat som tillägget blir. Att flytta upp till fler bitar betyder i huvudsak bara mer fulla adders i en längre kedja.

annons

de flesta andra matematiska operationer kan göras med tillägg; multiplikation är bara upprepad addition, subtraktion kan göras med lite fancy bit inversion, och division är bara upprepad subtraktion. Och medan alla moderna datorer har hårdvarubaserade lösningar för att påskynda mer komplicerade operationer, kan du tekniskt göra allt med full adderare.

bussen och minnet

just nu är vår dator inget annat än en dålig kalkylator. Detta beror på att det inte kommer ihåg någonting, och gör ingenting med sina utgångar. Visas ovan är en minnescell, som kan göra allt detta. Under huven använder den många NAND-grindar, och i verkligheten kan det vara ganska annorlunda beroende på lagringstekniken, men dess funktion är densamma. Du ger det några ingångar, slå på’ Skriv ’ bit, och det kommer att lagra ingångarna inuti cellen. Det här är inte bara en minnescell, eftersom vi också behöver ett sätt att läsa information från den. Detta görs med en enabler, som är en samling av och grindar för varje bit i minnet, alla knutna till en annan ingång, ”läs” biten. Skriv-och läsbitarna kallas ofta också ”set” och ”enable”.

hela paketet är inslaget i det som kallas ett register. Dessa register är anslutna till bussen, som är en bunt av ledningar som löper runt hela systemet, ansluten till varje komponent. Även moderna datorer har en buss, även om de kan ha flera bussar för att förbättra multitasking prestanda.

varje register har fortfarande en skriv-och läsbit, men i denna inställning är ingången och utgången samma sak. Det här är faktiskt bra. Exempelvis. Om du ville kopiera innehållet i R1 till R2, skulle du slå på läsbiten för R1, vilket skulle driva innehållet i R1 på bussen. Medan läsbiten är på, skulle du slå på skrivbiten för R2, vilket skulle kopiera bussinnehållet till R2.

annons

register används också för att skapa RAM. RAM läggs ofta ut i ett rutnät, med ledningar som går i två riktningar:

avkodarna tar en binär ingång och slår på motsvarande numrerade tråd. Till exempel är ” 11 ” 3 i binärt, det högsta 2-bitarsnumret, så avkodaren skulle slå på den högsta ledningen. Vid varje korsning finns ett register. Alla dessa är anslutna till centralbussen och till en central skriv-och läsinmatning. Både läs-och skrivingången slås bara på om de två ledningarna som passerar över registret också är på, så att du effektivt kan välja det register som du ska skriva och läsa från. Återigen är modernt RAM mycket mer komplicerat, men den här inställningen fungerar fortfarande.

klockan, steppen och avkodaren

register används överallt och är det grundläggande verktyget för att flytta data runt och lagra information i CPU. Så vad säger dem att flytta saker runt?

klockan är den första komponenten i CPU-kärnan och stängs av och slås på med ett inställt intervall, mätt i hertz eller cykler per sekund. Detta är den hastighet du ser annonserad tillsammans med processorer; ett 5 GHz-chip kan utföra 5 miljarder cykler per sekund. Klockhastighet är ofta ett mycket bra mått för hur snabbt en CPU är.

annons

klockan har tre olika tillstånd: basklockan, aktiveringsklockan och den inställda klockan. Basklockan kommer att vara på i en halv cykel och av för den andra hälften. Aktivera klockan används för att aktivera register och måste vara på längre för att se till att data är aktiverade. Den inställda klockan måste alltid vara på samtidigt som aktiveringsklockan, annars kan felaktiga data skrivas.

klockan är ansluten till steppen, som räknas från ett till max-steget och återställer sig själv till ett när det är klart. Klockan är också ansluten till och grindar för varje register som CPU kan skriva till:

dessa och grindar är också anslutna till utgången från en annan komponent, instruktionsavkodaren. Instruktionsavkodaren tar en instruktion som” Ställ in R2 till R1 ” och avkodar den till något som CPU kan förstå. Det har sitt eget interna register, kallat ”Instruktionsregistret”, där den aktuella operationen lagras. Hur exakt det gör det här kommer ner till systemet du kör på, men när det är avkodat kommer det att slå på rätt uppsättning och aktivera bitar för rätt register, vilket kommer att avfyras i enlighet med klockan.

programinstruktioner lagras i RAM (eller L1-cache på moderna system, närmare CPU). Eftersom ProgramData lagras i register, precis som alla andra variabler, kan den manipuleras i farten för att hoppa runt programmet. Så här får Program sin struktur, med loopar och if-uttalanden. En hoppinstruktion ställer in den aktuella platsen i minnet som instruktionsavkodaren läser från till en annan plats.

hur allt kommer ihop

Nu är vår bruttoöverförenkling av hur en CPU fungerar komplett. Huvudbussen spänner över hela systemet och ansluter till alla register. De fullständiga addersna, tillsammans med en massa andra operationer, packas in i den aritmetiska logikenheten, eller ALU. Denna ALU kommer att ha anslutningar till bussen, och kommer också att ha sina egna register för att lagra det andra numret den arbetar på.

annons

för att utföra en beräkning laddas programdata från system RAM till kontrollsektionen. Kontrollsektionen läser två nummer från RAM, laddar den första i ALU: s instruktionsregister och laddar sedan den andra på bussen. Under tiden skickar den ALU en instruktionskod som berättar vad den ska göra. ALU utför sedan alla beräkningar och lagrar resultatet i ett annat register, som CPU kan läsa från och sedan fortsätta processen.

bildkredit: Rost9 /

Anthony Heddings
Anthony Heddings är bosatt molningenjör för LifeSavvy Media, en teknisk författare, programmerare och expert på Amazons AWS-plattform. Han har skrivit hundratals artiklar för How-To Geek och CloudSavvy det som har lästs miljontals gånger.Läs hela Bio ”