2 Von-Neumann-Prozessor

2.1.2 Ablaufprinzip des Von-Neumann-Rechners

Aus den genannten Grundprinzipien kann man die wesentlichen Charakteristika des Von-Neumann-Rechners (und im gleichen Maße des Harvard-Rechners) ableiten:

1. Zu jedem Zeitpunkt führt die CPU exakt einen Befehls aus. Die Steuerung der Bearbeitung liegt im Steuerwerk (Control Unit, CU), das alle notwendigen Schritte zur vollständigen Behandlung einleiten muss. Innerhalb eines Befehls kann höchstens ein Datenwert bearbeitet, das heißt neu berechnet werden. Dieses Prinzip wird als "Single Instruction - Single Data (SISD)" bezeichnet.

2. Alle Inhalte von Speicherzellen, im folgenden Speicherwörter genannt, sind prinzipiell als Daten oder Befehle interpretierbar. Die Daten wiederum können als "eigentliche" Daten oder als Referenzen auf andere Speicherzellen (Adressen) genutzt werden. Die jeweilige Verwendung eines Speicherinhalts richtet sich allein nach dem momentanen Kontext des laufenden Programms.

3. Als Konsequenz aus der vorgenannten Eigenschaft lassen sich Daten und Befehle nicht gegen ungerechtfertigten Zugriff schützen, da sie gemeinsam ohne Unterscheidungsmöglichkeit im Speicher untergebracht sind.

Es stellt sich nun die Frage, wie eine Instruktion eigentlich aussehen muss beziehungsweise wie der komplette Instruktionssatz eines Prozessors zu konzipieren ist. Tatsächlich ist diese Frage ad hoc nicht zu beantworten - zumindest nicht vollständig. Selbstverständlich ist die Antwort wichtig, da eine beliebige Rechenvorschrift (ein Algorithmus) auf eine Folge von Instruktionen abzubilden ist.

Als Beispiel nehmen wir an, dass der Befehlssatz eines Von-Neumann-Prozessors bekannt ist und den Befehl

ld Akkumulator, <Speicherstelle>

enthält. Seinen typischen Verlauf diskutieren wir anhand Bild 2.2.

Im Rahmen dieser Befehlsbearbeitung (wie im Übrigen aller Ausführungen von Instruktionen) lassen sich zwei grobe Phasen identifizieren. In der Phase 1 lädt die CPU, gesteuert durch Abläufe in dem Steuerwerk CU, das Befehlswort aus dem Speicher. Dies geschieht einschließlich aller benötigten Zusatzinformationen wie Operanden, die in diesem Fall aus der Speicheradresse bestehen. Diese Phase zeigt sich am Bussystem, indem zwei lesende Zugriffe - je einer für das Befehlswort und den Operanden - sequenziell ablaufen. Das Steuerwerk speichert die Inhalte in dafür vorgesehene Befehlsregister und interpretiert sie für die weiteren Aktionen.

In der zweiten Phase werden der Inhalt der adressierten Speicherzelle und das Prozessor-interne Register (hier mit Akkumulator bezeichnet) kopiert. Hierzu trägt der Adressbus die Information über die gewünschte Speicherzelle, die aus dem Befehlsregister stammt. Der Speicher, der zugleich das Signal für einen Lesevorgang erhält (Steuerbussignal), muss den Inhalt der Zelle auf den Datenbus kopieren. Abschließend werden die Daten im Akkumulator gespeichert. Adress-, Daten- und Steuerbus sind Teilsysteme der Verbindungseinrichtung im Von-Neumann-Rechner.

Bild 2.2: Befehlsablauf im Von-Neumann-Rechner

Das hier exemplarisch gezeigte Verfahren zweier Phasen in der Befehlsbearbeitung ist die technische Lösung für das grundsätzliche Problem des Von-Neumann-Rechners: Er besitzt nur eine Verbindungseinrichtung zu zwei verschiedenen Speicherinhalten - Programm und Daten. Die Lösung ist hier der zeitliche Multiplex des Bussystems:

1. In der sogenannten Fetch- und Interpretationsphase wird aufgrund der durch den Befehlszähler angezeigten Adresse der Inhalt einer Speicherzelle geladen und als Befehl interpretiert. Zu dieser Phase zählt im Allgemeinen auch das Laden von Operanden, zumeist von Adressen oder unmittelbaren Daten, sofern diese als Bestandteil des Befehls im Speicher stehen. Die Interpretation des Befehls steuert den weiteren Vorgang.

2. In der darauffolgenden Ausführungsphase wird der Befehl nunmehr vollständig interpretiert und ausgeführt. Die Ausführung kann verschiedene Teile der CPU und des Bussystems sowie der angeschlossenen Einheiten in Anspruch nehmen. Das Leitwerk steuert dies entsprechend. Gemeinsam ist diesen Vorgängen, dass alle Speicherzelleninhalte, auch aus dem Ein-/Ausgabesystem, als Daten interpretiert werden.

Dieser zweistufige Ablauf muss für einen Befehl streng sequenziell ablaufen, da eine Abhängigkeit zwischen den verschiedenen Phasen existiert: Ergebnisse früherer Phasen sind eventuell für die weitere Bearbeitung notwendig. Spätere Variationen der Von-Neumann-CPU, zum Beispiel die RISC-Architekturen, beinhalten ein Phasenpipelining, das eine scheinbare Parallelität der Aktionen zueinander bewirkt. Dies ist keineswegs ein Widerspruch zu unseren frisch gewonnenen Erkenntnissen. Die Parallelität im Phasenpipelining bezieht sich auf verschiedene Befehle, während die Bearbeitung eines Befehls weiterhin streng sequenziell bleibt.

Der Zeitmultiplex der Busnutzung ist notwendig, da das Bussystem für den Zugriff auf mehrere Arten von Speicherzelleninhalten herhalten muss. Dies wiederum hat seine Ursache darin, dass der Speicher fast immer im Mittelpunkt der Operationen steht. Das ist unabhängig davon, ob es Programm- oder Dateninhalte sind, auf die zugegriffen werden soll. Die CPU-Speicherkommunikation beeinflusst daher die Leistungsfähigkeit des Gesamtsystems entscheidend, was auch als Von-Neumann-Flaschenhals (von Neuman bottle-neck) bekannt ist.

Die Grundstruktur des Von-Neumann-Rechners wurde im Harvard-Modell variiert. Code- und Datenspeicher sind voneinander getrennt und besitzen daher auch verschiedene, sich nicht gegenseitig störende Zugänge (Bussysteme). Dies gilt ebenso für das modifizierte Harvard-Modell, das einen Gesamtadressraum für Code- und Daten kennt, hierbei aber unabhängige Zugänge anbietet. Bei Daten-intensiven Rechenaufgaben, wie sie zum Beispiel bei Signalverarbeitungsalgorithmen auftreten, kommen daher oft Architekturen mit modifiziertem Harvard-Modell zum Einsatz (zum Beispiel bei digitalen Signalprozessoren, Digital Signal Processors, DSP).

Das Ablaufmodell nach Von-Neumann wird jedoch auch für das Harvard-Modell genutzt.