Computers 101
Computers 101
Rubriek: informatief
Door: Marjet Verwelius
Wat zijn de principes die aan onze moderne computers ten grondslag liggen? Het is simpeler dan je misschien zou denken. Je kunt een computer bouwen met niets dan schapen, herders, paden en hekken.
Het concept van de moderne computer begon met een analyse van de wiskunde door Alan Turing in 1936. Turing ging de uitdaging aan te bewijzen dat een wiskundige van tevoren de uitkomst van een wiskundig probleem zou kunnen voorspellen. Deze uitdaging schreef voor dat hij eerst een simpele manier moest vinden om de onderliggende aard van de wiskunde te beschrijven, en wel op zo’n manier dat deze beschrijving geldig zou zijn voor wat voor wiskundig probleem dan ook.
Abstracte wiskunde
terwijl een bouwkundig ingenieur zou kunnen stellen dat een bepaalde baksteen twee pond en een bepaalde (natuur)steen vier pond weegt, zal een wiskundige de abstracte relatie tussen de twee willen vaststellen: de natuursteen is twee keer zo zwaar als de baksteen. Als blijkt dat dit een fundamentele eigenschap van bakstenen en natuurstenen is, dan zal de wiskundige de ingenieur vertellen dat het gewicht van een natuursteen gelijk is aan het gewicht van twee bakstenen. Simpel gezegd: ‘Natuursteen is gelijk aan twee bakstenen’, met de specificatie dat we het over gewicht hebben.
Om de boel nog verder te vereenvoudigen, zal de wiskundige de relatie symbolisch weergeven: N=2B (natuursteen is gelijk aan twee bakstenen).
Hier begint de magie voor de wiskundige: als natuursteen namelijk gelijk is aan 2 bakstenen, dan is het ook waar dat een baksteen gelijk is aan een halve natuursteen (B=N/2). Eureka! Bovendien: als we Natuursteen door Baksteen delen, dan is het resultaat altijd het nummer 2: natuursteen gedeeld door baksteen is gelijk aan 2 (N/B=2). Woohoo! Een natuurkundige constante!
Op dit punt gaat de ingenieur moeilijk doen: ‘Wat bedoel je met stenen door bakstenen delen? Hoe doe je dat? Waar heb je het over?’ Maar de wiskundige trekt zich niks van de ingenieur aan; hij is niet langer met stenen en bakstenen in de weer. In plaats daarvan houdt hij zich bezig met de abstracte relaties tussen stenen en bakstenen.
Booleaanse logica
De regels voor deze operaties waren al grondig vastgesteld in de tijd van Turing. In 1854 had de Britse wiskundige George Boole onderzoek gedaan naar de ‘regels van het denken’, waarbij hij letterlijk analyseerde hoe mensen denken en rationaliseren en tot logische conclusies komen, met name wat betreft de symbolische logica van de wiskunde. In de logica is elke bewering waar of onwaar, wat betekent dat de logicus alleen maar met deze twee mogelijkheden te maken heeft. Ja of Nee; Waar of Onwaar.
Dit principe houdt zelfs stand in een wereld met vele variaties. Een object kan bijvoorbeeld een steen zijn, een baksteen, een blok cement, of iets compleet anders. We kunnen nog steeds onderzoek doen naar het object door een serie ja-of-nee vragen te stellen. Is het een natuursteen? Ja of nee. Is het een baksteen? Ja of nee. Is het een cement blok? Ja of nee. Een andere manier om hetzelfde te bereiken is de conclusie te poneren en vervolgens te bepalen of de conclusie waar of onwaar is. Het is een natuursteen – waar of onwaar? Het is een baksteen – waar of onwaar?
Boole’s simpele beschrijving van het menselijk denkproces was precies wat wiskundigen graag zien, omdat ze zich niet bezig hoefden te houden met stenen en bakstenen, maar zich konden focussen op de relatie tussen abstracte beweringen.
Mechanische logica
Toen Turing zich bezig hield met deze wiskundige en logische processen, zag hij het als zijn taak om de gehele wiskunde terug te brengen tot een serie stap-voor-stap handelingen. Deze handelingen behelsden niet meer dan het vergelijken van twee ja-of-nee (waar–of-onwaar) items om vervolgens naar de volgende stap te gaan volgens de uitkomst die de wiskunde opleverde. Als het werkelijk zo simpel zou blijken te zijn, dan moest het mogelijk zijn om de denker (de mens) helemaal uit het proces te halen en in plaats daarvan een machine te ontwerpen die de berekeningen voor ons uitvoert. De denker zou dan in een luie stoel kunnen gaan zitten, terwijl de machine het werk doet. De denker is tenslotte alleen maar geinteresseerd in het uiteindelijke resultaat van de berekening (is de mathematische formule waar of onwaar). Turing stelde zich voor dat de denker lekker achterover zou kunnen blijven zitten tot de machine klaar is met de berekening en er een belletje zou gaan. De machine zou dan een een simpel ja of nee antwoord hebben aan het eind van alle (wellicht miljarden) simpele ja/nee vergelijkingen.
Het specifieke type machine dat Turing zich voorstelde is niet praktisch gebleken als een computer die geschikt is voor algemene doeleinden. Hij heeft echter wel de basis gelegd voor een machine die alle stappen uit kan voeren die nodig zijn om elk oplosbaar wiskundig probleem op te lossen.
Vrij snel nadat Turing zijn concept beschreef voor het terugbrengen van het menselijk denken tot handelingen die door een machine kunnen worden uitgevoerd, realiseerden de ingenieurs van deze wereld zich dat er daadwerkelijk manieren zijn om een dergelijk machine te bouwen. We kunnen een apparaat bouwen dat twee ja-of-nee beweringen vergelijkt (input) om vervolgens een andere ja-of-nee bewering uit te spugen die gebaseerd is op het resultaat van de vergelijking (output). Het ontwerp van deze universele computers was vrij eenvoudig, en er werd al snel aangetoond dat het Turing’s ontwerp na kon bootsen. Dat wil zeggen: de machines konden zo gebouwd worden dat ze alles voor elkaar konden krijgen wat Turing’s denkbeeldige machine voor elkaar kon krijgen. Dankzij de elegantie van de logica was dat genoeg bewijs om aan te tonen dat de nieuwe machines equivalent waren aan Turing’s machine. Op dat moment kon al het verdere bewijs van Turing dat zijn machine universeel was worden toegepast op de nieuwe machines, waardoor bewezen was dat deze machines ook universeel waren.
Een computer van schapen
Er zijn veel mogelijke manieren om een machine te bouwen die elk oplosbaar wiskundig probleem op kan lossen, maar alles wat we feitelijk nodig hebben is een ‘poort’ en een poortwachter.
fig. 1 Beeh-leaanse logica
We illustreren deze poort aan de hand van schapen en geiten. De invoer van schapen en geiten (input) wordt beoordeeld door de poortwachter. De poortwachter bepaalt of de twee binnenkomende dieren:
- twee schapen zijn
- een schaap en een geit zijn
- of twee geiten zijn
De poortwachter stuurt of een schaap of een geit door naar de volgende poort (en poortwachter), gebaseerd op welke combinatie van dieren oorspronkelijk zijn poort binnenkwam.
(Als het niet onze bedoeling zou zijn om de menselijke factor uit het proces te halen, zouden we een volledig werkende computer kunnen bouwen die bestaat uit weilanden, paden, schapen, geiten, herders en houten hekken.)
De meest toegepaste mechanische implementatie van dit model bestaat uit electriciteit, die door draden loopt. De twee inputs zijn simpelweg twee draden die ‘de poort’ binnengaan. De draad van een input is in dit geval ‘waar’ als er electriciteit doorheen gaat (het circuit is gesloten en daarom aan). De input is ‘onwaar’ als er geen electriciteit vanuit de draad de poort binnenkomt (het circuit is open en daarom uit). Bij de ‘poort’ worden deze twee electrische draden op zo’n manier door electrische apparaten geleid, dat er een signaal wordt geproduceerd (output) wanneer en alleen wanneer er bepaalde voorwaarden bestaan bij de input draden.
Stel je bijvoorbeeld voor dat dat we een electronisch circuit willen maken dat alleen het antwoord / output ‘waar’ geeft, wanneer beide inputs ‘waar’ zijn. Dit circuit zal functioneren als een logische EN poort (AND logic gate) Je kunt dit bijvoorbeeld als volgt voor elkaar krijgen:
1. Ontwerp een schakel mechanisme, op zo’n manier dat wanneer het circuit inactief / uit / onwaar is, de schakeling openstaat; en dat wanneer het circuit actief / aan / waar is, de schakeling gesloten is.
2.
Plaats de schakelingen aan de draad van een hoofdcircuit.
Dat is alles wat we nodig hebben om twee inputs te vergelijken en mechanisch te bepalen of ze alletwee actief / aan / waar zijn. In dit ontwerp zal het hoofdcircuit onderbroken zijn wanneer een input inactief / uit / onwaar is, omdat elk van de twee schakelingen het hoofdcircuit zal onderbreken wanneer hij open staat. Alleen wanneer beide schakelingen gesloten zijn, zal het hoofdcircuit compleet zijn, hetgeen een actief / aan / waar signaal zal opleveren bij de output.
Er zijn maximaal zeven logische poorten nodig om een compleet mechanisch systeem te bouwen dat Booleaanse logica implementeert, wat wil zeggen dat we alle wetten van het menselijk denken implementeren. Deze poorten zijn:
1. De NIET poort (NOT gate). Dit is de enige poort met niet meer dan een enkele input-poort, en hij draait de input simpelweg om. De output is waar als de input onwaar is, en de output is onwaar als de input waar is. Een dergelijke poort is makkelijk te ontwerpen. We kunnen bijvoorbeeld de draad van het hoofdcircuit een stukje verplaatsen zodat het schakelmechanisme omgekeerd werkt:
We kunnen deze schakeling in het hoofdcircuit hangen zo dat wanneer de input ‘aan’ is, het hoofdcircuit onderbroken is en vice versa. We kunnen nu op een betrouwbare manier de input omdraaien van aan naar uit en van uit naar aan.
Omdat we de NIET poort hebben, hoeven we de volgende poorten eigenlijk niet te bouwen, omdat ze ook gebouwd kunnen worden door verschillende combinaties te maken van de eerste drie poorten. Ze zijn echter wel nodig om het systeem van de Booleaanse logica volledig te maken:
4. De NIET-EN poort (NAND gate). Een poort met twee inputs. De output is onwaar wanneer (en alleen wanneer) beide inputs waar zijn. Dit is eigenlijk niet meer dan een EN poort gekoppeld met een NIET poort die de output in het tegenovergetselde omzet.
5. De NIET-OF poort (NOR gate). Een poort met twee inputs. Output is onwaar als één van de inputs (of beide) waar is. Zoals je ziet is dit een eenvoudige OF poort, gekoppeld aan een NIET poort die de output in het tegenovergetselde omzet.
Tot slot zijn er nog twee logische operaties die, wederom, geconstrueerd kunnen worden van een combinatie van de vorige poorten, maar die ook weer nodig zijn voor een complete implementatie van Boole’s systeem van logica:
6. De EXCLUSIEVE OF poort ((XOR gate). Een poort met twee inputs. De output is waar als een van de inputs waar is en de andere onwaar. Deze poort verschilt van de OF poort omdat de output niet waar is wanneer beide inputs waar zijn – de output is dus alleen maar waar als de inputs verschillen, waarbij er één waar is en de andere onwaar.
7. De EXCLUSIEVE NIET OF poort (XNOR gate). Een poort met twee inputs. De output is onwaar als een van de inputs waar is en de andere onwaar. Deze poort verschilt van de OF poort omdat de output niet onwaar is wanneer beide inputs waar zijn – de output is dus alleen maar onwaar wanneer de inputs van elkaar verschillen, waarbij er één waar is en de andere onwaar.
Dus: door drie eenvoudige logische poorten te ontwerpen (NIET, EN en OF) en deze in verschillende combinaties toe te passen, kun je een mechanisch apparaat bouwen dat het hele logische systeem van George Boole implementeert en waarbij de menselijke (en mathematische) logica teruggebracht wordt tot eenvoudige ja / nee keuzes. En door dit te doen kan een ingenieur een machine bouwen die hetzelfde doet als Alan Turing’s concept van een mechanisch apparaat dat elk wiskundig probleem op kan lossen dat op te lossen valt.
Het kan zelfs nog eenvoudiger: je kunt aantonen dat alle bovenstaande logische poorten geimplementeerd kunnen worden door verschillende configuraties van een of meer NIET-OF (NOR) poorten (of één of meer NAND poorten). De negatieve variant is nodig vanwege de logische kronkel die we allemaal tijdens de wiskundeles hebben geleerd: twee negatieve waarden resulteren in een positieve, maar twee positieve waarden blijven positief. Dus, twee NOR poorten of twee NAND poorten bewerkstelligen dezelfde logische operatie als een OR of een AND poort. De positieve variant kan zowel positief als negatief accomoderen, terwijl de positieve variant beperkt is tot het positieve. Bovendien kun je met eenvoudige combinaties van de NOR of de NAND poorten de overige Booleaanse bewerkingen uitvoeren: XOR en XNOR.
Hieruit volgt dat de luie computertechnicus alleen maar één enkele poort hoeft uit te vinden (NOR of NAND) om een machine te bouwen die in staat is elk probleem uit te rekenen dat uitgerekend kan worden!
Universele computers
Elke computer die op je bureau staat, thuis of op je werk, is zo’n universele computer. Hij kan elk oplosbaar mathematisch probleem oplossen, en dat is precies waar hij de hele dag mee bezig is. In een lange herhalingsoefening van Booleaanse logische operaties (geimplementeerd in zijn circuit van logische poorten) en volgens zijn instructies. Hij vergelijkt twee inputs, A en B, en maakt een beslissing op basis van hun onderlinge relatie. Vervolgens wordt het resultaat doorgestuurd naar de volgende operatie.
En dat is alles wat een computer doet.