CPU er utførende enhet i en datamaskin. Navnet Central Processing Unit stammer fra den tiden det var bare en utførende enhet i en datamaskin. CPU som begrep brukes fortsatt, men det finnes mange typer og varianter. Prosessor er et ofte brukt synonym. 

CPU leser instruksjoner fra et program som ligger i arbeidslageret på datamaskinen og utfører dem én etter én. CPU har en programteller som inneholder adressen til den instruksjonen som skal utføres, og et antall andre registre. Et register har plass til et dataord. De vanligste instruksjonene gjør følgende:

  1. overføring av data mellom register og arbeidslager (lesing og skriving)
  2. aritmetiske- og logiske operasjoner
  3. testoperasjoner

Testoperasjonene har to utfall: fortsett med neste instruksjon eller hopp til adressen som er oppgitt i instruksjonen. Slik kan en få et program til gå i løkke, det vil si å repetere en sekvens av operasjoner, eller velge alternative veier. Alle operasjoner i en CPU styres av en klokke, og en instruksjon tar et antall klokkesykler.

Før mikroprosessorene begynte å komme på 1980-tallet, ble CPU bygget av diskrete elektroniske komponenter (brikker, chips) på kretskort (Printed Circuit Boards). Etter hvert kom det komplette CPU-er på en brikke. Konstruktøren kunne da bygge sammen CPU, buss, arbeidslager, porter til ytre enheter og en ekstern klokke på ett kretskort til en komplett datamaskin.

En høy klokkefrekvens gir høy ytelse, men den kan ikke overstige det som kretsene i CPU tåler. Kretsene består av transistorer. En transistor har innstillingene av eller på, og omstillingen krever en viss tid som i dag måles i picosekund (en milliontedels milliontedels sekund eller 10-12 sekund). Transistorene blir raskere dess mindre de kan lages, men den store tettheten kan føre til at brikken blir for varm - selv med kjøling. Redusert klokkefrekvens vil redusere strømforbruket og dermed oppvarmingen, men det reduserer også ytelsen.

Moores lov sier at antall transistorer som økonomisk kan plasseres på en brikke dobles hver 24. måned. Økningen skyldes mindre linjebredder (mindre transistorer) som tillater øket klokkefrekvens, og at selve brikken blir større med plass for mer logikk og data – for eksempel cache. Større areal skyldes bedre produksjonsteknologi som gjør at en kan produsere større arealer med akseptabel feilrate. I praksis betyr Moores lov at en kan lage CPU-er med dobbel regnekraft etter 18 måneder.

I stedet for å øke klokkefrekvensen har en de senere år satset på parallellprosessering. Først parallell utførelse av én instruksjonsstrøm, og da de mulighetene var utnyttet: parallell utførelse av mange instruksjonsstrømmer. Vi får altså en CPU-brikke med mange CPU-er eller en flerkjernebrikke (multicore chip). Brikker med et lite antall kjerner; 2-20 er vanlig i dagens servere og PC-er (2016).

Når flere instruksjonsstrømmer utføres samtidig, fører det med seg flere kompliserende elementer. Operativsystemet må tilpasses. For å unngå omprogrammering kan et program bare bruke én prosessor om gangen. Parallellegenskapene blir utnyttet hvis en kan kjøre uavhengige programmer samtidig. Skal en sette mange prosessorer på samme oppgave må det nesten alltid en betydelig omprogrammering til.

Program under utførelse ligger på disk. Den instruksjon som blir utført og tilhørende data som i øyeblikket blir behandlet må ligge i arbeidslager fordi CPU henter instruksjoner og data i arbeidslager. Hvor i arbeidslageret programmet ligger, kan variere for hver gang det blir utført. Det er avhengig av hvilke andre programmer som allerede ligger der. Det betyr også at de absolutte adressene til data og instruksjoner ikke er de samme når programmet lastes inn på et nytt sted. Disse problemene kan løses enten ved å bruke segmentregistre eller kravstyrt sidedeling, demand paging på engelsk.

Segmentregistrene har to oppgaver:

  1. Tillate at alle programmer kan skrives som om de var lagret fra adresse 0.
  2. Stoppe programutførelsen og gi kontroll til operativsystemet hvis et program adresserer et dataord utenfor det området det er tildelt.

Segmentregisteret inneholder adressen til starten av et sammenhengende lagerområde der programmet er lest inn. Den virkelige (absolutte) adressen blir summen av verdien i segmentregisteret og instruksjonens adresse. Dette skjer automatisk for alle instruksjoner.

Sementregisteret inneholder også lengden på lagerområdet som programmet er tildelt. Utførelsen av programmet blir stoppet hvis det prøver å bruke en adresse utenfor området. Uten en slik mekanisme vil programmer kunne lese andres data og/eller ødelegge andre programmer bevisst eller utilsiktet. Dette er en helt fundamental sikkerhets- og beskyttelsesmekanisme. Ved avbrudd (eng.: interrupt) hopper programmet til et bestemt program som rydder opp. Dette programmet er en del av operativsystemet.

