[vorheriger Abschnitt][nächster Abschnitt][Inhalt]

2 Grundlagen der Rechnerarchitektur


2.2 Computerprinzipien

Das "Erfolgsgeheimnis" des Computers liegt darin, daß mit diesem Gerät erstmalig in der Geschichte eine universelle (Rechen-)Maschine geschaffen wurde. D.h. die Hardware eines Computers ist mächtig genug, daß er zusammen mit der beliebig änderbaren Software eine Vielzahl von Aufgaben erledigen kann. Je nach gerade ausgeführtem Programm erscheint der Computer als eine Rechenmaschine für verschiedenste mathematische Aufgabenstellungen, als eine leistungsfähige Schreibmaschine, ein technischer Zeichentisch, eine Datenbank und so weiter. Gleichgültig, welche Maschine momentan in der black box Computer zu stecken scheint, bleibt ein allgemeines Prinzip stets für alle Rechner bestehen: Der Computer benötigt eine Eingabe, reagiert auf diese mit deren Verarbeitung und liefert eine Ausgabe. Beispiele:

Eingabe

Verarbeitung

Ausgabe

laufende Nummer eines Datensatzes Berechnung eines Zeigers, Dateizugriff Inhalt des zugehörigen Datensatzes
(3+4) . (7+8) Zwei Additionen, eine Multiplikation, Verwaltung von Zwischenergebnissen 105
Tastendruck Holen des Aussehens des Buchstabens aus einer Tabelle, Schreiben in den Bildschirmspeicher Buchstabe auf Bildschirm



Die Maschinensprache

Diese Universalität des Computers ist möglich, weil er eine festgelegte Menge an - für sich genommen sehr einfachen - Befehlen beherrscht. Die Menge aller möglichen Befehle in ihren möglichen Abwandlungen nennt man die Maschinensprache eines bestimmten Rechners. Jedes Programm besteht (nur) aus diesen Maschinenbefehlen. Wenn ein Computer variabel einsetzbar sein soll, darf ihn die Maschinensprache nicht bereits einschränken.
Das Prinzip Eingabe-Verarbeitung-Ausgabe begegnet uns in konkretisierter Form als Laden-Verarbeiten-Speichern auch auf der Ebene einzelner Maschinenbefehle. Was diese drei Termini bedeuten, soll im Folgenden geklärt werden. Eines sei aber vorweg gesagt: Von einer höheren Ebene aus gesehen, ist jeder Maschinenbefehl für Laden,Verarbeiten oder Speichern zuständig (auch wenn es Überschneidungen gibt). Dennoch werden aber bei der Ausführung jedes Maschinenbefehls alle drei Phasen durchlaufen.


2.2.1 Laden-Verarbeiten-Speichern

Laden

