2 Von-Neumann-Prozessor

22.03.2004 von PROF. DR. CHRISTIAN SIEMERS 
Das Grundprinzip eines einfachen, determinstischen, endlichen Automaten (siehe [3]) wird sehr häufig im Rahmen von Hardwaredesigns genutzt. Hierdurch lässt sich bereits ein sequenziell arbeitender Rechner konzipieren.

Automaten wird dafür sowohl als ein aktuelles Steuerwort, das den Programmfluss repräsentiert, als auch als der Input der Daten interpretiert, von dem ausgehend der Nachfolgezustand berechenbar ist. Dieser Nachfolgezustand wird seinerseits gespeichert und gegebenenfalls nochmals umgeformt als Ausgangsvektor - als das Ergebnis der Operation.

Dieses Konzept einschließlich Erweiterungen in Form des Kellerautomaten dient zusammen mit der Turingmaschine als theoretische Grundlage für Berechenbarkeiten, nicht zuletzt aufgrund der darin liegenden Universalität. In der Praxis der aktuellen Rechenanlagen kommt jedoch ein anderes, gleichwohl äquivalentes Modell zum Einsatz, das die Trennung zwischen Kontroll- und Datenfluss stärker zum Ausdruck bringt. Dieses Modell basiert auf den resümierenden Überlegungen von Burks, Goldstine und von Neumann und wird abkürzend Von-Neumann-Rechnermodell genannt.

Abschnitt 2.1 gibt eine Einführung in das Konzept nach Burks, Goldstine und von Neumann. Dieses Konzept hat in den vergangenen Jahrzehnten seit 1946 Variationen erfahren, die bei vielen konkreten Produkten zu finden sind.

Zum Verständnis insbesondere der aktuellen Mikroprozessoren (erhältlich seit 1971, Intel 4004) und Mikroprozessor-basierten Rechnersysteme ist es notwendig, sowohl die Hardware (zumindest in Teilen) als auch das Hardware/Software-Interface zu betrachten. Zum ersteren zählen die Bussysteme, insbesondere in ihren zeitlichen Eigenschaften, sowie die verschiedenen Speicherarten. Das Leit- und das Rechenwerk bilden den Übergang zum Hardware/ Software-Interface. Hier steht im Vordergrund, die logische Funktionalität dieser Teile zu verstehen.

Das Hardware/Software-Interface selbst wird durch das Registermodell, den Befehlssatz sowie die Adressierungsarten gebildet. Eine genaue Betrachtung der Phasen der Befehlsbearbeitung und - als Erweiterung des Von-Neumann-Rechners - das Interrupt-Request-Konzept bilden den Abschluss dieses Kapitels.

2.1 Grundkonzept

Zur Darstellung des Von-Neumann-Konzepts sind zwei wesentliche Teilkonzepte notwendig: Die Architektur des Rechnermodells mit den wesentlichen Komponenten sowie das Ablaufkonzept eines Programms. Dabei muss berücksichtigt werden, dass dieses Rechnermodell programmierbar ist. Die Programmierbarkeit bedeutet hierbei, dass die Hardware ein Programm in Form eines (Maschinen-lesbaren) Textes benötigt, um eine Aufgabe erfüllen zu können

Die Programmierbarkeit ist die praktische Ausprägung der Universalität. Es gelingt hierdurch, eine universelle Maschine zu bauen und sie in einer gegenüber der Bauzeit wesentlich kleineren Zeit auf das jeweilige Problem (und damit auch wechselnd auf viele Aufgabenstellungen) anzupassen. Die Universalität des Von-Neumann-Rechners ist hierbei ausschließlich durch den beschränkten Speicherplatz begrenzt. Berechenbare Probleme können also nur daran scheitern.

2.1.1 Teilsysteme des Von-Neumann-Rechnermodells

Die kennzeichnenden Teilsysteme eines Rechners nach dem Von-Neumann-Prinzip sind (siehe hierzu auch [3], [4] und [9]):

Diese Beschreibungen des Von-Neumann-Rechners führen zu der grafischen Darstellung in Bild 2.1. '

Das ebenfalls nahezu gleichzeitig entwickelte Harvard-Modell zeigt einen ähnlichen Aufbau, im Wesentlichen sind hier Code- und Datenspeicher strikt voneinander getrennt.

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.