Die von Neumann-Architektur
- Nochmal zur Erinnerung:
Die zwei Aufgaben der CPU sind die Befehlsausführung und die Ablaufsteuerung. Gemäß dieser Aufgaben besteht sie aus einem Datenprozessor und einem Befehlsprozessor.
- Die Aufgabe des Datenprozessors besteht in der "klassischen" Verarbeitung von Daten, d.h. dem Ausführen von Berechnungen.
Dazu enthält er ein Rechenwerk, die Arithmetisch-Logische-Einheit (ALU), sowie (mindestens) drei Register zur Aufnahme von Operanden.
Bei den Registern handelt es sich um
- Den Akkumulator,
- Ein Multiplikator-Register (MR) (z.B. zur Aufnahme von Multiplikationsergebnissen) und ein Link-Register (L) (zur Aufnahme z.B. eines Additionsübertrages), welche beide als Akkumulator-Erweiterung angesehen werden können.
- Das Memory Buffer Register (MBR), über welches die Kommunikation mit dem Speicher abgewickelt wird.
Während der Akkumulator ein allgemeines Register ist, welches im Prinzip für jede im Rahmen eines Programms anfallende Aufgabe verwendet werden kann, sind alle anderen Register spezielle Register, welche alle eine spezielle Funktion besitzen und ausschließlich für diese verwendet werden können.
- Die Aufgabe des Befehlsprozessors besteht darin, Befehle zu entschlüsseln und deren Ausführung zu steuern. Dazu kann er sich folgender Register bedienen:
- Der aktuell bearbeitete Befehl befindet sich im Instruction Register (IR).
- Die Adresse des Speicherplatzes, welcher als nächstes anzusprechen ist, ist im Memory Adress Register (MAR) abgelegt.
- Die Adresse des nächsten auszuführenden Befehls wird im Program Counter (PC) gespeichert.
Die Entschlüsselung eines Befehls erfolgt durch einen separaten (Befehls-) Decodierer, die Steuerung der Ausführung schließlich durch ein Steuerwerk.
Merkmale des Von-Neumann-Rechners
- Die Bearbeitung eines speziellen Problems erfolgt gemäß eines Programms, also anhand einer Folge von Instruktionen.
- Vor Beginn der Bearbeitung steht dieses zusammen mit den Daten, die es benötigt, im Speicher. Daraus leiten sich die wichtigsten Merkmale des Von-Neumann-Rechners ab:
- Zu jedem Zeitpunkt führt die CPU genau einen Befehl aus.
Dieser Befehl kann (höchstens) einen Datenwert bearbeiten (SISD = Single Instruction, Singe Data)- Alle Speicherworte (d.h. Inhalte der Speicherzellen) sind als Daten, Befehle oder Adressen verwendbar. Die jeweilige Verwendung eines Speicherinhaltes richtet sich nach dem momentanen Kontext.
- Da also Daten und Programme nicht in getrennten Speichern untergebracht werden, besteht grundsätzlich keine Möglichkeit die Daten vor ungerechtfertigtem Zugriff zu schützen.
Von Neumann Zyklus - Ausführung von Instruktionen
- Der Prozeß der Befehlsverarbeitung bei Von-Neumann-Rechnern wird Von-Neumann-Zyklus genannt und besteht aus den folgenden fünf nacheinander ablaufenden Teilschritten:
- FETCH
- DECODE
- FETCH OPERANDS
- EXECUTE
- UPDATE PROGRAM COUNTER (PC)
- Beim FETCH-Schritt wird aus dem Speicher der nächste zu bearbeitende Befehl geholt.
- Dazu wird der Inhalt von PC nach MAR gebracht und der Inhalt dieser Adresse über das MBR aus dem Speicher geholt und im IR gespeichert.
(Da in der Fetch-Phase nur Befehle verarbeitet werden, geht der Rechner davon aus, daß es sich bei der geholten Bitfolge um einen Befehl handelt.)
- Beim DECODE-Schritt wird der geholte Befehl durch den Decodierer in Schaltinstruktionen für die Hardware aufgelöst.
- Bei FETCH-OPERANDS werden nun die Operanden,also die Werte, die durch den Befehl verändert werden sollen bzw. die als Parameter verwendet werden, also etwa die beiden Operanden einer Addition.
- Bei EXECUTE wird die Operation von der ALU ausgeführt
- Bei UPDATE PROGRAM COUNTER wird der Befehlszähler erhöht, damit der Rechner weiß, an welcher Stelle des Programms er sich gerade befindet. Dies geschieht parallel zum DECODE und FETCH OPERANDS.
Bei EXECUTE kann der PC wieder verändert werden (z.B. durch einen Sprungbefehl).
- Anschließend kann Zyklus von vorn beginnen und der nächste Schritt des Programms ausgeführt werden.
Bedingte und unbedingte Sprünge
Eine Folge von Befehlen stellt ein Programm für einen Rechner dar. Ausgeführt werden die Befehle eines Programms im Allgemeinen in der Reihenfolge, in der sie (hintereinander) im Speicher abgelegt sind (und welche durch den Programmierer bestimmt wird).
Dazu wird im UPDATE-PROGRAM-COUNTER-Schritt der Inhalt des PC, der die Adresse des nächsten ausuführenden Befehls angibt, lediglich um eins (bzw. um die Anzahl der Bytes, die der aktuelle Befehl benötigt) erhöht.
Eine Ausnahme bilden (bedingte oder unbedingte) Sprungbefehle (z.B. bei Schleifenenden oder Unterprogramm-Sprüngen).
In diesen Fällen ist der Inhalt des PC neu zu laden.Die Beschreibung der Fetch läßt sich wie folgt zusammenfassen:
FETCH-PHASE im Detail:
PC --> MAR
MAR --> MBR
MBR --> IR
decodiere IR
falls (kein Sprungbefehl) dann
{stelle Operanden bereit;
PC = PC + 1;
}
sonst {
PC = Sprungziel-Adresse;
}
|| Inhalt des PC ins MAR
|| Inhalt des MAR ins MBR
|| Inhalt des MBR ins IR
|| Befehls-Decodierung
|| Updaten des PC
|| Setzen des PC auf Sprungziel