Zur Themenwahl


Die Konzepte von J.v. Neumann



Das Hardwarekonzept

In ´First Draft of a Report on The EDVAC` definierte J.v. Neumann 1945 ein Konzept für einen digitalen Universalrechenautomaten, das sich als so erfolgreich herausstellte, dass es auch heute noch die grundsätzliche Funktionsweise eines herkömmlichen Computers charakterisiert. Natürlich hat sich die technische Realisierung völlig verändert, aber die Prinzipien der Funktionsweise eines Computers sind im Wesentlichen gleich geblieben. (Siehe: Lindner,..., Planen, Entscheiden, Herrschen, rororo, 1984, S.98ff) Zur Veranschaulichung des Konzepts dient das folgende Blockschaltbild:

Das Buch ist sehr
zu empfehlen

Wichtige Elemente der Darstellung von J.v.Neumann zur Beschreibung des Blockschaltbildes:

Die folgenden Überlegungen befassen sich mit der Struktur eines schnellen digitalen automatischen Rechensystems und im Besonderen mit seiner logischen Steuerung...

Die Instruktionen, die den Ablauf der Berechnungen steuern, müssen dem Gerät vollständig detailliert in einer Form gegeben werden, die das Gerät erfassen kann. Dabei ist die Verwendung eines Codes erforderlich, um die logische und algebraische Definition des zu lösenden Problems auszudrücken. Sind diese Instruktionen einmal dem Gerät mitgeteilt worden, muss es in der Lage sein, sie vollständig und ohne weiteren menschlichen Eingriff auszuführen. Am Ende der gewünschten Operationen muss das Gerät die Ergebnisse wieder in einer lesbaren Form ausgeben.

Code

Die Bestandteile der Maschine:
Da das Gerät zuallererst eine Rechenmaschine ist, sollte es vernünftiger Weise spezialisierte Organe für die Ausführung arithmetischer Operationen haben, sie werden als Rechenwerk im Blockschaltbild bezeichnet.

Die Kontrolle über den Ablauf der Operationen kann am wirkungsvollsten durch ein zentrales Kontrollorgan ausgeführt werden. Falls das Gerät elastisch sein soll, d.h. für möglichst alle Zwecke verwendbar, dann muss unterschieden werden zwischen den spezifischen Instruktionen für ein bestimmtes Problem und den allgemeinen Kontrollorganen. Die ersteren werden mit der Eingabe der Instruktionen gespeichert (s.o). (Anmerkung: Eine entscheidende Eigenschaft: Daten und Befehle sind im Rechner gespeichert. ´Speicherprogrammierung`) Die letzteren sind durch bestimmte Funktionsteile, dem Steuerwerk des Gerätes repräsentiert.

 

Rechenwerk

Speicher-
programmierung

Steuerwerk

Das Gerät benötigt einen beträchtlichen internen Speicher. Dabei müssen die Informationen aus dem Speicher wiedergewinnbar sein.

Speicher

Diese drei Bestandteile entsprechen den assoziativen Nervenzellen des menschlichen Nervensystems. Die Ein- und Ausgabegeräte entsprechen den sensorischen und motorischen Neuronen. Das Gerät muss die Fähigkeit haben, durch Ein- und Ausgabe den Kontakt mit einem spezifischen Medium, dem externen Speicher, aufrecht zu erhalten.

 

externer Speicher

Das Gerät muss Organe besitzen, um Informationen vom externen Speicher in Rechenwerk, Steuerwerk und interne Speicher zu übertragen. Diese Organe bilden seine Eingabe. Umgekehrt muss das Gerät Informationen aus diesen Teilen auf die Ausgabe übertragen können.

Erst durch dieses Konzept eines speicherprogrammierbaren, flexiblen, universellen Rechenautomaten wurde es möglich, Maschinen zu bauen, die ihr Verhalten nach den Regeln der formalen Logik selber beeinflussen konnten.

Eingabe

Ausgabe

Das Softwarekonzept

Auch bei der Entwicklung von Verfahren zur Formulierung von Instruktionen zur Lösung von Problemen mit dem Computer hat J.v. Neumann einen wesentlichen Anteil. J.v. Neumann hat eine logische Analyse zur Struktur von Lösungsverfahren (Lösungsalgorithmen - Programme) vorgelegt, die aufzeigt, welche Befehlstypen eine allgemeine Programmiersprache enthalten muss. Nur durch die Beachtung dieser Strukturen können auch für komplexe Probleme Lösungen in relativ knapper Form formuliert werden.