Trotz der Einleitung müssen wir an dieser Stelle leider etwas weiter ausholen - bis zur Speicherhierarchie (Kapitel 5 wird später auf sie im Detail eingehen):
Wie jeder PC-Besitzer weiß, kann ein Computer nie genug Speicher haben, sei es Hauptspeicher oder Festplattenplatz. Dabei findet aus Kostengründen immer eine Abwägung zwischen Kapazität (Größe) und Geschwindigkeit statt (zumindest bei Festplatten ist halbwegs eine Abhängigkeit zwischen Preis und Geschwindigkeit zu erkennen). Sobald wir uns vom PC-Massenmarkt abwenden, der durch die große Anzahl kostenbewußter Käufer schon sehr am Preis-/Leistungsverhältnis orientiert ist, erkennen wir, daß ein Rechner mit z.B. 2 Gigabyte batteriegepuffertem Hauptspeicher aber ohne Festplatte technisch durchaus möglich wäre. Und warum soll man sich mit heute üblichen DRAMs mit 60 ns Zugriffszeit bescheiden, wo doch jeder die tollen Cache-RAMs mit 15ns und weniger Zugriffszeit kennt, die also mindestens viermal so schnell sind? Die Antwort ist natürlich der Preis - ein so ausgestatteter Computer wäre unglaublich teuer.
Wie erreicht man nun möglichst große Leistung zu einem möglichst kleinen Preis? Die Lösung liegt nicht etwa darin, auf alle schnelleren Speicherarten zu verzichten, und nur die preisgünstigste einzusetzen - käme es nur auf Mark/Megabyte an, würden heutige PCs jedes Bit qualvoll lange auf einem Bandlaufwerk durch Hin- und Herspulen suchen (eine DAT-Cassette für bis zu 8 Gigabyte kostet ca. 10 DM, die zugehörigen Laufwerke wären bei Massennachfrage bald ähnlich billig wie Videorecorder oder CD-Spieler). Es kann auch keine befriedigende Lösung sein, nur einen Speichertyp als Kompromiß zwischen Kosten, Größe und Geschwindigkeit zu wählen - wofür soll man sich auch in unserem Standard-PC entscheiden: Lieber eine Festplatte (100mal größer) oder lieber DRAMs (je nach gemessenem Aspekt 10mal bis 1000.000mal schneller)? Die Lösung, die jeder kennt, lautet natürlich: Von jedem etwas, vom Teureren etwas weniger, vom Billigeren etwas mehr. Im PC heißt das: Auf unserer Festplatte, die praktischerweise die Daten auch nach dem Abschalten bewahrt, lagern vielleicht Hunderte von Programmen, doch die Handvoll davon , die wir gleichzeitig ausführen lassen wollen, passt zusammen in den Hauptspeicher in DRAM-Technologie. Jedes Programm wird vor der Ausführung von der Festplatte in das RAM geschafft und, einmal dort eingetroffen, wesentlich schneller ausgeführt, als es auf einer Magnetplatte alleine möglich wäre. Das RAM wirkt somit als ein "Beschleuniger" für den Speicher namens Festplatte. Das funktioniert, weil wir eben nur einen Teil der Festplattenkapazität zur Zeit benötigen und dieser Teil (hoffentlich) in das RAM paßt . Dennoch müssen wir nicht auf eine große "Lagerkapazität" (auf der gesamten Festplatte) verzichten. Damit haben wir eine erste, zweistufige Speicherhierarchie kennengelernt (in Wirklichkeit hat sie schon im Standard-PC viel mehr Stufen).


Typische Stufen der Speicherhierarchie eines mainstream-PCs:

Stufe typische Größe relative Geschwindigkeit
(lineares Lesen)
DM pro MByte
Register im Hauptprozessor 4 - 32 Stück á 4 Byte >= 30000 sehr viele
Zwischenspeicher im Hauptprozessor
(first level cache)
8 - 32 KByte ca. 30000 > 1000
Zwischenspeicher in schnellem SRAM
(second level cache)
256 KByte 2250 120
Hauptspeicher in DRAM
(RAM)
8 - 32 MByte 1500 8
Festplatte 1 - 2 GByte 100 - 200 0,25
Auswechselbarer Speicher, z.B. Disketten, magneto-optische Medien, Magnetbänder beliebig 1 (HD-Diskette) < 0,25
(DAT-Band ca. 10-3)


Auf der von uns betrachteten Registertransferebene kommt Laden so vor: Größter/langsamster Speicher ist ein RAM, unter Vorgriff auf das Konzept des Von-Neumann-Rechners (Kapitel 3) sei verraten: Dieser Speicher enthält die Befehle, die zusammen das Programm ergeben, und die Operanden, also die Daten, die das Programm verarbeiten soll.
Warum gibt es hier noch eine höhere Ebene der Speicherhierarchie? Kann das Programm nicht direkt im RAM ausgeführt werden? Die Gründe, warum dies nicht getan wird, sind wieder Kosten und Leistung (Performance) des Rechners:

Wir können also sagen: Der Einsatz einer Speicherhierarchie ist wirtschaftlich, Laden also notwendig. Wenn wir nun nicht darum herumkommen, wo tritt es dann auf?

