Computertaal

Soms dan zit je in de trein en heb je ineens van die hele diepe gedachten…

In dit geval: Hoe weet een computer wat hij moet doen?

Ik weet dat een harde schijf bestaat uit 1-en 0-en, op basis van polarisatie. Ik weet dat software bestaat uit routines zoals ‘if (conditie = iets) then (doe dit)’. Maar… wie vertaalt die programmeertaal dan? Iets moet op een gegeven moment starten met een soort intelligente conversatie. Zoiets als ‘als je een 1 tegenkomt, doe dan dit’.
Een programmeertaal kan toch niet alleen op basis van stroominput begrijpen hoe bij zichzelf moet interpreteren?

Wie kan dit uitleggen? Mijn brein kan dit even niet meer aan na een lange werkdag :-S

9 comments

  1. arturo says:

    Goh heb je ff :)

    Noouuwww.. het begint met een chip die in je PC zit. Je BIOS. Dat ding zorgt ervoor dat ie naar randapparatuur kan kijken zoals een hardeschijf. Met ze’n allen hebben we afgesproken dat op het eerste stukje van een harde schijf (boot sector) software staat die ingelezen kan worden en gestart mag worden. Allemaal standaard regels.

    Maar in-a-nutshell , zo start een pc op :)

    Leuke anekdote, ik kende vroeger iemand die software schreef door hexadecimale getallen in te voeren. Geen instructies van IF then , maar A0 FF 66 B8

    :)

  2. wim says:

    heb ik ook jaren gedaan, programmeren in Assembler code (inderdaad dingen als A0 EF FF enzovoorts). De chip in je PC begrijpt deze code.

  3. Zwusje says:

    Ik denk niet dat je de enige bent die zich dit al eens heeft afgevraagd.
    Helaas heb ik de ervaring dat de mensen die dit begrijpen/ bevatten, niet in staat zijn om dit uit te leggen op een manier die ik ook kan begrijpen. Of het verhaal wordt té technisch voor iemand met zo weinig basiskennis als ik, of er wordt iets compleet anders uitgelegd, omdat het te veel moeite is.
    (yup, it’s a dare.. ;) )

  4. Lenny says:

    Nerdmeet :-P

    Maar ik snap het nog steeds niet. Okee, er is een bios waarin de standaardsoftware staat die de rest opstart. Maar hoe werkt die standaardsoftware dan?
    Ik begrijp dat een lamp licht geeft als er stroom door het draadje gaat, omdat dat warmte opwekt en dus weer licht. Maar waarom gaat de bios chip de dingen doen die jij wil, wanneer je er stroom door jaagt?

    De uitleg die ik online vind, heeft het vooral over WAT de hardware doet, maar niet HOE die het doet, zoals hier: http://www.ehow.com/how-does_4703872_computers-processor-work.html

  5. Ork says:

    Oef, leuke vraag.. en ik kom ook niet op die ene link die gewoon hier een snel en goed antwoord op heeft.

    Stom :)

    Eigenlijk zijn alle computers gewoon veredelde Turing machines, maar dan met wat extra trucjes voor input (lees: usb, je muis, je toetsenbord, maar ook: de harde schijf, je geheugen, de klok, etc.) en output (lees: je monitor, maar ook bestanden wegschrijven, etc.)….

    .. zoek die Turing machines maar eens op, geeft een leuke bron.

    Terug naar de basis. In je computer zit een processor. De processor doet niets anders een berg instructies lezen, en uitvoeren, in volgorde. Het BIOS zorgt er dan inderdaad voor dat ie weet “waar” ie eigenlijk moet beginnen… dus in de meeste gevallen met “GA dit deeltje van de harde schijf ophalen, en doe wat er staat.” — vaak staat er op “dit deeltje van de harde schijf” een stukje opstartcode van Windows 7, die individueel weer de processor vertelt wat ie nog meer moet ophalen om Windows verder te starten.

    Maar dat verklaart nog niet waarom het werkt met stroompjes.. oftewel 1 (stroom) en 0 (geen stroom) — mischien helpt deze link: http://nl.hardware.info/reviews/1772/2/achtergrond-hoe-werkt-een-processor-0ren-en-1ren

    .. daar wordt uiteindelijk over een aantal pagina’s een ALU (=basis achter elke rekenmachine) uitegelegd. Of eigenlijk het optelgedeelte. Voor de rest zijn er ook trucjes. Zie http://nl.wikipedia.org/wiki/Arithmetic_logic_unit

    De wikipagina van Processor ( http://nl.wikipedia.org/wiki/Processor_(computer) ) legt op zich bij “Interne opbouw” en verder wel redelijk uit wat er daarna allemaal nog bij komt voordat je van een ALU (=rekenmachine) een computer hebt die daadwerkelijk een rij instructies kan lezen van een harde schijf, en deze omzet naar acties.

    Die rijen instructies zijn zelf trouwens ook weer sequenties van 1’en en 0’en, alles van het type “IF (gebruiker drukt op knop) THEN (verstuur mail)” wordt eerst door een zgn compiler (zelf ook weer een programma, dus zo’n berg instrucies) omgezet naar een formaat wat door de processor direct leesbaar is als zodanig. Dat kunnen wij mensen dan wel weer totaal niet lezen, (althans de meesten niet) maar dat geeft nix ;)

    Als je me nu nog enigzins volgt (prbly not, blaming the Bowmore legend) hier de quizvraag… als er een compiler nodig is om menselijk geschreven instructies om te zetten naar iets wat een computer kan uitvoeren.. en een compiler zelf ook weer een programma is wat geschreven is door mensen.. hoe is de eerste compiler dan gecompiled? ;)

    Ork

  6. Willem says:

    Ja dat wordt inderdaad heel lang en ingewikkeld om uit te leggen…

    Dat begint met hoe electronica werkt. Hoe je bijvoorbeeld iets kunt maken met 3 draadjes, en als je dan op 2 er van stroom zet, dat dan (en anders niet) op de derde ook stroom komt. Of juist als er op precies 1 van de 2 en niet allebei stroom staat. En die kun je dan weer gaan combineren tot complexere circuits. Bijvoorbeeld met 2 sets van 8 draadjes als invoer, en 1 set als uitvoer. Als je dan op elke set een patroon zet van wel of geen stroom (1en en 0en), en die patronen zijn (binaire) getallen, dat dan op de uitvoer-set de som van die twee getallen komt te staan. Of het verschil. Of het product. Of nog veel meer.

    En als je dan een stapje verder gaat, dan heb je nog een paar invoer-draadjes, waarop je kunt aangeven wat ie nu precies moet doen. Optellen, aftrekken, vermenigvuldigen, of nog vanalles anders. Als je dat hebt dan heb je iets wat een ‘rekeneenheid’ heet. En die draadjes die aangeven wat ie moet doen, dat heet een ‘instructie’.

    Dan heb je ook circuits die een heel leuke eigenschap hebben: Op het uitvoer-draadje staat of wel of geen stroom, en pas als je op het ene invoer draadje dan ook stroom zet dan verandert dat. Dat heet een flip-flop. En wat dat eigenlijk doet is dus onthouden of er wel of geen stroom was (een 1 of een 0). En geheugen bestaat dus uit heel veel van dat soort flip-flopjes. Meestal gegroepeerd in setjes van 8. En samengestopt met extra circuitjes zodat je een van die groepjes via allerlei schakelaartjes kunt aansluiten op een rekeneenheid (op de ene en de andere invoer-lijntjes, en ook op de instructie-lijntjes die aangeven wat ie moet doen)

    Er zijn dus voor die geheugen-dingen ook weer invoer-lijntjes die aangeven welke aangesloten moet worden op de verschillende invoer-lintjes. Dat gaat via iets wat een ‘bus’ heet. En die zijn weer aangesloten op andere dingen.

    Als je een heleboel van die dingen van hierboven samen stopt, dan krijg je een processor (cpu). Daarin zitten sommige speiciale geheugen-plekjes, die noemen we ‘registers’. Een ervan is een tellertje (process counter genaamd) dat aanwijst welk plekje in het geheugen er aangesloten moet worden op de ‘instructie’ aansluiting. En die geven ook weer aan welke andere ‘registers’ er op die ‘invoer’ lintjes worden aangesloten, en welk ‘register’ op de uitvoer-lijntjes.

    Dat wordt allemaal bij elkaar gehouden door een klein kristalletje wat om de zoveel tijd een stroompulsje geeft, en dat zorgt er voor dat al die elementjes hun ding doen. Bijvoorbeeld de ‘process counter’ naar de volgende instructie laten wijzen, en de rekeneenheid de berekening laten doen, en het resultaat in het aangesloten ‘register’ laden, enzovoort.

    Ben ik je nu al helemaal kwijt?

  7. Bob says:

    Het is voor mij een stuk duidelijker geworden, toen ik met PLC’s aan het spelen ben gegaan voor een stage. PLC (Programmable logic controller) zijn eenvoudige PC’s dien in het verleden heel veel in machines werden toegepast, omdat ze zelden op storingen vielen (in tegenstelling tot PC’s met bepaalde besturingssystemen). Omdat ze zo uitgekleed zijn, konden ze sneller als PC’s machines aansturen.

    De PLC loopt iedere keer een cyclus door, waarbij het eerst alle ingangssignalen inleest (aan of uit) en aan de hand daarvan de uitgangen een bepaalde status geeft (aan of uit). ieder in of uitgang die in een plc zit, heet een bit.

    Een voorbeeldje, hoe een PLC programma werkt:
    And functie
    A B
    12V—-||—-||—–Motor X

    Als knop A wordt ingedruk (aan) en deurtje 1 dicht is (aan) (wat gedetecteerd wordt doordat de deur knop B indrukt), gaat motortje X draaien. Als het deurtje open (uit) is, kan de motor niet draaien of de knop nu aan is of niet.

    Een tweede voorbeeld, OR functie
    A
    12V—|–||–|–Lampje X
    | |
    | B |
    |–||–|

    Als knop A wordt ingedruk of knop B ingedrukt wordt, Gaat lampje X aan. Stel dat het een meldingsysteem voor problemen.

    Dit zijn de 2 basis elementen van een PLC.

    Stel nu dat de knoppen vervangen worden door sensoren en je krijgt al een automatische systeem. Bijvoorbeeld dat knoppen worden vervangen door beweginsmelders. De PLC gaat nu continu het proces af, om te zien of er wijzigengen in de statussen zijn en daarop zijn uitgangen aan te passen.

    Omdat mensen steeds compelexere dingen wilde gaan doen, werd er besloten een om een serie van bitjes samen te voegen tot 1 teken. Dus werden 8 bits één byte en dit is de kleinste schrijfbare vorm voor de meeste computers. Dus als we een leter indrukken op ons toetsenbord, dan sturen we eigenlijk in 1x 8 bitjes aan. Deze 8 veranderde bitjes kunnen er dus voor zorgen dat er in het systeem een aantal ander bitjes veranderd.

    Zoals je misschien wel weet is een chip niet veel anders als een verzameling van schakelingen, alleen dan ontzettend klein. De chip kan deze veranderde bitjes verwerken en daardoor bepaalde acties worden uitgevoerd. Daarvoor heeft het een aantal ander functies tot zijn beschikking, zoals het kopieeren van byte reeksen naar een ander locatie (opslaan op de harde schijf) of timers. Maar dit maakt het basis principe niet anders.

    Dus als je je computer aanzet, zet je een aantal vooraf ingestelde schakelingen en stroomcircuitjes in werking. Deze gaan vervolgens een vooraf bepaalde routine doen om je systeem te starten. Bijvoorbeeld: systeem wordt aangezet en er is een harde schijfaanwezig (oftw knop A) waarop op locatie 1234567 de opstart schakkelingen (knop B) gekoppeld is, start de computer op. Dit is veel symplitischer voorgesteld dan de werkelijk heid, maar het basis principe is gelijk.

    Verhaal sluit een beetje aan bij wat Willem hierboven heeft staan btw.

  8. Kenshin says:

    …En dan moet je je dezelfde vraag eens stellen over het menselijk brein, of het menselijk lichaam als geheel :)
    (leuke vraag overigens om te stellen aan lui die beweren “ach, de wetenschap heeft zo’n beetje alles wel ontdekt inmiddels”)

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.