· 

VON-NEUMANN-ARCHITEKTUR

Einführung

Um zu verstehen, wie ein Rechner funktioniert, muss man wissen, aus welchen Komponenten er aufgebaut ist und wie diese Komponenten miteinander interagieren. Fast alle Computer arbeiten nach dem Prinzip eines speicherprogrammierbaren Rechners. Die grundlegende Architektur eines solchen speicherprogrammierbaren Rechners hat der Mathematiker John von Neumann 1946 vorgeschlagen und wird (nach ihrem Erfinder) Von-Neumann-Architektur genannt. 


Komponenten und Funktionsweise eines von-Neumann-Rechners

Vereinfacht ausgedrückt versteht man darunter 5 Grundelemente, die über einen Systembus miteinander kommunizieren, nämlich 

- das Eingabewerk, 

- das Speicherwerk

- das Rechenwerk, 

- das Steuerwerk (manchmal auch Leitwerk genannt) und

- das Ausgabewerk. 

 

Lasse dich von den etwas altertümlich klingenden Begriffen wie "Speicherwerk" nicht irritieren ... dahinter steckt heutzutage z. B. einfach nur eine Festplatte. Damals erinnerten die einzelnen Komponenten aber tatsächlich noch an riesige Werke, die mithilfe von Lochkarten programmiert wurden. Was machen die einzelnen Komponenten?

- In das Eingabewerk werden Zahlen bzw. Zeichen, die von der Maschine erlaubt sind, eingegeben.

- Das Speicherwerk dient als Gedächtnis, in dem die Computerprograme und zu verarbeitenden Daten liegen. 

- Das Rechenwerk bzw. die Arithmetic Logical Unit (kurz ALU) führt im Programmablauf anfallende Berechnungen durch. 

- Das Steuerwerk hat die Aufgabe, die Ausführung eines Programms gemäß den darin beschriebenen Anweisungen zu steuern. 

- Durch das Ausgabewerk werden dem Benutzer die Ergebnisse der Berechnungen mitgeteilt. 

Das Steuerwerk und das Rechenwerk sind heute keine getrennten Komponenten mehr, sondern bilde die zentrale Verarbeitungseinheit, also der Prozessor (sprich, die CPU).

Keine Sorge, wir werden später noch genauer auf die Steuer- und Datenleitungen zwischen diesen 5 Grundelementen eingehen. 

Das zu diesem Zeitpunkt Revolutionäre an dem hier skizzierten Ansatz war, dass Computerprogramme und die zu verarbeitenden Daten im selben Speicher abgelegt werden, deshalb auch speicher-programmierbarer Rechner. Warum war das revolutionär? Nun, bis zu dem damaligen Zeitpunkt wurden Rechenmaschinen fest für einen bestimmten Zweck gebaut. Von einem Universalrechner, wie wir ihn heute kennen, also dass verschiedene Programme unter derselben Hardwarearchitektur ablaufen lassen können, konnte vor der Von-Neumann-Architektur nicht die Rede sein. 


Der Von-Neumann-Flaschenhals

Bei dieser Darstellung gibt es aber ein Problem. Wie du siehst, findet die Kommunikation hier über einen Bus-System statt. Aufgrund der Konstruktion des Bussystems und den damit einhergehenden physikalischen Gesetzmäßigkeiten, ist es nicht möglich, dass mehrere Signale gleichzeitig über den Bus laufen. Wenn also zwei oder mehr der Komponenten gleichzeitig auf den Bus zugreifen wollen, kommt es zu einer Kollision, bei der alle an der Kollision beteiligten Daten verlorengehen. Um das zu verhindern, kann immer nur eine Komponente zur gleichen Zeit schreibend auf den Bus zugreifen. Was hat das zur Folge? Nun, den sog. Von-Neumannschen-Flaschenhals. In der Von-Neumann-Architektur ist eine strikte Trennung zwischen CPU und Hauptspeicher vorgesehen. Die CPU fordert während der Abarbeitung eines Programms dessen Befehle an, muss aber auch die zu verarbeitenden Daten aus dem Speicher holen und sie anschließend wieder dort ablegen. Das Verbindungssystem zwischen der CPU und dem Speicher ist also ein Engpass, denn die Verarbeitungsgeschwindigkeit der CPU ist wesentlich höher als die des Bus-Systems. Abschwächen kann man diesen Effekt z. B. durch die Verwendung von Caches und Multithreading. 