Nur für einen reinen Von-Neumann-Rechner ist also folgende Betrachtung uneingeschränkt richtig:

    1. "Lade Operand 1 vom RAM in den Akkumulator" (falls wir nicht das Ergebnis des letzten Befehls benutzen sollen)
    2. "Akkumulator := (Akkumulator) + (Operand 2 aus RAM)"
    3. "Speichere Akkumulator im RAM" (wenn der nächste Befehl nicht unser Ergebnis weiterverwendet)

    Daß eine solche "Sparmaschine" nicht besonders effektiv arbeitet, liegt auf der Hand. Jetzt wird außerdem deutlich, daß ein Unterschied zwischen der "Aufgabe" eines Maschinenbefehls und den zu seiner Ausführung notwendigen Schritten besteht:
    Der so einfach klingende Befehl "c := a + b" muß im Von-Neumann-Rechner in drei Maschinenbefehle zerlegt werden, einen Ladebefehl, einen Rechenbefehl (Verarbeitungsbefehl) und einen Speicherbefehl.
    Jeder der drei Befehle für sich aber durchläuft eine Ladephase (das Befehlswort wird aus dem RAM in das Befehlsregister geholt), um überhaupt ausgeführt werden zu können; der Rechenbefehl tritt danach in die Verarbeitungsphase ein, in der er die ALU zum Addieren benutzt und endet schließlich mit der Speicherphase, in der der Akkumulator seinen neuen Wert bekommt. Bei Lade- und Speicherbefehl kann man sich streiten, ob deren eigentliche Aufgabe (das Übertragen eines Binärwortes vom RAM in ein Register bzw. umgekehrt) zur Verarbeitungs- oder Speicherphase gehört.

Verarbeiten ("Rechnen")


Dies ist die "exekutive" Phase jedes Maschinenbefehls; an ihr können verschiedene Komponenten des Rechners beteiligt sein:

    1. "Lade Operand 1 vom RAM in den Akkumulator"
    2. "Akkumulator := (Akkumulator) + (Operand 2 aus RAM)"
    3. "Speichere Akkumulator im RAM"

    Bei den Befehlen 1 und 3 findet eine Verarbeitung der bewegten Binärwörter nur durch die Identitätsfunktion statt; sie gehören zur Klasse der Lade- und Speicherbefehle, die Daten nur in Raum (Kopieren) und Zeit (Speichern im Sinne von Aufbewahren) bewegen, aber nicht verändern und deswegen in der Verarbeitungsphase keine Register oder RAMs benötigen, um Operanden zu liefern.

Speichern

Wir haben bereits gesehen, daß es Klassen von Maschinenbefehlen gibt, zu denen auch die Lade-/Speicherbefehle gehören. Aufgabe eines Ladebefehls ist es, ein Binärwort von Stufe n zu Stufe n-1 zu übertragen, ein Speicherbefehl kopiert dementsprechend von Stufe n-1 nach Stufe n (das Wort wird im langsameren, aber größeren, bei Festplatten/Disketten/Bändern auch sichereren, Speicher einer niedrigeren Stufe quasi eingelagert).

Aber auch beim Transfer von Stufe n zu Stufe n oder n-1 spricht man von Speichern. Dies kann der Fall sein, wenn ein Maschinenbefehl (nicht unbedingt ein Speicherbefehl!) in seine Speicherphase eintritt. Ein Additionsbefehl hat bis dahin z.B. bereits eine ALU mit zwei Operanden versorgt und ihr den Befehl zum Berechnen der richtigen Funktion gegeben, das Ergebnis der Berechnung steht in der ALU bereit. Da die ALU meistens keine Werte speichern kann, muß das Wort nun irgendwo abgelegt werden, beim Von-Neumann-Rechner z.B. zwingenderweise im Akkumulator. Dies ist die Aufgabe der Speicherphase. Man beachte, daß in diesem Fall die Daten auf Stufe 1 bleiben.

Um dieser Verwirrung Herr zu werden wird die Speicherphase oft in weitere Phasen unterteilt: In einer Phase wird nur das RAM ausgelesen oder beschrieben, eine andere dient nur zum Sichern von Ergebnissen in Registern.


[vorheriger Abschnitt][nächster Abschnitt][Inhalt] Carsten Kelling 1996 ([EMail senden]); letzte Änderung: 17. September 1997