Sie sind auf Seite 1von 64

Inhalt der Vorlesung:

Technische Informatik II - Prof. Malek

Technisches Heftje

Frédéric Losem

Humboldt-Universität zu Berlin
Institut für Informatik
WS 2003/2004 - SS 2005

205.07.2005
Widmung:

Dieses eigentlich

Erklärung:

Möge

Viva la Bohème

Losehemer(2005)

3
Inhaltsverzeichnis

1 Computer-Geschichte 6
1.1 Entwicklung der Rechner: . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2 Computer-Generationen: . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

2 Rechenleistung und Kosten 14


2.1 Rechenleistung: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.2 Benchmarks: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3 Kosten: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

3 Daten und Befehlsformate 16


3.1 Zahlendarstellung: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2 Formate verschiedener Maschinen: . . . . . . . . . . . . . . . . . . . . . . 20

4 Addressierungsarten 22
4.1 X-Adressrechner: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.2 Adressierungsarten: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

5 Programmierung 25
5.1 Maschinenprogrammierungskonzepte: . . . . . . . . . . . . . . . . . . . . . 25
5.2 Befehlssatz: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.3 wichtige Befehle: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
5.4 Steuereinheit: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.5 Mikroprogrammierung: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
5.6 CISC vs. RISC: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

6 ALU 35
6.1 Typen und Eigenschaften von ALU’s: . . . . . . . . . . . . . . . . . . . . 35
6.2 Addition: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.3 Multiplikation: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
6.4 Divisionsalgorithmen: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6.5 Fließkommaarithmetik: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

4
Inhaltsverzeichnis

7 Speicher 45
7.1 zeitliche und örtliche Lokalität: . . . . . . . . . . . . . . . . . . . . . . . . 45
7.2 Speicherhierarchie: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
7.3 Leistungsbemessung: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
7.4 Virtueller Speicher: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

8 Caches 49
8.1 Ersetzungs- und Schreibstrategien: . . . . . . . . . . . . . . . . . . . . . . 49
8.2 Größe und Teilung: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
8.3 Leistungsmaße von Caches: . . . . . . . . . . . . . . . . . . . . . . . . . . 51
8.4 Translation Lookaside Buffer – TLB: . . . . . . . . . . . . . . . . . . . . . 51

9 Software 52
9.1 Lader: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
9.2 Linker: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
9.3 Spooler: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
9.4 Multiprogramming: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
9.5 Betriebssystem: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
9.6 Beispiele für Softwareebenen: . . . . . . . . . . . . . . . . . . . . . . . . . 55

10 Ein- und Ausgabe 57


10.1 Probleme bei der Ein- bzw. Ausgabe: . . . . . . . . . . . . . . . . . . . . . 57
10.2 Ein-/Ausgabeprozedur: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
10.3 EA-Fehler: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
10.4 Adressierung und Datentransfertechniken: . . . . . . . . . . . . . . . . . . 58
10.5 Synchronisationstechniken – Polling und Interrupts: . . . . . . . . . . . . 59
10.6 Ein-/Ausgabe Hardwarestruktur: . . . . . . . . . . . . . . . . . . . . . . . 60
10.7 Kanaltypen: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

11 Kommunikation 62
11.1 Definitionen: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
11.2 Netzwerke: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
11.3 Datenübertragungssysteme: . . . . . . . . . . . . . . . . . . . . . . . . . . 63
11.4 Interoperabilität von Netzen: . . . . . . . . . . . . . . . . . . . . . . . . . 64

Index 64

5
1 Computer-Geschichte

1.1 Entwicklung der Rechner:


• 4000 - 1200 v. Christi: Tontafeln für Handelsaufzeichnungen

• unbekannt: Abakus – Rechenschieber für einfache Arithmetik

• 1570: logarithm bones (John Napier)

• 1617: Wood strip logs (Robert Bissaker)

• 1620: Slide Rule (Edmund Gunter)

Beginn des Mechanischen Zeitalters

• 1623: mechanischer Addierer (Wilhelm Schickhard)

• 1642: mechanischer Addierer und Subtrahierer (Blaise Pascal)

• 1671: 4-Funktionsrechner, beherrschte 4 Grundrechenarten, erstmals Sperrad für


Überträge (Gottfried Leibniz)

• 1794: Autometer, Verbesserung des 4-Funktionsrechners, berechnete Logarithmen


von 1 bis 200000 (Gaspard de Prony)

• 1820: Arithometer, weitere Verbesserung des 4-Funktionsrechners (Thomas de


Colmar)

• 1823: Differential Maschine, berechnete Polynome 6. Grades bis auf 20 Stellen


genau, nie gebaut (Charles Babbage)

• 1854: Maschine für binäre logische Operationen AND, OR, NOR (George Boole)

• 1872: Printing Calculator (E.D. Borbour)

• 1874: Analoge Maschine (Lord Kelvin)

• 1875: Printing Calculator, verbesserte Version (Frank Baldwin)

• 1874 - 77: Desk-Calculator (Wilgodt Odhner)

6
1.1 Entwicklung der Rechner:

• 1885: Comptmeter, druckender Rechner mit eindrückbaren Tasten.

• 1890: Tabelliermaschine, arbeitete mit Lochkarten (Herman Hollerith)

• 1892: printing calculator, verbesserte Version (William Burroughs)

• 1912: 4-Funktionsrechner, verbesserte Version Beginn des Mechanischen Zeitalters


(Monroe, Baldwin u. a)

• 1930: Motorbetriebene Rechner


Beginn des elektronischen Zeitalters:
• 1904: (John Flemming) patentiert die Vakuum Dioden Röhre

• 1908: Entwicklung einer elektrischen Scan-Methode fpr VDR’s (Campbell, Swin-


ton)

• 1934: erste Idee einer elektronischen Rechenmaschine (Konrad Zuse)

• 1936: Patent der ersten Anwendung für automatische Rechnungen mit binärem
Kombinationsspeicher

• 1937: Vorschlag für digitale 4-Funktionsmaschine (Howard Aiken)

• 1938-1945: Zuse beginnt mit dem Bau seiner Rechner. Während das erste Modell
“Z1“ noch mechanisch ist, nutzt bereits der “Z2“ Telefonrelais. Der erste funkti-
onsfähige programmgesteuerte elektromechanische Rechner entsteht 1941 mit dem
“Z3“, im folgenden entwickelt Zuse diesen weiter zum “Z4“.

• 1943: Colossus, Vakuum-Röhren-Rechner zum Codeknacken (englische Kreigsent-


wicklung)

• ca. 1944: ENIAC, erster elektronischer allgemein verwendbarer Rechnet mit Vakuum-
Röhren (amerikanische Kriegsentwicklung)

• 1945: Konzept von gespeicherten Programmen (John von Neumann)

• 1947: erster Transistor (Bardeen, Brattain, Shockley)

• 1947: Magnetischer Trommelspeicher

• 1948: Entwicklung des Hamming-Codes zur Fehlerkorrektur (Richard Hamming)

• 1948: EDSAC, electronic delay storage automatic calculator (Cambridge Univer-


sität)

• 1949: Whirlwind Coomputer, mit 5000 Vakuumröhren (Jay Forrester)

7
1 Computer-Geschichte

• 1950: EDVAC, electronic discrete variable automatic computer

• 1951: UNIVAC 1, universal automatic computer, Vakuumröhren, Speicherzugriffs-


zeit von 0,5 ms

• 1951: Einführung der Mikroprogrammierung (Maurice Willkes)

• 1951: Matrix-Core Speicher (Jay Forrester)

• 1951: Entwicklung des ersten Compilers: A-0 (Grace Murray Hopper)

• 1952: IAS: bitparallele Maschine (John von Neumann)

• 1953: IBM 650, erster Massen-Computer

• 1954: Entwicklung des Silizium-Transistors

• 1956: Univac mit Transistoren

• 1957: Entwicklung des Fortran-Compilers (John Backus)

• 1957: Musasino-1, erster Parametroncomputer (NTT)

• Entwicklung der ersten Halbleiter-Schaltkreise (Kilby, Noyce)

• 1959: Gründung des Comittee on Data Systems Languages, entwickelt COBOL

• 1964: IBM kündigt System/360 an – Computer der dritten Generation

• 1964: Sabre, System für weltweite Flugreservierung (IBM)

• 1967: 4-Funktions-Handrechner (Texas-Instruments)

• 1968: Cray CDC7600 erreicht 40 MFLOPS

• 1973: Office Computer, mit Grafik und Maus (Alan Key)

• 1976 Apple I (Jobs, Wozniak)

• 1984: Einführung der CD-Rom (Sony, Phillips)

• 1985: PC AT, mit Intel-Prozessor (IBM)

• 1990: www-Prototyp (Berners-Lee)

8
1.2 Computer-Generationen:

1.2 Computer-Generationen:
1. Generation: basierend auf Vakuumröhren

Besitzt RAM (Schreib-Lese-Speicher) mit 4096 (21 2) Worten, jeweils 40 bit lang und
Hochgeschwindigkeitsregister.
Das Datenwort besteht aus einem Vorzeichenbit und weiteren 39 bit für die Daten.
Das Instruktionswort besteht aus 7 bit Opcode, danach 12 bit für die Adresse, weiteren
8 bit für den Befehlscode und nochmals 12 bit für die zweite Adresse.

9
1 Computer-Geschichte

2. Generation: basierend auf Tansistoren

Computer dieser Generation sind aus Transistoren aufgebaut, besitzen Magnetkernspei-


cher oder Magnettrommelspeicher. Ein- und Ausgabe sind voneinander unabhängig. Sie
besitzen 200 verschiedene Instruktionen und einen 32k Speicher. Einer der bekanntesten
Computer dieser Generation ist der IBM 7094
Software: Diese Rechner waren schon mit Hochsprachen wir FORTRAN programmier-
bar, Programme konnten mit Unterprogrammen arbeiten, wobei verschiedene Program-
me prallel arbeiten konnten. Ebenfalls wurden Interrupts eingeführt (siehe 2).
Adressierung: Neben Stapelverarbeitung, also Stacks, existeren Indexregister. Es wur-
de mit indirekter Adressierung gearbeitet.
Zahlendarstellung: Entweder in Festkommadarstellung (1 bit Vorzeichen, 35 bit Zah-
len, Vor- und Nachkommateil vom Entwickler festgelegt), Fließkommadarstellung (1 bit
Vorzeichen, 8 bit Exponent, 28 bit Mantisse), oder EBIDIC(electronic binary into deci-
mal interchange code)
Instruktionen: Aufgebaut aus 21 Bit Op-Code gefolgt von 15 bit für die Adresse.

10
1.2 Computer-Generationen:

3. Generation: mit wenig integrierten Schaltkreisen (SSI, MSI)

Typisches Beispiel ist der IBM S/360-370.


Zahlendarstellungen:

1. In Zonen geteilte Dezimalzahl:

Hierbei ist das am weitesten rechts stehende Feld das niederwertiges Byte.

11
1 Computer-Geschichte

2. Gepackte Dezimalzahl

Auch hier ist das am weitesten rechts stehende Feld das niederwertigste Byte.

3. Festkomma Binärzahl:

4. Fließkomma Binärzahl

Alphanumerische Daten

4. Generation: mit hochintegrierten Schaltkreisen (LSI, VLSI)

12
1.2 Computer-Generationen:

Als Computer der 4. Generation werden die modernen Personal Computer bezeichnet,
die in ihren Architekturen sehr unterschiedlich sind.
So beginnt die Generation mit dem Intel 4004 (4bit Worte und 45 Instruktionen) und
reicht bis zu den aktuellsten Computern wie dem Intel Pentium 4 (64bit, unzählige Ope-
rationen)
Die Computer dieser Generation besitzen 3 verschiedene Arten von Registern: Frei ver-
wendbare Register, Multiplizier- bzw. Dividierregister sowie dem Programmzähler

