techlogs Mehr als Bits und Bytes

Wie rechnet eine Maschine?

von Rainer Gerhards, 21. Juli 2008, 14:44

Man braucht nur einen Erstklässler zu betrachten: sofort wird klar, wie der Mensch zum Rechnen kam: zwei Finger, drei dazu, rasch abgezählt und schon ist klar: 2+3=5! Auch beweist das Beispiel, dass rechnen Mühe bereitet.

Abakus, Copyright (C) Claudia Hautumm / Pixelio (www.pixelio.de)Ein alter Menschheitstraum war es, sich von dieser Mühe zu befreien: man baue eine rechnende Maschine. Viele Generationen lang war dies nicht möglich. Wir haben das Glück in einer Zeit zu leben, in der Rechenmaschinen - Computer - allgegenwärtig sind. Oft sogar versteckt in Waschmaschinen und Heizungsventilen und allerlei anderem Gerät.

Wir haben uns so an Computer gewöhnt, dass wir sie schon für selbstverständlich halten.
Ein Leben ohne sie können wir uns kaum noch vorstellen. Die Wenigsten überlegen heute, wie ein Computer rechnet. Er kann es halt. Ich möchte heute diese liebgewonnene Sicht verlassen und mich auf einen etwas beschwerlichen Weg begeben. Ich möchte Ihnen zeigen, wie eine Maschine rechnet. Dabei wird sich der eine oder andere Ausflug in die Theorie nicht ganz vermeiden lassen. Auch werde ich Einiges als gegeben voraussetzen müssen, weil der Ausflug sonst gar zu lange dauern würde. Und letztlich kann ich die Funktion nur an einem simplen Beispiel aufzeigen. Als Motivation möchte ich Ihnen aber folgendes mitgeben: wer einmal verstanden hat, wie ein Rechner rechnet, versteht auch viele der aktuellen Diskussionen rund um die Computertechnik viel besser. In der Tat hatte ich mich sogar bemüht, diesen Artikel zu vermeiden. Es stellte sich aber als schlichtweg unmöglich heraus. Das Wissen um die Grundlagen ist essentiell für korrektes Verständnis der "großen Probleme". In diesem Sinne hoffe ich auf Ihre Ausdauer und ihre Geduld. Es lohnt sich. Versprochen.

Wie also rechnet ein Computer?
Ignorieren wir einmal für einen Moment die moderne Computertechnik, die Millionen und Abermillionen von Bauteilen auf die Größe eines Fingernagels packt. Denken wir uns zurück in die Welt der ersten, gebäudefüllenden, Rechner. Dort konnte man die einzelnen Bauteile noch anpacken. Basis jeden Rechners sind Bauteile, die Ströme schalten können - früher Röhren, heute Transistoren (in Miniatur-Form auf den Chips). Diese Bauelemente ordnen den Strömen einen Wert "0" oder "1" zu. Uns soll hier nicht interessieren, wo die konkreten Schwellwerte sind. Zwei Dinge sind aber wichtig: um die Werte Null und Eins darzustellen, muss ein bestimmter Strom fließen. Und für die eigentliche Verarbeitung im Rechner werden lediglich diese zwei verschiedenen Werte betrachtet, nicht mehr der Strom. Sie werden auch als "ein Bit" bezeichnet.

Die Bauelemente werden zu logischen Schaltungen kombiniert. Damit wird es möglich, Logik technisch abzubilden. Man kann zwei Werte beispielsweise mit "und" verküpfen. Umgangssprachlich sagt man zum Beispiel "wenn es Wochenende ist und die Sonne scheint, gehe ich zum Badesee". Um zum Badegenuss zu gelangen, muss also offensichtlich sowohl Wochenende sein, als auch die Sonne scheinen. An einem sonnigen Wochentag werde ich genau so wenig zum See fahren, wie an einem bewölkten Wochenende. Und an einem wolkenverhangenen Wochenendtag werde ich wohl erst recht daheim bleiben.

Wie drückt man das nun in der Sprache der Bauelemente aus?
Zunächst einmal wird jeder der Eingangsbedingungen (Wochenende und Sonnenschein) ein Bit zugewiesen: Das Wochenend-Bit ist am Wochendende "1", unter der Woche "0". Entsprechend wird das Sonnenschein-Bit auf "1" gesetzt, wenn wir einen strahlenden Himmel haben und andernfalls auf "0". Nun kann man technisch beides miteinander verknüpfen. Dazu kann man eine Tabelle aufstellen:

 

