Hoe werken computers eigenlijk?
Een overzicht op hoog niveau van hoe binaire getallen computers laten werken voor nieuwsgierige niet-technische mensen.
Hoe computers werken is iets waar ik altijd nieuwsgierig naar ben geweest, maar ik had nooit gedacht dat ik daadwerkelijk de basiskennis zou hebben om het te begrijpen, zelfs niet op een hoog niveau. Het onderzoek dat ik heb gedaan om deze blogpost te schrijven en de ontdekking dat het niet zo moeilijk was om het te begrijpen, heeft me veel voldoening gegeven. Bovendien is het behoorlijk verbazingwekkend om te begrijpen hoe computers werken, zelfs op een hoog niveau.
De meest eenvoudige manier om over een computer na te denken is als een Input/Output machine. Dat is een vrij elementair idee: computers nemen informatie van externe bronnen (uw toetsenbord, muis, sensoren of het internet), slaan die op, verwerken die, en sturen het resultaat (Output) van dat proces terug. Trouwens, als je erover nadenkt, op het moment dat computers met elkaar verbonden zijn via het internet is er een oneindige lus van inputs en outputs omdat de output van een computer (zeg een website) de input wordt van een andere enzovoort(!!).
Nu, we zijn allemaal behoorlijk gewend en vertrouwd met de manieren waarop een computer input ontvangt en output afdrukt, we hebben allemaal wel eens een muis of een toetsenbord gebruikt, of zelfs tegen een computer gepraat en we hebben allemaal wel eens een artikel op een website gelezen, naar muziek geluisterd of door wat oude foto’s gebladerd, enz. Waar we niet zo vertrouwd mee zijn, en waar we meestal moeite mee hebben om te begrijpen, is hoe een computer eigenlijk informatie verwerkt.
Zo ja, op een heel fundamenteel niveau begrijpt een computer alleen maar 1’s en 0’s, wat betekent dat elke input en output op een bepaald punt wordt vertaald in of van 1’s en 0’s. Het krachtige van 1’s en 0’s (ook bits genoemd – van BInary digiT) is dat het ons in staat stelt alle informatie om te zetten in elektrische signalen (ON/OFF). Neem even de tijd om erover na te denken: ALLES wat je ziet, denkt of waarmee je in wisselwerking staat, kan worden vertaald en weergegeven als elektrische signalen(!!). Het weergeven van informatie als elektrische signalen is wat computers in staat stelt om die informatie daadwerkelijk te verwerken en om te zetten.
Dus hoe werkt het binaire getallenstelsel? Binaire getallen betekenen dat alle getallen worden berekend met basis 2. Als voorbeeld, de meesten van ons zijn gewend aan getallen met basis 10 te denken. Als je denkt aan een willekeurig getal, laten we zeggen 2561, zie je hoe afhankelijk van de positie die het getal inneemt van rechts naar links, het getal een andere waarde heeft die een veelvoud van tien is. In dit voorbeeld bijvoorbeeld staat 1 op de 1s positie, 6 op de 10s positie, 5 op de 100s positie en 2 op de 1000s positie. Op deze manier is (2×1000) + (5×100) + (6×10) + (1×1) = 2561. Binaire getallen werken op precies dezelfde manier, maar elke incrementele stap vertegenwoordigt een x2 toename ten opzichte van de vorige. Hier is een voorbeeld van hoe je het getal 12 kunt weergeven:
Dus met 8 bits kun je elk getal tussen 0 en 255 weergeven, en met 32 bits kun je elk getal tussen 0 en 4 miljard weergeven. Misschien denkt u nu, maar hoe zit het met tekenreeksen en interpunctie? Welnu, tot op de dag van vandaag volgen we nog steeds de ASCII, de American Standard Code for Information Interchange, die in principe elk teken of interpunctieteken, inclusief hoofdletters, koppelt aan een van de 8-bits getallen. En zo gebruiken we cijfers om letters weer te geven.
Zeker, maar hoe zit het met afbeeldingen? Nou, eigenlijk kan een beeld ook worden gereduceerd tot 0’s en 1’s. Zoals u weet, heeft elk scherm een bepaald aantal pixels en elke pixel heeft een kleur en zoals u weet, kunnen we met RGB- of HEX-kleurcodes kleuren weergeven als getallen, wat betekent dat we een computer in feite kunnen vertellen welke kleur elke pixel moet hebben. Hetzelfde geldt voor muziek, video en elk ander type informatie dat je maar kunt bedenken.
Maar hoe “berekenen” we in godsnaam elektrische signalen? Dat is waar elektrische circuits om de hoek komen kijken. Op een zeer elementair en overgesimplificeerd niveau kunnen wij elektrische schakelingen gebruiken om zich te gedragen als “logische machines”. Wij kunnen schakelingen hebben die, gegeven een specifieke invoer, een uitvoer zullen terugzenden, afhankelijk van de logica waarmee zij zijn opgebouwd (Niet, En, Of), maar ook sommen, aftrekkingen, vermenigvuldigingen en delingen. Het interessante is dat we met deze zeer elementaire vormen van representatie en verwerking van informatie in feite “functionele volledigheid” kunnen bereiken, een term die in de logica wordt gebruikt om te verwijzen naar een reeks booleaanse operatoren die in staat zijn alle mogelijke waarheidstabellen weer te geven, wat een deftige manier is die wiskundigen gebruiken om te zeggen dat de sky de limit is. Al deze berekeningen gebeuren in een eenheid binnen uw CPU die ALU (Arithmetic Logic Unit) wordt genoemd.
Zoals u waarschijnlijk weet zijn CPU’s – Central Processing Unit – de hersens van computers en het is waar alle berekeningen gebeuren. Het interessante van CPU’s is dat ze geen geheugen hebben, wat betekent dat ze absoluut niets kunnen onthouden. Zonder geheugen zou elke berekening verloren gaan direct nadat we ze hebben uitgevoerd. Grofweg, en zoals je misschien al weet, zijn er twee soorten geheugen die onze computers gebruiken: RAM wat staat voor Random Access Memory en Persistent Memory. U kunt het RAM-geheugen zien als een immens raster (matrix) waarin 8-bits getallen worden opgeslagen. Het RAM-geheugen houdt de “adressen” in de geheugenmatrix bij van elk gegeven 8-bits getal voor wanneer de CPU het nodig heeft. En raad eens? Om deze bewerkingen uit te voeren, gebruiken we precies dezelfde circuit-logica die we eerder gebruikten. Dat wil zeggen, we gebruiken precies dezelfde logica om een gegeven invoer op een bepaalde “plaats” in het geheugen op te slaan of om toegang te krijgen tot welk stukje informatie dan ook dat erin is opgeslagen.
Ik weet dat ik hier nauwelijks een tipje van de sluier oplicht over hoe computers werken, maar alleen al het doorgronden hiervan heeft me heel wat tijd gekost en heeft me al meer dan eens op andere gedachten gebracht. Wat me hierin fascineert is hoe krachtig computers zijn en hoe ingebed ze zijn in ons dagelijks leven, dit is waarom ik denk dat het belangrijk is om op zijn minst een intuïtie te hebben van hoe ze werken. En, zoals altijd, als je een fout ziet, laat het me weten.
Ik zal deze post eindigen met een video die ik erg leuk vind waar Steve Jobs computers vergelijkt met fietsen:
Hier is een lijst van geweldige bronnen die ik heb gevonden tijdens het doen van wat onderzoek voor deze post:
Khan Academy’s 5 korte video’s over hoe computers werken: https://www.khanacademy.org/computing/computer-science/how-computers-work2/v/khan-academy-and-codeorg-introducing-how-computers-work
Crash Course-serie over informatica zijn absoluut geweldig: https://www.youtube.com/watch?v=O5nskjZ_GoI
Een inleiding tot logica en waarheidstabellen: https://medium.com/i-math/intro-to-truth-tables-boolean-algebra-73b331dd9b94
NAND-logica, om beter te begrijpen hoe elektrische circuits logische bewerkingen kunnen uitvoeren: https://en.wikipedia.org/wiki/NAND_logic
De Wikipedia-pagina voor ASCII: https://en.wikipedia.org/wiki/ASCII
Wikipedia-pagina voor Binary Code met een korte geschiedenis van binaire rekenkunde: https://en.wikipedia.org/wiki/Binary_code
Als u dieper wilt graven, is dit een goede plek om te beginnen: https://softwareengineering.stackexchange.com/questions/81624/how-do-computers-work/81715
Bedankt voor het lezen tot nu toe.