Jede allgemeine Programmiersprache muss aus logischen Gründen diese Befehlstypen ´beherrschen`:

 

Lösungsalgorithmus

Programm

Bei der Formulierung eines Programms werden die einzelnen Befehle nacheinander abgearbeitet (Sequenz), wenn nicht einer der folgenden Fälle vorliegt.

Es gibt Sprungbefehle, die den sequentiellen Ablauf der Berechnungen unterbrechen, indem zu irgendeinem Befehl gesprungen wird und an dieser Stelle das Programm fortgesetzt wird.

Es gibt bedingte Sprungbefehle, d.h. der Sprung zu einem Befehl erfolgt nur, wenn eine Bedingung wahr ist. Im andern Fall wird weiter seqentiell vorgegangen.

Sequenz

Sprungbefehl

bedingt. Sprungbef.

Flussdiagramme erlauben es, diese Strukturen geometrisch zu veranschaulichen. An einem Beispiel soll das gezeigt werden.

 

Flussdiagramm

Problem
Wird ein Würfel geworfen, so stabilisiert sich die relative Häufigkeit für das Auftreten von „5” bei 1/6. Diese Stabilisierung soll mit dem Computer für 12000 Würfe simuliert werden.

Ein mögliches Flussdiagramm dafür:

 

Flussdiagramme waren in der Anfangszeit des Programmierens eine wichtige Möglichkeit, bei komplexen Programmen die Übersicht über Eigenschaften eines Programms zu behalten, denn die Eingabe erfolgte zunächst im Maschinencode. Dabei waren die einzelnen Daten und Befehle Folgen von Nullen und Einsen. Letztlich war das gesamte Programm nichts anderes als eine Folge von Nullen und Einsen.

Beispiel für die Addition zweier Zahlen a und b:

Maschinencode
Code

Für die Addition zweier Zahlen a und b mussten die beiden Zahlen zunächst gespeichert werden. Dann mussten als 'Additionsprogramm' 3 Maschinenbefehle gespeichert werden. Der 1. Befehl bewirkte den Transport des Inhalts der Speicherzelle, die a enthält in den Akkumulator im Rechenwerk (Prozessor). Der 2. Befehl bewirkte den Transport der Zahl b in den Akkumulator und addierte b auf den Akkumulatorinhalt. Damit war c =a+b bestimmt. Im 3. Befehl wurde der Akkumulatorinhalt im Speicher gespeichert. Damit war das Problem gelöst. Das Programm konnte damit letztlich als Folge von Nullen und Einsen geschrieben werden:
0101011110010010 0101111110010011 0110011101010100

Ein großer Fortschritt wurde durch die Programmierung in Assembler erreicht. Hierbei wurden Teilprogramme (Subroutines) symbolisch bezeichnet und diese Symbole wurden dann zum Gesamtprogramm zusammengefügt. Aber auch auf dieser Programmierstufe musste sich der Programmierer nach den Maschinenbefehlen des speziellen Computers richten. Die Programme liefen nicht auf anderen Computern. Erst mit der Einführung von problemorientierten Programmiersprachen konnten Programme geschrieben werden, die erstens auf andere Computer übertragbar waren und außerdem in (nahezu) üblicher Weise auch vom Menschen lesbar waren. Damit kann für die die Addition zweier Zahlen im Programm in üblicher Weise a=b+c geschrieben werden. Damit diese symbolische Schreibweise für ein Programm aber vom Computer verarbeitet werden kann, muss es Übersetzungsprogramme für den speziellen Computer geben, die eine Übersetzung in Maschinencode durchführen. Solche Programme heißen Compiler. Im Laufe der Entwicklung entstanden viele problemorientierte Sprachen, die aber alle die Grundanforderungen von J.v. Neumann an eine Programmiersprache erfüllen. Beispiele für problemorientierte Programmiersprachen:

Fortran, Cobol, Algol, C, Pascal, Delphi, C++, Basic,...,Javascript

Für spezielle Aufgaben gibt es Spezialsprachen wie z.B. in Derive5. Mit dieser Programmiersprache werden wir uns beschäftigen. In dieser Sprache für mathematische Probleme gibt es ´Makrobefehle` für häufig benötigte mathematische Lösungsbausteine, so dass man oft mit kurzen Programmen Lösungsalgorithmen formulieren kann. Das oben behandelte Problem der Stabilisierung einer Würfelhäufigkeit kann (etwas verallgemeinert) in folgender Weise geschrieben werden

Assembler

Subroutine

problemorientierte
Progr.sprachen

Compiler

Zur Themenwahl