Ved kravstyrt sidedeling (på engelsk: demand paging) deles programmet inn i blokker (pages) som normalt er 4 KB (4096 byte) store. Bare de mest aktive blokkene i øyeblikket blir tildelt plass i arbeidslager. Hver blokk som har plass i arbeidslager får 4096 byte sammenhengende lagerplass. Hvilke blokker av et program som faktisk har fysisk plass og hvor i arbeidslageret denne plassen starter står oppført i en blokktabell eller page table. Hvert program har sin egen blokktabell. For hver referanse til en adresse må i prinsippet et innslag i blokktabellen leses for å finne ut om blokken har fysisk plass og i så fall hvor blokken starter. Når den fysiske adressen er beregnet vil den egentlige operasjonen til arbeidslager bli utført. Hvis blokken ikke har en fysisk adresse får programmet et avbrudd (interrupt), og operativsystemet må finne plass for den, samt lese den inn fra disk. Hvis blokken som viker plass er en datablokk som har fått endret sitt innhold, må den først skrives til disk før plassen kan frigis.  

Sidedeling vil også fange opp referanser utenfor lovlig adresseområde på tilsvarende måte som ved bruk av segmentregistre. Sidedeling er en forholdsvis kompleks, men fleksibel mekanisme, og mange maskiner bruker denne mekanismen. For å utføre adresseomregningen hurtigere enn å lese i blokktabellen for hver referanse brukes en såkalt TLB – Translation Lookaside Buffer som inneholder de sist bruke adressene. TLB kan beskrives som en adresseberegningens cache. 

Ved sementering må en finne sammenhengende plass i arbeidslager for hele programmet, eller de (få) segmentene som utgjør et program. Segmentene kan være store, de har også ulik størrelse, og det kan være vanskelig å finne sammenhengende plass i arbeidslager for et segment uten å kaste ut andre segmenter. Programmer med minst ett segment ute av arbeidslager får en pause i utførelsen. 

Når en bruker sidedeling er alle blokker like store som gjør det lettere å bytte plass. Bare de mest aktive delene av programmet trenger til enhver tid å ha arbeidslagerplass, det gjør det mulig for mange programmer å være arbeidslager på samme tid. Det kan være positivt for å utnytte en flerkjerne-CPU.

For å redusere belastningen på buss og arbeidslager brukes cache. Når mange prosessorer bruker hver sin kopi av et dataord må en sikre seg at alle enheter er enige om hva som er riktig verdi, det vil si at enhetene må ha et konsistent syn på innholdet av maskinens arbeidslager. Dette kalles cache-konsistens kan realiseres på en rekke måter, ved bruk av cache-koherens-teknikker. En enkel metode er å merke de andre kopiene som ugyldige når en kopi blir skrevet til. Det endrede ordet skrives til arbeidslager umiddelbart. Hvis ordet skal brukes igjen vil det bli hentet fra arbeidslager og dermed er en sikret at siste kopi blir brukt også av de andre prosessorene.

Alle prosessorer har et definert sett av instruksjoner. RISC og CISC er betegnelser på filosofi for å utforme instruksjonssettet. RISC kommer fra Reduced Instruction Set Computer og CISC er det motsatte: Complex Instruction Set Computer. CISC-instruksjoner blir utført av et mikroprogram; et fast program i kjernen av CPU. Det gjør det enklere å realisere et stort antall instruksjoner som gjerne kan være komplekse. RISC-instruksjoner er få, og de blir utført direkte i elektronikken uten å gå veien om et mikroprogram. En RISC-instruksjon skal utføres hurtig, på få klokkesykler og med høy frekvens. Ulempen er at en trenger flere instruksjoner for å gjøre det samme som en kompleks CISC-instruksjon. RISC-fordelene er redusert ved at det etter hvert har blitt plass til mer elektronikk på en brikke, og således kan flere CISC-instruksjoner utføres direkte uten å gå veien om mikroprogram. Intels 86-arkitektur er CISC. ARM, PowerPC og SPARC er alle basert på en RISC-filosofi. 

For tunge operasjoner som utføres ofte kan det være lønnsomt å lage spesialprosessorer eller akseleratorer. Eksempler på slike er signalbehandlingsprosessorer, grafikk-prosessorer (GPU, Graphical Processing Unit), og kontrollere. Med utbredelsen av mobile enheter er det også viktig å lage CPU-er som bruker lite strøm.

Foreslå endringer i tekst

Foreslå bilder til artikkelen

Kommentarer

Har du spørsmål til artikkelen? Skriv her, så får du svar fra fagansvarlig eller redaktør.

Du må være logget inn for å kommentere.