Wochenende? Sonne? Baden gehen?
0 0 0
0 1 0
1 0 0
1 1 1

Wenn unter "Baden gehen" eine "1" steht (man sagt: "das Bit ist gesetzt"), dann machen wir uns auf den Weg zum See.

Eine solche Tabelle wird als Wahrheitswertetafel bezeichnet.
In ihr werden zwei Eingangswerte (Wochende und Sonne) zu einem Ausgangswert ("Baden gehen?") verknüpft. Die Obige gibt an, wie die logische Funktion "und" gebildet wird. In der Logik gibt es noch weitere Funktionen. Eine für uns wichtige ist das sogenannten "exklusive oder" (auch XOR genannt). Sie entspricht in etwa dem umgangssprachlichen "entweder ... oder". Dabei ist der Ausgangswert "1", wenn einer der beiden Eingangswerte "1" ist, nicht aber beide. Die Wahrheitswertetafel von XOR sieht wie folgt aus:

Eingang 1 Eingang 2 Ausgang
0 0 0
0 1 1
1 0 1
1 1 0

Genug der Theorie. Ganz praktisch lassen sich elektronische Schaltungen bauen, die solche logischen Funktionen realisieren. So kann man z.B. eine XOR-Schaltung bauen, die zwei Eingangssignale hat und ein Ausgangssignal. Das Ausgangssignal richtet sich dabei nach den Eingangswerten und wird gemäß obiger Wahrheitswertetafel geschaltet.

Ich habe Ihre Geduld sicher schon arg strapaziert. Jetzt aber kommen wir endlich zum Rechnen. Um es nicht noch komplizierter zu machen, möchte ich eine einfache Maschine bauen, die lediglich zwei einstellige Zahlen miteinander addieren kann. Und um es "computer-einfach" zu machen, dürfen diese beiden Zahlen auch jeweils nur die Werte 0 oder 1 haben. Kurz gesagt: unsere Maschine wird lediglich 0+0=0, 0+1=1, 1+0=1 und 1+1=2 rechnen können. Das ist wenig. Geschickt kombiniert (und mit geeigneter Zahlendarstellung) reicht es aber, um später mit sämtlichen Zahlen zu rechnen.

Aber bleiben wir bei unserem simplen Rechner. Wer genau hinschaut, entdeckt bereits ein Problem: wir haben kein Bauteil, um den Wert "2" auszudrücken. Daher müssen wir uns behelfen. Wir werden die Zwei einfach durch ein weiteres Bit darstellen. Für die Ausgabe benötigen wir also zwei Bit: einmal unser "Zweier" Bit, und dann noch das Bit für die Einerstelle. Diese zwei Bits bedeuten folgendes: "00" ist null, "01" eins, "10" zwei und, der Vollständigkeit halber, "11" für drei.

Wir benötigen folglich eine Schaltung für diese Wertetabelle:

 

Zahl 1 Zahl 2 Ergebnis-Bit 2 Ergebnis-Bit 1
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0

Dem aufmerksamen Leser fällt auf, dass die Wertetabelle für den Ausgang Bit "2" genau der "und" Verküpfung entspricht. Und Ausgang "Bit 1" entspricht gerade der "XOR" Verknüpfung. Wir müssen also Bauelemente für die entsprechenden Verknüpfungen lediglich in geeigneter Weise miteinander verknüpfen. Die folgenden simple Grafik zeigt, wie das geht:

Grobe Skizze eines Halbaddierers.


Oben sind die beiden zu addierenden Zahlen (Eingänge) aufgeführt, unten die Ausgänge für beide Bits. Die Kästchen dazwischen stellen die Bausteine für die entsprechenden logischen Verknüpfungen (Schaltungen) dar. Die Linien sind Leitungswege, farblich nur zwecks leichterer Lesbarkeit unterschieden. Wie man sieht, werden also die beiden Eingänge gleichzeitig in die beiden logischen Schaltungen geführt. Unabhängig voneinander "errechnen" diese dann ihren Ausgabewert. Jede Schaltung ist für genau ein Ausgabebit zuständig.

Die "und"-Schaltung ist also für Bit 2 zuständig, die "XOR"-Schaltung für Bit 1. Jede dieser Schaltungen realisiert also einen Teil der obigen Wertetabelle. Das eigentliche Rechnen geschieht nun so: an den Eingänge wird ein Strom, entsprechend des Wertes 1 oder 0, angelegt. Dieser Strom fließt über die entsprechenden Leitungen in die logischen Schaltungen. Dort wiederum bewirkt er ein Schalten der entsprechenden Transistoren, so dass auf der Ausgangsleitung wiederum ein Strom, gemäß des (der Verknüpfung entsprechenden) Wertes 0 oder 1, anliegt. Probieren Sie es in Gedanken einmal mit allen möglichen Eingaben durch. Sie werden feststellen: die Schaltung "errechnet" immer das korrekte Ergebnis. Wir haben also eine simplen Rechner für unsere Aufgabenstellung konstruiert.

