Korte geschiedenis van de computer
Mei 2003 heb ik voor mijn huiskamerdiscussieclubje een korte inleiding over de computer geschreven. Omdat ik al mijn geschrijf aan het herordenen ben (ik raak het overzicht een beetje kwijt) kwam ik het weer tegen. En je moet toch iets af en toe…Doordat de we nu zoveel leren over wat ik accumulatie in de tijd wil noemen, kunnen we iets van de illusie van continuïteit beseffen die het dagelijks bewustzijn ons voorschotelt. Wat is dat toch vreemd: Dat een opeenvolging van bijvoorbeeld noten als samenhangend ervaren kunnen worden. Terwijl de ene noot al geklonken heeft en de volgende gehoord wordt is er “iets” wat deze beide (en wel meer dan dat) in één moment van muzikale ervaring stopt. Wonderlijk dat er niet alleen een hier en nu is maar dat ervaringen en waarnemingen zich op een of andere wijze kunnen ophopen tot “hogere” ervaringen. Het apparaat dat je daarvoor hebt is je menselijk bewustzijn. Een programma dat zich ontwikkeld heeft (en zich nog steeds doorontwikkeld) in de hersenen. Het is ook de accumulatie van ervaringen die veroorzaakt dat je de kloktijd als steeds sneller lopend gaat ervaren: er gaan minder nieuwe indrukken (en meer oude) in een uur.De eerste computers zijn ontwikkeld rond de WO II, hoewel het theoretisch fundament ervoor al in de dertiger jaren werd gelegd door de beschrijving van de zg Turing Machine door, hoe kan het anders : Turing. Een Turing Machine bestaat uit een (theoretisch oneindig lange) band met daarop symbolen. Boven die band is een leeskop die één symbool tegelijk kan lezen en die bovendien in een bepaalde toestand is (genummerd 0,1,2,3…) en met een interne set van instructies vervolgens (afhankelijk van het gelezen symbool en de op dat moment heersende toestand bepaald:
1) Wat de nieuwe interne toestand wordt
2) Of het volgende te lezen symbool links of rechts van het huidige gelezen wordt of dat de toestand “einde” bereikt is
3) Of en welk symbool op de band geschreven wordt op de plaats waar het huidige symbool stond.
Van belang is dat er voor elke mogelijke combinatie van symbool en toestand een instructie is.
Een dergelijke “machine” is (in theorie) tot alles in staat wat ook een willekeurige computer vermag. Deze zelfde Turing heeft de geheime code (“Enigma”) van de Duitsers in WO II gekraakt, waarover een paar jaar geleden een speelfilm is uitgebracht.
De tweede vader van de computer (ik vrees dat er geen moeders zijn) was de Amerikaan John von Neumann. Aan hem wordt het idee toegeschreven om de data van de tape en de instructies die er op uitgevoerd worden in het zelfde manipuleerbare werkgeheugen te plaatsen. de processor (zeg maar de leeskop) leest aan de ene kant instructies en aan de andere kant gegevens. Evenals de turing-machine bepaalt de uitkomst van gegeven plus instructie welke “staat” van kracht is en vloeit daaruit voort welke volgende instructie wordt uitgevoerd. Maar in principe is het hier zelfs mogelijk dat de instructies zelf wijzigen door het verloop van het programma. Bovendien is het zeer veel eenvoudiger om een willekeurig programma uit te voeren. In plaats van de computer te programmeren door in borden stekkers te steken die de volgorde van de stappen bepalen kunnen nu via een eenvoudig mechanisme, bijvoorbeeld een ponsband, de instructies ingelezen worden. Wel is er een set van simpele instructies, de zogenaamde microcode, in de processor vast ingebouwd. Programma’s dienen aan te geven welke microcodes op welk moment uitgevoerd moeten worden. Deze programma’s gebruiken z.g. machinetaal en zijn opgebouwd in de trand van: Breng de inhoud van register A (een bepaalde plek in het werkgeheugen) over naar plek B. Een sorteer programma bestaat zo in de kern uit: Als de inhoud van A groter is dan B, verwissel dan A en B.
Al spoedig bedacht men dat die machinetaal wel heel lastig was en ontwikkelde men z.g. hogere talen met allerlei fraaie namen zoals FORTRAN, COBOL, ALGOL. Op dit moment zijn de meest populaire talen C++, JAVA en Visual Basic. Kern van elke taal is de compiler; een speciaal programma dat de hogere taal vertaald naar machine-instructies. Pas de laag daarboven is voor de gewone gebruiker zichtbaar: De zogenaamde toepassingsprogramma’s. Een programma als “Word” is grotendeels geschreven in “C++”.
Het idee van het “laden” van een programma en het daarna uitvoeren er van schiep al spoedig de behoefte aan een programma dat speciaal deze taak uitvoert: Een willekeurig programma laden, starten en ervoor zorgen dat de invoer van gegevens en de uitvoer van resultaten goed verloopt. Dit speciale programma heet het “besturingssysteem” voor de meeste van ons het welbekende “Windows”. Dit programma moet dan automatisch zichzelf kunnen laden op het moment dat de computer wordt aangezet.
Naast deze bedenkers van het principe waren er zeer veel doorbraken op het fysieke vlak voor nodig voordat de computer zijn huidige kracht en omvang kon bereiken. De eerste werkende computers die op bovenstaande principes werkten werden tussen 1945 en 1950 gebouwd. Ze waren zeer groot en lomp, weinig bedrijfszeker en hadden een lachwekkende capaciteit. Pas met de uitvinding van de transistor (door Bardeen, Shockley, and Brattain) in 1947 (die pas rond 1960 echt gebruikt werd), en het “geïntegreerde circuit” (chip) (Kilby & Noyce, 1959) en niet te vergeten de enorme maar vrij naamloze ontwikkeling op het gebied van de opslag op magnetiseerbare media startte de werkelijke ontwikkeling van krachtige computers.
Ik heb heel lang niet goed kunnen begrijpen hoe een computer werkte, hoewel ik alles van nullen en enen en genoeg van logische schakelingen wist, omdat een aantal zaken er in de beschrijving van de computer nogal bij inschieten. Dat is de “klok” of beter de “klokken”, de “bus”, de gegevensstroom tussen de onderdelen van de computer verstuurd worden en de breedte van de datastroom: hoeveel binaire eenheden vormen samen een eenheid. Een enkele stap: bijvoorbeeld het optellen van 11011 en 01000 tot 100011 (27+ 8=35) is wel te begrijpen maar hoe dat dan allemaal in elkaar grijpt is niet te snappen als je niet beseft dat alle instructies volgens een bepaald ritme elkaar opvolgen. Dit ritme wordt bepaald door de klok, die een aantal pulsen per seconde uitzend. In de modernste pc’s nu al meer dan 2 GigaHerz dat wil zeggen meer 2 miljard pulsjes per seconde.
Mijn eerste PC (foto hierboven) in 1983 had een kloksnelheid van wel 4 Megahertz ofwel slechts 4 miljoen pulsjes (en een werkgeheugen van 64K tegenover 256 Mb nu) een factor 500 sneller dus en een factor 4000 groter geheugen. Wat aan die hoge snelheden verwonderd is de vraag waar de grens ligt. Er moet natuurlijk ergens en fysieke grens zijn aan het maximale aantal trillingen per seconde. Ongetwijfeld staat die in verband met de lichtsnelheid.
Het grote probleem is dat allerlei onderdelen van computers met verschillende snelheden werken. Deze onderdelen zijn allemaal aangesloten op het centrale deel via een z.g. “bus”. Dit is een soort interne snelweg in de PC. De snelheid op deze snelweg is ook maatgevend voor de snelheid van de PC maar niet gelijk aan die van de processor. Het interne geheugen bijvoorbeeld werkt tegenwoordig vaak op een snelheid van 133 MhZ en dat is dan ook meestal de snelheid van de klok van de bus. Voor apparaten die afwijken moeten allerlei hulpjes gebruikt worden om toch op de standaardsnelheid te kunnen communiceren en ook de zeer snelle processor dient “wacht” stapjes in te kunnen bouwen wil het geen enorme janboel worden.
En dan is er de “breedte”. De theorie werkt in feite met een breedte van 1, Dat wil zeggen dat van de simplificatie wordt uitgegaan dat de centrale processor telkens maar één dataeenheid tegelijk bekijkt. Het zal duidelijk zijn dat er afspraken nodig zijn over hoeveel data-eenheden samen een eenheid vormen. Tevens wordt hier de relatie met de “accumulatie” zichtbaar. We moeten een mechanisme hebben waarmee een serie achtereenvolgende tekens als één woord wordt behandeld.
Ook hierin is een duidelijke ontwikkeling: De 1e microprocessor werkte met woorden van 4 bits (0/1-en) breed. Wilde men eenheden gebruiken die groter waren (per slot van rekening kun je maar tot 16 tellen met 4 0-en en 1en) dan moest het programma zo werken dat bijvoorbeeld 2 achtereenvolgende “woorden” samen een eenheid vormen en als zodanig behandeld worden. Uiteraard zijn daar speciale voorzieningen voor nodig in de CPU. De huidige CPU’s hebben een 32-bits breedte en grote computers werken ook wel op 64-bits breedte. Dit betekent niet automatisch dat alle onderdelen en programma’s ook op die breedte werken. Sommige apparaten of programma’s werken nog 16-bits of zelfs 8 bits. Dit levert weer aanpassingsproblemen tussen de diverse onderdelen en programma’s op.
Tenslotte: hoe weet de PC waar een bepaalde gegevens eenheid (“woord”)naartoe moet, bijvoorbeeld dat het op weg is van zeg de harde schijf naar de printerpoort. Dit gaat met z.g. adressering: Speciale stuursignalen die met ieder woord meegaan om aan te geven waar ze naartoe moeten. Deze signalen staan op aparte stuurkanaal van de bus, maar er is ook een andere oplossing:
Parallel en Serieel.
Via deze tussenstap komen we dan uiteindelijk op een zeer fundamenteel begrip in de computer-wereld. Parallel en Serieel. Alle informatie stromen zijn altijd een combinatie van beiden. Het smalste is een breedte van “1” Er zal altijd een vast aantal van dergelijke eenheden moeten worden afgesproken wil men iets kunnen. Veel gebruikt is de eenheid “byte” die acht eenheden bevat. Daarnaast zijn er speciale afspraken nodig die onderscheid maken tussen stuursignalen (waar moet ik naartoe?) en de inhoud. Dat kan dus door de stuursignalen over aparte kanalen te sturen of door afspraken over de opbouw van een pakket. Het betreft dan een bijeenhorende serie 1en en 0en. Waarvan het begin aangeeft: (1) Ik ben een pakket van het type…. (2) het nummer van de afzender (3) het nummer van de bestemming (4) De hoeveelheid volgende 0en en 1en die bij het totale pakket horen. Bijna alle communicatie tussen computers onderling gaat serieel. Deze wordt gemeten in bits per seconde. De allereerste modems (apparaten voor communicatie over telefoonlijnen) haalden 2400 bits/sec ofwel 2,4 Kbs. Een gewoon kantoornetwerk is nu 100Mbs en moderne internetaansluitingen 0,5 Mbs. Over transatlantische glasvezels gaat het met Gbits tegelijk. Toch zijn computers de laatste 10 jaar niet zo heel veel slimmer geworden. Het grootste deel van al deze capaciteitsvergroting is opgegaan aan een eenvoudiger bediening en aan de grafische vormgeving. De tekstverwerker op mijn eerste PC uit 1983 kan fundamenteel ongeveer hetzelfde als die van nu. Alleen moest je voor veel functies speciale code’s in de tekst stoppen die je zelf moest intypen. Vaak was het effect ervan pas te zien op het moment dat je de tekst uit de printer liet komen Op dit moment zitten die codes er nog steeds in alleen zijn ze “verstopt” (ze laten hun effect meteen zien in de tekst) en kun je ze op een eenvoudige manier aanbrengen.
I am a I-Packet
Geboren op 12839242 in 192.168.0.1 vang ik mijn reis aan naar 192.168.0.33 mijn eerste bestemming is 192.168.0.15 (2msec, onder het bureau). Daar blijk ik te worden ingepakt een nieuw pakket dat als afzender 148.244.241.12 heeft en als bestemming 222.162.243.225. Spoedig (na 23 msec) bevind ik mij reeds in 148.244.241.233 , (nog wel in Amsterdam ja) waar een tabel aanwijst dat ik voor mijn eindbestemming eerst naar 235.132.124.8 moet (dit blijkt een kastje ergens bij NY te zijn) waar ik na 55 Msec aankom. Daar aangekomen moet ik naar 226.231.144.66 (bij SanFransico, aankomst na 34 msec) alwaar mijn omhulsel eindelijk naar 222.162.243.225 (10 msec, Silicon Valley) mag . Daar wordt mijn omhulsel afgestroopt en blijkt mijn eindbestemming 192.168.0.33 nog slechts 1 msec ver. Na in totaal ongeveer 100 msec kom ik dan op mijn eindbestemming aan waar ik onder overhandiging van mijn inhoud op 12839350 kom te overlijden.
|
Het begrip parallel en serieel kan ook in hogere zin terugkomen omdat we tot nu toe steeds zijn uitgegaan van één opdracht tegelijk (ook al kan die in woorden gaan die serieel aankomen). Het is echter zeer wel mogelijk verschillende taken (gecoördineerd) gelijktijdig te verrichten. Computers die het weer voorspellen bijvoorbeeld, bestaan uit meerdere processoren die gelijktijdig de ontwikkeling van de luchtdruk in een bepaalde deelgebieden een stap verder berekenen en dan de resultaten weer uitwisselen voor de volgende stap.
Een van de meer fundamentele verschillen tussen de menselijke hersenen en de computer is het massale parallellisme van het brein. Het schijnt zo te zijn dat de verwerking van elke geprikkelde oogzenuw gelijktijdig met die van alle andere plaatsvindt in een soort zeeffunctie waarbij het plaatje door een aantal plakjes hersenen heen schiet waar verschillende beelden zijn opgeslagen. Dat plakje dat het meest “resoneert” op het inkomende beeld wordt dan als interpretatie (herkenning) van dat beeld genomen. Op dit moment werkt een computer meestal nog beeldpuntje voor beeldpuntje af. Herkenning is dan een uiterst moeizame zaak. Omdat de hersenen op een zeer lage kloksnelheid werken (10 – 30 impulsen per seconde) kan de computer ze langs deze weg op den duur toch inhalen. Toch gaat ook de ontwikkeling van parallel werkende computersystemen voort.
De 2e vader van de computer (ik vrees dat er geen moeders zijn)
Al was ze er nog niet in de jaren ’40,
maar later was iemand als Susan Kare toch niet te onderschatten…
Overigens heeft mijn Spectrumpje uit 1981 een ereplaats in mijn boekenkast,
net als mijn eerste Toshiba-laptop uit 1985 (die toen 2600 gulden kostte..)
Interessant onderwerp. Elektronica heeft al heel lang mijn belangstelling. E. heeft de wereld veranderd.
Je schrijft: "De 1e computers zijn ontwikkeld rond de 2e WO hoewel het theoretisch fundament ervoor al in de 30er jaren werd gelegd door de beschrijving van de zg Turing Machine door hoe kan het anders : Turing."
Gedeeltelijk waar. Maar je doet George Boole, die leefde van 1815 tot 1864, groot onrecht aan door hem in dit verband niet te noemen.
Nu ga ik rustig de rest doorlezen.
Beste Victor,
In de tweede alinea staat: "Breng de inhoud van register A (een bepaalde plek in het werkgeheugen) over naar plek B. "
Ik heb echter geleerd dat registers zich bevinden in de microprocessor, de chip die het ‘hart’ vormt van de computer.
Dus niét in het werkgeheugen. Hoe zit dat?
@Selma
Midden jaren tachtig had ik verschillende Atari’s. Een harde schijf voor de Atari-ST kostte me rond 1989 zo’n 1000 gulden. Hij had een geheugentje van 20 megabyte…
Mooi blog…ab groet
@Selma. De naam Susan Kare zegt me helaas niets. Welke bijdrage heeft zij geleverd? Ik heb helaas mijn Osborne ergens eind 80er jaren verkocht. Heb nog wel een rekenmachine van eind 70er jaren in mijn minimuseum. In mijn verhaal ontbreken ook namen van belangrijke (PC-)ontwikkelaars als Ratliff (dBase), Carr (Framework, het beste geïntegreerde pakket ooit), Gates (MS-DOS, Basic), Kildall (CP/M) e.v.a.. Ook daar zitten weinig vrouwen tussen vrees ik.
De afgebeelde Osborne kostte met epson printer en los scherm iets van fl 10.000 in 1984. Daarbij dan dBaseII, Visicalc, Wordstar.
@Egbert: Boole is in de eerste plaats wiskundige (logica). Als je Boole noemt zou je er nog veel meer moeten noemen. Het fundamentele van de procedurele aanpak lijkt mij toch het belangrijkste.
Voor bovengenoemde inleiding is de precieze plaats van de registers niet heel erg belangrijk. Dat is een heel apart verhaal met aparte instructies om waarden uit het werkgeheugen of van de harde schijf te halen en in een register te zetten. Waarbij ook nog allerlei caching een rol speelt. Zeer ingewikkeld.
@Robbie: dank, groet.