Processor | en viktig del av varje dator
En central processorenhet (CPU) är en viktig del av varje dator. CPU:n skickar signaler för att styra datorns övriga delar, nästan som en hjärna styr en kropp.
CPU:n är en elektronisk maskin som arbetar med en lista över vad datorn ska göra, så kallade instruktioner. Den läser listan med instruktioner och kör (exekverar) varje instruktion i tur och ordning. En lista med instruktioner som en CPU kan köra är ett datorprogram.
Klockfrekvensen, eller hastigheten för en CPU:s interna delar, mäts i hertz (Hz). Moderna processorer är ofta så snabba att gigahertz (GHz) används i stället. En GHz är 1 000 000 000 000 cykler per sekund.
De flesta processorer som används i stationära datorer (hemdatorer) är mikroprocessorer som tillverkas av antingen Intel eller Advanced Micro Devices (vanligtvis förkortat AMD). Några andra företag som tillverkar processorer är ARM (som nyligen köptes av Nvidia), IBM och AMD under ATI Technologies, som är ledande just nu. De flesta av deras CPU:er används i inbyggda system för mer specialiserade saker, till exempel i mobiltelefoner, bilar, videospelskonsoler eller inom militären.
En Pentium CPU i en dator
Typer av processorer
Under 1900-talet uppfann ingenjörer många olika datorarkitekturer. Numera använder de flesta skrivbordsdatorer antingen 32-bitars eller 64-bitars processorer. Instruktionerna i en 32-bitars CPU är bra på att hantera data som är 32 bitar stora (de flesta instruktioner "tänker" i 32 bitar i en 32-bitars CPU). På samma sätt är en 64-bitars CPU bra på att hantera data som är 64 bitar stora (och ofta också bra på att hantera 32-bitars data). Den datastorlek som en CPU hanterar bäst kallas ofta för CPU:ns ordstorlek. Många gamla CPU:er från 70-, 80- och tidigt 90-tal (och många moderna inbyggda system) har en ordstorlek på 8 eller 16 bitar. När processorerna uppfanns i mitten av 1900-talet hade de många olika ordstorlekar. Vissa hade olika ordstorlekar för instruktioner och data. De mindre populära ordstorlekarna slutade senare att användas.
De flesta CPU:er är mikroprocessorer. Det innebär att processorn bara är ett enda chip. Vissa chip med mikroprocessorer inuti innehåller även andra komponenter och är kompletta "datorer" med ett enda chip. Detta kallas mikrokontroller.
Register
När processorn kör ett datorprogram behöver den någonstans att lagra de data som instruktionerna arbetar med (de data som de läser och skriver). Denna lagring kallas register. En CPU har vanligtvis många register. Register måste vara mycket snabba att komma åt (att läsa och skriva). Därför är de en del av själva CPU-chipet.
Minne
Att lagra all data i register skulle göra de flesta CPU:er för komplicerade (och mycket dyra). Därför lagrar register vanligtvis bara de data som CPU:n arbetar med "just nu". Resten av de data som används av programmet lagras i RAM (Random Access Memory). Förutom i mikrokontroller lagras RAM vanligtvis utanför CPU:n i separata chip.
När processorn vill läsa eller skriva data i RAM-minnet skickar den ut en adress till dessa data. Varje byte i RAM har en minnesadress. Adressernas storlek är ofta densamma som ordstorleken: En 32-bitars CPU använder 32-bitars adresser osv. Mindre CPU:er, som 8-bitars CPU:er, använder dock ofta adresser som är större än ordstorleken. Annars skulle den maximala programlängden bli för kort.
Eftersom adressernas storlek är begränsad är även den maximala mängden minne begränsad. 32-bitars processorer kan vanligtvis bara hantera upp till 4 GB RAM-minne. Detta är det antal olika bytes som kan väljas med hjälp av en 32-bitars adress (varje bit kan ha två värden - 0 och 1 - och 232 bytes är 4 GB). En 64-bitars processor kan kanske hantera upp till 16 EB RAM (16 exabyte, cirka 16 miljarder GB eller 16 miljarder miljarder miljarder byte). Operativsystemet kan begränsa den till att använda mindre mängder.
Den information som lagras i RAM-minne är vanligtvis flyktig. Det betyder att den försvinner om datorn stängs av.
Minneshanteringsenheter (MMU) och virtuellt minne
Moderna CPU:er använder ofta en minneshanteringsenhet (MMU). En MMU är en komponent som översätter adresser från CPU:n till (vanligtvis) olika RAM-adresser. När en MMU används är de adresser som används i ett program (vanligtvis) inte de "riktiga" adresserna där data lagras. Detta kallas virtuellt minne (motsatsen till "verkligt" minne). Några av skälen till varför det är bra att ha en MMU anges här:
- En MMU kan "dölja" andra programs minne för ett program. Detta görs genom att inga adresser översätts till de "dolda" adresserna medan programmet körs. Detta är bra eftersom det innebär att program inte kan läsa och ändra andra programs minne, vilket förbättrar säkerheten och stabiliteten. (Programmen kan inte "spionera" på varandra eller "trampa varandra på tårna").
- Många MMU:er kan göra vissa delar av minnet oskrivbara, oläsbara eller icke-utförbara (vilket innebär att kod som är lagrad i den delen av minnet inte kan köras). Detta kan vara bra av stabilitets- och säkerhetsskäl samt av andra skäl.
- MMU:er gör det möjligt för olika program att ha olika "vyer" av minnet. Detta är praktiskt i många olika situationer. Det kommer till exempel alltid att vara möjligt att ha ett programs "huvudkod" på samma (virtuella) adress utan att kollidera med andra program. Det är också praktiskt när det finns många olika delar av koden (från bibliotek) som delas mellan program.
- MMU:er gör det möjligt för kod från bibliotek att visas på olika adresser varje gång ett program körs. Detta är bra eftersom det ofta blir svårare för hackare att få programmen att göra dåliga saker om de inte vet var saker finns i minnet. Detta kallas randomisering av adressutrymmet.
- Avancerade program och operativsystem kan använda sig av knep med MMU:er för att undvika att kopiera data mellan olika platser i minnet.
Cache
I moderna datorer är RAM mycket långsammare än register, så att komma åt RAM gör programmen långsammare. För att påskynda minnesåtkomsten placeras ofta en snabbare typ av minne som kallas cacheminne mellan RAM-minnet och de viktigaste delarna av processorn. Cacheminnet är vanligtvis en del av själva CPU-chippet och är mycket dyrare per byte än RAM. Cachen lagrar samma data som RAM-minnet, men är vanligtvis mycket mindre. Därför kanske inte alla data som används av programmet ryms i cacheminnet. Cachen försöker lagra data som sannolikt kommer att användas mycket. Exempel på detta är nyligen använda data och data som ligger nära i minnet till nyligen använda data.
Ofta är det vettigt att ha en "cache för cache", precis som det är vettigt att ha en cache för RAM-minne. Vid flervåningscachelagring finns det många cacheminnen, som kallas L1-cache, L2-cache och så vidare. L1-cachen är den snabbaste (och dyraste per byte) cachen och ligger "närmast" processorn. L2-cachen ligger ett steg bort och är långsammare än L1-cachen osv. L1-cachen kan ofta ses som en cache för L2-cachen osv.
Bussar
Datorbussar är de kablar som används av processorn för att kommunicera med RAM och andra komponenter i datorn. Nästan alla CPU:er har åtminstone en databuss - som används för att läsa och skriva data - och en adressbuss - som används för att ge ut adresser. Andra bussar inuti CPU:n transporterar data till olika delar av CPU:n.
Instruktionsuppsättningar
En instruktionsuppsättning (även kallad ISA - Instruction Set Architecture) är ett språk som direkt förstås av en viss CPU. Dessa språk kallas också för maskinkod eller binärkod. De anger hur du säger till CPU:n att göra olika saker, som att läsa in data från minnet till ett register eller addera värdena från två register. Varje instruktion i en instruktionsuppsättning har en kodning, vilket är hur instruktionen skrivs som en sekvens av bitar.
Program som är skrivna i programmeringsspråk som C och C++ kan inte köras direkt av processorn. De måste översättas till maskinkod innan processorn kan köra dem. En kompilator är ett datorprogram som gör denna översättning.
Maskinkod är bara en sekvens av 0:or och 1:or, vilket gör det svårt för människor att läsa den. För att göra den mer lättläst skrivs maskinkodsprogrammen vanligtvis i assemblerspråk. I monteringsspråk används text i stället för 0- och 1-siffror: Du kan till exempel skriva "LD A,0" för att läsa in värdet 0 i register A. Ett program som översätter assemblerspråk till maskinkod kallas assembler.
Funktionalitet
Här är några av de grundläggande saker som en CPU kan göra:
- Läsa data från minnet och skriva data till minnet.
- Lägg till ett tal till ett annat tal.
- Testar om ett tal är större än ett annat tal.
- Flytta ett tal från ett ställe till ett annat (t.ex. från ett register till ett annat eller mellan ett register och minnet).
- Hoppa till en annan plats i instruktionslistan, men endast om något test är sant (t.ex. endast om ett tal är större än ett annat).
Även mycket komplicerade program kan skapas genom att kombinera många enkla instruktioner som dessa. Detta är möjligt eftersom varje instruktion tar mycket kort tid att utföra. Många processorer kan idag utföra mer än 1 miljard (1 000 000 000 000) instruktioner på en enda sekund. I allmänhet gäller att ju mer en CPU kan göra på en viss tid, desto snabbare är den. Ett sätt att mäta en processors hastighet är MIPS (Million Instructions Per Second). Flops (Floating point operations per second) och CPU:s klockfrekvens (vanligtvis mätt i gigahertz) är också sätt att mäta hur mycket arbete en processor kan utföra på en viss tid.
En CPU är uppbyggd av logiska grindar och har inga rörliga delar. Processorn i en dator är elektroniskt ansluten till andra delar av datorn, t.ex. grafikkortet eller BIOS. Ett datorprogram kan styra dessa kringutrustning genom att läsa eller skriva siffror till särskilda platser i datorns minne.
Instruktionsledning
Varje instruktion som utförs av en CPU sker vanligtvis i många steg. Exempelvis kan stegen för att köra en instruktion "INC A" (öka värdet i register A med ett) på en enkel CPU vara följande:
- Läs instruktionen från minnet,
- avkoda instruktionen (ta reda på vad instruktionen gör), och
- lägga till en i register A.
Olika delar av CPU:n gör olika saker. Ofta är det möjligt att köra vissa steg från olika instruktioner samtidigt, vilket gör processorn snabbare. Vi kan till exempel läsa en instruktion från minnet samtidigt som vi avkodar en annan instruktion, eftersom dessa steg använder olika moduler. Detta kan ses som att ha många instruktioner "inne i pipeline" samtidigt. I bästa fall arbetar alla moduler med olika instruktioner samtidigt, men det är inte alltid möjligt.
Flera kärnor
Flerkärniga processorer blev mycket vanligare i början av 2000-talet. Det innebär att de har många processorer inbyggda i samma chip så att de kan köra många instruktioner samtidigt. Vissa processorer kan ha upp till sextiofyra kärnor, som den kommande AMD Epyc "Milan"-serien. Även processorer för konsumenter har många kärnor, till exempel AMD Ryzen 9 5950x med 16 kärnor.
Multitrådning
Vissa processorer har en teknik som kallas multithreading. Detta är uppgiften att köra mer än en "tråd" av instruktioner i ett operativsystem. Många moderna processorer använder detta för att öka prestandan vid tunga program med flera trådar, t.ex. benchmarkprogram.
Tillverkare
Följande företag tillverkar datorprocessorer:
Frågor och svar
F: Vad är en CPU?
S: En CPU (centralprocessor) är en viktig del av varje dator. Den sänder signaler för att styra datorns övriga delar, nästan på samma sätt som en hjärna styr en kropp. CPU:n är en elektronisk maskin som arbetar utifrån en lista med instruktioner för att utföra vissa uppgifter.
F: Hur fungerar processorn?
S: CPU:n läser listan med instruktioner och kör (exekverar) varje instruktion i tur och ordning. En lista med instruktioner som en CPU kan köra är ett datorprogram.
F: Vad mäts klockfrekvensen eller hastigheten hos en CPU i?
S: Klockfrekvensen eller hastigheten för en CPU:s interna delar mäts i hertz (Hz). Moderna processorer kör ofta så snabbt att gigahertz (GHz) används i stället - en GHz är 1 000 000 000 000 cykler per sekund.
F: Vilka är några företag som tillverkar processorer?
S: Några företag som tillverkar processorer är Intel, Advanced Micro Devices (AMD), ARM (som nyligen köptes av Nvidia), IBM och AMD under ATI Technologies som för närvarande leder marknaden.
F: Var används de flesta processorer?
S: De flesta CPU:er som används i stationära datorer är mikroprocessorer som tillverkas av antingen Intel eller AMD, medan de flesta andra används i inbyggda system för mer specialiserade saker som mobiltelefoner, bilar, videospelskonsoler eller militära tillämpningar.