5. Generation:
Zukünftige Entwicklungen wie: Computer mit künstlicher Intelligenz, neuronale Netze,
Digital-Analog-Hyriden, Bio-Computer, Quantencomputer etc.

13
2 Rechenleistung und Kosten
Moore’s Law : Seit 1930 erhöht sich die Rechenleistung alle 10 Jahre um das 100-fache.
Um etwa den selben Faktor erhöht sich die Größe des Hauptspeichers alle 7 Jahre. Die
Frage ist, ab wann diese Entwicklung aufgrund physikalischer Gegebenheiten nicht mehr
fortzusetzen ist.

Diese Leistungsverbesserungen werden durch 3 verschiedene Faktoren vorangetrieben:

1. Weiterentwicklung in der Technologie – immer kleinere und effizientere Bauteile

2. Algorithmen – immer bessere Wege werden gefunden, um eine Aufgabe möglichst


effizient zu berechnen.

3. Architektur – bestimmte Bauarten stellen sich als besser heraus als andere, bsp.
sind Multiprozessorsysteme leistungsstärker als Einzelprozessorsysteme.

2.1 Rechenleistung:
Für jeden ist die interessante Rechenleistung etwas anderes, so ist für den Benutzer die
Antwortzeit am wichtigsten, für andere die maximale Rechengeschwindigkeit, für wieder
andere Die Ausführungszeit. Einige Leistungsmerkmale sind:
Takte Sekunden
1. Ausführungszeit: Befehlsanzahl · Befehl · Takt

Takte
2. Taktgeschwindigkeit: Sekunde

3. CPI – clocks per instruction: Σ AnzahlTaktanzahl(Befehl i)


der ausgeführten Befehle
i

4. MIPS – million instructions per second : Anzahl ausgeführter Befehle


Ausführungszeit·106
= Taktfrequenz
CPI·106
Der MIPS-Wert ist allerdings nicht sehr aussagekräfitg. Er hängt stark von der
Befehlsstruktur des betrachteten Programmes ab. Optimiert etwa ein Compiler
das Programm und spart Befehle ein, die viele Takte benötigen, so steigt der CPI-
Wert, aber der MIPS-Wert sinkt. Obwohl das Programm schneller abgearbeitet
werden kann, sinkt der “Benchmark“-Wert.
1
5. Abarbeitungszeit: Taktfrequenz · CPI

14
2.2 Benchmarks:

6. MFLOPS – million floating-point operations per second : sehr abhängig vom rela-
tiven Anteil an ganzen Zahlen und Ließkommaoperationen eines Programms und
vom relativen Anteil “billiger“ und “teurer“ Fließkommaoperationen.

2.2 Benchmarks:
Je nach Architektur ist die Ausführung von bestimmten Programmen schneller oder
langsamer. Dies hängt davon ab, welche Arten von Operationen der Prozessor effizi-
ent durchführen kann, und welche Operationen im Programm vorkommen. So enthalten
gute Benchmarks verschiedene Arten von Programmen um eine ausgeglichene Bewer-
tung durchführen zu können. Allerdings ist zum Beispiel ein Test, der Spieleprogramme
beinhaltet schlecht geeignet, um etwas über die Rechenleistung für Büroprogramme zu
erfahren.
Am sinnvollsten ist es, verschiedene Leistungszahlen mit einer geeigneten (abhängig vom
Einsatzgebiet des Rechners) Zahl zu gewichten, und das System anhand dieser Gesamt-
zahl einzuschätzen.

Wichtige Benchmarks sind zum Beispiel:

• Whetstone: synthetischer Benchmark, benutzt naturwissenschaftliche ALGOL Pro-


gramme

• Dhrystone: für naturwissenschaftliche Anwendungen ohne Fließkommaberechnung

• SPEC Marcs: benutzt verschiedene Programme und stellt die Ausführungszeit des
Systems im Vergleich zu einem Referenzsystem dar.

2.3 Kosten:
Kosten sind rasanten Veränderungen unterworfen. Kommt ein Produkt auf den Markt,
so ist der Preis sehr hoch und nimmt dann umgekehrt exponential ab. Die Herstellungs-
kosten sinken durch steigende Erfahrung des Herstellers, größer werdende Stückzahlen
und aufkommende Konkurrenz.

15
3 Daten und Befehlsformate
Befehl: Was soll gemacht werden
Bei der Auswahl welches Befehlsformat bei der Konstruktion eines Rechners benutzt
werden soll, stellen sich verschiedene Fragen:

1. Wie viele Befehle werden benötigt (wichtig für die Länge der Befehlsworte)

2. Welche Adressierungsart soll benutzt werden

3. festes oder variables Befehlsfeld

4. Hardwarekosten zum dekodieren und ausführen

Befehle werden grob unterteilt in arithmetische, datenbewegende Befehle, Verzweigungen


und Sprünge

Aufbau eines Befehls:


Die ersten Bits geben die auszuführende Operation an, darauf folgen 0 bis 3 gleichgroße
Felder die die Operanden beschreiben, meistens als deren Aufenthaltsort, eventuell aber
auch deren Wert.

Adresse: Wo liegen bestimmte Befehle oder Daten


Auch bei der Auswahl der benutzten Zahlen in einem Prozessor muss man verschiedene
Fragen stellen

1. Welche Zahlen müssen dargestellt werden (ganze, reelle, komplexe, . . . )?

2. Welcher Wertebereich wird benötigt?

3. Wie genau muss man die Zahlen wiedergeben können?

Daten: Rohdaten, die bearbeitet werden können/sollen

16
3.1 Zahlendarstellung:

Datentypen:
Länge Intel, 16bit Gnu-C, 32 Bit Gnu-C, 64 Bit
8 Bit Byte Byte byte, char byte, char
16 Bit Wort Halbwort short short
32 Bit Doppelwort Wort int, long, float int, float
64 Bit Quadwort Doppelwort long long, double long, double

3.1 Zahlendarstellung:
Binäre Repräsentation:
Binäre Zahlen sind sind wie folgt zusammengestellt:

B = bn−1 . . . b1 b0

und haben den Wert

V (B) = bn−1 2n−1 + · · · + b1 n1 + b0 n0

Wird eine vorzeichenbehaftete Zahl dargestellt, so ist die Zahl positiv, wenn das erste
Bit 0, negativ wenn es 1 ist.
1er Komplement: N = (2n − 1) − N Im 1er Komplement sind alle Bits negiert
2er Komplement: N = 2n − N = (2n − 1) − N + 1 = N + 1 – Das um 1 erhöhte 1er
Komplement

Fließkommadarstellungen:
Für eine Zahl Z = ± M ·2±E wird die Mantisse und der vorzeichenbehaftete Exponent
der darzustellenden Zahl getrennt codiert.
Dabei wird M normalisiert, z.B. auf den Dualzahlenbereich 0,1000. . . ≤ z ≤ 0,1111. . . .
Da das führende Bit immer 1 ist, kann auf die Speicherung verzichtet werden, weshalb

17
3 Daten und Befehlsformate

man den Bereich auf 1,0000. . . ≤ Z ≤ 1,1111. . . normiert. Als Mantisse wird nur die
Nachkommastelle dargestellt (Schreibweise 1, M), der Exponent ist dabei um 1 kleiner.
Die Form der Speicherung ist genormt: Für die Mantisse M wird 1 Bit für das Vorzeichen
und m Bit für den Betrag verwendet, für den Exponenten ein Offset-Binärcode mit n
Bits mit einem Offset von (2n−1 -1):

Wichtiges Format IEEE754:


Die Darstellung ist 32 Bit lang, das erste Bit ist für das Vorzeichen (0 = positiv, 1 =
negativ), es folgen 8 Bit für den Exponent und 23 Bit für den Signigikant. Die Null wird
dargestellt, indem Exponent und Signifikant 0 ist, hat der Exponent den Wert 255, so
bedeutet dies, dass unendlich oder “not a number“ dargestellt wird.
Der Exponent kann von -127 bis 127 reichen, wobei ein Offset von 127 existiert. Die Null
wäre aöso 127, die 1 die 128 usw.