Genauerer Blick auf die Von-Neumann-Architektur

Schauen wir uns die Beziehung der einzelnen Grundelemente nochmal etwas genauer an. Wir unterscheiden hier zwischen Steuerleitungen und Datenleitungen. 

  • Daten fließen natürlich von Außen in das Eingabewerk. Diese werden irgendwann auch ihren Weg ins Speicherwerk finden und am Ende im Ausgabewerk landen, das die Ergebnisse der Berechnung dem Benutzer kommuniziert. 
  • Das Steuerwerk hat (wie es der Name bereits vermuten lässt) steuernden Zugriff auf alle Komponenten. Die einzige bidirektionale (also in beide Richtung verlaufende) Steuerbeziehung existiert zwischen dem Steuerwerk und dem Rechenwerk. Das hängt damit zusammen, wie die CPU im Detail funktioniert.
  • Wie bereits beim Von-Neumann-Flaschenhals erklärt, muss es zwangsläufig eine Datenverbindung vom Speicherwerk zur CPU und umgekehrt geben. Das Rechenwerk, das die arithmetischen und logischen Operationen durchführt, ist hier für die Datenverbindung von der CPU zum Speicherwerk verantwortlich.
  • Eine weitere Datenleitung existiert jedoch noch, nämlich vom Rechenwerk zum Steuerwerk, denn die Auswahl der nächsten Anweisungen hängt natürlich davon ab, was zuvor berechnet wurde (denke da bspw. mal einfache if-Anweisungen). 

Die Von-Neumann-Prinzipien

Abschließend fassen wir noch einmal die Von-Neumann-Prinzipien übersichtlich zusammen. Mit dem Wissen aus diesem Artikel sollten sie dich nicht überraschen, da du das meiste davon schon gehört hast.

  • Ein Von-Neumann-Rechner besteht aus einem Eingabewerk, einem Speicherwerk, einem Rechenwerk, einem Steuerwerk einem Ausgabewerk. Diese Komponenten sind über ein Bus-System verbunden. 
  • Die Struktur eines Rechners ist unabhängig von der Problemstellung. Die Lösung der zu bearbeitenden Problemstellungen wird durch austauschbare Speicherinhalte beschrieben, deshalb auch speicher-programmierbar.
  • Im Speicher befinden sich sowohl die Anweisungen (also die Programme), als auch die Operanden (also Daten und Variablen) abgelegt. 
  • Der Speicher ist in fortlaufend nummerierte Zellen von gleicher Größe unterteilt. Über die Nummer (eine sog. Speicher-Adresse) einer Speicherzelle kann ihr Inhalt abgerufen oder verändert werden.
  • Daten, Befehle, Adressen und Steuerungen werden binär codiert. 
  • Ein Programm besteht aus einer Folge von Anweisungen, die in der Reihenfolge, in der sie ausgeführt werden sollen, hintereinander gespeichert werden. Der nächste Befehl wird vom Steuerwerk aus angesprochen, in dem der Befehlszähler, der die Adresse des nächsten auszuführenden Befehls enthält, um 1 erhöht (also inkrementiert wird). Ein Befehl selbst setzt sich aus einem sog. Opcode, der den Befehl eindeutig identifiziert und einem Verweis auf die Operanden zusammen (das ist der sog. Adressteil). 
  • Mithilfe von Sprungbefehlen kann von dieser sequentiellen Abarbeitung der Befehle abgewichen werden. Dabei modifiziert der Adressteil den Wert, der im Befehlszähler steht. Bei einem unbedingten Sprung wird der Befehlszähler immer modifiziert und bei bedingten Sprüngen immer nur bei Erfüllung der dazugehörigen Bedingung.