Hur fungerar datorer egentligen?
En översikt på hög nivå över hur binära tal får datorer att fungera för nyfikna icke-tekniska personer.
Hur datorer fungerar är något som jag alltid varit nyfiken på, men som jag egentligen aldrig trodde att jag skulle ha den egentliga grundkunskapen för att förstå det, ens på en hög nivå. Att göra efterforskningar för att skriva det här blogginlägget och upptäcka att det inte var så svårt att förstå har varit mycket givande. Dessutom är det ganska häpnadsväckande att få förstå hur datorer fungerar, även på en hög nivå.
Det mest grundläggande sättet att tänka på en dator är att den är en in- och utmatningsmaskin. Det är en ganska grundläggande idé: datorer tar information från externa källor (ditt tangentbord, din mus, sensorer eller Internet), lagrar den, bearbetar den och returnerar resultatet (Output) av denna process. Förresten, om du tänker på det, så är det så att så fort datorer är anslutna via internet uppstår en evig slinga av inmatningar och utmatningar, eftersom en dators utdata (t.ex. en webbplats) blir en inmatning för en annan dator och så vidare(!!).
Nu är vi alla ganska vana och bekanta med de sätt som en dator har för att ta emot input och skriva ut något output, vi har alla använt en mus eller ett tangentbord, eller till och med pratat med en dator och vi har alla läst en artikel på en webbplats, lyssnat på musik eller bläddrat igenom några gamla bilder, osv. Vad vi inte är lika bekanta med och vad vi vanligtvis har svårt att förstå är hur en dator faktiskt bearbetar information.
Så ja, på en mycket grundläggande nivå är allt en dator förstår 1:or och 0:or, vilket innebär att varje enskild inmatning och utmatning vid något tillfälle översätts till eller från 1:or och 0:or. Det kraftfulla med 1:or och 0:or (även kallade bitar – från BInary digiT) är att det gör det möjligt för oss att omvandla all information till elektriska signaler (ON/OFF). Ta en stund för att tänka på det: Allt du ser, tänker eller interagerar med kan faktiskt omvandlas och representeras som elektriska signaler(!!!!). Att representera information som elektriska signaler är det som gör det möjligt för datorer att faktiskt bearbeta informationen och omvandla den.
Hur fungerar då det binära talsystemet? Binära tal innebär att alla tal beräknas med bas 2. Som exempel kan nämnas att de flesta av oss är vana vid att tänka på tal med bas 10. Om du tänker på ett tal, låt oss säga 2561, kan du se hur beroende på vilken position talet intar från höger till vänster, har talet ett annat värde som är en multipel av tio. I det här exemplet upptar till exempel 1 positionen 1s, 6 positionen 10s, 5 positionen 100s och 2 positionen 1000s. På så sätt blir (2×1000) + (5×100) + (6×10) + (1×1) = 2561. Binära tal fungerar på exakt samma sätt, men varje steg representerar en ökning med x2 jämfört med föregående steg. Här är ett exempel på hur man representerar talet 12:
Så, med 8 bitar kan du representera vilket tal som helst mellan 0 och 255, och med 32 bitar kan du representera vilket tal som helst mellan 0 och 4 miljarder. Du kanske tänker: Visst, men hur är det med strängar och interpunktion? I dag följer vi fortfarande ASCII, American Standard Code for Information Interchange, som i princip kopplar alla tecken eller skiljetecken, inklusive stora bokstäver, till ett av de 8-bitarsnumren. Och det är så här vi använder siffror för att representera bokstäver.
Säkerligen, men hur är det med bilder? Jo, faktiskt kan en bild också reduceras till 0:or och 1:or. Som du vet har varje skärm ett givet antal pixlar och varje pixel har en färg och som du vet kan vi med hjälp av RGB- eller HEX-färgkoder representera färger som siffror, vilket innebär att vi i princip kan tala om för en dator vilken färg varje pixel måste ha. Samma sak gäller för musik, video och alla andra typer av information du kan tänka dig.
Men hur i helvete ”beräknar” vi elektriska signaler? Det är där elektriska kretsar kommer in i bilden. På en mycket grundläggande och förenklad nivå kan vi använda elektriska kretsar för att bete oss som ”logiska maskiner”. Vi kan ha kretsar som, givet en viss ingång, returnerar en utgång beroende på den logik med vilken de har byggts upp (Not, And, Or) men också summor, subtraktioner, multiplikationer och divisioner. Det intressanta är att vi med hjälp av dessa mycket elementära former för att representera och bearbeta information faktiskt kan uppnå ”funktionell fullständighet”, vilket är en term som används inom logiken för att hänvisa till en uppsättning booleska operatörer som kan representera alla möjliga sanningstabeller, vilket är ett tjusigt sätt som matematiker har för att säga att ”sky is the limit”. Alla dessa beräkningar sker i en enhet inuti din CPU som kallas ALU (Arithmetic Logic Unit).
Som du säkert vet är CPU:er – Central Processing Unit – hjärnan i datorer och det är där alla beräkningar sker. Det intressanta med CPU:er är att de inte har något minne, vilket innebär att de inte kan komma ihåg någonting. Utan minne skulle varje beräkning gå förlorad direkt efter att vi utfört den. Grovt sett, och som du kanske redan vet, finns det två typer av minne som våra datorer använder: RAM som står för Random Access Memory och Persistent Memory. Du kan tänka dig RAM-minnet som ett enormt rutnät (matris) som lagrar 8-bitarstal. RAM-minnet håller reda på ”adresserna” i minnesmatrisen för varje givet 8-bitarstal när CPU:n behöver det. Och gissa vad? För att utföra dessa operationer använder vi exakt samma kretslogik som vi använde tidigare. Det vill säga, vi använder exakt samma logik för att låta en given inmatning lagras på en given ”plats” i minnet eller för att få tillgång till vilken information som helst som är lagrad i minnet.
Jag vet att jag knappt skrapar på ytan av hur datorer fungerar här, men bara för att förstå det här har det tagit en hel del tid för mig och det har redan blåst mig omkull mer än ett par gånger. Det som fascinerar mig med detta är hur kraftfulla datorer är och hur inbäddade de är i vår vardag, det är därför jag tror att det är viktigt att åtminstone ha en intuition om hur de fungerar. Dessutom, som alltid, om du upptäcker något fel så låt mig veta det.
Jag avslutar det här inlägget med en video som jag verkligen gillar där Steve Jobs jämför datorer med cyklar här:
Här är en lista över fantastiska resurser som jag har hittat när jag gjorde lite research för det här inlägget:
Khan Academy’s 5 short videos on how computers work: https://www.khanacademy.org/computing/computer-science/how-computers-work2/v/khan-academy-and-codeorg-introducing-how-computers-work
Crash Course-serien om datavetenskap är helt fantastisk: https://www.youtube.com/watch?v=O5nskjZ_GoI
En introduktion till logik och sanningstabeller: https://medium.com/i-math/intro-to-truth-tables-boolean-algebra-73b331dd9b94
NAND-logik, för att få en bättre förståelse för hur elektriska kretsar kan utföra logiska operationer: https://en.wikipedia.org/wiki/NAND_logic
Wikipediasidan för ASCII: https://en.wikipedia.org/wiki/ASCII
Wikipediasidan för binär kod med en kort historia om binär aritmetik: https://en.wikipedia.org/wiki/Binary_code
Om du vill gräva djupare är detta ett bra ställe att börja: https://softwareengineering.stackexchange.com/questions/81624/how-do-computers-work/81715
Tack för att du läst så här långt.