Beim "Rechnen" sind zwei Beobachtungen wichtig: Erstens benötigt der Strom eine gewisse (minimale) Zeit zum Durchlaufen der Schaltung und zweitens verbrauchen die Schaltvorgänge (und nur die) in den heutigen logischen Bausteinen Strom. Der wird dabei Großteils in Wärme umgesetzt. Aus Beidem lässt sich übrigens folgern, dass mit heutiger Technologie weder kostenloses noch unendlich schnelles Rechnen möglich ist.

Natürlich sind die Möglichkeiten meines "Minimal-Rechners" arg begrenzt - wer will schließlich nur die Werte 0 und 1 addieren... Wenn man den gezeigten "Rechner" aber als Bauteil begreift, ist er durchaus nützlich. Geschickt kombiniert, kann man aus ihm Bausteine zur Addition beliebiger Ganzzahlen bauen. Ein realer Rechner nun ist nichts anderes als ein großes Puzzle solcher Komponenten. Einfachste Bauelemente werden zu immer komplexeren Baugruppen zusammen gestellt, bis sie letztlich einen komplexen Rechner realisieren. Man sollte sich aber stets daran erinnern, dass auch die komplexesten Komponenten letztlich aus den Grundbausteinen bestehen, und damit auch deren Restriktionen unterliegen. Dinge wie Stromverbrauch und Schaltzeiten betreffen natürlich auch ein Rechenwerk als Ganzes - und lassen sich auf oberer Ebene nicht ignorieren.

Meiner Meinung nach lassen sich viele Problemstellung nur dann wirklich verstehen, wenn man sich an die Vorgänge auf unterster Ebene erinnert. Und das, lieber Leser, war der Sinn dieses Artikel. Ich hoffe, es ist gelungen Ihnen ein grobes Verständnis davon zu vermitteln, wie eine Maschine rechnen kann. Ich habe viele Details auslassen und manches vereinfachen müssen. Dennoch hoffe ich, die Essenz der Basistechnologie getroffen zu haben. Aus diesem Verständnis heraus können wir uns nun aufmachen, künftig praktische Anwendungsfälle zu betrachten.

 

 

Foto Abakus: Copyright (C) Claudia Hautumm / Pixelio
Schemagrafik: Copyright (C) 2008 Rainer Gerhards



antworten

Artikel kommentieren
 authimage

Kommentare

  1. Leon Zwar nicht zum schnell drüberlesen, aber gut verständlich!
    11.12.2010 | 01:00

    Ich finde es immer wieder erstaunlich, dass jedes scheinbar noch so komplizierte System letztlich auf relativ einfachen Grundbedingungen basiert.
    Danke!

    P.S.: Ich kann seit meiner Schulzeit mit den Fingern diese 0 und 1 - Technik simulieren und so mit der einen Hand bis 32 zählen... Aber ich habe nie gewusst, wofür das eigentlich gut ist.
    Jetzt weiß ich es :-)

  2. 11.12.2010 | 04:07

    Video eines 4 Bit Addierwerkes auf der Basis von Glasmurmeln:

    http://www.youtube.com/watch?v=wIKah9aVlm4

    Die Breite der Kugelbahnen beträgt 2 cm.

    Was ich auch sehr schön finde, ist diese Form der UND-Funktion:

    AND = NOT( NOT(A) OR NOT(B) OR NOT(C) )

    Nur wenn alle Eingänge auf 1 sind, kann der innere Zustand auf 0 sein.

    Dieser innere Zustand wird dann noch einmal umgekehrt, also von 0 auf 1.

    0 0 0 ... 1 1 1 ... 1 ... 0
    0 0 1 ... 1 1 0 ... 1 ... 0
    0 1 0 ... 1 0 1 ... 1 ... 0
    0 1 1 ... 1 0 0 ... 1 ... 0
    1 0 0 ... 0 1 1 ... 1 ... 0
    1 0 1 ... 0 1 0 ... 1 ... 0
    1 1 0 ... 0 0 1 ... 1 ... 0
    1 1 1 ... 0 0 0 ... 0 ... 1

Artikel kommentieren
szmtag