Hvordan fungerer computere egentlig?
En oversigt på højt niveau over, hvordan binære tal får computere til at fungere, for nysgerrige ikke-tekniske personer.
Hvordan computere fungerer er noget, som jeg altid har været nysgerrig på, men jeg har faktisk aldrig troet, at jeg ville have den egentlige grundlæggende viden til at forstå det, selv på et højt niveau. Så at lave research for at skrive dette blogindlæg og finde ud af, at det ikke var så svært at forstå, har været meget givende, plus at få lov til at forstå, hvordan computere fungerer, igen selv på et højt niveau, er ret fantastisk.
Den mest grundlæggende måde at tænke på en computer på er som en Input/Output-maskine. Det er en ret grundlæggende idé: computere tager oplysninger fra eksterne kilder (dit tastatur, din mus, sensorer eller internettet), lagrer dem, behandler dem og returnerer resultatet (output) af denne proces. I øvrigt, hvis du tænker over det, så er der i det øjeblik, computere er forbundet via internettet, en uendelig sløjfe af input og output, da output fra en computer (f.eks. et websted) bliver input fra en anden computer og så videre(!!).
Nu er vi alle temmelig vant til og bekendt med de måder, en computer har til at modtage input og udskrive noget output på, vi har alle brugt en mus eller et tastatur, eller endda talt til en computer, og vi har alle læst en artikel på et websted, lyttet til musik eller bladret gennem nogle gamle billeder osv. Det, vi ikke er så fortrolige med, og som vi normalt har svært ved at forstå, er, hvordan en computer rent faktisk behandler information.
Så ja, på et meget grundlæggende niveau er alt, hvad en computer forstår, 1’er og 0’er, hvilket betyder, at hvert eneste input og output på et eller andet tidspunkt bliver oversat til eller fra 1’er og 0’er. Det kraftfulde ved 1’er og 0’er (også kaldet bits – fra BInary digiT) er, at det giver os mulighed for at omdanne enhver information til elektriske signaler (ON/OFF). Tag et øjeblik til at tænke over det: ALT, hvad du ser, tænker eller interagerer med, kan faktisk omsættes og repræsenteres som elektriske signaler (!!!!). At repræsentere information som elektriske signaler er det, der gør det muligt for computere rent faktisk at behandle denne information og omdanne den.
Så hvordan fungerer det binære talsystem? Binære tal betyder, at alle tal beregnes med base 2. Som eksempel kan nævnes, at de fleste af os er vant til at tænke på tal med base 10. Hvis du tænker på et hvilket som helst tal, lad os sige 2561, kan du se, at afhængigt af den position, som tallet indtager fra højre til venstre, har tallet en anden værdi, som er et multiplum af ti. I dette eksempel optager 1 f.eks. 1s positionen, 6 optager 10s positionen, 5 optager 100s positionen og 2 optager 1000s positionen. På denne måde bliver (2×1000) + (5×100) + (6×10) + (1×1) = 2561. Binære tal fungerer på nøjagtig samme måde, men hvert trin repræsenterer en stigning på x2 i forhold til det foregående trin. Her er et eksempel på, hvordan man repræsenterer tal 12:
Så med 8 bits kan man repræsentere ethvert tal mellem 0 og 255, og med 32 bits kan man repræsentere ethvert tal mellem 0 og 4 milliarder. Du tænker måske: Ja, men hvad med strenge og tegnsætning? I dag følger vi stadig ASCII (American Standard Code for Information Interchange), som grundlæggende henfører alle tegn og tegnsætningstegn, herunder store bogstaver, til et af de 8-bit tal. Og det er sådan, vi bruger tal til at repræsentere bogstaver.
Sikkert, men hvad med billeder? Tja, faktisk kan et billede også reduceres til 0’er og 1’er. Som du ved, har enhver skærm et givet antal pixels, og hver pixel har en farve, og som du ved, kan vi ved hjælp af RGB- eller HEX-farvekoder repræsentere farver som tal, hvilket betyder, at vi stort set kan fortælle en computer, hvilken farve hver pixel skal have. Det samme gælder for musik, video og enhver anden form for information, du kan komme i tanke om.
Men hvordan fanden “beregner” vi så elektriske signaler? Det er her, at elektriske kredsløb kommer ind i billedet. På et meget grundlæggende og oversimplificeret niveau kan vi bruge elektriske kredsløb til at opføre os som “logiske maskiner”. Vi kan have kredsløb, der, givet et bestemt input, vil returnere et output afhængigt af den logik, som de er bygget op med (Not, And, Or), men også summer, subtraktioner, multiplikationer og divisioner. Det interessante er, at vi ved hjælp af disse meget elementære former for repræsentation og behandling af information faktisk kan opnå “funktionel fuldstændighed”, som er et begreb, der i logikken bruges om et sæt boolske operatorer, der er i stand til at repræsentere alle mulige sandhedstabeller, hvilket er en finere måde, som matematikere har for at sige, at “sky is the limit”. Alle disse beregninger sker i en enhed i din CPU, der kaldes ALU (Arithmetic Logic Unit).
Som du sikkert ved, er CPU’er – Central Processing Unit – hjernen i computere, og det er her, alle beregninger sker. Det interessante ved CPU’er er, at de ikke har nogen hukommelse, hvilket betyder, at de ikke kan huske noget som helst. Uden hukommelse ville alle beregninger gå tabt lige efter, at vi har udført dem. Groft sagt, og som du måske allerede ved, er der to typer hukommelse, som vores computere bruger: RAM, som står for Random Access Memory og Persistent Memory. Du kan tænke på RAM-hukommelse som et enormt gitter (matrix), der lagrer 8-bit tal. RAM-hukommelsen holder styr på “adresserne” i hukommelsesmatrixen for ethvert givet 8-bit-tal, så CPU’en kan bruge det, når den har brug for det. Og ved du hvad? For at udføre disse operationer bruger vi nøjagtig den samme kredsløbslogik, som vi brugte før. Det vil sige, at vi bruger nøjagtig den samme logik til at lade et givet input blive gemt på et givet “sted” i hukommelsen eller til at få adgang til en hvilken som helst oplysning, der er gemt i hukommelsen.
Jeg ved godt, at jeg knap nok skraber på overfladen af, hvordan computere fungerer her, men bare det at forstå dette har taget mig en del tid, og det har allerede slået mig flere gange. Det der fascinerer mig ved dette er hvor kraftfulde computere er og hvor indlejret de er i vores hverdag, derfor synes jeg det er vigtigt at man i det mindste har en fornemmelse af hvordan de fungerer. Også som altid, hvis du spotter en fejl, så lad mig vide det.
Jeg vil slutte dette indlæg med en video, som jeg virkelig godt kan lide, hvor Steve Jobs sammenligner computere med cykler her:
Her er en liste over fantastiske ressourcer, som jeg har fundet, mens jeg lavede noget research til dette indlæg:
Khan Academy’s 5 korte videoer om, hvordan computere fungerer: https://www.khanacademy.org/computing/computer-science/how-computers-work2/v/khan-academy-and-codeorg-introducing-how-computers-work
Crash Course-serien om datalogi er helt fantastiske: https://www.youtube.com/watch?v=O5nskjZ_GoI
En introduktion til logik og sandhedstabeller: https://medium.com/i-math/intro-to-truth-tables-boolean-algebra-73b331dd9b94
NAND Logic, for at få en bedre forståelse af, hvordan elektriske kredsløb kan udføre logiske operationer: https://en.wikipedia.org/wiki/NAND_logic
Wikipedia-siden for ASCII: https://en.wikipedia.org/wiki/ASCII
Wikipedia-siden for binær kode med en kort historie om binær aritmetik: https://en.wikipedia.org/wiki/ASCII
Wikipedia-siden for binær kode med en kort historie om binær aritmetik: https://en.wikipedia.org/wiki/Binary_code
Hvis du ønsker at grave dybere, er dette et godt sted at starte: https://softwareengineering.stackexchange.com/questions/81624/how-do-computers-work/81715
Tak for din læsning indtil videre.