2.4 Datamaskinens arkitektur — von Neumann, CPU, ALU, buss, pipeline
Von Neumann-arkitekturen og maskinvarefaktaene som testes som sant/usant — inkludert de faste «alltid usanne» distraktorene.
Høyeste prioritet — dette må sitte. Dette er den begrepstunge halvdelen av seksjon 2, maskinvare og arkitektur, en av de fire seksjonene som hver må bestås for seg. Ingen regning her, bare presisjon.
Slik kommer den: nesten alltid som svarform F2 (sant/usant-matrise: én rad per påstand, du krysser sant eller usant for hver). Av og til som F1 («velg ett eller flere alternativer»).
Den ene tingen som skiller bestått fra bom her: fem påstander går igjen år etter år, og alle fem er usanne. De er samlet i en egen blokk i dette kapitlet. Kan du dem, har du en gratis sjekkliste å måle hver rad mot — og det er felle #11 i registeret, altså de faste «alltid usanne» arkitektur-distraktorene.
Om bonuspoeng: maskinvaredelen kan gi bonuspoeng for full pott på en oppgave, og minus per feil avkryssing. Det gjør presisjon ekstra godt betalt akkurat her.
Tidsbruk: 55 minutter, fordelt på fire løkker med tidsanslag.
Forkunnskaper — sist du var her
Dette kapitlet kan leses uten forkunnskaper fra resten av boka, men to ting du alt har møtt, gjør det lettere:
1. Instruksjoner er tall i minnet. Fra kap. 1.5: maskinkoden 508 er ikke et tall i seg selv, den er instruksjonen LDA 08. Det er hele grunnlaget for arkitekturen i dette kapitlet.
2. Binær addisjon med mente. Fra kap. 1.3: 0+0 = 0, 0+1 = 1, 1+1 = 0 med mente 1, 1+1+1 = 1 med mente 1. Kretsen som gjør nettopp dette, heter fulladder, og vi bygger den her.
3. Logiske porter. Fra kap. 2.1: AND, OR, XOR og NOT med sannhetstabellene sine. Du trenger XOR-en og AND-en i avsnittet om adderen.
Et roligere hverdagsbilde av maskinens deler — hva som sitter hvor i kabinettet — ligger i Datamaskinen og dens komponenter.
Løkke 1 — Det lagrede programmet (~12 min)
De første regnemaskinene ble programmert med ledninger. Skulle de gjøre noe annet, måtte noen koble om fysisk.
Gjennombruddet var innsikten om at programmet kan ligge i minnet, akkurat som data. Maskinen henter instruksjonen sin fra en minnecelle, på samme måte som den henter et tall. Da kan et nytt program lastes inn uten at noen rører en eneste ledning.
Du har allerede sett konsekvensen: i kap. 1.5 kunne et program endre sin egen instruksjon ved å legge et tall til den, nettopp fordi instruksjonen bare var et tall i en celle.
Denne måten å bygge en maskin på kalles von Neumann-arkitekturen, og den er den maskinen du sitter foran nå.
Byggemåten der kode og data ligger i samme minne, og prosessoren henter begge deler over den samme forbindelsen.
Delene er: en prosessor (med regneenhet, kontrollenhet og registre), et hovedminne som er adressert celle for celle, inn- og utenheter, og busser som binder det hele sammen.
Konsekvensen som testes: en instruksjon er ikke noe annet enn et tall i en celle. Derfor kan et program lastes inn, lagres på disk, sendes over nett — og i prinsippet endre seg selv.
Den faste feilslutningen: å tro at maskinen «vet» hva som er kode og hva som er data. Det gjør den ikke. Det er kontrollenheten som bestemmer det, ut fra hvilken celle programtelleren peker på.
At instruksjonene til maskinen lagres i det vanlige minnet, i samme format som alle andre tall.
Det er dette prinsippet som gjør en datamaskin til en generell maskin: samme maskinvare kan kjøre en tekstbehandler i dag og en simulering i morgen, uten fysiske endringer.
Den praktiske følgen du har sett: selvmodifiserende kode (kap. 1.5) er mulig fordi en instruksjon kan behandles som et tall og legges til.
Den faste feilslutningen: å tro at kode ligger i et eget, beskyttet minne fra maskinvarens side. Beskyttelsen finnes, men den er noe operativsystemet lager — ikke noe arkitekturen gir gratis.
Brikken som henter instruksjoner, tolker dem og utfører dem. Inneholder minst tre ting: ALU, kontrollenhet og et sett registre.
Alt dette ligger inne i samme brikke. Det er en fast eksamensfelle å plassere en av delene utenfor.
En moderne CPU har flere kjerner, altså flere komplette regneverk på samme brikke, som kan arbeide med hver sin instruksjonsstrøm samtidig.
Den faste feilslutningen: å blande CPU og hovedminne. RAM-en ligger utenfor prosessoren, på egne brikker, og nås over bussene.
Delen av CPU-en som gjør selve regningen: addisjon og subtraksjon, og logiske operasjoner som AND, OR og XOR bit for bit.
Navnet sier begge deler: aritmetikk og logikk. Å tro at den bare regner, er halve sannheten.
ALU-en ligger inne i CPU-en. Dette er en av de fem faste usanne påstandene i motsatt form — «ALU-en ligger utenfor CPU-en» er alltid galt.
En ALU for n bit bygges av n en-bits enheter koblet etter hverandre, der menten sendes videre fra hver enhet til den neste. En 64-bits ALU trenger derfor 64 slike, ikke 65.
Delen av CPU-en som styrer rekkefølgen: den henter neste instruksjon, tolker hva den betyr, og setter de andre delene opp til å utføre den.
Det er kontrollenheten som avgjør om innholdet i en minnecelle skal behandles som en instruksjon eller som et tall. Cellen selv bærer ikke den informasjonen.
Den faste feilslutningen: å tro at kontrollenheten regner. Den regner ikke — den dirigerer. Regningen skjer i ALU-en.
Et svært lite, svært raskt lager inne i CPU-en, som holder ett tall om gangen — typisk like mange bit som maskinens ordbredde.
Registre er raskere enn RAM fordi de ligger på selve prosessorbrikken og nås uten å gå over bussene. Til gjengjeld er det få av dem: et titall, mot milliarder av celler i RAM.
Et register er ikke bygd av RAM. Dette er en av de fem faste usanne påstandene. Registre bygges av egne, raske lagringskretser på prosessorbrikken.
Den faste feilslutningen ved siden av: å tro at RAM er raskere enn register fordi RAM er «hovedminnet». Rekkefølgen er motsatt — register er det raskeste i hele maskinen.
Svarform F3, altså en koblingsoppgave: koble hver komponent (1–5) til riktig plassering (A–C). Hver plassering kan brukes flere ganger.
1. ALU · 2. Hovedminnet (RAM) · 3. Programtelleren · 4. Kontrollenheten · 5. Harddisken
A. Inne i CPU-en · B. Utenfor CPU-en, på hovedkortet · C. Utenfor CPU-en, som lagringsenhet
2 → B. RAM ligger på egne brikker og nås over bussene. Det er nettopp derfor et RAM-oppslag er tregere enn et registeroppslag.
3 → A. Programtelleren er et register, og registre ligger inne i CPU-en.
4 → A. Kontrollenheten er den tredje faste delen av prosessoren.
5 → C. Harddisken er en lagringsenhet — den er ikke en del av hovedminnet, og den nås gjennom helt andre mekanismer.
Fasit: 1→A, 2→B, 3→A, 4→A, 5→C.
Merk at plassering A brukes tre ganger. En koblingsoppgave krever ikke at kategoriene fordeles jevnt, og å prøve å «spre» svarene er en fast måte å miste poeng på.
Grensen å huske: alt som er raskt og lite, er inne i CPU-en. Alt som er stort, er utenfor.
(Innsteg — arkitekturens deler.) Nevn de tre delene som alltid finnes inne i en CPU, og si i én setning hva hver av dem gjør.
Forklar hvorfor et register er raskere enn en celle i hovedminnet, og hvorfor maskinen likevel trenger hovedminnet.
Løkke 2 — Bussene og klokka (~12 min)
Delene må snakke sammen. Det gjør de over busser: knipper av ledninger som er felles for flere enheter.
Og de må snakke sammen i takt. Det er klokkesignalets jobb.
— naturlig pausepunkt —
Ledningsknippet som frakter selve dataverdiene mellom prosessor, minne og andre enheter.
Bussen er toveis: samme ledninger brukes både når prosessoren leser fra minnet og når den skriver til det. Hvilken retning som gjelder, styres av kontrollenheten.
Bredden — antall ledninger — avgjør hvor mange bit som kan flyttes samtidig. En 64 bit bred databuss flytter åtte byte i én overføring.
Den faste feilslutningen: å tro at bussen «inneholder» data. Den lagrer ingenting; den frakter, og verdien er der bare mens overføringen skjer.
Ledningsknippet som forteller minnet hvilken celle det gjelder.
Den er enveis: prosessoren sender adressen, minnet svarer over databussen.
Bredden avgjør hvor mange celler maskinen kan adressere: n adresseledninger gir mulige adresser. Med 32 adresseledninger blir det celler, altså rundt 4 milliarder.
Den faste feilslutningen: å blande adressebussen og databussen. Den ene sier hvor, den andre bærer hva.
Ledningene som bærer styresignalene: skal det leses eller skrives, er dataene klare, skal enheten avbryte det den holder på med.
Sammen med databussen og adressebussen utgjør den systembussen.
Den faste feilslutningen: å tro at det bare finnes én buss. De tre har helt ulike oppgaver, og en påstand som blander dem, er usann selv om den høres rimelig ut.
Et signal som veksler mellom 0 og 1 i fast takt, og som avgjør når de andre delene skal handle.
Klokka er en fysisk krets — en oscillator — inne i eller like ved prosessoren. Den lagres ikke noe sted.
«Klokkesignalet er lagret i RAM» er en av de fem faste usanne påstandene. Signalet er ikke en verdi som huskes; det er en puls som genereres kontinuerlig.
Den faste feilslutningen ved siden av: å tro at klokka bestemmer hva som skjer. Den bestemmer bare når. Hva som skjer, avgjør kontrollenheten.
En klokkesykel er én periode av klokkesignalet — maskinens minste tidsenhet. Klokkefrekvensen er antall sykler per sekund, målt i hertz.
3 GHz betyr tre milliarder sykler i sekundet, altså at hver sykel varer omtrent en tredjedels nanosekund.
Sykelen er den enheten arbeidsmengde måles i når vi regner på ytelse: et minneoppslag som «koster 10 sykler», bruker ti slike perioder. Du regner med akkurat den enheten i neste kapittel.
Den faste feilslutningen: å tro at høyere frekvens alltid gir raskere maskin. Antall sykler en oppgave krever, teller like mye — og det er derfor pipeline og mellomlagring betyr så mye.
Prosessoren skal lese verdien i minnecelle 42 og legge den i et register. Beskriv hvilken buss som brukes til hva, og i hvilken rekkefølge.
Steg 2 — styresignalet ut. Kontrollenheten setter «les» på kontrollbussen. Uten dette signalet vet ikke minnet om det skal lese eller skrive.
Steg 3 — verdien inn. Minnet finner celle 42 og legger innholdet på databussen. Prosessoren leser det derfra og lagrer det i et register.
Rekkefølgen er alltid slik: hvor, så hva slags operasjon, så verdien.
Tidsbruken: hele runden tar mange klokkesykler, fordi signalene skal ut av brikken, gjennom bussene, inn i minnebrikken og tilbake. Et registeroppslag tar til sammenligning én sykel — verdien ligger allerede inne i prosessoren.
Det er nettopp denne forskjellen som er grunnen til mellomlagring, og som er utgangspunktet for regningen i neste kapittel.
Feil å unngå: å si at «adressen sendes på databussen». Da har du byttet om de to, og det er en påstand som ofte står som en rad i en sant/usant-matrise.
Vurder hver påstand som sann eller usann, og begrunn hver rad.
| # | Påstand | Sant/usant |
|---|---|---|
| a | Databussen er toveis, mens adressebussen er enveis | |
| b | Klokkesignalet lagres i RAM mellom hver sykel | |
| c | Med 16 adresseledninger kan maskinen adressere 65 536 celler | |
| d | Kontrollenheten utfører selve addisjonen |
Løkke 3 — Adderen: fra porter til aritmetikk (~15 min)
Nå kobler vi seksjonens to halvdeler sammen. Du kan portene fra kap. 2.1, og du kan binær addisjon med mente fra kap. 1.3. Adderen er stedet der de møtes.
Dette er også svaret på et spørsmål du kanskje har hatt: hvordan kan noe som bare kjenner 0 og 1, faktisk regne?
Kretsen som legger sammen to bit og gir ut to signaler: sumbitet og menten ut.
| A | B | Sum | Mente ut |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
Sumkolonnen er
0 1 1 0, altså XOR. Mentekolonnen er 0 0 0 1, altså AND.Port 1: XOR med inngangene A og B -> Sum
Port 2: AND med inngangene A og B -> Mente utDen kalles «halv» fordi den mangler noe vesentlig: den har ingen mente inn. Den kan derfor bare brukes på det aller nederste bitet i en flerbits addisjon.A, B og menten inn fra forrige posisjon. Den gir ut sumbitet og menten videre.Hele sannhetstabellen:
| A | B | C_inn | Sum | C_ut | Kontroll |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 0 + 0 + 0 = 0 |
| 0 | 0 | 1 | 1 | 0 | 0 + 0 + 1 = 1 |
| 0 | 1 | 0 | 1 | 0 | 0 + 1 + 0 = 1 |
| 0 | 1 | 1 | 0 | 1 | 0 + 1 + 1 = 2 |
| 1 | 0 | 0 | 1 | 0 | 1 + 0 + 0 = 1 |
| 1 | 0 | 1 | 0 | 1 | 1 + 0 + 1 = 2 |
| 1 | 1 | 0 | 0 | 1 | 1 + 1 + 0 = 2 |
| 1 | 1 | 1 | 1 | 1 | 1 + 1 + 1 = 3 |
Kontrollkolonnen leses slik: svaret er
2·C_ut + Sum. I den nederste raden gir det 2·1 + 1 = 3. Det stemmer i alle åtte radene.Slik bygger du en 8-bits adder: åtte fulladdere på rad. Menten ut av den ene kobles til menten inn på den neste. Det er nøyaktig det du gjorde for hånd i kap. 1.3, bare i maskinvare.
Og derfor: en 64-bits ALU bygges av 64 en-bits enheter. Ikke 65. Påstanden om 65 er en av de fem faste usanne — den er konstruert for å friste deg til å telle en ekstra for menten, men menten er allerede en del av hver enhet.
1. Inverter alle bitene i tallet som skal trekkes fra.
2. Sett mente inn lik 1 på den nederste fulladderen.
Dette er nøyaktig negasjonen i to-er komplement fra kap. 1.3: inverter og legg til 1. Ett-tallet kommer gratis via mente inn.
Kontrollregning, 75 − 30 i åtte bit: 75 er 01001011, 30 er 00011110. Invertert blir 30 til 11100001. Med mente inn 1:
01001011 (75)
+ 11100001 (invertert 30)
+ 1 (mente inn)
-----------
1 00101101 (menten ut faller ut av byten)Svaret er 00101101₂ = 45, og 75 − 30 = 45. Stemmer.
Den faste feilslutningen: å tro at maskinen har egne kretser for pluss og minus. Den har én, brukt på to måter.
Bruk fulladderens tabell og regn ut hva en 4-bits adder gir for 1011₂ + 0110₂. Vis menten inn og menten ut for hver av de fire posisjonene.
Vis hvordan en adder regner ut 100 − 36 i åtte bit, og kontroller svaret.
Løkke 4 — Pipeline og de fem faste usanne (~16 min)
Til slutt to ting: hvordan prosessoren får gjort mer per sekund, og listen du skal måle hver eneste sant/usant-rad mot.
Runden prosessoren går for hver eneste instruksjon, i tre trinn:
1. Hent — kontrollenheten leser instruksjonen fra cellen programtelleren peker på.
2. Tolk — den finner ut hva instruksjonen betyr, og setter opp de delene som trengs.
3. Utfør — ALU-en regner, eller verdien flyttes, eller programtelleren settes til en ny adresse.
Deretter går programtelleren videre, og runden gjentas. Dette er nøyaktig det du sporet for hånd i LMC-sporetabellene i kap. 1.4.
Den faste feilslutningen: å tro at én instruksjon tar én klokkesykel. De tre trinnene tar hver sin tid, og et minneoppslag underveis kan koste mange sykler ekstra.
Å la trinnene i flere instruksjoner overlappe, slik at prosessoren arbeider med flere instruksjoner samtidig — i ulike trinn.
Bildet er et samlebånd: mens instruksjon 1 utføres, tolkes instruksjon 2 og hentes instruksjon 3.
sykel: 1 2 3 4 instr. 1: hent tolk utfør instr. 2: hent tolk utfør instr. 3: hent tolk utførHva du vinner: når båndet er fylt, blir én instruksjon ferdig per sykel i stedet for én per tre sykler.
Hva du ikke vinner: den enkelte instruksjonen går ikke fortere. Den bruker like mange trinn som før; det er gjennomstrømningen som øker.
Den faste feilslutningen: å tro at pipeline gjør hver instruksjon raskere. Den gjør flere ferdige per tidsenhet.
Disse fem går igjen i sant/usant-matrisene om maskinvare, og alle fem er usanne. Kan du dem, har du en gratis sjekkliste.
| Påstand | Hvorfor den er usann |
|---|---|
| Teknologiutviklingen gir færre transistorer per brikke | Motsatt: transistorene blir mindre, og det får plass flere av dem |
| Klokkesignalet er lagret i RAM | Klokka er en oscillatorkrets som genererer pulser; signalet lagres ikke |
| Et register er bygd av RAM | Registre er egne, raske kretser inne i CPU-en, ikke RAM-celler |
| ALU-en ligger utenfor CPU-en | ALU-en er en av CPU-ens tre faste deler |
| En 64-bits ALU krever 65 stk. 1-bits ALU-er | Det kreves 64 — én per bit; menten er alt en del av hver enhet |
Slik bruker du listen: når du møter en sant/usant-matrise om maskinvare, sjekk først om rada er en av disse fem eller en nær variant. Er den det, er svaret usant, og du har spart et halvt minutt.
To sanne påstander som ligner, og som du ikke skal avvise:
- «En portutgang kan være inngang på flere porter» er sann (det er forgrening).
- «Registre er raskere enn hovedminnet» er sann.
Dette er felle #11 i registeret. Den er dyr under negativ poenggiving, fordi hver av de fem påstandene ser rimelig ut isolert sett.
Svarform F2. Vurder hver påstand som sann eller usann.
a) Et register er bygd opp av mange RAM-celler.
b) ALU-en gjør både aritmetiske og logiske operasjoner.
c) En 32-bits ALU bygges av 33 en-bits ALU-er.
d) Pipeline gjør at hver enkelt instruksjon blir ferdig raskere.
b) Sann. Navnet sier det: aritmetisk-logisk enhet. Den legger sammen og trekker fra, og den gjør AND, OR og XOR bit for bit. Å tro at den bare regner, er en halv sannhet — men rada spør om begge deler, og da er svaret sant.
c) Usann. Samme felle som «65 for 64 bit», bare med andre tall: en n-bits ALU bygges av n en-bits enheter, altså 32. Menten er allerede en del av hver fulladder og krever ingen ekstra enhet.
d) Usann. Pipeline øker gjennomstrømningen, ikke farten på den enkelte instruksjonen. Instruksjon nummer én går gjennom nøyaktig like mange trinn som før; gevinsten er at instruksjon to og tre kan være i gang samtidig.
Fasit: a usann, b sann, c usann, d usann.
Om formen: tre av fire er usanne, og de tre er alle varianter av faste distraktorer. Det er derfor listen over de fem faste er verdt å kunne utenat — den avgjorde rad a og rad c direkte, og bare rad b og d krevde egentlig ettertanke.
Om bonus og minus: maskinvareoppgaver kan gi bonuspoeng for full pott og minus per feil. En kandidat som krysser «sann» på c fordi tallet 33 «ser ut som noe med mente», taper både poenget og bonusen.
Vurder hver påstand som sann eller usann, og begrunn hver rad.
| # | Påstand | Sant/usant |
|---|---|---|
| a | I von Neumann-arkitekturen ligger kode og data i samme minne | |
| b | Teknologiutviklingen har ført til færre transistorer per brikke | |
| c | Kontrollenheten avgjør om innholdet i en celle behandles som instruksjon | |
| d | En 64-bits ALU krever 65 stk. 1-bits ALU-er |
Kryss av alle påstandene som er sanne om ALU-en, og begrunn hvert av de fire.
a) Den ligger inne i CPU-en.
b) Den utfører både aritmetiske og logiske operasjoner.
c) Den kan brukes til subtraksjon ved å invertere den ene operanden og sette mente inn lik 1.
d) Den henter instruksjonene fra hovedminnet.
En prosessor bruker tre trinn per instruksjon: hent, tolk og utfør. Hvert trinn tar én klokkesykel.
a) Hvor mange sykler tar seks instruksjoner uten pipeline?
b) Hvor mange sykler tar de samme seks med pipeline, når båndet fylles fra tomt?
c) Hvor mange sykler bruker den enkelte instruksjonen i hvert av de to tilfellene?
Vurder hver påstand som sann eller usann, og begrunn hver rad.
| # | Påstand | Sant/usant |
|---|---|---|
| a | Adressebussen bærer verdien som skal lagres i cellen | |
| b | En fulladder legger sammen tre bit og gir ut to | |
| c | Registre er raskere enn hovedminnet | |
| d | Pipeline øker antall instruksjoner som blir ferdige per sekund |
1. De fem faste usanne påstandene (felle #11). Færre transistorer, klokke i RAM, register av RAM, ALU utenfor CPU, 65 ALU-er for 64 bit. Alle fem er usanne, og de kommer igjen i ulike innpakninger. Lær dem som en sjekkliste.
2. Å tro at RAM er raskere enn register. Rekkefølgen er register først, deretter mellomlagre, deretter RAM, deretter disk. Registeret er raskest fordi det ligger på prosessorbrikken.
3. Å bytte om adressebuss og databuss. Adressebussen sier hvor, databussen bærer hva. Påstander som blander dem, høres alltid rimelige ut.
4. Å la ALU-en gjøre alt. ALU-en regner. Kontrollenheten henter og styrer. En distraktor som lar ALU-en hente instruksjoner fra minnet, er gal.
5. Å tro at pipeline gjør hver instruksjon raskere. Den øker gjennomstrømningen, ikke farten på den enkelte instruksjonen. Samme tema gir en sann og en usann rad avhengig av ordlyden — les nøyaktig.
6. Å telle en ekstra ALU-enhet for menten. Menten er allerede en del av hver fulladder. n bit krever n enheter.
7. Å tro at maskinen har en egen subtraksjonskrets. Den har en adder, invertere som kan slås på, og en mente inn som kan settes til 1.
Begrepsbank til eksamen
Begrepsbanken er flashcard- og repetisjonsstoff — den gjentar det du nettopp har lest. Hopp trygt over ved førstegangslesing; tidsanslaget for kapitlet gjelder kjernestoffet.
Registeret som holder adressen til neste instruksjon. Den ligger inne i CPU-en, som alle registre.
Etter hver instruksjon økes den med én — med mindre instruksjonen selv setter den til en annen adresse. Det er nøyaktig det et hopp gjør.
Du førte programtelleren i egen kolonne i LMC-sporetabellene i kap. 1.4. Kolonnen der er den samme mekanismen som her, bare i en forenklet maskin.
Registeret som holder selve instruksjonen som utføres akkurat nå, etter at den er hentet fra minnet.
Skillet mot programtelleren er verdt å ha klart: programtelleren holder en adresse, instruksjonsregisteret holder innholdet på den adressen.
Den faste feilslutningen: å tro at de to er samme register. De har hver sin rolle i hvert eneste trinn av instruksjonssyklusen.
Maskinens store arbeidsminne, organisert som celler med hver sin adresse. Ligger utenfor CPU-en, på egne brikker.
«Random access» betyr at enhver celle kan nås direkte, uten å lese seg gjennom de foregående — i motsetning til en magnetbåndspoler.
RAM er flyktig: innholdet forsvinner når strømmen går. Det er derfor programmer lagres på disk og lastes inn i RAM når de startes.
Den faste feilslutningen: å tro at registre er bygd av RAM. De er egne kretser, og de er vesentlig raskere.
Antall ledninger i en buss — altså hvor mange bit som kan flyttes eller adresseres samtidig.
For databussen avgjør bredden hvor mye som overføres per operasjon: 64 bit bred buss flytter åtte byte om gangen.
For adressebussen avgjør bredden hvor mange celler maskinen kan nå: n ledninger gir adresser.
Den faste feilslutningen: å tro at de to breddene alltid er like. De er uavhengige størrelser, valgt hver for seg når maskinen konstrueres.
Den elektroniske bryteren som alle logiske porter er bygd av. Den slipper strøm gjennom eller stenger, styrt av et tredje signal.
En NAND-port bygges av noen få transistorer; en moderne prosessor inneholder titalls milliarder av dem.
Utviklingen går mot flere, ikke færre. Transistorene blir mindre, og derfor får det plass flere på samme areal. Påstanden om at teknologiutviklingen gir færre transistorer, er en av de fem faste usanne.
En hel krets — porter, ledninger og alt — laget i ett stykke på en liten silisiumbrikke.
Det er integrasjonen som gjør moderne maskiner mulige: signalveiene blir korte, produksjonen billig, og et helt regneverk får plass på noen kvadratmillimeter.
En prosessor er én stor integrert krets. Hovedminnet er andre integrerte kretser, på egne brikker.
Ordbredden er antall bit prosessoren behandler under ett — typisk 32 eller 64 i dagens maskiner.
Den setter størrelsen på registrene, bredden på ALU-en og som regel bredden på databussen.
En 64-bits maskin har 64-bits registre og en ALU bygd av 64 en-bits enheter. Det er samme tall hele veien — og det er derfor «65 enheter for 64 bit» er så lett å avvise når du har regelen klar.
En kjerne er et komplett regneverk med egen ALU, egne registre og egen kontrollenhet. En moderne prosessorbrikke har flere.
Flere kjerner betyr at maskinen kan arbeide med flere instruksjonsstrømmer samtidig, ikke bare raskere etter hverandre.
Skillet mot pipeline: pipeline overlapper trinnene i én strøm av instruksjoner; flere kjerner kjører flere strømmer parallelt. De to teknikkene brukes sammen.
Pipeline øker gjennomstrømningen og lar forsinkelsen stå uendret. Samlebåndet i en fabrikk gjør det samme: bilen bruker like lang tid gjennom fabrikken, men det kommer flere biler ut per time.
Dette skillet er selve innholdet i de to påstandene «pipeline gjør hver instruksjon raskere» (usann) og «pipeline øker antall instruksjoner som blir ferdige per sekund» (sann).
Fellesnavnet på de tre bussene sammen: databuss, adressebuss og kontrollbuss.
At de er felles for flere enheter, er både styrken og svakheten: det er billig i ledninger, men bare én overføring kan skje av gangen.
Den faste feilslutningen: å tro at «bussen» er én ting med én oppgave. De tre har helt ulike roller, og en påstand som bytter dem om, er usann.
At prosessoren og hovedminnet deler den samme forbindelsen, slik at både instruksjoner og data må gjennom det samme nåløyet.
Prosessoren blir da stående og vente på minnet, uansett hvor rask den selv er.
Dette er problemet mellomlagring er svaret på — og det er utgangspunktet for regningen i neste kapittel: hvor mye taper du på hvert oppslag som må helt ut til hovedminnet?
I en 8-bits adder er de sju indre mentene interne ledninger. Menten inn på den nederste posisjonen og menten ut av den øverste er derimot styresignaler du kan bruke:
- Mente inn = 1 på nederste posisjon gir subtraksjon, sammen med inverterte operander.
- Mente ut av øverste posisjon er nettopp den usignerte overflyten du så i kap. 1.3.
At ALU-en ikke bare regner, men også gjør logiske operasjoner bit for bit: AND, OR, XOR og invertering på hele ord samtidig.
En 64-bits AND tar de to operandene og AND-er bit 0 med bit 0, bit 1 med bit 1, og så videre — 64 uavhengige AND-porter i parallell.
Den faste feilslutningen: å tro at «logisk operasjon» betyr en test som gir sant eller usant. Her betyr det en portoperasjon på hvert bitpar.
Alt som kobler maskinen til verden utenfor: tastatur, skjerm, nettkort, disk.
De er koblet til de samme bussene som minnet, og prosessoren snakker med dem på liknende måte — den skriver og leser på bestemte adresser.
Den faste feilslutningen: å tro at disken er en del av hovedminnet. Den er en utenhet, og et diskoppslag er størrelsesordener tregere enn et RAM-oppslag.
Sjekklisten, som avgjør en fast oppgavetype:
Inne i CPU-en: ALU, kontrollenhet, alle registre (inkludert programteller og instruksjonsregister), og de innerste mellomlagrene.
Utenfor CPU-en: hovedminnet (RAM), disken, alle inn- og utenheter, og bussene mellom dem.
Huskeregelen: alt som er lite og raskt, er inne. Alt som er stort, er ute.
Første trinn i instruksjonssyklusen: kontrollenheten legger programtellerens verdi på adressebussen, ber om lesing, og får instruksjonen tilbake på databussen.
Instruksjonen legges i instruksjonsregisteret, og programtelleren økes.
Merk at maskinen på dette tidspunktet ikke vet hva instruksjonen betyr — den vet bare hvilket tall som sto i cellen. Tolkningen er neste trinn.
Tredje trinn i instruksjonssyklusen, der selve virkningen skjer: ALU-en regner, en verdi flyttes mellom register og minne, eller programtelleren settes til en ny adresse.
Hvor lang tid trinnet tar, avhenger helt av instruksjonen. En addisjon mellom to registre kan ta én sykel; en instruksjon som må hente en verdi fra hovedminnet, kan koste mange.
Den faste feilslutningen: å tro at alle instruksjoner tar like lang tid. Det er nettopp variasjonen som gjør cache-regningen i neste kapittel interessant.
At ulike instruksjoner er i ulike trinn samtidig: én hentes, én tolkes, én utføres.
Formelen for n instruksjoner og k trinn, når hvert trinn tar én sykel: k + (n − 1) sykler totalt.
Eksempel: seks instruksjoner og tre trinn gir 3 + 5 = 8 sykler, mot 18 uten pipeline.
De første k − 1 syklene er «fyllingen» av båndet, og der er ikke alle trinn i bruk ennå.
Klokkesignalet gir takten. Det avgjør når en verdi låses inn i et register eller når neste trinn starter — men aldri hva som skal skje.
Hva som skjer, avgjøres av kontrollenheten ut fra instruksjonen.
Dette skillet er grunnen til at påstanden «klokkesignalet er lagret i RAM» er usann på to måter samtidig: signalet lagres ikke, og det bærer ingen informasjon som kunne vært lagret.
En prosessor på 3 GHz er ikke automatisk raskere enn en på 2,5 GHz. Ytelsen avhenger av både hvor mange sykler hver oppgave krever og hvor lang hver sykel er.
En maskin som bruker halvparten så mange sykler per instruksjon, vinner selv med lavere frekvens.
Det er derfor pipeline, flere kjerner og mellomlagring betyr mer for ytelsen i dag enn frekvenstallet gjør.
Sumbitet er 1 når et odde antall av de tre inngangene er 1. Menten ut er 1 når minst to av dem er 1.
En ekvivalent form for menten er A·B + A·C_inn + B·C_inn, som sier «minst to» direkte. De to formene gir samme kolonne i alle åtte radene.
Måten n fulladdere kobles sammen på: menten ut fra posisjon i går inn som mente inn på posisjon i + 1.
Det betyr at den øverste posisjonen ikke kan bli ferdig før alle de under er det — menten «løper gjennom» kjeden.
Det er derfor en bred adder er tregere enn en smal, og det er et av flere steder der kretsdybde koster tid i praksis.
Et styresignal fra kontrollenheten avgjør om invertererne og mente inn er aktive. Er de av, adderer kretsen; er de på, subtraherer den.
Dette er samme regel som negasjonen i to-er komplement fra kap. 1.3, realisert i maskinvare.
Listen over alle instruksjoner en gitt prosessor forstår, med hva hver av dem gjør.
Du har allerede arbeidet med et lite instruksjonssett: LMC-instruksjonene i kap. 1.4 med sine tre-sifrede opkoder.
En virkelig prosessor har hundrevis av instruksjoner i stedet for elleve, men prinsippet er det samme: en opkode identifiserer operasjonen, og resten av instruksjonen sier hva den skal virke på.
1. Teknologiutviklingen gir færre transistorer. (Usant — det blir flere og mindre.)
2. Klokkesignalet er lagret i RAM. (Usant — det genereres, det lagres ikke.)
3. Et register er bygd av RAM. (Usant — egne, raske kretser i CPU-en.)
4. ALU-en ligger utenfor CPU-en. (Usant — den er en av CPU-ens tre deler.)
5. En 64-bits ALU krever 65 en-bits ALU-er. (Usant — det er 64.)
Mål hver rad i en maskinvare-matrise mot denne listen først. Er rada en av de fem eller en nær variant, er svaret usant.
Disse er sanne, og de skal ikke avvises selv om de handler om samme temaer som de fem faste usanne:
- Registre er raskere enn hovedminnet.
- ALU-en gjør både aritmetiske og logiske operasjoner.
- En portutgang kan være inngang på flere porter.
- Kode og data ligger i samme minne i von Neumann-arkitekturen.
- Pipeline øker antall instruksjoner som blir ferdige per sekund.
Poenget: temaet avgjør ikke svaret. Ordlyden gjør.
Samme tema gir ofte både en sann og en usann rad, avhengig av avgrensningen i ordlyden.
| Påstand | Svar |
|---|---|
| Pipeline gjør hver enkelt instruksjon raskere | Usann |
| Pipeline øker antall ferdige instruksjoner per sekund | Sann |
| Høyere klokkefrekvens gir alltid raskere maskin | Usann |
| Høyere klokkefrekvens gir kortere klokkesykel | Sann |
Arbeidsmåten: stryk under hva rada faktisk måler — per instruksjon eller per tidsenhet — før du krysser av.
Oppgaver i seksjon 2 kan gi bonuspoeng for full pott på en matrise, og minus per feil avkryssing.
Konsekvensen for arbeidsmåten: det lønner seg ekstra godt å ha en fast sjekkliste for de radene som går igjen, slik at tiden kan brukes på de radene som faktisk krever ettertanke.
Regelen fra formatet ellers gjelder fortsatt: kryss av det du kan begrunne, og la stå åpent der du er reelt i tvil.
Dette kapitlet er skrevet av Anthropics toppmodeller (Claude Opus og Claude Fable) og er foreløpig ikke manuelt gjennomgått — kvalitetskontrollen gjøres av uavhengige KI-agenter, og innmeldte feil rettes fortløpende. Funnet en feil? Meld fra, så retter vi den. Les mer om hvordan innholdet lages.
Skolesaga er en uavhengig læringsressurs og er ikke tilknyttet eller godkjent av Universitetet i Oslo. Dette er ikke offisielt studiemateriell. Les mer.