IEEE ⇒ Dezimal:
1 1010 0010 1110 0011 1011 1100 1000 110
Das MSB (most signifikant Bit), also das erste ist 1, also ist das Vorzeichen negativ.
Exponent ist 1010 0010 ∼= 162 = 35 + 127, Exponent ist 35
Aus dem Signifikant ergibt sich die Mantisse: 1,1110 0011 1011 1100 1000 110
Ergebnis -1 · (1,11100011101111001000110)2 · 23 5 = -64926015488
Dezimal ⇒ IEEE:
7543,53125 ∼ = (1110101110111,10001 ∼= (1,11010111011110001) ·212
VZ = 0, da Zahl positiv
Exponent: 12 + 127 = 139 ∼ = 10001011
Signifikant: 110 1011 1011 1100 0100 0000
Ergebnis: 0 1000 1011 1101 0111 0111 1000 1000 0000

binary-Coded Decimal:
Basierend auf Modulo-10-Rechnung um die Zahlen 0 bis 9 in 4 Bit darzustellen. Zahlen

18
3.1 Zahlendarstellung:

die größer als 10 sind, werden durch Addition von 6 justiert. Um beispielsweise zwei
Dezimalzahlen zu addieren wandelt man alle Ziffern in einen 4bit-Block um, addiert je-
weils die Blöcke der gleichen Stelle. Danach muss zu jedem Block 0110 (also 6) addiert
werden:

gebochene Zweierkomplementdarstellung:
Hierfür wird von der binären 2 der Wert für die Nachkommateile des Bruches subtrahiert:

Wichtige Brüche:

dezimal binär dezimal binär


.125 0.001 -.875 1.001
.250 0.010 -.750 1.010
.375 0.011 -.625 1.011
.500 0.100 -.500 1.100
.625 0.101 -.375 1.101
.750 0.110 -.250 1.110
.875 0.111 -.125 1.111

Big und little Endian:


Bezeichnet, wie die Byte-Blöcke im Speicher angeordnet sind. In verschiedenen Systemen
werden die Blöcke unterschiedlich angeordnet, was dazu führt, dass der Maschinencode
der einen Maschine für die andere unlesbar ist.
Beispiel anhand der Zahl 1025

19
3 Daten und Befehlsformate

Little Endian Adresse Big Endian

Das selbe Problem existiert auch für die einzelnen Bits.

3.2 Formate verschiedener Maschinen:

PDP-11:
Befehlsformat: 10bit für den Op-Code, 6bit für die Adresse. Die ersten 3 Adressbits be-
zeichnen die Art der Adressierung, die zweiten 3 Adressbits geben die Registernummer
an.
Zahlenformat: 16bit im 2er Komplement
Datenformat: 2 × 8 Bit stellen je ein Zeichen dar.

Power-PC:
Befehlsformate: im folgenden sind

• RD – Zielregister

• RS – Quellregister

• RA-RC – zusätzliche Register

• Val – Direktwert

• BO, BI – Sprungbedingung

• FL – Flag

20
3.2 Formate verschiedener Maschinen:

Datenformat: Daten sind 64bit lang, die ersten beiden Bytes werden als Halbwort 0 be-
zeichnet, . . . , die letzten beiden Bytes sind das Halbwort 3. Halbwort 0 und 1 bilden das
Wort 0, die Halbworte 2 und 3 das Wort 1. Die Worte 0 und 1 bilden zusammen das
Doppelwort 0.
Beim Powerpc sind sowohl Big- als auch Litte Endian möglich.

68000:
Befehlsformat: Die Befehle des 68000 bestehen aus vier 16bit-Folgen. Die ersten 16 Bit
bestimmen den Befehl und die Adressierungsart, die zweiten einen Direktoperand, be-
stehend aus 8 oder 16 Bit, die dritten bestimmen die Quelle (ebenfalls 8 oder 16 bit),
die vierten das Ziel (wieder 8 oder 16 bit).

Pentium:
Befehlsformat: hat variable Länge:

Der Opcode besteht aus 1 oder 2 Bytes, ModR/M und SIB (ModR/M kann 8 Regis-
ter oder 24 Adressierungsarten darstellen, manche Adressierungsarten benötigen weitere
Informationen, diese sind im SIB-Byte) – falls benötigt – jeweils 1 Byte, das Adress-
Displacement 0, 1, 2, oder 4 Bytes und die immediate Daten ebenfalls aus 0, 1, 2 oder
4 Bytes
Zahlenformate:
Byte signed integer: 1 Vorzeichenbit, 7 Bit für die Zahl
Word signed integer: 1 Vorzeichenbit, 15 Bit für die Zahl
Double Word signed integer: 1 Vorzeichenbit, 31 Bit für die Zahl
Alle Formate existieren auch als unsigned integer, diese nutzen das erste Bit ebenfalls
für die Zahl

21
4 Addressierungsarten

4.1 X-Adressrechner:
Im Nachfolgenden wird für jede Maschinenart ein Beispielprogramm dargestellt, dieses
2 3
berechnet den Ausdruck AC −B
+B
. Für die Berechnung der benötigten Takte wird angenom-
A
men: if (instruction fetch) - 2 Takte, of (operand fetch) - 2 Takte, ex (execution) - 1 Takt

0-Adressrechner: Es wird ohne Adressen gearbeitet, es kann nur das oberste Element
des Stacks adressiert werden.
Beispiel:

Programm Zugriffe Takte


1 push A if, of, ex 5
2 push C if, of, ex 5
3 div if, ex 3
4 push B if, of, ex 5
5 add if, ex 3
6 push b if, of, ex 5
7 dup if, ex 3
8 dup if, ex 3
9 mul if, ex 3
10 mul if, ex 3
11 push A if, of, ex 5
12 dup if, ex 3
13 mul if, ex 3
14 sub if, ex 3
15 div if, ex 3
Σ = 55

1-Adressrechner: Es gibt ein Datenregister, den Akkumulator, Befehle sprechen einen


Operanden über eine Adresse an, der zweite Operand liegt auf dem Akkumulator, das
Ergebnis wird auf diesen gespeichert.
Beispiel:

22
4.1 X-Adressrechner:

Programm Zugriffe Takte


1 lda C if, of, ex 5
2 div A if, of, ex 5
3 add B if, of, ex 5
4 sta R1 if, ex 3
5 lda B if, of, ex 5
6 mul B if, of, ex 5
7 mul B if, of, ex 5
8 sta R2 if, ex 3
9 lda A if, ex 3
10 mul A if, of, ex 5
11 sub R2 if, ex 3
12 div R1 if, ex 3
Σ = 50

2-Adressrechner: Der Befehl enthält 2 Adressen, wovon eine, meist die zweite, auch
die Zieladresse ist. Das 2-Adressformat ist das am weitesten verbreitete Format.
Beispiel:

Programm Zugriffe Takte


1 mov C R1 if, of, ex 5
2 mov R1 A if, of, ex 5
3 add R1 B if, of, ex 5
4 mov B R2 if, of, ex 5
5 mul R2 B if, of, ex 5
6 mul R2 B if, of, ex 5
7 mov A R3 if, of, ex 5
8 mul R3 A if, of, ex 5
9 sub R2 R3 if, ex 3
10 div R2 R1 if, ex 3
Σ = 44

3-Adressrechner: Der Befehl besteht aus 2 Adressen, meistens sind die ersten beiden
die Quelloperanden, die dritte Adresse ist das Ziel. 3-Adressrechner ermöglichen es, sehr
kurze Programme zu schreiben.
Beispiel:

23
4 Addressierungsarten

Programm Zugriffe Takte


1 mov A 0 R0 if, of, ex 5
2 mov C 0 R1 if, of, ex 5
3 div R1 R2 R3 if, ex 3
4 add R3 B R3 if, ex 3
5 mov A 0 R4 if, of, ex 5
6 mul R4 R4 R4 if, ex 3
7 mov B 0 R5 if, of, ex 5
8 mul R5 R5 R5 if, ex 3
9 mul R5 B R5 if, of, ex 5
10 sub R4 R5 R4 if, ex 3
Σ = 45

4.2 Adressierungsarten:
• Absolute/Direkte Adressierung: Die Adresse des Operanden ist Teil des Befehls.

• implizierte Adressierung: Die Adresse ergibt sich aus dem Befehl

• unmittelbare Adressierung: Der Operand wird direkt im Befehl angegeben

• indirekte Adressierung: Die Adresse des Operanden steht in dem Register, dessen
Adresse im Befehl angegeben ist.

• indizierte Adressierung: Die Adresse des Operanden ist die Summe des Wertes
eines Indexregisters und der direkten Adressierung

• Basis-Adressierung: Die Adresse des Operanden ist die Summe des Wertes eines
Basisregisters und der direkten Adresse.

• relative Adressierung: Die Adresse des Operanden ist die Summe der direkten
Adresse und des Inhaltes des Befehlszählers

• segmentiere Adressierung: Die Adressierung des Operanden ist eine Kombinati-


on des Inhaltes des Segment-Adressregisters und der direkten Adresse ⇒ Das
Segment-Adressregisters bestimmt eine Speicherseite, die direkte Adresse ist ei-
ne Adresse auf dieser Speicherseite

• Block-Adressierung: Die Adresse des ersten Wortes ist durch den Befehl gegeben,
die Anzahl der Wörter wird durch den Befehl, eine bestimmte Länge oder ein
bestimmtes Zeichen gegeben.

24
5 Programmierung

5.1 Maschinenprogrammierungskonzepte:
Arten von Sprachen:
Maschinensprache – ML: besteht aus binären oder hexadezimalen Zahlen. Muss nicht
mehr auf für die entsprechende Maschine übersetzt werden, ist aber unübersichtlich,
undhandlich und fehleranfällig.
Assemblersprache – AL: abhängig von der Sprache, ermöglicht effiziente Programmie-
rung die durch Hardwarenähe performant ist. Im Assemblercode steht entweder ein Be-
fehl und die Register, die er betrifft, Warteanweisungen, Sprünge (eventuell mit Bedin-
gungen) und ähnliches. Dabei sind die Befehle nicht allgemeingültig, sondern müssen
über die Steuereinheit definiert werden. Eine Assembleranweisung entspricht im allge-
meinem etwa 1 bis 5 Maschinencodeanweisungen. Beispiel für Assemblercode:

L2 :
l d a ( mar1x ) ; l a d e den wert aus dem S p e i c h e r i n s
; mdr d e r an adr . mar1x l i e g t
snd #0 ; s e n de den wert aus dem MDR1 an den
; linken Scheinwerferschrittmotor

r e c #1 ; l a d e rv , rh mit den S e n s o r d a t e n
; der rechten Sensoren
cmp rv , rh ; v e r g l e i c h e d i e Werte d e r b e i d e n
; Register
j c R1 ; CompF a u s g e w e r t e t und s p r i n g e zu
; R1 wenn rv > rh , s o n s t mache . . .
mov mar1h , #0 ; ( rv <= rh ) V o r z e i c h e n i n Mar1 i s t 0
mov mar1l , rv ; Niveau nach mar1l , da rv d e r
; k l e i n e r e von b e i d e n i s t
; ( weniger eingesunken )
sub rh , rv ; rh−rv und e r g e b n i s z u r u e c k nach rh
mov mar1m , rh ; w i n k e l i n mar1 s c h r e i b e n
jmp R2 ; s p r i n g e zu l a b e l R2

25
5 Programmierung

Hochsprache - HLL: einfach für den Programmierer, muss allerdings erst übersetzt wer-
den, nicht sehr effizient. Eine Hochsprachenanweisung entspricht, je nach Art, ca. 5 bis
20 Maschinencodeanweisung.

5.2 Befehlssatz:
Generell gilt: je mehr Befehle im Befehlssatz enthalten sind, um so einfacher kann man
programmieren. Hat man weniger Befehle zur Verfügung muss man zur Nachbildung
komplexerer Befehle mehrere Befehle aneinanderketten. Der Nachteil vieler Befehle ist
allerdings die steigende Komplexität der Kontrollstrukturen.
Der Befehlssatz bestimmt auch zu großen Teilen die Rechnerarchitektur, da man für
bestimmte Befehle auch bestimmte Schaltkreise zur Ausführung benötigt.
Effizienz und Einfachheit bzw. Eleganz sind allerdings zwei unvereinbare Konzepte.

Elganz vs. Effizienz:


Eleganz : Viele Befehle – Vollständigkeit, Flexibilität – für jeden Bedarf der richtige Be-
fehl, Allgemeingültigkeit, Mnemonische Signifikanz, einfacher Prozessor.
Effizienz : weniger Befehle – weniger Bits, weniger Flexibilität – umständlicheres pro-
grammieren, sollte Hochsprachen unterstützen, komplexe Programmierung

5.3 wichtige Befehle:


Die in den meisten Prozessoren auf irgendeine Weise implementiert sind:
Datenübertragung

• Move: Transfer von Daten zu angegebenem Ziel

• Store: Analog – Transfer zu externem Speicher

• Load : Transfer von externem Speicher zu angegebenem Ziel

• Exchange: Austausch zweier Speicherstellen

• Clear : Angegebene Speicher mit 0en beschreiben

• Set: Angegebene Speicher mit 1en beschreiben

• Push: Transfer von Daten zu oberstem Element eines Stacks

• Pop: Transfer und entfernen des obersten Elementes eines Stacks zum angegebenen
Ziel

26
5.3 wichtige Befehle:

Datenmanipulation
• Shift: Verschieben aller Bits um eine Stelle

• Rotate: Wie Shift, aber das wegfallende Bit an die freigewordene Stelle setzen

• Convert: Ändern des Datenformates


Arithmetik
• Add : Addition zweier Operanden

• Subtract: Subtraktion eines Operanden von einem anderen

• Multiply: Multiplizieren zweier Operanden

• Divide: Quotient eines Operanden von einem anderen

• Absolute: Einen Operanden durch einen Absolutwert ersetzen

• Negate: Ändern des Vorzeichens des Operanden

• Increment: Operanden um 1 erhöhen

• Decrement: Operanden um 1 verringern


Logik
• And : Bitweiser Und-Vergleich zweier Operanden

• Or, Not, Xor . . . : äquivalent


In- & Output
• Input: Transfer von Eingabegerät zu einem Ziel

• Output: Transfer von der entsprechenden Quelle zu einem Ausgabegerät

• StartIO: Transfer zu Ein- bzw. Ausgabegerät, um Ein- bzw. Ausgabe zu initiieren

• TestIO Transfer von Statusinformationen zu angegebenem Ziel

• HaltIO: Abbruch der Ein- bzw. Ausgabe


Programmkontrolle
• Jump / Branch: Programmzähler auf angegebene Adresse setzen

• Jump conditional : In bestimmten Fällen Programmzähler auf angegebene Adresse


setzen.

27
5 Programmierung

• Jump to subroutine / Call : Speichere Programminformationen in Ziel, setze Be-


fehlszähler auf angegebene Adresse

• Return (from subroutine): Programminformationen wieder von angegebener Adres-


se laden

• Execute: Operanden von angegebener Stelle holen und Befehl ausführen

• Skip: Befehlszähler inkrementieren um nächsten Befehl zu überspringen

• Skip conditional Programmzähler bei bestimmten Bedingungen inkrementieren

• Test: Auf eine Bedingung testen, je nach Ergebnis Flags setzen

• Halt: Stoppen der Programmausführung

• Wait: Warten auf bestimmtes Ereignis, z.B. bis Speicheroperation erfolgt ist

• NoOperation: Nichts, Programm läuft weiter


Durchschnittlicher Befehlsmix:

5.4 Steuereinheit:
Die Steuereinheit leitet und überwacht jede Einheit um zu gewährleisten, dass die ent-
sprechenden Operationen zur richtigen Zeit ausgeführt werden. Dazu schaltet sie Steu-
erleitungen an oder ab um bestimmte Auktionen auszulösen (z.B. schaltet eine Leitung
den Eingang eines Registers frei, dann wird in diesem der Wert, der auf dem Datenbus
liegt gespeichert).
Früher waren die Steuerwerke meistens dezentral angelegt, während heute meist eine
zentrale Steuereinheit verwendet wird, was hilt, Hardware zu sparen. Allerdings sind
auch in der modernen Welt verteilte Steuersysteme zu finden, meist bei sehr komplexen
Großrechnern oder zusammengeschalteten Systemen. Hierbei können die Steuereinhei-
ten sehr komplex, teilweise sogar selbstständige Computer sein.

28
5.4 Steuereinheit:

Steuereinheiten können entweder festverdrahtet oder mikroprogrammiert sein. Festver-


drahtete Steuereinheiten sind billiger und auch schneller, haben aber den großen Nach-
teil, dass sie, einmal gebaut, nicht mehr verändert werden können. Tritt ein Fehler im
Befehlssatz auf, so muss man eine neue Steuereinheit bauen und in den Computer ein-
bauen, während man eine mikroprogrammierte Steuereinheit updaten kann und nicht
austauschen muss.

Eine typische Steuereinheit besteht hauptsächlich aus Registern und einer kombinier-
ten Ausführungslogik (hardwarerealisiert) und schnellem Speicher zu Steuerungszwecken
(mikroprogrammiert).

Sequenzierung von Operationen:


Der Sequenzierer sorgt dafür, dass die Befehle entsprechend der gegebenen Befehlsfolge
abgearbeitet werden (zum Beispiel muss gewartet werden, bis eine Anforderung an den
Speicher ausgeführt wurde).
Hierzu gibt es verschiedene Konzepte: Synchron bzw. getaktet: Ereignisse werden in fes-
ten Zyklen ausgelöst. Wenn eine Operation nicht nach einem Zyklus beendet ist, so wird
ein Zähler verwendet, der soweit zählt, wie der Befehl Zyklen braucht, und dann das
nächste Ereignis auslöst. Aktuell wird fast nur die getaktete Version genutzt, da das
Konzept einfacher zu bedienen und somit billiger ist. asynchron bzw. variabel : Ereig-
nisse werden ausgelöst, indem das vorhergehende Ereignis beendet wird, hierzu werden
Verzögerungselemente benutzt, die variable Verzögerungszeiten benutzt. Diese Version
ist schneller, da nicht unnötig gewartet werden muss. Allerdings ist die Konstruktion
solcher Systeme so kompliziert, dass momentan nur experimentelle Rechner asynchron
arbeiten.

Holen und Ausführen von Befehlen:


Auch das Holen und Ausführen von Befehlen ist auf jedem System unterschiedlich. All-
gemein kann man aber sagen:
Fetch / Holphase: zuerst wird der Inhalt des Programmzählers in das so genannte Me-
mory Adress Register (MAR) geschrieben. Daraufhin wird die Speicherzelle die im MAR
angegeben ist in das Memory Data Register (MDR) transferiert. Der Inhalt des MDR
wird dann in das Instruction Register (IR) geschrieben, und dort dekodiert. Zum Schluss
wird noch der Befehlszähler inkrementiert.
Execute / Ausführungsphase: Zuerst wird die Adresse, die im IR angegeben ist, in das
MAR transferiert. Der Inhalt der von dieser referenzierten Adresse wird in das MDR
geschrieben. Der Wert aus MDR wird dann je nach Befehl weiterverarbeitet.

Das Abarbeiten eines Befehls ist ein Kreislauf: Hole PC in MAR → Hole Befehl aus
Hauptspeicher → Inkrementiere PC und dekodiere Befehl → Kopiere Operandenadresse

29
5 Programmierung

inn MAR → Hole Operand aus Hauptspeicher → Führe Operation aus → alles von vorne

Pipelining von Befehlen:


Pipelining ist eine Methode, mit der pro Zeitabschnitt mehr Befehle verarbeitet wer-
den können. Anstatt immer die gesamte Befehlsabarbeitung abzuwarten, wird, sobald
eine Phase der Befehlsabarbeitung abgeschlossen ist, schon der nächste Befehl begonnen
(Beispiel: Ist der Fetch einer Anweisung abgeschlossen und diese geht zum Execute über,
wird gleichzeitig schon der Fetch für den nächsten Befehl ausgelöst).

Für die Abarbeitungszeit einer Pipeline gilt

Tpipe = k · Tc + (n − 1) · Tc = (k + n − 1) · Tc

wobei:

• Tc – Zeitzyklus für eine Operation

• Tpipe – Verarbeitungszeit der Pipeline

• k – Anzahl der Stufen der Pipeline

Je mehr Stufen die Pipeline hat, desto mehr Zeit kann gespart werden. Wird allerdings
bei der Dekodierung bzw. der Ausführung festgestellt, dass ein Sprung ausgeführt wer-
den muss, muss alles was in der Pipeline hinter dem Sprung steht gelöscht werden, was
die Geschwindigkeitsvorteile verringert.

Beispielstruktur einer CPU mit mikroprogrammiertem Steuerwerk:

30
5.5 Mikroprogrammierung:

Beispielstruktur einer CPU mit festverdrahtetem Steuerwerk:

5.5 Mikroprogrammierung:
Im folgenden wird jeder Schritt als Mikrobefehl bezeichnet, alle Mikrobefehle zusammen
nennt man das Mikroprogramm. Dieses legt fest, wie die Maschinenbefehle ausgeführt
werden.
Eine mikroprogrammierte Steuereinheitenthält einen Steuerspeicher, in dem das Mikro-
programm gespeichert ist.

Die Mikrobefehle stehen für bestimmte Steuerleitungen die an- oder ausgeschaltet wer-
den.
Beispiel: Befehl “Move R1 R2“, Mikrocode R1out , R2in Es werden also die Steurerlei-
tungen aktiviert, die den Ausgang des Registers R1 aktiviert, dadurch wird der Wert in

31
5 Programmierung

R1 auf den Bus gelegt. Außderdem wird der Eingang von R2 aktiviert, es wird also der
Wert vom Bus in das Register R2 geschrieben.

Abarbeitung von Mikrocode:


1. Dekodierung des Befehlscodes

2. Mikroprogramm holt Mikrobefehle, wo sie diese findet, bestimmt das Steueradress-


register

3. Mikrobefehl (in diesem steht der Mikrobefehlscode und die Adresse des nächsten
Mikrobefehls [alternativ kann die nächste Adresse aus einem Mikroprogrammzähler
oder einm speziellen Adressspeicher gewonnen werden) wird ins Mikrobefehlsregis-
ter transferiert

4. Ausführung des Mikrobefehls

5. Die Adresse des nächsten Mikrobefehls wird in den Mikroprogrammspeicher trans-


feriert

6. Dies geschieht so lange, bis alle Mikrobefehle ausgeführt sind

7. Wenn alle Mikrobefehle ausgeführt sind, lade den nächsten konventionellen Befehl
in das Steueradressregister

8. Sprünge werden durch Flip-Flops realisiert, die die Adresse des nächsten Mikrobe-
fehls verändern.
Kodierung von Steuersignalen:
Horizontale Kodierung: Bei der Horizontalen Kodierung gibt die Steuereinheit genau-
soviele Signale aus, wie Steuerleitungen existieren (daher spricht man auch von “keiner
Kodierung“). Diese Steuerleitungen sprechen dann jeweils direkt ein Register o.ä. an.
Diese Kodierungsvariante ist am schnellsten, allerdings muss die Steuereinheit sehr viele
Ausgangsleitungen haben.

vertikale Kodierung: Hier verlassen die Steuereinheit verschiedene Felder von Leitungen,
die über einen Dekoder in die Steuersignale aufgeplittet werden. Man benötigt mindes-
tens soviele Felder, wie hoch die Anzahl der gleichzeitig aktivierten Steuersignale ist.

32
5.5 Mikroprogrammierung:

Gibt die Steuereinheit nur ein Feld aus, welches von einem einzelnen Dekoder aufgeplittet
wird, spricht man von vertikaler Kodierung. Diese Methode spart Leitungen innerhalb
der Steuereinheit, kostet aber Leitungen im Dekoder und verlangsamt die Abarbeitung,
da im Gegensatz zur horizontalen Kodierung die Laufzeit der Signale um ein vielfaches
länger ist.

Vorteile der Mikroprogrammierung:

1. Systematisierung der Steuerung

2. Verbesserung der Leistung , da mit Mikroprogrammierung ein hoher Grad an Par-


allelität erreicht werden kann.

3. Hoher Grad an Entscheidungslogik – gut für Tabellensuch und Sortierroutonen

4. Kompatibilität innerhalb von Serien. Für ähnliche Computer müssen keine neuen
Steuerwerke entwickelt, sondern nur das Mikroprogramm angepasst werden

5. Mikroprogrammierung erlaubt Emulation verschiedener Hardwarekonstruktionen

6. Mikrodiagnostik – das Erkennen und beheben von Fehlern ist erheblich einfacher
als bei festverdrahteten Steuerwerken, welche oft nur die Entwickler dieser verste-
hen.

7. Der Befehlssatz kann verändert werden, um neuen Bedürfnissen zu entsprechen.

33
5 Programmierung

5.6 CISC vs. RISC:


RISC-Architektur:
reduced instruction set computer

• Arbeitet möglichst viele Befehle in einem Zyklus ab Alle Befehle haben die gleiche
Länge

• wenige verschiedene Operationen (üblichrweise max. 128)

• wenige Befehlsformate (üblicherweise max. 4)

• Wenige Adressmodi (üblich: max. 4)

• Speicherzugriff nur durch load/store

• alle anderen Befehle arbeiten nur mit Registern

• Festverdrahtete Steuerung

• Viele Allzweckregister (im Allgemeinen, min. 32)

• CPI von 1 bis 1,5

CISC-Architektur:
complex instruction set computer

• Befehle im Mikrocode im Speicher, eventuell auch hartverdrahtet

• viele verschiedene komplexe Befehle (bis ca. 300)

• viele verschiedene Befehlstypen (bis ca. 50)

• Beliebige Adressmodi

• beliebige Länge der Befehle, daher Dekodieren notwendig

• wenige Register

• CPI von 1 bis 20

34
6 ALU

6.1 Typen und Eigenschaften von ALU’s:


ALU’s können in der Regel die arithmetischen Operationen Addition, Subtraktion, Mul-
tiplikation und Division durchführen, dazu, je nach Design, noch andere Funktionen.
Unter Umständen beherrschen manche ALU’s diverse Operationen nicht, diese müssen
dann durch Software nachgebildet werden.
Dabei werden ALU’s unterschiedlich klassifiziert: In Einheiten die Festkomma-, Dezimal-
und Fließkommaarithmetik beherrschen.

Typen arithmetischer Einheiten:


Seriell : Die Einheit führt die angegebenen Einheiten bitweise aus. Dabei existiert nach
jeder Stufe ein Übertrags-Bit (Carry-Bit), damit das Ergebnis der vorhergehenden Stufe
in die nächste mit einbezogen werden kann.
parallel : Die Operanden werden der Einheit parallel übergeben, Ergebnisse werden in
ein Schieberegister umgeleitet, wenn das Ergebnis in ein Wort umgewandelt wird. Die
Operation wird sequenziell mit der Ripple-Carry-Technik oder parallel mit der Carry-
Look-Ahead-Technik durchgeführt.

6.2 Addition:
Ausführungszeit:
Besteht aus 2 Teilen: Wenn die Gatterlaufzeit jeder Phase des Addierers bekannt ist,
dann ist die Gatterlaufzeit eines n-Bit Addierers n × Laufzeit jeder Stufe. Hinzu kom-
men die Speicherzugriffe. Im Allgemeinen wird je ein Zugriff für die beiden Operanden
und ein Zugriff für das Ziel benötigt. Die gesamte Ausführungszeit ist also:
3 × Speicherzugriff + n × Laufzeit einer Phase

Es gibt verschiedene Techniken, um den Look-Ahead zu berechnen. Die wichtigsten


Addierdesigns sind:
Carry-Look-Ahead :
Zunächst werden alle generates gi und propergates pi berechnet, es muss je ein Gatter
durchlaufen werden, aus diesen werden gleichzeitig alle ci berechnet, es werden hierbei 2
Gatter durchlaufen. Danach werden die Summen berechnet, es werden 3 Gatter durch-

35
6 ALU

laufen.

Der Carry-Skip-Addierer :
In jeder Stufe wird der Wert der gleichstelligen Bits der jeweiligen Operanden und des
Übertrags der letzten Stufe zusammen addiert:

Der Carry-Select-Addierer :
Es werden parallel zwei Additionen ausgeführt, eine, falls der Übertrag 0 ist, eine, falls
der Übertrag 1 ist. Sobald der Carry aus der vorherigen Stufe bekannt ist, wird das
richtige Ergebnis ausgewählt. Diese Technik ist schneller als der Carry-Skip-Addierer,
benötigt aber sehr viel mehr Hardware:

Laufzeitvergleich für Additionstechniken:

Ripple-Carry O(n) O(n)


Carry-Lookahead O(log n) O(n log n)

Carry-Skip O( n) O(n)

Carry-Select O( n) O(n)
Wenn man als Zahlendarstellung das 2er-Komplement wählt, so kann man den glei-
chen Schaltkreis für Addition sowie Subtraktion benutzen. Dann sind die Gleichungen:
ADD ⇒ S = X + Y
SUB ⇒ S = X + Y + 1
Allerdings müssen entsprechende Überläufe beachtet werden.Überläufe treten nur auf,
wenn beide Operanden das selbe Vorzeichen haben. Ein Überlauf ist daran zu erkennen,
wenn das Vorzeichen des Ergbnisses nicht zu den Vorzeichen der Operanden “passen“,
dies kann man über ein entsprechendes Flag feststellen.

36
6.3 Multiplikation:

Ein entsprechender Schaltkreis wäre:

Auswahl der Zahlendarstellung:


Wie bereits erwähnt ist die Darstellung im 2er-Komplement die praktischste unter dem
Aspekt der Hardware, sie ist allerdings vergleichsweise schwer zu handhaben. Am ein-
fachsten zu handhaben ist die normale Darstellung, allerdings ist das Rechnen mit Vor-
zeichen sehr kompliziert. Besser ist noch das 1er-Komplement, allerdings verlangt dieses
einen korrekten Zyklus.

6.3 Multiplikation:
Die “Papier und Bleistift“-Methode:
Identisch zum manuellen Addieren von Zahlen im Dezimalsystem.
Formal ausgedrückt:
der Operand B wird iterativ bearbeitet:

• Ist das entsprechende Bit = 1, dann wird der Multiplikant auf die um eine Stelle
geshiftete Partialsumme addiert

• ISt das Bit = 0, dann wird 0 auf die um eine Stelle geshiftete Partialsumme addiert.

Beispiel:

37
6 ALU

Multiplikatorzelle:

Multiplikator:

38
6.3 Multiplikation:

Man kann auch im 2er-Komplement multiplizieren. Eine typische Schaltung wäre zum
Beispiel:

Natürlich kann man die Multiplikation auch von der Software ledigen lassen, hierzu
werden die Operationen shift-left, low-order-half, Sprünge, Addition, Inkrementation
benötigt.

Vorzeichenbehaftete Multiplikation:
3 Fälle:

1. positiver Multiplikator, negativer Multiplikant: Erweiterung des Vorzeichenbits


nach links, dann Multiplikation wie positive Zahl

2. negativer Multiplikator, positiver Multiplikant: Bildung des 2er-Komplements der


beiden Operanden, danach normale Multiplikation

3. negativer Multiplikator, negativer Multiplikant: Bildung des 2er-Komplements der


beiden Operanden, danach normale Multiplikation

Multiplikation mit dem Booth-Algorithmus:


Mit dem Booth-Algorithmus kann man unter bestimmten Umständen die Multiplikation
erheblich beschleunigen.
Er basiert darauf, dass jede binäre Zahl durch die Summe und die Differenz anderer
binärer Zahlen dargestellt werden kann. Dies führt dazu, dass man positive und negative
Zahlen gleich behandeln kann.

39
6 ALU

Beispiel: 30 kann durch 32 minus 2 dargestellt werden.


Booth-Umkodierung: Die Booth-Umkodierung hängt davon ab, wie der Übergang zwi-
schen den Bits des Multiplikanten ist:

Multiplizierer Version des Multiplizierers


Bit i Bit i-1
0 0 0·M
0 1 +1 · M
1 0 -1 · M
1 1 0·M

Hat man den Multiplizierer umkodiert, so multipliziert man mit diesem. An den Stel-
len, an denen -1 steht, wird nur das 2er-Komplement addiert, bei +1 wird wie bei der
normalen Multiplikation addiert. An der jeweiligen Stelle wird die erste Stelle bis zum
Vorzeichen erweitert.
Beispiel für die Multiplikation mit dem modifizierten Booth-Multiplikanden:

Die Booth-Kodierung ist nur sinnvoll, wenn im Multiplizierer möglichst wenige Sprünge
von 0 nach 1 und umgekehrt auftauchen. Sind benachbarte Bits gleich, so steht in der
Umkodierung eine 0, so spart man sich Additionen. Der Booth-Algorithmus ist effizient,
wenn der Multiplizierer nach der Umkodierung mehr 0en enthält als vorher. Enthält der
Multiplizierer mehr 0en als vorher, so ist der Booth-Algorithmus die schlechtere Wahl.

40
6.4 Divisionsalgorithmen:

Aus der Booth-Repräsentation kann man die so genannte Bit-Pair-Repräsentation


ableiten (dies kann man auch durch Betrachtungung von 3 Bits der Originalzahl tun):

Bit-Triplett Booth-Paar Version des Multiplizierers


i+1 i i-1 i+1 i
0 0 0 0 0 0·M
0 0 1 0 +1 +1 · M
0 1 0 +1 -1 +1 · M
0 1 1 +1 0 +2 · M
1 0 0 -1 0 -2 · M
1 0 1 -1 +1 -1 · M
1 1 0 0 -1 -1 · M
1 1 1 0 0 0·M

Die Multiplikation geht dann nach folgendem Schema vor (selbe Multiplikation wie bei
obigem Beispiel:

Multipliziert man also nach Bit-Pair, so werden Additionen gespart.

6.4 Divisionsalgorithmen:
wiederherstellende Division:
Schreibe die zu dividierende Zahl in den Akkumulator, dann folgendes n-mal für eine
n-Bit Zahl durchführen:

1. Akkumulator und Quotient um eine Stelle nach links verschieben

2. Subtrahiere Divisor vom Akkumulator und schreibe das Ergebnis in den Akkumu-
lator

3. Wenn Vorzeichen von A = 1, dann setze das Vorzeichens des Quotienten auf 0 und
addiere den Divisor zum Akkumulator

41
6 ALU

4. Wenn das Vorzeichen von A = 0, dann setze das Vorzeichen des Quotienten auf 1

5. Beginne von vorn

nichtwiederherstellende Division:
Schreibe die zu dividierende Zahl in den Akkumulator, dann folgendes n-mal für eine
n-Bit Zahl durchführen:

1. Wenn das Vorzeichen des Akkumulators = 0, dann verschiebe Akkumulator und


Quotient um eine binäre Position nach links und subtrahierte den Divisor vom
Akkumulator

2. Wenn das Vorzeichen des Akkumulators = 1, dann verschiebe Akkumulator und


Quotient nach links und addiere den Dividend zum Akkumulator.

3. Wenn dann das Vorzeichen des Akkumulators = 0, setzte Vorzeichen des Quotien-
ten auf 1.

4. Wenn dann das Vorzeichen des Akkumulators = 1, setze das Vorzeichen des Quo-
tienten auf 0.

Danach:
Wenn das Vorzeichen des Akkumulators = 1, addiere den Dividend zum Akkumulator

Alternativen: Es existieren außerdem noch die Division durch wiederholtes Multipli-


zieren und die Reziproke Version nach Cray. Diese sind allerdings nicht gebräuchlich
und werden daher hier nicht vorgestellt.

6.5 Fließkommaarithmetik:
Fließkommaoperationen werden in zwei verschiedenen Einheiten innerhalb der ALU (Ex-
ponenteneinheit, Mantisseneinheit) berechnet, die von einer Steuereinheit kontrolliert
werden.

Fließkommazahlen werden dargestellt durch

X = vzXm · B Xa

wobei vz = Vorzeichen; Xa = Exponent; Xm = Mantisse; B = Basis


Zur Darstellung von Fließkommazahlen siehe 3.1.

Unter- und Überläufe:


Unterlauf : Wenn der verschobene Exponent kleiner als 0 (bzw. bei IEEE kleiner 1) ist,

42
6.5 Fließkommaarithmetik:

so wird die ganze Zahl auf 0 gesetzt.


Überlauf : tritt immer dann auf, wenn der verschobene Exponent größer als der für Ex-
ponenten erlaubte Wert ist.
Tritt ein Unter- oder Überlauf auf, so wird normalerweise ein Flag oder Interrupt (siehe
2) ausgelöst, so dass ein Programm über die durchzuführende Operation entscheiden
kann.

Rundungen:
Im Allgemeinen werden intern mehr Stellen berechnet als zum Schluss verwendet wer-
den. Anhand dieser später überflüssigen Stellen – Guard-Bits – genannt, kann man je
nach Strategie entscheiden, wie gerundet werden soll.

Rundungsstrategien:
Chopping: Die Guard-Bits werden nicht betrachtet, sondern einfach “abgeschnitten“ Die
Rundungsfehler betragen Werte <1.
normale Rundung: Wenn das letzte Bit 1 ist, so wird das vorletzte ebenfalls auf 1 gesetzt,
ist es 0, so wird das vorletzte auch auf 0 gesetzt. Dies wird solange durchgeführt, bis das
letzte Ergebnisrelevante Bit gesetzt wurde. Dies ergibt Rundungsfehler von -0,5 ≤ x ≤
+0,5
von Neumann-Rundung: Wenn Guard-Bits nicht 0, letzte relevante Stelle 1, wenn Guard-
Bits 0, letzte relevante Stelle 0.

Fließkommaoperationen:
Sei XE , YE die Exponenten von X und Y und XM , YM die Mantissen von X und Y,
dann sind die arithmetischen Operationen:
ADD: X + Y = (Xm · 2XE −YE + YM ) · 2YE
SUB: X − Y = (XM · 2XE −YE − YM ) · 2YE
MULT: X · Y = (XM · YM ) · 2XE −YE
DIV: X/Y = (XM /YM ) · 2XE −YE

Vorgehen bei Addition und Subtraktion:

1. Wählen der Zahl mit dem kleineren Exponenten und Verschiebung dessen Mantisse
schrittweise nach rechts, entsprechend der Differenz der Exponenten

2. Gleichsetzten des Ergebnis-Exponenten mit dem größeren Operanden-Exponenten

3. Ausführung der Addition bzw. Subtraktion der Mantissen

4. Eventuell Ergebnis normalisieren

43
6 ALU

Vorgehen bei Multiplikation:

1. Addition der Exponenten

2. Multiplikation der Mantissen

3. eventuell normalisieren

Vorgehen bei Division:

1. Subtraktion der Exponenten

2. Division der Mantissen

3. eventuell normalisieren

44
7 Speicher
Beim Speicherdesign versucht man 3 Faktoren zu optimieren:

• Minimierung der Kosten

• Maximierung der Geschwindigkeit

• Maximierung der Größe

Diese 3 Faktoren sind so voneinander abhängig, dass wenn man einen Faktor optimiert,
ein anderer schlechter wird. Je nach Anwendungsgebiet kann man einen Faktor opti-
mieren, wobei meistens die Geschwindigkeit im Vordergrund steht, da der Speicher die
größte Bremse für den Prozessor darstellt.

7.1 zeitliche und örtliche Lokalität:


Beim Prinzip der Lokalität wird beachtet, dass auf manche Speicherstellen öfter zuge-
griffen wird, als auf andere. Es gibt hier zwei wesentliche Strategien:
Örtliche Lokalität: Wenn auf eine Speicherstelle zugegriffen wird, geht man davon aus,
dass in nächster Zeit auch die nächste Stelle benötigt wird.
Zeitliche Lokalität: Man geht davon aus, dass, wenn auf eine Speicherstelle zugegriffen
wird, diese demnächst auch wieder benötigt wird.

7.2 Speicherhierarchie:
Speicher wird in mehreren Ebenen organisiert, wobei der schnellste, und meist auch
teuerste der ist, der am meisten mit dem Prozessor interagiert. Es wird versucht, dass
auf den langsamen Speicher nur möglichst selten zugegriffen werden muss. Ausgehend
vom schnellsten ist die Reihenfolge der Hierarchie:

1. CPU-Register (meist Einheiten in Wortgröße, etwa 4Byte)

2. Cache (organisiert in Blöcken, etwa 8 Worte – 32 Byte)

3. primärer Speicher (RAM, organisiert in Seiten, etwa 32 Blöcke – 1 kByte)

4. sekundärer Speicher (HDD, organisiert in Segmenten, beliebige Anzahl von Seiten)

45
7 Speicher

5. Massenspeicher (CD etc., organisiert in Segmenten)


Da die verschiedenen Speicher verschiedene Zugriffszeiten haben, muss auch der Prozes-
sor diese variablen Zugriffszeiten erlauben und – für den Fall, dass eine Dateneinheit in
einer anderen Speichereinheit als die letzte liegt – Interrupts bezüglich der Speicherhier-
archie beherrschen.
Wenn es nötig oder sinnvoll ist eine Dateneinheit aus einem Speicher in einen anderen
zu schieben, so wird gleich ein ganzer Block verschoben, um die örtliche Lokalität zu
nutzen.

7.3 Leistungsbemessung:
Definitionen:
Hit: Eine Dateneinheit wird in der entsprechenden Ebene gefunden
Miss: Wird die Speicherreferenz in der aktuellen Ebene nicht gefunden, so muss die An-
forderung an eine untere Ebene weitergegeben werden.
Hit-Rate: Verhältnis von Hits zur absoluten Zahl von Referenzierung auf einer Ebene. Je
geringer die Ebene, desto höher ist die Hit-Rate. Für die unterste Ebene ist die Hit-Rate
1.
Miss-Rate: 1 - Hit-Rate
Hit-Time: Zeit, um eine Dateneinheit von der entsprechenden Einheit zu erhalten, wenn
ein Hit erfolgte.
Miss-Time: Hit-Time, falls die Einheit in der nächsten Ebene einen Hit erzielt – Hit-
Time + Miss-Penalty
Miss-Penalty: Zugriffszeit + Transfer-Zeit.

Beispiel:

Gesamtzugriffszeit:

0, 95 · 1 + 0, 05(0, 99 · 11 + 0, 01 · 110010) = 51, 5Zyklen


Hitrate L1 · Hittime L1 + Missrate L1 (Hitrate L2 · Hittime L1 + Hittime L2 +
Missrate L2 · Hittime L2 + Hittime L3) = Gesamtzugriffszeit

46
7.4 Virtueller Speicher:

Leistungsbemessung für Hauptspeicher:


Bandbreite: übertragene Bytes pro Takt
Zugriffszeit: Zeit zwischen der Leseanforderung und dem Eintreffen der Daten
Takt-Zeit: Zeit zwischen zwei nacheinander durchgeführten Lese-Anforderungen.

Arten von RAM-Technologien:


SRAM : statischer RAM ist schnell und teuer, wird meist für Caches genutzt und muss
nicht ständig erneuert werden, im Gegensatz zum
DRAM : dynamischer RAM ist billiger und hardwaremäßig kompakter als SRAM, muss
aber aber ständig erneuert werden. Adressleistungen werden gemultiplext.

Verbesserung der Hauptspeicherleistung:


Hier gibt es 2 Ansätze:
Verbreiterung des Busses: Verbreitert man den Bus um den Faktor x, so können auch
x mal mehr Daten mit jedem Takt übertragen werden. Allerdings wird dann zusätzlich
ein Multiplexer zwischen dem Cache und der CPU benötigt.
Interleaved Speicher : Unterteilung des Speichers in mehrere Bänke, wobei die Adresse i
in einer Bank mod i liegt. Dann liefert eine Speicheradresse bei gleicher Busbreite soviele
Einheiten, wie Bänke existeren.

7.4 Virtueller Speicher:


Wenn mehr primärer Speicher benötigt wird, als vorhanden ist, kann man theoretisch den
sekudären Speicher als Backup benutzen und die Daten zwischen den beiden Speichern
hin und her verschieben. Dies ist allerdings nur sehr aufwändig zu implementieren und
nicht flexibel. Daher wird so genannter virtueller Speicher benutzt. Dieser wird von Hard-
und Software gemeinsam erzeugt und ist ein zusammenhängendes Stück des sekundären
Speichers (Swapping Space).
Dieser erlaubt:

• Dynamische Anpassug der Größe eines Prozesses

• Bessere Ausnutzung es primären Speichers

• komfortable Aufteilung des Prozess-Raumes.

47
7 Speicher

Physikalischer Speicher

Virtueller Speicher

Den virtuellen Speicher kann man auf zwei Arten einteilen:

1. Seiten: haben feste Größe, speichern 1 Wort pro Adresse, alle Blöcke sind gleich
groß und können daher einfach ersetzt werden, erlaubt den effizienteren Plattenzu-
griff. Verschwendet Speicher, wenn Dateneinheiten die Blockgröße nicht ausnutzen

2. Segmente: haben flexible Größe und sind für den Entwickler sichtbar, um ein neues
Stück in das Segment zu schreiben muss erst ein freies Stück gefunden werden, wel-
ches die passende Größe hat. Braucht unnötigen Platz, wenn zwischen Segmenten
freier Speicher mit kleinen Dimensionen, die benötigt werden, existiert.

Es ist allerdings möglich, beide Methoden miteinander zu kombinieren: der paged seg-
mented virtual memory setzt die Segmente aus Seiten zusammen, so können Blöcke
einfach ersetzt werden und es ist möglich, die Segmente als Einheit anzusprechen, was
von einigen Programmiersprachen benötigt wird.

48
8 Caches
Der Cache ist meistens die erste Ebene der Speicherhierarchie. Der Cache ist ein sehr
schneller Speicher in dem Kopien der Blöcke liegen, auf die kürzlich zugegriffen wur-
de, sowie ein Inhaltsverzeichnis der im Cache liegenden Daten. Wird eine Dateneinheit
benötigt, so wird aus der Adresse der Einheit die Hauptspeicher-Blocknummer ermittelt
und im Inhaltsverzeichnis des Caches nachgesehen, ob der Block im Cache liegt. Sollte
die Einheit nicht im Cache sein, so wird sie durch den Miss in den Cache transferiert.
Wenn der Cache bereits voll ist, so muss ein Teil des Caches geleert werden, damit die
neuen Daten an diese Stelle transferiert werden kann.

8.1 Ersetzungs- und Schreibstrategien:


Ersetzungsstrategien:
Direct-Mapped : Jeder Block kann nur an eine bestimmte Stelle geladen werden. Diese
wird ermittelt, indem die Blocknummer modulo durch die Breite des Breite des Caches
geteilt, der Rest der Division gibt an, wohin gespeichert werden soll. Beispiel: Cache
besteht aus 8 Frames, Block 12 soll transferiert werden – 12 mod 8 = 4 → Der Block
wird in Frame 4 gespeichert.
Um einen Block zu suchen, werden die m niederwertigsten Bits als Index benutzt.
Fully associative: Der Block kann in jeden Frame geladen werden. Zum Suchen müssen
alle Bits der Blocknummer benutzt werden. Dem Speicher wird die Blocknummer über-
geben, woraufhin dieser den Inhalt zurückgibt.
Wenn ein Frame ersetzt werden muss: meist zufällige Ersetzung – Es wird immer der
Block ersetzt, der am längsten nicht mehr benutzt wurde
Set associative: Der Cache wird in x gleichgroße Sets unterteilt (x ist Potenz von 2),
soll ein Block in den Cache geschrieben werden, wird die Nummer des Blocks modulo x
geteilt, und der Block in den entsprechenden Frame geschrieben.
FIFO - first in first out: Die Elemente die zuerst in den Cache geschrieben wurden,
werden zuerst überschrieben, wenn Platz benötigt wird.
LRU - least recently used : Die Elemente die am längsten nicht benutzt wurden werden
zuerst entfernt.

Zugriffsstrategien:
Look Aside: Speicherzugriff und Cachezugriff finden gleichzeitig statt, bei einem Cache-
hit wird der Hauptspeicherzugriff abgebrochen

49
8 Caches

Look Through: Es wird zuerst auf den Cache zugegriffen, bei einem Miss findet dann der
Speicherzugriff statt.

Schreibstrategien:
Write Through: Immer wenn die Daten im Cache aktualisiert werden, werden ebenfalls
die entsprechenden Daten im Hauptspeicher geändert.
Write Back : Die Daten werden nur im Cache geändert, und erst im Hauptspeicher ak-
tualisiert, wenn der entsprechende Block im Cache ersetzt werden muss.
Schreibstrategien bei Write-Miss:
Write allocate: Der entsprechende Block wird in den Cache kopiert, dort modifiziert und
dann zurückgeschrieben.
write allocate: Die Daten werden direkt im Hauptspeicher modifiziert.

Der Cache kann üblicherweise nicht von Anwendungsprogrammierern, und nur sehr be-
schränkt von Systemprogrammierern manipuliert werden.
Typische Daten für Caches sind:

• Hit-Time: 1 bis 4 Takte

• Miss-Penalty: 8 bis 32 Takte

• Zugriffszeit: 6 bis 10 Takte

• Transferzeit 2 bis 22 Takte

• Miss-Rate: 1 bis 20 Prozent

• Größe: 512 kByte bis 4 mByte

• Block-Größen: 4 bis 128 Byte

8.2 Größe und Teilung:


Kleine Caches sind zwar billiger und mit geringerem Aufwand zu implementieren, aller-
dings ist die Miss-Rate sehr hoch. Bei mittleren Caches hängt die Effizienz sehr von der
Mapping- und Ersetzungsstrategie ab. Große Caches erbringen relativ unabhängig von
den Strategien eine gute Leistung.

Wenn man den Cache in einen Datencache und einen Befehlscache unterteilt, kann man
die Bandbreite der CPU annähernd verdoppeln, und der Cache kann besser auf die
Gegebenheiten angepasst werden. So besitzen zum Beispiel Befehle eine hohe örtliche
Lokalität.

50
8.3 Leistungsmaße von Caches:

8.3 Leistungsmaße von Caches:


Hit-Rate: einfach zu bestimmen, sehr stark vom jeweiligen Programm abhängig.
mittlere Speicherzugriffszeit: Hit-Rate · Hit-Time + Miss-Rate · Miss-Time
Die Gründe für Misses im Cache sind:

• Zwangsläufiger Miss: Erster Zugriff auf den Block

• Kapazitätsbedingter Miss: ein überschriebener Block wird erneut referenziert

• Konfliktbedinger Miss: zwei oder mehr Blöcke sind dem gleichen Frame zugeordnet.

8.4 Translation Lookaside Buffer – TLB:


TLB ist eine Art von Cache, die sich im assoziativen Speicher befindet, also dem Teil,
welcher zu einer Blocknummer den Inhalt des Caches zurückgibt. Der TLB kann inner-
halb eines Taktes die Nummer der physischen Seite zurückgeben – falls die Nummer
gefunden wird. Ist dies nicht der Fall, so wird der normale Prozess benutzt, und der
TLB mit den neuen Daten aktualisiert.

51
9 Software
Der Begriff der Software bezeichnet alle Programme die auf Computern ausgeführt wer-
den können. Software kann entweder in einer High-Level-Language, dessen Code wird
dann mittels Compilierung in Maschinensprache übersetzt, oder in einer Assemblerspra-
che, diese wird durch Assemblierung in Maschinensprache übersetzt, geschrieben werden.

9.1 Lader:
Nach dem Einschalten eines Rechners wird ein Programm durch Konsole bzw. Schalter
gestartet. Dies kann entweder mittels einem einfachem Lader, einem so genannten Boot-
strap, oder einm komplexen Lader (beinhaltet Paritätsprüfung und weiteres) ausgeführt
werden.

Programmabschnitte (Segmente):
Entweder:
Header oder Identifizierungsabschnitt: Typ ist “00“, enthält den Namen, eine Abschnitts-
, und/oder Blockzahl und eine Prüfsumme
Maschinensprachenabschnitt: Typ ist “01“, enthält eine Byte- oder Wortzahl, eine Start-
adresse, Maschinensprachenbefehle und eine Prüfsumme.

Typen von Ladern:


absolute Lader : Lädt Programme aus dessen Segmenten in die Adresse, die als Start-
adresse angegeben ist.
verschiebungsfähige Lader : lädt Abschnitte eines Programmes in variable Adressberei-
che.

9.2 Linker:
Da große Programme aus verschiedenen Teilen, die oft unabhängig voneinander über-
setzt wurden, bestehen, wird ein Linker benötigt. Dieser fügt die verschiedenen Teile in
ein Maschinensprachenprogramm zu einem Lader zusammen. Dabei müssen aber Ob-
jektübergreifende Variablen, Label etc. vor der Compilierung definiert sein. Diese Ob-
jekte nennt man auch externe Symbole.

52
9.3 Spooler:

9.3 Spooler:
Spooler können sowohl durch Soft-, als auch durch Hardware implementiert werden.
Spooler sollen den Ein- und Ausgabefluss optimieren. Dazu werden auszuführende Ein-
/Ausgabeströme in einen Puffer geschrieben, welcher fortwährend gelesen wird und des-
sen Operationen ausgeführt werden, sobald möglich.
Spooler kann man als Geschwindigkeitsbrücken zwischen CPU und Ein- bzw. Ausgabe
verstehen. Da die CPU sehr viel schneller arbeitet, als die meisten E/A-Jobs erledigt
werden können, kann die CPU, nachdem sie in den Puffer geschrieben hat, bereits wei-
ter arbeiten und muss nicht warten. Die Ein-/Ausgabe wird dann erledigt, sobald dies
möglich ist.

9.4 Multiprogramming:
Beim Multiprogramming wird anders als beim Spooling nicht die Ein-/Ausgabe verzögert,
sondern das entsprechende Programm ausgesetzt, bis die Ein-/Ausgabe erledigt wur-
de. Die Zeit, die dies benötigt, wird genutzt um ein anderes Programm fortzusetzen.
Grundsätzlich beschleunigt das Multiprogramming die Ausführung, es ist allerdings
möglich, dass, wenn zu viele Prozesse gehandelt werden müssen, dies mehr Zeit benötigt,
als eingespart werden kann. Dies ist allerdings nur sehr selten der Fall.

9.5 Betriebssystem:
Das Betriebssystem ist die Verbindung von Hardware und Anwendungssoftware, es ma-
nagt E/A-Ressourcen und ist für laden, linken und die Speicherverwaltung zuständig.
Ein gutes Betriebssystem sollte die vorhandenen CPU-Ressourcen möglichst effizient ver-
walten. Außerdem bestimmt es die Reihenfolge der Prozesse, betreibt also Scheduling.
Teilweise sind Betriebssysteme auch für die Behandlung von Fehlern verschiedener Ra-
ten zuständig.

Die Grenze an der das Betriebssystem endet und die Anwendungssoftware beginnt ist
nicht genau zu ziehen. So kann man zum Beispiel Browser zur Anwendungssoftware,
aber auch zum Betriebssystem zählen, da dieses auch für Kommunikation zwischen Res-
sourcen zuständig ist.

Scheduling:
Beim Scheduling werden Prozesse in einer Warteschlange abgearbeitet, wobei bestimmte
Prozesse eine höhere Priorität genießen können als andere. Das Betriebssystem hält für
das Scheduling bestimmte Informationen bereit:
• Die Prozessnummer (ID)

53
9 Software

• den aktuellen Zustand (ausführbar, blockiert, in Ausführung - darstellbar in einem


Zustandsdiagramm) des Prozesses

• ob der Prozess bestimmten Schutz genießt

• Status-Informationen

Moderne Betriebssysteme besitzen meist zwei Scheduler, wovon der eine zuständig für
das Multiprogramming und der andere für die Auswahl der neu auszuführenden Prozes-
se zuständig ist. Beim Long-Term-Scheduling (vom Multiprogramm-Scheduler) werden
die zu erledigenden Prozesse nach Priorität und Klasse gruppiert. Das Speichermana-
gement des Betriebssystems (Speicher bereitstellen, überschreiben etc. - so genanntes
Short-Term-Scheduling) wird oft ebenfalls von den Schedulern erledigt.

Schedulingstrategien:

• FIFO – first in, first out, der Prozess der zuerst ankommt, wird zuerst bearbeitet,
so wird kein Job ewig hängen, ein langer kann aber alle anderen extrem verzögern

• SJF – shortest job first, der Job der am schnellsten zu erledigen ist, wird zuerst
bearbeitet, um in kurzer Zeit möglichst viele Jobs bearbeiten zu können

• Prioritäten-Scheduling – Der Job der mit der höchsten Priorität ausgezeichnet ist,
wird zuerst bearbeitet, leitet die Verantwortung an das Betriebssystem weiter

• Round-Robin Scheduling – Die Zeit wird in gleich lange Segmente unterteilt, jeder
Prozess wird genau ein Segment lang bearbeitet.

• EDF – earliest deadline first, der Prozess, der zuerst hinfällig würde wird zuerst
bearbeitet

• RMS – rate monotonic scheduling

• LLS – least Laxity Scheduling, Priorität des kleinsten Überhanges, der Prozess der
die kleinste Differenz zwischen Deadline und Ausführungszeit besitzt wird zuerst
bearbeitet.

Verareitungsarten:

1. Batch-Verarbeitung: Verarbeitung von Gruppen von Jobs, die nacheinander erle-


digt werden

2. Transaktionsbasierte Verarbeitung: Operationen wie Banktransfers etc.

3. Interaktive Verarbeitung: Abarbeitung von Prozessen, die vom Benutzer gesteuert


werden.

54
9.6 Beispiele für Softwareebenen:

Interaktives Computing:
Interaktive Geräte interagieren hier mit der CPU die eine gesamte Umgebung kontrol-
lieren. Bei den meisten dieser Systeme ist weniger die Geschwindigkeit der Datenverar-
beitung, als möglichst schnell möglichst viele Benutzeranfragen zu beantworten.

Speichermanagement:
Bezeichnet die Verwaltung des virtuellen Speichers, der benötigt wird, wenn ein Prozess
mehr Ressourcen benötigt, als der primäre Speicher bereitstellen kann (siehe 7.4). Aller-
dings ist nicht allein das Betriebssystem für den virtuellen Speicher verantwortlich, auch
die Hardware realisiert bestimmte Funktionen des virtuellen Speichers.

Schichtmodell:

Schichtname Typische Objekte Typische Operationen


Schaltkreise Register, Gatter, Busse NAND, NOR, XOR
Maschinensprache Befehlszähler, ALU Add, Move
Unterprogrammverwaltung Prozedurblock, Stack Call, JSR, RTS
Interrupts Fehlerroutinen Busfehler, Reset
einfache Prozesse Semaphor, Puffer warten, bereitstellen, ausführen
lokaler Zusatzspeicher Datenblock, E/A-Kanal lesen, schreiben, öffnen, schließen
virtueller Speicher Seiten lesen, schreiben, austauschen
Prozesskommunikation Übergabekanal lesen, schreiben, öffnen
Dateiverwaltung Dateien lesen, schreiben, öffnen, kopieren
Geräteverwaltung Zusatzspeicher, Terminals lesen, schreiben
Ein-/Ausgabeströme Datenströme lesen, schreiben, öffnen, schließen
Benutzerprozesse Benutzerprozesse einloggen, ausloggen
Verzeichnisverwaltung interne Tabellen erstellen, löschen, ändern
Benutzeroberfläche Fenster, Menüs Betriebssystembefehle

9.6 Beispiele für Softwareebenen:


Betriebssystem – Betriebsmittelverwaltung:

• Prozessverwaltung

• Speicherverwaltung

• Ein-/Ausgabeverwaltung

• Jobverwaltung

• Systembefehlsinterpreter

55
9 Software

• Diagnose und Tests

• Mehrprozessorverwaltung

Anwendungsprogramme:

• Editoren

• Tabellenkalkulation

• Datenbank

• Linker

• Lader

• Dateibearbeitung

• Abrechnung

• Netzwerkverwaltung

• Telekommunikation

Übersetzer:

• Assembler

• Compiler

• Interpreter

• Makrointerpreter

56
10 Ein- und Ausgabe
Obwohl Ein- und Ausgabegeräte inzwischen fast 70 Prozent der Kosten ausmacht, wer-
den bis auf wenige Ausnahmen bei Benchmarks diese Geräte nicht mit einbezogen.
Die externen Geräte können bei der Geschwindigkeitsentwicklung nicht mit der Ent-
wicklung der Prozessoren mithalten, daher wachsen, verglichen mit den Prozessoren, die
Kosten für die Peripheriegeräte weiter an.

10.1 Probleme bei der Ein- bzw. Ausgabe:


Kodierung: Die CPU muss die Daten mit der Kodierung senden können, mit der das
EA-Gerät rechnet.
Arbeitsgeschwindigkeit: Die CPU muss die Fähigkeit besitzen, die Sendegeschwindigkeit
so zu drosseln, dass das langsamere EA-Gerät diese bewältigen kann.
Steuerung: Austausch von Statussignalen zwischen CPU und dem EA-Gerät.
Wortlänge: Die CPU muss die Fähigkeit haben in der erwarteten Wortlänge des EA-
Gerätes zu senden, diese kann aktuell zwischen 4 und 128 Bit variieren, außerdem muss
die Methode passen, so kann entweder seriell (bitweise), quasiparallel (Bytes) und par-
allel (Word) gesendet werden.

Moderne CPU können im Allgemeinen mit mehreren externen gleichzeitig arbeiten, die
alle mit verschiedenen Geschwindigkeiten arbeiten, dabei werden für die meisten Geräte
komplett unterschiedliche Routinen gebraucht.

10.2 Ein-/Ausgabeprozedur:
1. Auswahl des benötigten Gerätes

2. Feststellen von dessen Status

3. Signal an Gerät: “Verbinde mit Prozessor“

4. Warten auf Bestätigung

5. Sende an Gerät: “Beginne mit EA-Operation“

6. Warten auf “ready“-Signal, das auf jede Dateneinheit folgt

57
10 Ein- und Ausgabe

7. Gehe so lange zurück zu Schritt 1, bis “end of Message“-Signal erkannt wird

8. Trennen der Verbindung

10.3 EA-Fehler:
• Mechanische Einflüsse der Umgebung

• Alter der Komponenten

• System-Bugs, z.B. unerwartete Signale, falsche Speicherzuordnungen, unbekannte


Befehle o.ä.

• Benutzerfehler

10.4 Adressierung und Datentransfertechniken:


Jedes EA-Gerät besitzt eine eindeutige Identifizierung. Dieser ist entweder ein einmali-
ger Code, oder eine Blockadresse innerhalb des Adressraumes des Rechners.

Transfer durch Puffer:


Die CPU schreibt die EA-Werte in ein Pufferregister, welches an Steuereinheiten, Daten-
Register, Status-Register und Adressdekodierer angebunden ist. Das entsprechende Pro-
gramm steuert diese durch die EA adressierbaren Register.

Blocktransfer zum Hauptspeicher:


auch DMA genannt – direct memory access genannt. Es existerien Schaltungen, die die
Daten Wort für Wort konstant mit der Geschwindigkeit des angesprochenen Gerätes
übertragen. Gesteuert werden diese über die Register des DMA-Controllers.
Für EA mittels DMA wird ein gesondertes Programm benötigt, dass die Register und
die Read/Write-Funktionen lädt und diese startet. Der Nachteil dieser Methode ist, dass
sich die CPU und die EA den selben Speicher teilen müssen. Hierzu ist ein weiterer
Controller nötig, der die Zugriffe der CPU und der EA auf den Speicher koordiniert -
der Speicher-Bus-Controller. Eine oft genutzte Strategie dieser Controller ist das cycle
stealing, bei dem die EA-Operationen zwischen die Mikrooperationen des Prozessors ge-
mischt werden. Diese Strategie ist allerdings manchmal nicht möglich, so müssen magne-
tische Disk-Laufwerkte mit gesamten Blocks beschrieben werden, da sonst Datenverlust
entstehen kann. Wird ein kompletter Block in einem solchen Burst transferiert, kann
die komplette EA-Geschwindigkeit ausgenutzt werden, aber auch die CPU relativ lange
blockieren.

58
10.5 Synchronisationstechniken – Polling und Interrupts:

10.5 Synchronisationstechniken – Polling und Interrupts:


Um die EA-Geräte zu koordinieren, müssen bestimmte Informationen über deren Status
und auftretende Ereignisse kennen. Hierzu gib es zwei verschiedene Strategien:

1. Polling: Beim Polling werden aktiv Signale gesendet, die das EA-Gerät dazu brin-
gen, Informationen über seinen Status bekannt zu geben.

2. Interrupts: Bei Interrupts wird auf verschiedene Arten dafür gesorgt, dass ein Pro-
gramm dazu bringt, seine aktuelle Tätigkeit pausiert und auf den Interrupt rea-
giert. Während bei Programmen Interrupts meistens Fehler sind, bei denen ein
externer Eingriff notwendig wird. gibt es bei der EA verschiedene Arten von Inter-
rupts:

• Aufforderung an die CPU eine EA-Operation zu starten


• Die Information, dass eine EA-Operation beendet ist
• Bekanntgabe von Hard-/Software-Problemen
• Statussendungen, um unnätiges Polling zu vermeiden

Dabei existieren 2 Prinzipien:


Interrupts, die nach bestimmen Zeiträumen auftreten vs. Interrupts die nach be-
stimmten Ereignissen auftreten.

Wenn ein Interrupt erkannt wird (ob EA oder anderer), stoppt die CPU die Be-
fehlsausführung, speichert alle Register (Datenregister, Program Counter etc.) und
das Statuswort im Speicher. Danach wird der Program Counter auf die Adresse
gesetzt, bei der die Interrupt Service Routine (die Interruptbehandlung) beginnt.
Die CPU fährt dann von dieser Adresse aus mit der Programmabarbeitung fort.
Wenn der “RTI“ - return from Interrupt Befehl ausgeführt wird, werden die Werte
aus dem Speicher und das Statuswort zurück in die Register geschrieben, und der
Program Counter auf den Wert vor dem Interrupt gesetzt.

Da es möglich ist, dass während der Interrupt-Behandlung weitere Interrupts auf-


treten, muss ein Prioritätssystem für Interrupts existieren. Dann kann ein Interrupt
höherer Priorität die Behandlung eines Interrupts mit geringerer Priorität unter-
brechen.
Dabei gibt es aber auch Interrupts, die nicht unterbrochen werden dürfen, diese
müssen ebgeschirmt werden, wofür es die INTenable und INTdisable Kommandos.

59
10 Ein- und Ausgabe

10.6 Ein-/Ausgabe Hardwarestruktur:


Beispiel einer EA-Schnittstelle

In einer solchen Schnittstelle existieren bis zu 4 Busse:

1. EA-Datenbus – für Daten und EA-Datenregister

2. EA-Gerätewahlbus – zur Übertragung von Geräte-Codes an Auswahlschaltung

3. EA-Kommandobus – zur Übertragung von EA-Kommandos an entsprechenden


Dekoder

4. EA-Verfügbarkeitsstatusbus – für Statussignale, teilweise mit dem Datenbus kom-


biniert

mögliche Statuscodes:

• ready

• Busy

• Disconnnected

• Power not on

• Operation Completed

• Parity Error detected during Transmission

• Gerätespezifische Meldungen

60
10.7 Kanaltypen:

10.7 Kanaltypen:
Selektierer:
Exklusiver EA-Pfad für ein Programm eines einzelnen Hochgeschwindigkeitsgerätes

Character Multiplexer:
Momentander EA-Pfad für ein Programm eines einzelnen Mittelgeschwindigkeitsgerätes
im Burst-Mode oder time-shared character interleaved path für meherere Niedrigge-
schwindigkeitsgeräte

Block-Multiplexer:
Momentan exklusiver Pfad zu einem einzelnen Hochgeschwindigkeitsgerätes oder Bereit-
stellung eines time shared block interleave path für mehrere Hochgeschwindigkeitsgeräte.

Beispiel für einen Multiplex-Modus:

Beispiel für einen Burst-Modus:

61
11 Kommunikation
11.1 Definitionen:
Protokoll : Eine Menge an Regeln und Formaten mit denen verschiedene Prozesse unter-
einander kommunizieren können.
Dienst: Erbringung einer definierten Aufgabe, Aufgabengeber und -nehmer kommunizie-
ren über bestimmte Schnittstellen, die Interface genannt werden. Zur Erbringung einer
solchen Aufgabe kann der Dienstgeber selbst als Dienstnehmer fungieren und andere
Dienstnehmer für Aufgaben nutzen. Geber und Nehmer müssen die selben Übertra-
gungsarten nutzen, meist sind das elektromagnetische Wellen, die über Kabel, Funk
oder Licht übertragen werden.
SAP : service access point ist das Interface des Aufgabengebers.
Bitparallele Übertragung: werden durch Busse realisiert, jede Leitung überträgt ein Bit,
relativ teuer aber schnell, es besteht die Gefahr der Eigenstörung.
Bitserielle Übertragung: Zur Übertragung wird nur eine Leitung genutzt, was Kosten
spart, aber Geschwindigkeit kostet.

11.2 Netzwerke:
Topologien:
Bus-Topologie: Jeder Rechner ist mit genau zwei benachbarten Rechnern verbunden.
Fällt ein Rechner aus, so können Teile rechts dieses Rechners nicht mehr mit Teilen
links von ihm kommunizieren. Diese Technik ist veraltet únd wird nur noch sehr selten
benutzt.

Ring-Topologie: analog zum Bus, Netzwerk ist aber geschlossener Ring. Fällt ein Rechner
aus, so ist das Netzwerk noch ein Bus, fällt ein weiterer aus, so hat man die selben
Probleme wie bei der Bus-Topologie.

62
11.3 Datenübertragungssysteme:

Stern-Topologie: Alle Rechner sind miteinander über einen gemeinsamen Punkt mit-
einander verbunden. Fällt ein Rechner aus, beeinflusst dies das Netzwerk nicht, fällt
die zentrale Vermittlungsstelle aus, ist das gesamte Netzwerk zerstört. Aus praktischen
Gründen wird ein Stern-Netzwerk oft in mehrere Segmente unterteilt, damit bei einem
Ausfall von Vermittlungskomponenten nicht das gesamte Netzwerk ausfällt.

Übertragungskonflikte:
Bei Netzwerken besteht immer das Problem, dass es mindestens einen Punkt gibt, an dem
alle Daten vorbei müssen. Dies führt dazu, dass nicht alle Rechner nach belieben senden
können, da es sonst zu Konflikten führt. Um diese zu beseitigen exisiteren verschiedene
Strategien:

1. Zentrale Lösung: Polling - Die Daten werden an eine gemeinsame Stelle geleitet,
diese schickt nach dem Spooling-Prinzip diese Daten dann weiter

2. Dezentrale Lösung: Tokenbasiert - deterministisches Zeitverhalten, für alle Rechner


gleich optimal

3. Dezentrale Lösung: definierte Slots - jeder Teilnehmer erhält regelmäßig einen Slot
zum senden, alle Rechner haben die selbe Übertragungsrate, deterministisches Zeit-
verhalten, verschwendet Zeit, wenn ein Rechner seinen Slot nicht benötigt

4. Dezentrale Lösung: rivalisierend - mehrere ähnliche Prozesse, zum Beispiel: warten


bis nichts gesendet wird, dann senden und durch gleichzeitiges Empfangen über-
prüfen, dass keine Kollisionen entstanden sind, falls dies doch der Fall war, warten
und von vorn.

11.3 Datenübertragungssysteme:
Bussysteme:
zur Überbrückung von Strecken im Rechner (z.B.: PCI, SCSI, VME, ISA), zu Peripherie-
geräten (USB, Firewire, Seriell, . . . ) oder sehr schnelle Busse für Verbindungen zwischen
Prozessoren.

63
11 Kommunikation

Feldbusse:
Für Entfernungen von wenigen Metern innerhalb von Steuerungsanlagen, Anbindung
von Sensoren u.Ä. an diese, nur Übertragung von kurzen Datenpaketen, daher günstige
Leitungen (z.B.: CAN, TTP/A) Anwendung meist in Gebäuden oder Fahrzeugen

LAN:
Local area network, wenige Meter bis einige Kilometer, basierend auf Kupferkabeln,
Glasfaser oder Funk. Im Vergleich zu Feldbussen relativ schnell

WAN:
Wide are network, für unbegrenzte Entfernungen, kleinere Netze werden zu größeren
zusammengeschlossen.

11.4 Interoperabilität von Netzen:


Damit verschiedene Technologien genutzt werden können müssen diverse Geräte vermit-
teln:

• Repeater : Leiten nur das Signal weiter

• Bridge: Ermöglicht Änderungen von Übertragunsarten bzw. Zugriffsmöglichkeiten,


behält das Protokoll bei

• Gateway: Änderung von Protokoll, Übertragunsraten, Fragmentierung und Zu-


griffsverfahren möglich

• Router : Wie Gateway mit der zusätzlichen Möglichkeit Pakete an bestimmte Adres-
sen durchzustellen

• Switches: Stellt direkte Verbindung zwischen zwei Stellen vermitteln und dabei die
Funktionalität von Repeatern, Gateways, Bridges und Routern übernehmen kann.

64