Sie sind auf Seite 1von 140

Mikroprozessortechnik

Skriptum zur Vorlesung Mikroprozessortechnik


im Studiengang Informatik
der Fachhochschule Gießen-Friedberg

Prof. Dr. Klaus Wüst

SS 1999
2

Vorwort

Dieses Skriptum ist als Begleitmaterial zur Vorlesung Mikroprozessortechnik“ im Studiengang



Informatik an der Fachhochschule Gießen-Friedberg entstanden.

Das Skriptum wurde nur zu einem vorläufigen Abschluss gebracht, es enthält sicher noch Fehler
und verbesserungsbedürftige Passagen. So gibt es z.B. nicht zu allen Abschnitten Testfragen
und Zusammenfassungen. Viele interessante Themen der Mikroprozessortechnik, wie z.B. Chip-
karten, Schnittstellen, magnetische und optische Speichermedien, Bildschirme, Bussysteme, sind
zur Zeit nicht enthalten. Sie werden vielleicht später ergänzt. Ich hoffe, das Skriptum ist trotz-
dem eine Hilfe zum Verständnis der Vorlesung und bei der Vorbereitung auf Prüfungen. Für
Hinweise und Verbesserungsvorschläge bin ich immer dankbar!

Klaus Wüst Klaus.Wuest@mni.fh-giessen.de


Inhaltsverzeichnis

1 Einführung 4
1.1 Geschichtliches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 Dynamik des Bereiches Mikroprozessortechnik . . . . . . . . . . . . . . . . . . . . 5
1.3 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.4 Grundbestandteile eines Mikrorechnersystems . . . . . . . . . . . . . . . . . . . . 6
1.5 Grundsätzliche Funktionsweise eines Mikrorechnersystems . . . . . . . . . . . . . 7
1.6 Testfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8

2 Technische Grundlagen 9
2.1 Informationseinheiten und -darstellung . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.1 Bitte ein Bit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.2 Informationseinheiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
2.1.3 Interpretation von Bits und Bytes . . . . . . . . . . . . . . . . . . . . . . 10
2.2 Halbleiterbauelemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.1 Allgemeines zu Halbleitern . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.2 Dotierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.3 pn-Übergang in einer Diode . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.4 Bipolartransistoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.5 Feldeffekttransistoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.3 Schaltkreisfamilien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3.1 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3.2 Merkmale von Schaltkreisfamilien . . . . . . . . . . . . . . . . . . . . . . . 19
2.3.3 Die TTL-Familie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
2.3.4 CMOS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
2.3.5 Weitere Schaltkreisfamilien . . . . . . . . . . . . . . . . . . . . . . . . . . 24
2.4 Die Herstellung integrierter Schaltkreise . . . . . . . . . . . . . . . . . . . . . . . 24
2.4.1 Grundideen, Begriffe, Basistechnologien . . . . . . . . . . . . . . . . . . . 24
2.4.2 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.4.3 Reinstdarstellung von Silizium . . . . . . . . . . . . . . . . . . . . . . . . 25
2.4.4 Herstellung der Wafer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
2.4.5 Dünnschichtoxide und Lithografie . . . . . . . . . . . . . . . . . . . . . . . 26
2.4.6 Diffusion und Planartechnik . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.4.7 Epitaxie (Kristallabscheidung) . . . . . . . . . . . . . . . . . . . . . . . . 27
2.4.8 Weitere Techniken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.4.9 Herstellung der Chips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
2.5 Testfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3 Bustreiber und einfache Bussysteme 30


3.1 Anforderungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.2 Ausgänge mit offenem Kollektor (Open Collector) . . . . . . . . . . . . . . . . . 30

3
4 INHALTSVERZEICHNIS

3.3 Tristate-Ausgänge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.4 Bustreiber . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.5 Testfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34

4 Speicherbausteine 36
4.1 Allgemeine Eigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
4.2 ROM (Nur-Lese-Speicher) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.2.1 Masken-ROM (MROM) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
4.2.2 Programmable ROM (PROM) . . . . . . . . . . . . . . . . . . . . . . . . 39
4.2.3 EPROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
4.2.4 EEPROM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
4.3 Random Access Memory (RAM) . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.3.1 Statisches RAM (SRAM) . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
4.3.2 Dynamisches RAM (DRAM) . . . . . . . . . . . . . . . . . . . . . . . . . 46
4.4 Testfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

5 Ein-/Ausgabebausteine 54
5.1 Allgemeine Eigenschaften . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.2 Einfache Ein-/Ausgabebausteine . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.2.1 Eingabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.2.2 Ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
5.2.3 Der programmierbare Ein-/Ausgabebaustein 8255 . . . . . . . . . . . . . 56

6 Busanschluss und Adressverwaltung 58


6.1 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
6.1.1 Beispiel: Freischaltung eines I/O-Bausteines mit einem Adressdekoder . . 60
6.2 Die Trennung von Speicher und Ein-/Ausgabebausteinen . . . . . . . . . . . . . . 61
6.2.1 Memory Mapped I/O-Adressing (speicherbezogene E/A-Adressierung) . . 61
6.2.2 Isolierte Adressierung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
6.3 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

7 Einfache Mikroprozessoren 64
7.1 Grundbegriffe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
7.1.1 Grundsätzlicher Ablauf eines Programms . . . . . . . . . . . . . . . . . . 64
7.2 Interner Aufbau eines Mikroprozessors . . . . . . . . . . . . . . . . . . . . . . . . 64
7.2.1 Steuerwerk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
7.2.2 Operationswerk (Rechenwerk) . . . . . . . . . . . . . . . . . . . . . . . . . 66
7.2.3 Adresswerk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
7.2.4 Registersatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
7.3 Busleitungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
7.4 Befehlsaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
7.5 Zeitraster bei der Befehlsausführung . . . . . . . . . . . . . . . . . . . . . . . . . 69
7.6 Fallbeispiel: Motorola 6800 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
7.6.1 Eckdaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
7.6.2 Anschlussleitungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
7.6.3 Interner Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
7.6.4 Befehlssatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
7.6.5 Programmbeispiele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
7.7 Fallbeispiel: 6502 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
7.8 Fallbeispiel Z80 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
7.8.1 Eckdaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
INHALTSVERZEICHNIS 5

7.8.2 Anschlussleitungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
7.8.3 Interner Aufbau des Z80 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78

8 Aufbau einfacher Systeme 79


8.1 Hilfsschaltungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
8.1.1 Taktgenerator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
8.1.2 Einschaltverzögerung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
8.1.3 Ein Z80-Minimalsystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
8.2 Testfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

9 Besondere Betriebsarten 82
9.1 Direct Memory Acces (DMA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
9.2 Interrupts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
9.2.1 Warum Interrupts? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
9.2.2 Problemstellen des Interruptkonzepts . . . . . . . . . . . . . . . . . . . . . 84
9.2.3 Interrupt Service Routinen (ISR) . . . . . . . . . . . . . . . . . . . . . . . 84
9.3 Testfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86

10 Der Intel 8086 - Urvater der PC-Prozessoren 88


10.1 Eckdaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
10.2 Einige charakteristische Merkmale des 8086 . . . . . . . . . . . . . . . . . . . . . 89
10.2.1 Register . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
10.2.2 Adressbildung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
10.2.3 Reservierte Speicherplätze . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
10.2.4 Interrupt-Struktur und -möglichkeiten . . . . . . . . . . . . . . . . . . . . 92
10.2.5 Die Prefetch Queue (Befehlswarteschlange) . . . . . . . . . . . . . . . . . 95
10.2.6 Der Byte-organisierte Speicher am 16-Bit-Bus - Ausrichtung . . . . . . . . 95
10.2.7 Buscontroller . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
10.2.8 Probleme bei Interrupt-Service-Routinen . . . . . . . . . . . . . . . . . . . 96
10.3 Der Intel 8088 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
10.4 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 98

11 Der Aufbau von Maschinencode 99


11.1 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
11.2 Fallstudie: Intel 8086-Maschinencode . . . . . . . . . . . . . . . . . . . . . . . . . 100
11.2.1 Standardschema: mod- und r/m-Feld, Steuerbits . . . . . . . . . . . . . . 100
11.2.2 Optimierungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
11.3 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104

12 Die Unterstützung von Multitasking-Betriebssystemen durch Mikroprozesso-


ren 105
12.1 Anforderungen bei Multitasking . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
12.2 Fallbeispiel: Intel 80386 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
12.2.1 Eckdaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
12.2.2 Betriebsarten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
12.2.3 Privilegierungsstufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
12.2.4 Geschützte Speichersegmente, Selektoren und Deskriptoren . . . . . . . . 108
12.2.5 Kontrolle von I/O-Zugriffen . . . . . . . . . . . . . . . . . . . . . . . . . . 112
12.2.6 Taskwechsel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
12.2.7 Paging . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6 INHALTSVERZEICHNIS

13 Caching 115
13.1 Allgemeines und Speicherhierarchie . . . . . . . . . . . . . . . . . . . . . . . . . . 115
13.2 Cache-Strukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
13.3 Aktualisierungsstrategien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

14 CISC- und RISC-Prozessoren 119


14.1 CISC-Prozessoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
14.2 RISC-Prozessoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
14.2.1 Registersatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121
14.2.2 Pipelining . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

15 PC-Prozessoren der 90er Jahre 127


15.1 Intel Pentium . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
15.2 Intel Pentium Pro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
15.3 Intel Pentium MMX, Pentium II und Pentium III . . . . . . . . . . . . . . . . . . 129

Literaturverzeichnis 133

Index 135
Kapitel 1

Einführung

1.1. Geschichtliches

Ein schöner Abriss der geschichtlichen Entwicklung findet sich z.B. in [3].

1948 Erfindung des Transistors (Bardeen, Brattain, Shockley)

1959 Herstellung des ersten integrierten Schaltkreises (IC) durch Fa.Fairchild

1969 Entwicklungsaufträge an die Fa. Intel in den USA:

1. Satz von integrierten Schaltkreisen für Tischrechner (Busicom)


2. Satz von integrierten Schaltkreisen für Datenterminals (Datapoint)

1969 Vorstellung des ersten EPROM (1701) durch Intel

1971 Vorstellung einer programmierbaren zentralen 4–Bit–Prozessoreinheit (CPU) durch Intel:


i4004, 2250 Transistoren, 16 Anschlüsse, 4-Bit-Register, 4 Datenleitungen,12 Adressleitun-
gen

1972 8–Bit–CPU Intel 8008, 16 kB Adressraum, 18 Anschlüsse, Begriffsbildung Mikroprozessor

1972 Intel 8080, Interrupt–Konzept, 64 kB Adressraum, IC enthält 5000 Transistoren

1974 Motorola 6800

1974 PACE und SUPER–PACE von National Semiconductor

1978 Intel 8086, erster 16-Bit-Mikroprozessor

1978 Intel 8048/8748, erster Mikrokontroller

1979 Motorola 68000, erster Mikroprozessor mit 32–Bit–Registern, 16 MB Adressraum

1979 erster Signalprozessor: Intel 2929

7
8 KAPITEL 1. EINFÜHRUNG

1.2. Dynamik des Bereiches Mikroprozessortechnik

Die Computer- und speziell die Mikroprozessortechnik ist ein Gebiet, das sich rasant entwickelt:

Komplexität Der erste Mikroprozessor (i4004) hatte noch nicht einmal 2500 Transistoren,
heute werden Bausteine mit 25 Mio Transistoren gefertigt, um Faktor 10000 mehr.

Integrationsgrad , d.h. die Anzahl von Transistoren pro Baustein steigt im Schnitt um 40%
pro Jahr, in 10 Jahren also fast auf das 30-fache

Rechengeschwindigkeit Die ersten Mikroprozessoren wurden mit Frequenzen unterhalb von


1 MHz getaktet, heute liegen Taktfrequenzen von 1 GHz (1000 MHz) im Bereich des
Möglichen

Zum Vergleich: Die Rechner der Apollo-Missionen, mit denen 1969 die Mondlandung durchgeführt wurde, hatten
eine CPU, die aus 5000 NOR-Gattern bestand. Der Arbeitsspeicher hatte eine Größe von 2048 Byte. Der
Programmspeicher umfasste 36 kWorte ROM. Das Programm lag in einem sog. core rope ROM (read only
memory): Jeder Speicherplatz ist ein kleiner Ringkern und die Datenleitungen werden durch den Ring geführt
um eine 1 darzustellen und am Ring vorbei um eine 0 darzustellen. Programmierung bedeutete also, ca. 72000
Leitungen richtig einzufädeln! [13]

1.3. Motivation

Warum beschäftigen wir uns aber überhaupt mit Hardware und hardwarenahen Konzepten?
Hardware ist die Grundlage jeder praktischen Beschäftigung mit der Informatik: Kein Pro-
gramm kann ohne eine funktionierende Hardwareplattform ausgeführt werden. Manche Anwen-
der erwarten schlicht, dass Hardware zu funktionieren hat“. In vielen Situationen sind wir aber

doch gezwungen uns ganz konkret mit Hardware zu beschäftigen:

Auswahl von Hardware-Komponenten Die optimale Ausstattung eines Rechnersystems ist


abhängig von seiner Verwendung sehr verschieden. Beispiele: Büro-Arbeitsplatz, Web-
Server, Steuerungsrechner, Prozessdatenverarbeitung, Echtzeit-Anwendung, Spiele-Computer

Hardwarenahe Programmierung Hier muss man die Hardwarekomponenten sehr genau ver-
standen haben. Beispiele: Betriebssystemerweiterungen, Treiber, Mikrocontroller

Fehlermeldungen bei Hardware–Defekten Um diese Meldungen zu verstehen muss man


zumindest eine ungefähre Vorstellung von den Hardware–Komponenten haben.

Konstruktionsfehler bei Hardwarekomponenten In diesem Fall muss man beurteilen, in


welchem Fall der (bekannte) Fehler zu fehlerhaften Programmergebnissen führt. Beispiel:
Pentium-Bug

Systemerweiterung Bsp.: Passt eine bestimmte Zusatzkomponente zu meinem Systembus,


welcher Arbeitstakt läßt sich fahren?
1.4. GRUNDBESTANDTEILE EINES MIKRORECHNERSYSTEMS 9

1.4. Grundbestandteile eines Mikrorechnersystems

• Die Zentraleinheit eines Computers, die central processing unit, CPU hat zwei zentrale
Aufgaben:
1. Die Ansteuerung aller notwendigen Funktionseinheiten, wie Speicher, Ein-/Ausgabeeinheiten,
Schnittstellen u.a.
2. Die Durchführung der eigentlichen Datenverarbeitung, d.h. Bitmuster werden mit
arithmetischen und logischen Operationen verändert.
Die Zentraleinheit bestimmt also das Voranschreiten des Verarbeitungsvorgangs und wird
daher auch Prozessor genannt.

• Die Zentraleinheit war zunächst aus diskreten Elementen wie NAND- und NOR-Gattern
aufgebaut (Prozessorkarte). Durch der Erfindung der integrierten Schaltkreise (integrated
circuits, IC, Chip) konnte nun die CPU auf einem einzigen (kleinen) Chip untergebracht
werden, so dass sich der Begriff Mikroprozessor einbürgerte.

• Man unterscheidet Befehle und Daten . Befehle und Daten sind binär codiert, d.h.
Bitmuster bestimmter Länge (z.B. 8, 10, 12, 16 oder 32-Bit). Die Befehle sind Bitmuster,
die den Prozessor anweisen, bestimmte Operationen auszuführen, die Daten sind Bitmuster
die auf bestimmte Art interpretiert werden, z.B. als vorzeichenlose 32-Bit-Zahl oder als
8-Bit-Zeichen.

• Werden Mikroprozessoren in ein System aus Speicher, Ein-/Ausgabeeinheiten, Schnittstel-


len und Peripherie eingebettet entsteht ein Mikrocomputer , auch Mikrorechnersystem
oder Rechner genannt.

• Die Verbindung der Komponenten erfolgt durch elektrische Leiterbahnen und Leitungen.
Diese werden auch Busleitungen oder einfach Bus genannt.

• Die Leitungen, über die Befehle und Daten übertragen werden, nennt man Datenleitungen
oder Datenbus

• Die Leitungen, mit denen in Speicherbausteinen bestimmte Plätze angewählt werden,


nennt man Adressleitungen oder Adressbus

• Eingabebausteine nehmen Signale von externen Geräten bzw. Peripheriegeräten, z.B. einer
Tastatur, entgegen. Der Eingabebaustein legt sie dann auf den Datenbus über den der
Prozessor sie liest.

• Ausgabebausteine dienen dazu Signale an externe Geräte bzw. Peripheriegeräte auszuge-


ben, z.B. an einen Grafik-Controller, an den ein Bildschirm angeschlossen ist. Dazu legt
der Prozessor das gewünschte Bitmuster auf den Datenbus, von dort kommen sie auf den
Ausgabebaustein der es an die Peripherie weitergibt.

• In einem typischen Computer mit Bildschirm und Tastatur werden meist Universal-Mikroprozessoren
verwendet. Im Gegensatz dazu gibt es Mikroprozessoren für spezielle Zwecke, z.B. Signal-
prozessoren, Mikrocontroller, Arithmetik-Prozessoren.

• Wie bei einem Schaltwerk werden alle Vorgänge durch ein Taktsignal zeitlich gesteuert,
man braucht also einen Taktgeber

Man unterscheidet in der Architektur zwei Systeme:


10 KAPITEL 1. EINFÜHRUNG

• Computer mit Harvard-Architektur haben getrennten Daten- und Programmspeicher.


• Computer mit von Neumann-Architektur haben gemeinsamen Daten- und Programmspei-
cher.

Abbildung 1.1: Einfache Darstellung eines Mikroprozessorsystems in Harvard-Architektur

Abbildung 1.2: Einfache Darstellung eines Mikroprozessorsystems in von Neumann-Architektur

1.5. Grundsätzliche Funktionsweise eines Mikrorechnersystems


Der Prozessor führt endlos folgende Schritte aus:

• Auslesen des nächsten Befehls aus dem Programmspeicher, Programm-Zeiger weiterrücken


• Erkennen und Ausführen des Befehls: arithmetisch/logische Operation oder Zugriff auf
Datenspeicher oder Zugriff auf Ein-/Ausgabebausteine; dabei, falls erforderlich: Auslesen
von Operanden aus dem Programmspeicher, Programm-Zeiger weiterrücken.
1.6. TESTFRAGEN 11

1.6. Testfragen

1. Was ist ein Mikroprozessor und wann wurde der erste gebaut?

2. Mit welchem Mikroprozessor waren die Apollo-Kapseln 1969 bei der Mondlandung aus-
gerüstet?

3. Was könnte die Motivation für die Beschäftigung mit Rechnerhardware sein?

4. Nennen Sie zwei andere Bezeichnungen für Zentraleinheit!

5. Nennen Sie die beiden Hauptaufgaben einer Zentraleinheit!

6. Über welche Leitungen werden in einem Mikrocomputer Befehle übertragen?

7. Wie heißen die Leitungen, mit denen bestimmte Plätze auf Speicherbausteinen ausgewählt
werden?

8. Über welche Bausteine kommuniziert der Mikroprozessor mit der Aussenwelt?

9. Nennen Sie mindestens zwei Mikroprozessoren für Spezialaufgaben!

10. Was ist der Unterschied zwischen der von-Neumann-Architektur und der Harvard-Architektur.
Überlegen Sie, welche Vor- und Nachteile diese jeweils haben!

11. Wie ist der grundsätzliche Ablauf in einem Rechnersystem?


Kapitel 2

Technische Grundlagen

2.1. Informationseinheiten und -darstellung

2.1.1. Bitte ein Bit

Befehle und Daten sind binäre Daten mit der kleinsten Einheit binary digit = Bit . Ein Bit kann
die Werte 0 und 1 annehmen. Diese Werte werden technisch (physikalisch) auf unterschiedliche
Art dargestellt:

• durch verschiedene Spannungspegel auf Signalleitungen (Bus)

• durch vorhandene oder nicht vorhandene leitende Verbindung zweier Leitungen(ROM)

• durch den Ladungszustand eines Kondensators (DRAM)

• durch den Zustand eines Flipflops (SRAM)

• durch den leitenden oder gesperrten Schaltzustand eines Transistors (Ausgabebaustein)

• durch die Magnetisierungsrichtung eines Segmentes auf einer magnetisierbaren Schicht


(magnetische Massenspeicher)

• durch die Reflexionseigenschaften einer spiegelnden Oberfläche (optischer Massenspeicher)

2.1.2. Informationseinheiten

In Mikroprozessorsystemen werden (fast) immer mehrere Bit zu einer Informationseinheit zu-


sammengefasst:

• 4 Bit sind eine Tetrade oder ein Nibble

• 8 Bit sind ein Byte

• die Verarbeitungsbreite des Prozessors umfasst ein Maschinenwort oder Wort ; Bsp: Bei
einem Prozessor mit 32-Bit-Verarbeitungsbreite sind also 4 Byte ein Maschinenwort

12
2.1. INFORMATIONSEINHEITEN UND -DARSTELLUNG 13

Binär Hexadezimal Dezimal


0000b 0h 0d
0001b 1h 1d
0010b 2h 2d
0011b 3h 3d
0100b 4h 4d
0101b 5h 5d
0110b 6h 6d
0111b 7h 7d
1000b 8h 8d
1001b 9h 9d
1010b Ah 10d
1011b Bh 11d
1100b Ch 12d
1101b Dh 13d
1110b Eh 14d
1111b Fh 15d

Tabelle 2.1: Die Zahlen von 0 – 15 in binärer, dezimaler und hexadezimaler Darstellung

Bit 7 Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0


MSB LSB

Tabelle 2.2: Zählung der Bits in einem Byte

• Ausgehend vom Maschinenwort wird auch von Halbworten, Doppelworten und Quadwor-
ten (vier Maschinenworte) gesprochen. Bsp.: Bei einem 16 Bit-Prozessor umfasst ein
Quadwort 64-Bit

Für die Darstellung auf Papier oder Bildschirm wird in der Regel die Hexadezimale Darstellung
gewählt, dabei stellt jede Hexadezimalziffer 4 Bit dar. Ein Byte kann also immer mit 2 Hexziffern
dargestellt werden. Um Verwechslungen zu vermeiden benutzt man Anhänge, die das verwendete
Zahlensystem kennzeichnen: b=binär, d=dezimal, h=hexadezimal
Das niederwertigste Bit innerhalb eines Bytes oder Wortes heißt least significant bit, LSB das
höchstwertige heißt most significant bit, MSB . Die Nummerierung der Bits innerhalb eines
Bytes oder Wortes beginnt immer beim LSB mit 0.

2.1.3. Interpretation von Bits und Bytes

Ein Byte ist zunächst nur eine Einheit von 8 Bit. Diese 8 Bit können durch entsprechende
Interpretation eine ganz bestimmte Bedeutung gewinnen.
Bsp: Ein Byte habe den Inhalt 01000011b = 43h = 67d Dies kann interpretiert werden als:

• Bitmuster um die Interrupts 0,1 und 6 freizugeben


• Vorzeichenlose oder vorzeichenbehaftete 8-Bit-Zahl: 67d = 43h
• ASCII-Character ’C’
• als Maschinenbefehl
14 KAPITEL 2. TECHNISCHE GRUNDLAGEN

2.2. Halbleiterbauelemente

2.2.1. Allgemeines zu Halbleitern

• Name: Halbleiter leiten den Strom besser als Nichtleiter aber schlechter als z.B. Metalle

• Beispielsubstanzen: Silizium, Germanium, Selen, Galliumarsenid, Indiumphosphid, Indi-


umantimonid – wichtigster Halbleiter: Silizium

• Halbleiter haben Kristallstruktur (die Atome sitzen an bestimmten sog. Gitterplätzen)

• Für elektronische Halbleiterbauelemente braucht man Einkristalle mit einer Reinheit von
1 : 1010 (zum Vergleich: Auf der Erde leben ca. 3 ∗ 109 Menschen)

[10]

2.2.2. Dotierung

Für die Herstellung von Halbleiterbauelementen werden die reinen Siliziumkristalle dotiert, d.h.
es werden in geringer Anzahl gezielt Fremdatome in die Kristallstruktur eingeschleust. Man
unterscheidet zwei Arten:

• Donatoren setzen im Kristallverband jeweils ein Elektron frei, der Kristall hat bewegliche
negative Ladungen, er ist n-leitend

• Akzeptoren binden jeweils ein Elektron, das vorher zum Halbleiterkristall gehörte. Es ent-
steht eine Fehlstelle (Loch), die einer positiven Elementarladung entspricht und beweglich
ist. Der Kristall wird p-leitend

2.2.3. pn-Übergang in einer Diode

An einem Übergang von einem p-leitenden zu einem n-leitenden Bereich treten immer einige
Elektronen vom n-leitenden zum p-leitenden Bereich über. Dadurch entsteht eine Raumladungs-
zone . In der Raumladungszone herrscht ein starkes elektrisches Feld, so dass alle Ladungsträger
dort abgesaugt werden. Nur ganz wenige Ladungsträger können die Raumladungszone durch-
queren, sie heisst daher auch Sperrschicht .

Abbildung 2.1: Schemadarstellung und Schaltbild einer Diode. Die eingetragenen Polaritäten
kennzeichnen die Durchlassrichtung

Eine äußere Spannung wirkt folgendermaßen auf die Sperrschicht:


2.2. HALBLEITERBAUELEMENTE 15

• Pluspol am n-leitenden Bereich, Minuspol am p-leitenden Bereich: Das innere elektrische


Feld wird verstärkt, die Sperrschicht vergrößert sich, die Sperrwirkung wird größer, es
fließt (fast) kein Strom (Sperrichtung).

• Minuspol am n-leitenden Bereich, Pluspol am p-leitenden Bereich: Das innere elektrische


Feld wird abgeschwächt, die Sperrschicht wird abgebaut, die Sperrwirkung verschwindet,
es fließt ein kräftiger Strom (Durchlassrichtung).

Ein Bauelement mit einem p-leitenden und einem n-leitenden Bereich und einem pn-Übergang
heisst Diode . Ein Diode hat also zwei Anschlüsse.

Die Diode hat eine Durchlassrichtung und eine Sperrichtung. (Ventilwirkung) Bauelemente wie
die Diode, die p- und n-leitende Bereiche enthalten, nennt man bipolar(zwei Polaritäten).

In pn-Übergängen kann ein Strom auch in Sperrichtung fließen, wenn irgendwie Ladungsträger
in die Sperrschicht gelangen. Diese können z.B. durch Licht erzeugt werden (Fotodiode).

2.2.4. Bipolartransistoren

Aufbau und Grundprinzip

Im Gegensatz zu Dioden bestehen bipolare Transistoren aus drei Schichten, es gibt

• npn-Transistoren

• pnp-Transistoren

Abbildung 2.2: Schemadarstellung und Schaltbild von Bipolartransistoren. Links ein npn-
Transistor, rechts ein pnp-Transistor

Jeder bipolare Transistor enthält also zwei pn-Übergänge und drei Anschlüsse. Das Funktions-
prinzip (in Emitterschaltung) kann man vereinfacht so darstellen:
16 KAPITEL 2. TECHNISCHE GRUNDLAGEN

• Ein pn-Übergang wird in Durchlassrichtung betrieben, der andere in Sperrichtung

• Die Geometrie des Transistors ist so, dass dem Strom, der in dem pn-Übergang in Durch-
lassrichtung fließt, viele Ladungsträger (die meisten!) in die Sperrschicht des anderen
pn-Übergangs gelangen.

• Der Bereich, von dem die Ladungsträger ausgehen und mehrheitlich in die Sperrschicht
gelangen, heißt Emitter

• Der Bereich, der den Emitterstrom steuert, heißt Basis

• Der Bereich, der die Ladungsträger aus der Sperrschicht einsammelt heißt Kollektor .

• Je mehr Strom an dem pn-Übergang in Durchlassrichtung fließt, um so besser wird der


pn-Übergang in Sperrichtung leitend.

• Ein kleiner Strom (am pn-Übergang in Durchlassrichtung) steuert also einen großen Strom
(am pn-Übergang in Sperrichtung)

• Ein Transistor kann als Verstärker benutzt werden.

• Den Basisstrom nennt man daher auch Ansteuerungsstrom

• Wenn ein satter Basisstrom fließt, ist die Basis-Kollektorschicht gut leitend, man sagt der
Transistor ist durchgesteuert.

• Im gesperrten Zustand beträgt der Emitter-Kollektor-Widerstand ca. 100 M Ω, im durch-


gesteuerten weniger als 10Ω !

Dies wird in den Abb. 2.3 bis 2.7 verdeutlicht.

Abbildung 2.3: Schemadarstellung eines pnp-Transistors. Zunächst ist die Schicht zwischen
Basis und Kollektor gesperrt, es fließt kein Strom.

Um das oben erklärte Prinzip auszunutzen betreibt man den Transistor häufig in der sog. Emit-
terschaltung . Dabei ist der Emitter mit der gemeinsamen Masse verbunden. Die beiden Wi-
derstände schützen den Transistor vor Überlastung.
2.2. HALBLEITERBAUELEMENTE 17

Abbildung 2.4: Schemadarstellung eines pnp-Transistors. Durch einen kleinen Basis-


Emitterstrom gelangen viele Ladungsträger in die Sperrschicht zwischen Basis und Kollektor:
Sie wird leitend und ein kräftiger Kollektorstrom fließt

Abbildung 2.5: Der Verstärkungsfaktor zwischen Basis-Emitterstrom und Emitter-Kollektor-


Strom kann größer als 100 sein.

Bipolartransistoren als Schalter

Wir wollen den Zusammenhang zwischen Eingang und Ausgang in Abb.2.8 betrachten. Dabei
muss man die Ausgangschaltung als Spannungsteiler auffassen.
18 KAPITEL 2. TECHNISCHE GRUNDLAGEN

Abbildung 2.6: Ein npn-Transistor in Emitterschaltung ohne Ansteuerungsstrom an der Basis.

Abbildung 2.7: Ein npn-Transistor in Emitterschaltung mit Ansteuerungsstrom an der Basis.


Die Basis-Kollektor-Strecke ist leitend, es fließt ein Kollektorstrom.
2.2. HALBLEITERBAUELEMENTE 19

Abbildung 2.8: Ein Transistor in Emitterschaltung kann sein Eingangssignal von einem Schalter
erhalten und selbst als Schalter arbeiten.
20 KAPITEL 2. TECHNISCHE GRUNDLAGEN

Eingang Schalter Basisstrom Arbeitspunkt Kollektorstrom Ausgang (UCE = Ua


0V unten 0 Sperren ≈ 0mA groß ≈ UB
+UB oben groß (UB /RB Durchlass groß (UB /RC ) klein ≈ 0V

Wenn wir definieren, dass ≈ 0V = logisch 0 und ≈ UB = logisch 1 ist, erhalten wir folgende
Wahrheitstafel für die oben diskutierte Schaltung:

Eingang Ausgang
0 1
1 0

Die dikutierte Schaltung ist also ein Inverter! Dies ist ein erstes Beispiel für die TTL-Technologie
. Die Pegel für 0/1 müssen allerdings noch schärfer definiert werden. Das Ziel muss sein, alle
Pegel so zu definieren, dass am Ausgang jedes Transistors ein weiterer Transistor zuverlässig
und eindeutig angesteuert werden kann. Dies führt uns zu den Schaltkreisfamilien in diesem
Fall zur TTL-Familie. (s.Abschn. 2.3.1

2.2.5. Feldeffekttransistoren

Prinzip der FET an einem Beispiel

Feldeffekttransistoren, Abk. FET, sind unipolare Transistoren. Im Gegensatz zu den bipolaren


Transistoren wird hier die Ansteuerung nicht durch einen Strom sondern durch eine Spannung
erzeugt, die im Inneren des Feldeffekttransistors ein Feld aufbaut.

Wir wollen hier die sogenannten MOSFET (Metal-Oxide-Semiconductor-FET, Metall-Oxid-


Halbleiter-FET) besprechen. In ihrem Aufbau kommen die Schichten Metall, Oxid und Halb-
leiter vor. Wir wollen die Funktionsweise an einem Beispiel erklären (selbstsperrender n-Kanal-
MOSFET), zunächst der Aufbau:

Abbildung 2.9: Aufbau eines MOSFET. Beim selbstperrenden Typ ist ohne eine Gatespannung
der Kanal nicht leitend.
2.2. HALBLEITERBAUELEMENTE 21

Semiconductor In einem p-leitenden Substrat befinden sich zwei n-leitende Inseln: Drain und
Source. Diese sind kontaktiert, es soll im angesteuerten Zustand ein Strom von von Source
nach Drain fließen.

Oxid Darüber ist eine Isolationsschicht aus Siliziumoxid aufgebracht.

Metall Über der Verbindungsstrecke zwischen Drain und Source (dem Kanal) befindet sich eine
Metallschicht, die ebenfalls kontaktiert ist: Das Gate.

Funktionsweise: Wenn an das Gate eine positive Spannung angelegt wird, strömen negative
Ladungsträger in den Kanal. Dort bilden sie eine Brücke und machen die Strecke von Source
nach Drain leitend. Ohne die positve Gatespannung sind diese Ladungsträger nicht da und der
Transistor sperrt, er ist selbstsperrend . Es fließt kein Strom am Gate, die Ansteuerung ist also
leistungslos.

Abbildung 2.10: Eine positive Gatespannung läßt n-Ladungsträger in den Kanal strömen und
macht ihn leitend.

Achtung: Die Isolationsschicht zwischen Gate und Halbleiter ist sehr dünn und die Gateka-
pazität sehr klein. Dadurch führen schon kleine Mengen statische Elektrizität zu einer hohen
Gatespannung, die die isolierende SiO2 -Schicht durchschlagen und zerstören kann.

FET-Typen

Selbstsperrende FET haben ohne Gatespannung einen gesperrten Source-Drain-Kanal, andere


Bezeichnungen sind Anreicherungstyp, enhancement-type, normally-off. Die Ansteuerung erfolgt
durch eine neg./pos. Gatespannung, die den Kanal zunehmend leitend macht.

Selbstleitende FET haben ohne Gatespannung einen leitenden Source-Drain-Kanal, andere Be-
zeichnungen sind Verarmungstyp, depletion-type, normally-on. Die Ansteuerung erfolgt durch
eine neg./pos. Gatespannung, die den Kanal zunehmend sperrt.

n-Kanal-FET haben ein positives dotiertes Substrat und bilden eine n-leitende Brücke aus.

p-Kanal-FET haben ein negativ dotiertes Substrat und bilden eine p-leitende Brücke aus.
22 KAPITEL 2. TECHNISCHE GRUNDLAGEN

Gemeinsame Merkmale von MOSFET’s

• fast leistungslose Ansteuerung, d.h. geringer Stromverbrauch

• unipolare Technik, d.h. einfache Herstellung und hohe Integrationsdichte

• Etwas höhere Schaltzeiten als bipolare Transistoren

• Drei oder vier Anschlüsse: Source, Drain, Gate und evtl. Bulk

• Hohe Empfindlichkeit gegen statische Elekrizität

2.3. Schaltkreisfamilien

2.3.1. Allgemeines

Schaltkreisfamilien sind Gruppen von Halbleiterbausteinen, die mit einheitlicher Versorgungs-


spannung arbeiten, genormte Pegel einhalten und sich problemlos zusammenschalten lassen [11].
In Mikroprozessoren kommen verschiedene Schaltkreisfamilien zum Einsatz, manchmal sogar auf
einem Chip. Wenn Bausteine verschiedener Familien kombiniert werden, sind evtl. Pegelum-
setzer erforderlich.

Allgemeine Ziele bei der Entwicklung von Schaltkreisen sind

• Hohe Arbeitsgeschwindigkeit

• Niedrige Verlustleistung

• Große Störsicherheit

• Hoher Integrationsgrad (die Chips sollen klein sein)

• Geringe Herstellungskosten

Es lassen sich nicht alle Ziele gleichzeitig erreichen, man muss Kompromisse schließen.

2.3.2. Merkmale von Schaltkreisfamilien

Binäre Spannungspegel

Ein Pegel ist eine elektrische Spannung die auf einer Leitung liegt und relativ zu einem ge-
meinsamen Bezugspotential gemessen wird. In der Digital- und Mikroprozessortechnik werden
binäre Spannungspegel verwendet, d.h. der Pegel ist nur in zwei bestimmten Bereichen gültig,
dazwischen liegt ein ungültiger (verbotener) Bereich. Die Mitglieder einer Schaltkreisfamilie
produzieren an ihren Ausgänge immer gültige binäre Pegel. Diese können am Eingang anderer
Bausteine der gleichen Schaltkreisfamilie verwendet werden.

Die Bezeichnung der beiden Pegel ist meist:

• L = Low = niedriger Spannungspegel


2.3. SCHALTKREISFAMILIEN 23

Abbildung 2.11: Binäre Pegel. Zwischen den erlaubten Bereichen für High und Low ist ein
verbotener Bereich.

• H = High = hoher Spannungspegel

Die Pegel werden als logische 0 oder 1 interpretiert:

• Positive Logik: L=0 / H=1

• Negative Logik: L=1 / H=0

Schaltzeiten

Die Arbeitsgeschwindigkeit von digitalen Schaltungen (also auch Computerhardware) wird durch
ihre Schaltzeiten bestimmt. Man betrachtet einerseits die Durchlaufzeit von Signalen und an-
dererseits die Geschwindigkeit des Pegelanstiegs:

Signal-Laufzeit , die Laufzeit eines Impulses vom Eingang bis zum Ausgang eines Bausteines

Flankensteilheit (Signal-Übergangszeit) Die Zeit die beim Pegelwechsel gebraucht wird,


um von 10% auf 90% des Bereiches zwischen High und Low zu kommen (Anstiegszeit tLH )
bzw. umgekehrt (Abfallzeit tHL ).

Lastfaktoren

An den Ausgang eines Bausteines dürfen evtl. mehrere andere Bausteine angeschlossen wer-
den. Da aber jeder Eingang auch eine elektrische Last darstellt, ist die Anzahl der nachfolgend
angeschlossenen Bausteine begrenzt. Man unterscheidet:

Ausgangslastfaktor (Fan-out), FA Der Ausgangslastfaktor gibt an, wie viele Standardeingänge


(Normallasten) dieser Schaltkreisfamilie von diesem Ausgang getrieben werden können

Eingangslastfaktor (Fan-in)FI Ein Eingangslastfaktor von 1 bedeutet Normallast, 2 bedeu-


tet doppelte Normallast usw.

Was eine Normallast ist, ist für jede Schaltkreisfamilie durch Ströme bzw. Leistungen definiert.
Typische Werte sind Ausgangslastfaktoren 10–30 und Eingangslastfaktoren 1–3.
24 KAPITEL 2. TECHNISCHE GRUNDLAGEN

2.3.3. Die TTL-Familie

TTL steht für Transistor-Transistor-Logik . Hierbei werden die logischen Verknüpfungen durch
Transistoren realisiert, die andere Transistoren schalten. Ergänzend werden in TTL-Schaltungen
Dioden und Widerstände verwendet. TTL-Glieder sind immer integrierte Schaltungen (IC).

TTL-Pegel

Abbildung 2.12: TTL-Pegel. Man erkennt, dass der Pegel der Ausgangsstufen immer um 0.4V
weiter im High- oder Low-Bereich sein muss, als die Eingangsbausteine verlangen. Dies stellt
einen Sicherheitsabstand gegen Störungen dar.

Die Versorgungsspannung für TTL-Bausteine ist 5V, meist ist ein Bereich von 4.75V bis 5.25V
erlaubt.

TTL-Unterfamilien

Neben dem Standard-TTL wurden im Laufe der Zeit weitere TTL-Familien entwickelt, die
entweder schneller oder sparsamer sind.

Wegen ihrer günstigen elektrischen Daten, ihrer großen Typenvielfalt und ihres günstigen Preises
sind LS-TTL-Bausteine am stärksten verbreitet.

Typenbezeichnungen

Die Bezeichnung der Bausteine ist aus zahlen und Buchstaben zusammengesetzt. Die Zahlen
kennzeichnen die Funktion, z.B. ist 7400 ein Vierfach-NAND. Die Buchstaben kennzeichnen die
TTL-Familie.
2.3. SCHALTKREISFAMILIEN 25

Technologie Abk. Verlustleistung pro Signal-Durchlaufzeit


Gatter bei 1kHz pro Gatter
Standard-TTL (Std-)TTL 10 mW 10 ns
Low-Power-TTL L-TTL 1 mW 33 ns
High-Speed-TTL H-TTL 23 mW 5 ns
Schottky-TTL S-TTL 20 mW 3 ns
Advanced Schottky AS-TTL 10 mW 1.5 ns
Fast Schottky F-TTL 4 mW 2 ns
Low-Power Schottky LS-TTL 2 mW 9 ns
Advanced Low Power Schottky ALS-TTL 1 mW 4 ns
Fairchild Advanced Schottky FAST 4 mW 3 ns

Tabelle 2.3: TTL-Familien und ihre typischen Betriebsdaten

Bspiele:
7400 Vierfach-NAND in Standard-TTL
74LS00 Vierfach-NAND in Low Power Schottky-TTL
74LS02 Vierfach-NOR in Low Power Schottky-TTL
usw.

2.3.4. CMOS

Die PMOS-Familie besteht aus selbstsperrenden p-Kanal-MOSFET’s. PMOS-Bausteine sind


relativ langsam und nicht sehr sparsam. Sie sind aber sehr störsicher und können gut in kleinen
Stückzahlen hergestellt werden.

Die NMOS-Familie besteht aus selbstsperrenden n-Kanal-MOSFET’s. NMOS-Bausteine sind


ebenso schnell wie TTL-Bausteine und pegel-kompatibel zu TTL. In NMOS-Technik werden
Speicherbausteine hergestellt.

Besonders einfache und stromsparende Bausteine erhält man, wenn man NMOS und PMOS
kombiniert zum sog. Complementary MOS, CMOS .

Abbildung 2.13: Inverter in CMOS-Technik.

Dies ist beispielhaft in Abb.2.13 für einen CMOS-Inverter gezeigt. Es ergibt sich:
26 KAPITEL 2. TECHNISCHE GRUNDLAGEN

E T1 T2 A
L leitet sperrt H
H sperrt leitet L

Es ist also immer ein Transistor leitend und einer gesperrt. Dadurch fließt niemals ein direkter
(Verlust–)strom von +5V Betriebsspannung nach Masse. Dies führt dazu, dass CMOS-Bausteine
mit sehr geringer Verlustleistung arbeiten, wie Tabelle 2.4 zeigt bis zu Faktor 100000 sparsa-
mer. Ein Nachteil besteht allerdings darin, dass CMOS-Bausteine wieder bipolar sind und ihre
Herstellung etwas aufwendiger ist, als NMOS oder PMOS

Technologie Abk. Verlustleistung/Gatter und kHz Signal-Durchlaufzeit/Gatter


Standard-CMOS C 0.3 µW 90 ns
High Speed-CMOS HC 0.5 µW 10 ns
Advanced CMOS AC 0.8 µW 3 ns

Tabelle 2.4: Typische Daten von CMOS-Bausteinen

Beispiele für Typbezeichnungen: 74C04, 68HC05

TTL-Pegel

Abbildung 2.14: CMOS-Pegel. Man erkennt hier einen Sicherheitsabstand zwischen Eingangs-
und Ausgangspegelgrenzen von 1.45V. Ein Vergleich mit den TTL-Pegeln ergibt, dass ein TTL-
Baustein ohne weiteres von einem CMOS-Baustein angesteuert werden kann, aber nicht umge-
kehrt.

Verwendung CMOS-Technologie: Prozessoren, Controller, batteriebetriebene Geräte, CMOS-


RAM
2.4. DIE HERSTELLUNG INTEGRIERTER SCHALTKREISE 27

2.3.5. Weitere Schaltkreisfamilien

ECL

ECL steht für Emitter Coupled Logic . ECL-Bausteine sind aus bipolaren Transistoren aufge-
baut. ECL ist die schnellste Schaltkreisfamilie, die allerdings auch sehr viel Strom verbraucht.

Typ. Werte: Versorgungsspannung -5V, Verlustleistung 60 mW/Gatter, Signallaufzeit 0.5 ns,


Schaltfrequenzen bis 1 GHz

Verwendung: Supercomputer

DTL

DTL steht für Dioden-Transistor-Logik DTL-Bausteine sind aus Dioden und bipolaren Transi-
storen aufgebaut. Sie sind etwas langsamer aber auch etwas störsicherer als TTL-Bausteine.

Typ. Werte: Versorgungsspannung 5 bis 6V, Verlustleistung 9 mW/Gatter, Signallaufzeit 30 ns,


Statische Störsicherheit 1.2V

LSL

Aus der DTL wurde die Langsame störsichere Logik, LSL entwickelt. Die Schaltzeiten können
bis zu 400 ns betragen, die Verlustleistung mehr als 50 mW/Gatter. Verwendung vor allem in
Maschinensteuerungen.

2.4. Die Herstellung integrierter Schaltkreise

2.4.1. Grundideen, Begriffe, Basistechnologien

• Einheitlicher technologischer Prozess für alle denkbaren Schaltungen

• Möglichst viele Funktionen in einem gemeinsamen Träger (Silizium)

Ein intergierter Schaltkreis , engl. integrated circuit (IC) , ist ein Baustein, in dem viele
Bauteile auf einem einzigen Trägerplättchen zusammengefasst sind. Dies kann man erreichen,
indem man die Leiterbahnen durch Aufdampfen von Silber oder Gold in kleinsten Abmessun-
gen auf Keramikträger aufbringt. Darauf können dann weitere Bauelemente gelötet werden
(Dünnschichttechnik) .

Eine viel stärkere Integration erreicht man aber mit der Monolithtechnik (Volumentechnik). Da-
bei wird die ganze Schaltung in einem einzigen Stück Siliziumkristall hergestellt. Dies geschieht
durch Herstellung entsprechend vieler p- und/oder n-leitender Bereiche in diesem Kristall, der
damit zum integrierten Schaltkreis wird.

Eine Kombination der Dünnschichttechnik mit der Monolithtechnik ist die Hybridtechnik

Der erreichte Integrationsgrad wird durch Abkürzungen beschrieben:


28 KAPITEL 2. TECHNISCHE GRUNDLAGEN

SSI Small Scale Integration

MSI Medium Scale Integration

LSI Large Scale Integration

VLSI Very Large Scale Integration

ULSI Ultra Large Scale Integration

Basistechnologien:

• Reinstdarstellung von Silizium

• Diffusion (Wanderung von Teilchen) und Epitaxie (Schichtenwachstum)

• Ionenimplantation

• Lithografie

• Metallisierung

• Dünnschichtoxide

2.4.2. Motivation

Anforderungen an Warum integrierte Schaltungen sie erfüllen


Mikroprozessorkomponenten
Viele komplexe Funktionen auf kleinstem Raum Miniaturisierung der Funktionseinheiten
Geringer Stromverbrauch, geringe Abwärme
Hohe Zuverlässigkeit Viele Steck- und Lötverbindungen entfallen
Niedrige Kosten Wenig Materialkosten, wenig Montagearbeit
Hohe Arbeitsgeschwindigkeit, wenig Abstrahlung kurze Signalwege

2.4.3. Reinstdarstellung von Silizium

Si-haltige Gase (z.B. Trichlorsilan SiHCl3 oder Siliziumtetrachlorid SiCl4 ) werden in ein Vaku-
umgefäß eingeleitet. Dort erfolgt Abscheidung an geheiztem Si-Stab (ca. 1200 C) und Transport
von Verunreinigungen zur Wand.

SiHCl3 + H2 = Si + 3HCl

Der Stab wächst bei einer Reinheit von 10−10 bis 10−12 .
2.4. DIE HERSTELLUNG INTEGRIERTER SCHALTKREISE 29

2.4.4. Herstellung der Wafer

Silizium-Kristalle sind zunächst im polykristallinen Zustand und enthalten viele Verunreinigun-


gen. Um Halbleiter herzustellen, braucht man hochreine Silizium-Einkristalle. Dies wird mit
dem tiegelfreien Zonenziehen erreicht:

• Der Silizium-Rohling wird als Stab geformt und an einem Ende im mit einem vorhandenen
kleinen reinen Silizium-Einkristall kontaktiert (Startpunkt für die regelmäßige Kristallisa-
tion)
• Der Stab wird an seinen Enden eingespannt
• In der Kammer wird Vakuum erzeugt
• Mit einer Heizspule wird durch ein Hochfrequenzfeld eine Zone des Siliziumstabs aufge-
schmolzen
• Die Spule wird in Stabachsenrichtung durchgefahren, damit wandert die Schmelzzone
durch den Kristall
• Beim Erstarren findet regelmäßige Kristallisation statt und Verunreinigungen wandern an
die Ränder des Stabes
• Der Vorgang kann mehrfach wiederholt werden.

Der so hergestellte Si-Einkristallstab wird mit einer Innenloch-Diamantsäge unter Beachtung


der Kristallorientierung zersägt. Dabei entstehen feinste Scheiben mit einem Durchmesser von
z.B. 10 cm, die Wafer. In jedem Wafer werden später viele integrierte Schaltkreise erzeugt.

2.4.5. Dünnschichtoxide und Lithografie

Zur Erzeugung der p- und n-leitenden Bereiche müssen Teile der Oberfläche abgedeckt werden.
Wegen der hohen Integrationsdichte braucht man dabei kleinste Strukturen. Die Abdeckung ge-
schieht mit Siliziumdioxid (SiO2 ), undurchläßig für Dotierungsstoffe, hitzebeständig bis 1000 C.
Das Verfahren nennt man Lithografie (Steindruck), es läuft grob folgendermaßen ab:

1. Kristall im Sauerstoff erhitzen, es bildet sich ein Siliziumdioxid-Überzug.


2. Fotolack auftragen
3. Strukturmaske auf Lackschicht abbilden (höchste Ansprüche an optisches Gerät!), Lack
belichten
4. Lacklösungsmittel zugeben, Lack wird an belichteten Stellen aufgelöst (bei positivem Fo-
tolack)
5. Gepufferte Flußsäure zugeben: An den Stellen, wo der Fotolack fehlt, wird die Siliziumdi-
oxidschicht aufgelöst.
6. Entfernung des übrigen Fotolacks

Die Oxidschicht hat nun die gewünschten Fenster, durch die Dotierungsstoffe in den Kristall
eindringen können.
30 KAPITEL 2. TECHNISCHE GRUNDLAGEN

2.4.6. Diffusion und Planartechnik

Diffusion ist die Ausgleichsbewegung von Teilchen zu Gebieten geringerer Konzentration hin.
Wenn D die (temperaturabhängige) Diffusionskonstante ist und n die Teilchenkonzentration,
wird der Diffusionsstrom wird beschrieben durch

~j = −D∇n

Die örtliche Veränderung der Teilchendichte ist

∂n
= D∇2 n
∂t

Hier findet die Diffusion vom Rand ins Innere des Stabes statt. Diffusiontechnik ist nicht
so einfach, wie es vielleicht klingt. Ein Problem liegt darin, dass die Diffusion mit steigender
Temperatur stark zunimmt. Es brauchen also die Stoffe mit dem kleinsten Diffusionkoeffizienten
die höchsten Prozesstemperaturen. Andererseits wandern die eindiffundierten Stoffe aber im
Kristall weiter, wenn er erwärmt wird.

Daher wählt man folgende Reihenfolge: Der Dotierungsstoff mit dem kleinsten Diffusionsko-
effizienten wird zuerst – bei hoher Temperatur – eindiffundiert. Danach folgt der mit dem
zweithöchsten Diffusionskoeffizienten bei etwas niedrigerer Temperatur usw. bis zum Schluss
der Stoff mit dem höchsten Diffusionskoeffizienten bei der kleinsten Temperatur kommt. Pro-
blem: Die Diffusion nimmt mit steigender Temperatur stark zu. Also brauchen die Stoffe mit
dem kleinsten Diffusionkoeffizienten die höchsten Prozesstemperaturen. Aber: Die eindiffun-
dierten Stoffe wandern im Kristall weiter, wenn er erwärmt wird. Die Dotierungsstoffe werden
daher in folgender Reihenfolge eindiffundiert:

• Zuerst: Der Stoffe mit dem kleinsten Diffusionskoeffizienten bei der höchsten Temperatur

• Dann: Der Stoffe mit dem zweitkleinsten Diffusionskoeffizienten bei der zweithöchsten
Temperatur

• usw.

• Zuletzt: Der Stoffe mit dem größten Diffusionskoeffizienten bei der niedrigsten Temperatur

Das systematische Eindiffundieren von verschiedenen Dotierungsstoffen nennt man Planartech-


nik. Dabei wird natürlich für jeden Dotierungsstoff eine andere Maske verwendet, d.h. es muss
jedesmal die alte SiO2 -Maske entfernt werden und eine neue Maske lithografisch aufgebracht
werden.

2.4.7. Epitaxie (Kristallabscheidung)

Dünne dotierte Kristallschichten wachsen auf den Mutterkristall auf. Beim Aufwachsen der
epitaktischen Schicht werden Dotierungsstoffe in das Gasgemisch zugegeben und in gewünschter
Konzentration eingebaut. Vorteil: Die Dotierung kann sehr flexibel gesteuert werden, z.B. n-p-n.
2.5. TESTFRAGEN 31

2.4.8. Weitere Techniken

Ionenimplantation

Dotierungsstoffe werden mit kontrollierter Geschwindigkeit in den Si-Kristall eingeschossen. Da-


bei läßt sich – anders als bei der Diffusion – auch eine Anreicherung in tieferen Schichten errei-
chen.

Metallisierung

Aufbringung dünner Metallschichten zur Kontaktierung der im Kristall eingebauten n- und p-


Schichten.

2.4.9. Herstellung der Chips

Um die gebrauchsfertigen Chips im Kunststoffgehäuse mit Anschlussstiften (Pins) zu erhalten,


sind noch einige Arbeiten erforderlich: Die Prüfung im Nadelbettadapter, das Ritzen und Bre-
chen der Wafer das Auflegieren Einzelsysteme auf Gehäuseboden. Danach wird mit Golddraht
die Verbindung zu den Anschlussstiften hergestellt und das Gehäuse wird vergossen. Abschlie-
ßend werden stichprobenweise Funktionstests und Härteprüfungen durchgeführt.

2.5. Testfragen

1. Nennen Sie mindestens drei verschiedene Technologien, mit denen in der Mikroprozessor-
technik Information gespeichert wird!

2. Wieviel Bit umfasst ein Doppelwort eines i8008 und ein Quadwort eines i8086

3. Wieviel Bit umfasst die Adresse F1FA0h?

4. Was bedeutet LSB und MSB?

5. Welche Nummer hat das MSB bei einem Doppelwort eines i8086?

6. Erklären Sie die Begriffe Halbleiter, Akzeptor, Donator!

7. Was bedeutet bipolar?

8. Wieviele Anschlüsse (pins) hat eine Diode, wieviele ein Transistor?

9. Welches Richtung ist die Durchlassrichtung bei einer Diode?

10. Wie kann man eine Stromleitung in der Sperrschicht eines pn-Überganges ermöglichen?

11. Wie heißen die drei Anschlüsse des Transistors, über welchen Anschluss wurde er in unseren
Schaltungen angesteuert?

12. Zeichnen Sie einen bipolaren pnp-Transistor in Emitterschaltung. Welche Grenzschicht ist
in Durchlass- und welche in Sperrichtung gepolt.
32 KAPITEL 2. TECHNISCHE GRUNDLAGEN

13. Wie ist das Verhältnis zwischen Ansteuerungsstrom an der Basis und fließendem Kollek-
torstrom?

14. Was bedeutet durchsteuern?

15. Wie groß ist die Ausgangsspannung an einem durchgeschalteten Transistor in Emitterschal-
tung, wenn der Kollektorwiderstand 300Ω ist und der Emitter-Kollektor-Restwiderstand
6Ω?

16. Erklären Sie die Abkürzung MOSFET!

17. Zeichnen Sie eine Schemabild eines Feldeffekttransistors!

18. Wo liegen die Vorteile der FET-Technik gegenüber bipolarer Technik?

19. Wogegen sind Feldeffekttransistoren besonders empfindlich?

20. Nennen Sie die Basistechniken für die Herstellung integrierter Schaltkreise!

21. Warum sind integrierte Schaltungen für die Mikroprozessortechnik besonders geeignet?

22. Was ist ein Wafer?

23. Was ist Lithografie und Epitaxie?

24. Was bedeutet VLSI?


Kapitel 3

Bustreiber und einfache Bussysteme

3.1. Anforderungen

In einem Rechnersystem werden intern fast pausenlos Daten, Adressen und Steuersignale übertragen.
Dies geschieht über bitparallel geführte Leitungen. In manchen Fällen ist nur eine Übertragungsrichtung
möglich, (Adressen, Steuersignale) in anderen Fällen werden beide Richtungen genutzt (Daten).
An jede einzelne dieser Leitungen sind mehrere Bausteine parallel angeschlossen, man nennt
sie daher Busleitungen . Oft ist der Bus erweiterbar, so dass die Anzahl der angeschlossenen
Bausteine flexibel ist. Dies alles stellt bestimmte Anforderungen an die Ein- und Ausgänge der
angeschlossenen Bausteine und ihre Ansteuerung:

• Der Eingangslastfaktor darf nicht zu hoch sein

• Der Ausgangslastfaktor muss hoch genug sein

• An jeder Leitung darf immer nur maximal ein Baustein als Ausgang (Sender) aktiv sein

• Nicht aktive Ausgänge dürfen aktive Ausgänge nicht behindern

• Es muss für alle Operationen einen streng definierten zeitlichen Ablauf geben.

Ein Problem tritt also insbesondere dann auf, wenn mehrere TTL-Ausgänge miteinander ver-
bunden werden! Wir wollen hier zwei Lösungen für einfache Bussysteme vorstellen.

3.2. Ausgänge mit offenem Kollektor (Open Collector)

Hier wird der Ausgang durch einen Transistor gebildet, dessen Emitter auf Minus liegt und dessen
Kollektor als Ausgang herausgeführt ist, ohne Verbindung zu einem anderen Schaltungsteil zu
haben.

Es gibt also zwei Zustände:

• Der Transistor ist gesperrt, der offene Kollektor ist elektrisch von Emitter und Basis (fast)
abgetrennt, der Ausgang passt sich jedem äußeren Potential an (er floatet) (Abb.3.1

33
34 KAPITEL 3. BUSTREIBER UND EINFACHE BUSSYSTEME

Abbildung 3.1: Open Collector-Ausgang ohne Ansteuerung, der Ausgang floatet

Abbildung 3.2: Open Collector-Ausgang mit Ansteuerung der Basis: Der offene Kollektor wird
leitend nach 0V (Masse) verbunden

• Der Transistor ist durchgesteuert, der offene Kollektor ist leitend mit dem Emitter ver-
bunden, der Ausgang wird also auf Masse-Potential (OV), d.h. Low, gezogen. (Abb.3.2)

Es gibt also keine Möglichkeit, den Ausgang aktiv nach +UB (5V), d.h. High, zu ziehen. Um
eine Busleitung mit Open Collector-Ausgängen anzusteuern, muss man sie daher über einen
Widerstand mit +UB verbinden. Dies ist der gemeinsame Kollektorwiderstand.

Abbildung 3.3: Ein Open Collector-Bus braucht einen gemeinsamen Kollektorwiderstand

Die Ausgangsleitung ist also

• High, wenn alle angeschlossenen Open Collector-Ausgänge High sind

• Low, wenn mindestens ein Open Collector-Ausgang Low ist


3.3. TRISTATE-AUSGÄNGE 35

Dies entspricht bei positiver Logik einer UND-Verknüpfung, da diese durch die Verdrahtung
hergestellt ist, spricht man auch von WIRED AND
Beim Betrieb eines Open Collector-Busses sorgt man dafür, dass max. ein Ausgang aktiviert ist,
dieser bestimmt dann den Leitungszustand High oder Low. Nachteil der Open Collector-Busse:
Die Anstiegszeit tLH ist relativ hoch, die Arbeitsgeschwindigkeit also begrenzt.

Abbildung 3.4: Schaltzeichen eines Open Collector-Ausgangs

3.3. Tristate-Ausgänge
Ein Tri-State-Ausgang hat drei Zustände

1. High
2. Low
3. hochohmig (High-Z, Tristate)

Abbildung 3.5: Gegentaktendstufe ohne Tristate-Beschaltung

Im hochohmigen Zustand beeinflusst der Ausgang die angeschlossene Leitung praktisch nicht
mehr, weder nach High noch nach Low hin. Gerade dieses Verhalten braucht man in Bussyste-
men, wenn der betreffende Ausgang nicht aktiv ist.
Schaltungstechnik: In Gegentaktendstufen ist normalerweise immer einer der Transistoren Lei-
tend und einer gesperrt. In Tristate-Ausgänge sind zusätzliche Transistoren eingebaut, die beide
Transistoren der Endstufe gleichzeitig sperren können.
36 KAPITEL 3. BUSTREIBER UND EINFACHE BUSSYSTEME

Abbildung 3.6: Gegentaktendstufe mit Tristate-Beschaltung. Die beiden zusätzlichen Transisto-


ren können gleichzeitig beide Ausgangstransistoren sperren: Hochohmiger (Tristate)-Zustand

Das Signal, mit dem die Ausgänge aktiviert bzw. deaktiviert werden, heißt meist

CS Chip Select (Baustein-Auswahl)

CE Chip Enable (Baustein-Aktivierung)

OE Output Enable (Ausgangs-Aktivierung)

EN Enable (Aktivierung)

Eine Überstreichung des Signalnamens bedeutet dabei in der Regel eine Negierung, d.h. ein
¯ bedeutet: Chip Enable ist ein low aktives Signal, d.h. der
Low-aktives Signal . 1 Beispiel: CE
Chip ist aktiviert, wenn das Signal an diesem Eingang L ist. (CE ist schon ein Beispiel für ein
Steuersignal, das über den Steuerbus übertragen werden muss)

Abbildung 3.7: Schaltzeichen eines Tristate-Ausgangs

Über Tristate-Ausgänge können Busleitungen ohne weitere Beschaltung angesteuert werden.


Man muss auch hier dafür sorgen, dass nur max. ein Ausgang aktiviert ist.
1
Statt der Überstreichung wird auch manchmal ein Schrägstrich verwendet, z.B. /EN
3.4. BUSTREIBER 37

Abbildung 3.8: Busleitung die mit Tristate-Ausgängen betrieben wird.

3.4. Bustreiber
Manchmal werden Tristate-Bausteine ohne logische Verknüpfungsfunktion eingebaut. Sie haben
dann nur den Zweck, den Fan-Out zu erhöhen und über den CS-Eingang steuerbar zu werden,
sog. Treiber oder engl. Buffer . Es gibt Prozessoren, die nur einen Fan Out von 1 haben, man

Abbildung 3.9: Schaltzeichen eines Treibers (Buffers)

braucht also Treiber. Auf vielen Busleitungen, z.B. den Datenleitungen muss der Datenaustausch
aber wahlweise in beiden Richtungen funktionieren, d.h. bidirektional . (Dies spart Leitungen
auf dem Board und Anschlußstifte an den Chips). Dazu gibt es spezielle Treiber, die sich in der
Richtung umschalten lassen. (Abb. 3.10) Sie enthalten in einem Baustein z.B. acht umschaltbare
Treiberkanäle, um damit einen ganzen Bus umschalten zu können. Man unterscheidet zwischen
einseitig bidirektionalen Bustreibern , z.B. 8216, und zweiseitig bidirektionalen Bustreibern , z.B.
74LS245. Die engl. Bezeichnung ist oktal Bustransceiver . Letzterer wurde z.B. im IBM-XT
eingebaut.

Abbildung 3.10: Biodirektionaler Bustreiber (nur ein Kanal dargestellt)

3.5. Testfragen
1. Beschreiben Sie das Hauptproblem beim Anschluss von mehreren Ausgängen an einen Bus!
Auf was muss man sonst noch achten?

2. Was kann ein Open Collector-Ausgang, was kann er nicht?


38 KAPITEL 3. BUSTREIBER UND EINFACHE BUSSYSTEME

3. Beschreiben Sie die drei Zustände eines Tristate-Ausgangs. Wieviele davon sind hochoh-
mig?

4. Skizzieren Sie einen bidirektionalen Bustreiber!


Kapitel 4

Speicherbausteine

4.1. Allgemeine Eigenschaften


Speicherbausteine stellen sozusagen das Gedächtnis eines Computers dar. Manche Informatio-
nen müssen für Jahre gespeichert bleiben, wie z.B. die Laderoutinen des Bootvorgangs (z.B.
PC-BIOS), andere nur für Millionstel Sekunden, wie die Schleifenvariable eines Anwendungs-
programmes. Speicherbausteine gibt es daher in ganz verschiedenen Ausführungen, sie unter-
scheiden sich in der Zugriffs- und Zykluszeit, in der Dauer des Datenerhalts, in der Technik
des Löschens und Beschreibens und in der Organisation. Wir besprechen in diesem Kapitel
Halbleiterspeicherbausteine, Massenspeicher wie z.B. Festplatten, Disketten, Magnetbänder u.ä.
funktionieren anders. Eine Übersicht über die Halbleiterspeicher ist in Abb.4.1 gegeben.

Abbildung 4.1: Die wichtigsten Typen von Halbleiterspeichern

Den Speicherbausteinen gemeinsam ist folgender Aufbau:

• Matrixartiger Aufbau durch Wortleitungen (Zeilen) und Bitleitungen (Spalten) s.Abb.4.2

• An den Kreuzungspunkten der Leitungen sitzen die Speicherzellen, (Speicherplätze, Spei-


cherstelle, memory cell).

• Jede Speicherzelle speichert 1 Bit.

39
40 KAPITEL 4. SPEICHERBAUSTEINE

• Jede Speicherzelle ist an eine Wort- und eine Bitleitung angeschlossen

• Der Inhalt der Speicherzelle zeigt sich, wenn die Wortleitung aktiviert wird

Speicherzelle enthält eine 1: Die zugehörige Bitleitung wird durch die Speicherzelle akti-
viert
Speicherzelle enthält eine 0: Die zugehörige Bitleitung wird durch die Speicherzelle nicht
aktiviert

• Die richtige Speicherzelle wird selektiert, indem man die Adresse teilt und einen Teil als
Spaltenadresse interpretiert und den anderen als Zeilenadresse

• Alle Speicherzellen können in beliebiger Reihenfolge und Häufigkeit angesprochen werden


(anders z.B. bei Magnetbändern)

Abbildung 4.2: Speicherzelle mit Wort– und Bitleitung

Abbildung 4.3: Selektieren einer Speicherzelle aufgrund der gegebenen Speicheradresse


4.1. ALLGEMEINE EIGENSCHAFTEN 41

Eine wichtige Größe für Speicherbausteine ist die Arbeitsgeschwindigkeit. Man muss unterschei-
den:

Abbildung 4.4: Zeitverhalten (Timing) bei einem typischen Lesevorgang. Die Zykluszeit kann größer
als die Zugriffszeit sein.

Abbildung 4.5: Zeitverhalten (Timing) bei einem typischen Schreibvorgang. Bestimmte Mindestzeiten
müssen eingehalten werden, z.B. TAS : Adress Setup Time, tDW : Data Valid to end of Write Time

Zugriffszeit Die Zeit die zwischen dem Lesezugriff (Anlegen der Adresse und Aktivierung des
READ-Signals) auf den Baustein und der Bereitstellung der Daten vergeht
Zykluszeit Die Zeit die zwischen zwei unmittelbar aufeinanderfolgenden Lesezugriffen vergeht.
Die Zykluszeit ist oft größer als die Zugriffszeit.

Ob aus dem Speicher gelesen wird oder (falls möglich) in den Speicher geschrieben wird, steuert
man durch das Signal R/W . Dies liest man als: HIGH-aktives Lesesignal bzw. LOW-aktives
Schreibsignal. (s.Abb.4.4,4.5)

Ein wichtiger Begriff ist die Organisation eines Speicherbausteines . Hat man z.B. einen Baustein
der 4096 Speicherzellen zu je 1 Bit enthält kann so spricht man von einer 4kx1 Bit-Organisation
d.h. 12 Adressbit und 1 Datenbit. Ist in einem Speicherbaustein eine Zellenmatrix von 8196
Zellen vierfach vorhanden, so ist es ein 8kx4 Bit-Speicher mit 13 Adressbit und 4 Datenbit; hier
werden also unter jeder Adresse 4 Bit angesprochen.
42 KAPITEL 4. SPEICHERBAUSTEINE

4.2. ROM (Nur-Lese-Speicher)

ROM (Read Only Memory) sind Speicher die auf bestimmte Art mit einem Inhalt versehen
werden und später, beim Betrieb des Rechners, nur noch ausgelesen werden können. Die ROM-
Bausteine unterscheiden sich darin, wie der Dateninhalt in den Speicher gebracht wird.

4.2.1. Masken-ROM (MROM)

• Einarbeitung des Dateninhalts schon bei der Herstellung durch entsprechende Gestaltung
der Maske

• Die Speicherzellen stellen eine dauerhafte Verbindung zwischen Wortleitung und Bitleitung
her

• Diese Verbindung kann eine einfache Leiterbahnbrücke sein. Dies hat allerdings den Nach-
teil, dass das Potential einer aktivierten Bitleitung zurückfließt in Wortleitungen. In der
Regel benutz man daher Dioden oder Transistoren die in den Halbleiter eingearbeitet
werden. (s.Abb.4.6 A) – C) )

• Eine Maske verursacht hohe Herstellungskosten, daher lohnt MROM nur bei großen Stückzahlen

• Anwendungen: Programmspeicher für kleine Computersysteme, z.B. in der Steuerungs-


technik

• Programm- oder Datenfehler lassen sich nicht mehr beheben, sondern führen zum Ein-
stampfen einer ganzen Serie

Abbildung 4.6: Verschiedene Arten von Speicherzellen in MROM’s

4.2.2. Programmable ROM (PROM)

In Anwendungsfällen mit kleinen Stückzahlen wären MROM’s unzweckmäßig, hier kommen


PROM’s zum Einsatz. Diese können mit einem Programmiergerät vom Anwender selbst einzeln
mit einem gewünschten Dateninhalt versehen werden, die sog. Programmierung. Die Speicher-
zellen sind so gebaut, dass sie durch einen einmaligen Stromstoss, den sog. Programmierimpuls
dauerhaft verändert werden. PROM’s können nur einmal programmiert werden, sie heißen daher
auch OTPROM (one time programmable read only memory) Es gibt mehrere Funktionsprinzi-
pien (s.Abb.4.7):
4.2. ROM (NUR-LESE-SPEICHER) 43

Abbildung 4.7: Verschiedene Arten von Speicherzellen in PROM’s

Fusible Link also schmelzbare Verbindung. Im ursprünglichen Zustand sind in allen Zellen
Wort- und Bitleitung durch eine dünne Metallisierungsbrücke verbunden. Der Inhalt aller
Zellen ist also 1. Der Programmierimpuls bringt in den Zellen, die auf Null gesetzt werden
sollen, die Metallisierungsbrücke zum schmelzen.

avalanche induced migration, AIM (lawinengesteuerte Wanderung) Zwischen Wort- und


Bitleitung befindet sich zunächst ein sperrender Halbleiter (Diode oder Transistor) Durch
den Programmierimpuls wird die Sperrschicht zerstört und der Halbleiter dauerhaft in eine
leitende Verbindung umgewandelt.

Feldeffekttransistoren mit Floating Gate Zwischen Gate und Kanal gibt es eine zusätzliche
Ladungszone, die nicht kontaktiert ist: das sog. Floating Gate. Durch den Programmie-
rimpuls wird ein starker Strom zwischen Drain und Source erzeugt. Dabei dringt ein Teil
der Ladungsträger durch die Isolierschicht und das Floating Gate wird aufgeladen. Es
schirmt nun die Wirkung des Gates ab, Der FET läßt sich nicht mehr ansteuern. Andere
Bezeichnung: FAMOST (floating gate avalanche MOS transistor)

PROM’s sind wortweise organisiert, d.h. als Nx4 Bit, Nx8 Bit, Nx16 Bit usw.

Abbildung 4.8: FET mit Floating Gate als Speicherzelle in einem PROM

4.2.3. EPROM

Oft werden ROM-Bausteine gebraucht, deren Inhalt man löschen und neu einschreiben kann,
z.B. in der Entwicklungsphase von Systemen.

Von den Programmierverfahren der PROM’s bietet das letzte die Chance des Rückgängigmachens:
Wenn man es schafft das aufgeladene Floating gate wieder zu entladen, ist die Abschirmung des
Gates beseitigt und der FET wieder im ursprünglichen (funktionsfähigen) Zustand. Anschlies-
send kann der Baustein wieder neu programmiert, d.h. mit Dateninhalt versehen, werden.
44 KAPITEL 4. SPEICHERBAUSTEINE

Abbildung 4.9: Wenn das Floating Gate aufgeladen ist, wird das Feld des Gates abgeschirmt und der
Transistor läßt sich nicht mehr ansteuern (ist blockiert)

Abbildung 4.10: Entladung des Floating Gate durch UV-Licht. Das Feld greift nun wieder durch bis
zum Kanal, der FET ist wieder funktionsfähig. Der Dateninhalt des EPROM ist hiermit gelöscht, das
EPROM kann neu beschrieben werden
4.2. ROM (NUR-LESE-SPEICHER) 45

Wie kann man die Aufladung rückgängig machen? Strahlt man hartes ultraviolettes Licht (UV)
in den Halbleiter ein, so wird durch Lichtquanten Energie auf die Ladungsträger im Floating
Gate übertragen. Diese haben nun genug Energie, um das Floating Gate zu verlassen, welches
sich also entläd. Damit ist das Ziel erreicht. Solchermaßen gebaute ROM-Bausteine heißen
EPROM (erasable programmable read only memory) (Eine andere Möglichkeit der Entladung
wird im folgenden Unterabschnitt dargestellt)

Praktische Ausführung:

• EPROM’s werden mit einem Quarzfenster gebaut, das UV-durchläßig ist

• Ein EPROM wird zum Löschen in einer Schublade in ein EPROM-Löschgerät geschoben

• ca. 20 min Belichtung mit UV-Licht

• Alle Zellen sind gelöscht (=1)

• Das EPROM kann neu beschrieben werden

4.2.4. EEPROM

Bei den EEPROM (electrical erasable programmable read only memory) kann das Floating
Gate elektrisch entladen werden. Dadurch entfällt die aufwendige Prozedur mit dem UV-Licht.
Das Prinzip ist wie folgt:

• Das Floating Gate ist an einer Stelle etwas weiter zum Drain-Bereich hingezogen, so dass
es nur noch durch eine dünne Isolationsschichtschicht (Oxid) vom Drain getrennt ist.

• Durch eine erhöhte Spannung (Programmierspannung) können Ladungsträger diese dünne


Schicht durchdringen ( durchtunneln“) und das Floating Gate aufladen bzw. entladen.

Abbildung 4.11: Das Floating Gate eines EEPROM ist an einer Stelle sehr nah an den Kanal gebaut.
Dort können Ladungsträger durchtunneln.

Moderne EEPROM haben Spannungswandler für die Programmierspannung und Programmier-


logik auf dem Chip integriert. Zum Programmieren muss man dann nur noch die Adressen
anlegen, der Chip arbeitet dann ähnlich wie ein RAM-Baustein. Problem: Die Anzahl der
46 KAPITEL 4. SPEICHERBAUSTEINE

Schreibzyklen ist begrenzt auf 104 – 106 Zyklen. Wenn in einem Programm ein Speicherplatz,
der auf einem solchen EEPROM liegt, zu oft angesprochen wird (z.B. als Schleifenvariable) kann
der Baustein schon nach wenigen Sekunden das Ende seiner Lebensdauer erreicht haben.

Sehr sinnvoll kann eine Kombination aus RAM und EEPROM sein: Im normalen Betrieb wird
das RAM benutzt und bei Ausfall der Betriebsspannung werden die Daten schnell ins EEPROM
übertragen → Nichtflüchtiges RAM.

Variante: Flash-EEPROM Es kann nur der ganze Chip gelöscht werden, nicht mehr eine einzelne
Zelle, Kostenvorteil

Typ Dauer maximale Anzahl typische Verwendung


Schreibvorgang Schreibvorgänge
MROM Monate 1 ausgereifte Produktion in großer Stückzahl
(OT)PROM Minuten 1 Kleinserie, Vorserie
EPROM Minuten bis zu 100 Entwicklungslabors
EEPROM Millisekunden 104 − 106 Entwicklung, Flash-Speicher, Silicon Disc

4.3. Random Access Memory (RAM)

4.3.1. Statisches RAM (SRAM)

Statische RAM-Zellen sind im wesentlichen Taktgesteuerte D-Flipflops. Die beiden Flipflop-


Zustände stellen 0 und 1 dar. Die Haupteigenschaften sind:

• Schnelle Umschaltung

• Keine Auffrischung notwendig

• Teurer undgrößer, aber schneller als DRAM’s

Die Speicherzellen sind wieder in einer Matrix angeordnet. Eine Steuerung sorgt für die korrekte
Ansteuerung der Zellen und die Übergabe zum/vom Datenbus. Die Funktionsweise und das
Zusammenspiel mit Wort- und Bitleitung ist an einem Ersatzschaltbild in den Abb.4.12 und
4.13 erklärt:

Die praktische Ausführung von SRAM’s kann bipolar oder in CMOS-Technik erfolgen. Das Flip-
flop besteht jeweils aus Transistoren, die sich gegenseitig schalten. Folgende Probleme müssen
gelöst werden:

Daten auslesen der Zustand des Flipflops (0/1) muss auf die Daten- bzw. Bitleitung übertragen
werden.

Daten einschreiben Der Zustand der Daten- bzw. Bitleitung muss auf das Flipflop übertragen
werden; dabei muss es evtl. in den anderen Zustand gekippt werden.

Die SRAM-Zelle in Abb.4.14 funktioniert wie folgt:


4.3. RANDOM ACCESS MEMORY (RAM) 47

Abbildung 4.12: Die Speicherzelle einer Zelle eines statischen RAM im Ersatzschaltbild. Durch Bit-
und Wortleitung wird eine Zelle selektiert und deren Flipflop ausgelesen. Ein Einschreiben in die Zelle
erfordert zusätzlich eine aktivierte we-Leitung (we = H). Der Ausgang ist ein Open Collector

Abbildung 4.13: Die Steuerung der SRAM-Matrix im Ersatzschaltbild. Die Steuerung setzt nur bei
CS = H und R/W = H das Signal we = H, so dass Daten eingeschrieben werden können. din und
dout sind interne Busleitungen, an denen alle Speicherzellen parallel angeschlossen sind. Die Steuerung
enthält auch den externen Kollektorwiderstand für die Open Collector-Ausgänge. Durch die verbindung
von Din und Dout ist der Anschluss eines bidirektionelen Datenbusses möglich. Durch das Vorhandensein
eines CS können mehrere solcher Bausteine am gleichen Bus hängen

Abbildung 4.14: Ein aus zwei NMOS-Transistoren aufgebautes Flipflop. Q und Q sind gleichzeitig Ein-
und Ausgänge, die beiden Transistoren steuern sich gegenseitig.
48 KAPITEL 4. SPEICHERBAUSTEINE

Stabiler Zustand Wenn z.B. Tr1 durchgesteuert ist, liegt der linke Schaltungsausgang Q auf
Masse (LOW). Die Basis von Tr2 ist auf Masse gelegt, Tr2 sperrt also. Der rechte Schal-
tungsausgang Q liegt also auf +UB (HIGH) und sorgt damit für die Ansteuerung von Tr1.
Im anderen Flipflop-Zustand ist alles genau entgegengesetzt.

Auslesen Über die Ausgänge Q und Q kann der Zustand nach Belieben invertiert oder nicht-
invertiert ausgelesen werden.

Umschalten beim Dateneinspeichern Gehen wir von dem oben geschilderten Zustand aus,
Tr1 leitend. Ein genügend starkes HIGH-Potential an Q sorgt dafür, dass Tr2 etwas An-
steuerung erhält. Dadurch wird Tr2 etwas leitend, Q wird etwas zu niedrigerem Potential
(Masse) hin verändert, die Ansteuerung von Tr1 wird schlechter. Dadurch wird Tr1 weni-
ger leitend, das Potential von Q steigt an und wirkt auf Tr2 zurück. Der Vorgang verstärkt
sich von selbst, der Zustand kippt.

Abbildung 4.15: Das Flipflop aus zwei NMOS-Transistoren ist der Kern der SRAM-Speicherzelle. Die
Wortleitung schaltet über zwei weitere Transistoren die Ein-/Ausgänge auf die Bitleitungen BL und BL
durch. Über diese erfolgt das Schreiben und Lesen von Daten.

Ähnlich sind bipolare SRAM-Bausteine aufgebaut. Alle Speicherbausteine dieser Art haben
den Vorteil, dass die Zellentransistoren ein kräftiges Signal abgeben und keine aufwendigen
Verstärker notwendig sind.

Verwendung von Statischen RAM:

Bipolare SRAM Cache (schnelle Zwischenspeicher)

MOS-SRAM Batteriegepufferte Speicher, Speicher in Kleinsystemen ohne Refresh-Logik

Mit bipolaren SRAM-Bausteinen erreicht man Zugriffszeiten von 10 ns, MOS-RAM-Bausteine


haben typische Zugriffszeiten von 30–100 ns.
4.3. RANDOM ACCESS MEMORY (RAM) 49

4.3.2. Dynamisches RAM (DRAM)

Prinzip

Die gespeicherte Information wird durch den Ladungszustand eines Kondensators dargestellt:

• Logische 0 : Kondensator ungeladen

• Logische 1 : Kondensator geladen

Eine DRAM-Speicherzelle besteht daher im wesentlichen aus einem Kondensator, der über einen
Tortransistor (Auswahltransistor) mit der Bitleitung verbunden ist. Der Tortransistor wird
über die Wortleitung angesteuert. Problem: Der Kondensator entläd sich allmählich durch
Leckströme, der Dateninhalt geht verloren. Es ist daher eine regelmäßige Auffrischung erforder-
lich, ein sog. Refresh .

Abbildung 4.16: Die Zelle eines DRAM besteht aus einem Kondensator und einem Tortransistor.

Daten auslesen Der Transistor wird angesteuert, die im Kondensator gespeicherte Ladung
gelangt auf die Bitleitung, wird verstärkt und als Dateninhalt auf der Datenleitung auf
den Bus gegeben.

Daten einschreiben Der Transistor wird angesteuert, der Dateninhalt wird als elektrisches
Potential (H/L) auf die Bitleitung gegeben, Ladung strömt in den Kondensator, der Transi-
stor wird wieder gesperrt. Die Ladung bleibt im Kondensator gespeichert und repräsentiert
den Dateninhalt.

Miniaturisierung

Eine solche DRAM-Speicherzelle besteht also nur aus zwei Bauelementen (Kondensator+Transistor),
während z.B. eine SRAM-Zelle sechs Bauelemente braucht (s.Abb.4.14). DRAM’s lassen sich
daher sehr gut auf kleinstem Raum in NMOS-Technik herstellen, und die Integrationsdichte von
DRAM’s wurde in den vergangenen Jahren enorm gesteigert. Dabei wurden natürlich auch die
Speicherkondensatoren sehr klein. Problem: Die gespeicherte Ladung ist sehr gering! Folgende
konstruktive Maßnahmen wurden daher ergriffen, um die Kapazität zu erhöhen:

• Aus den flachen Kondensatoren wurden Grabenkondensatoren (trench technology) mit


vergrößerter Oberfläche, s.Abb.4.17
50 KAPITEL 4. SPEICHERBAUSTEINE

• Die Speicherkondensatoren werden gefaltet s.Abb.4.18

• Die Kondensatoren wurden mit einem ferroelektrischen Dielektrikum versehen, z.B. BaT iO3
oder SrT iO3 . ([14]

Abbildung 4.17: Durch die dreidimensionale Gestaltung der Kondensatoren als Grabenkondensatoren
gewinnt man Fläche und damit Kapazität.

Abbildung 4.18: In der Stapeltechnologie wird der Speicherkondensator gefaltet.

Adressmultiplexing

Diese Maßnahmen haben zu ungeheuren Fortschritten in der DRAM-Technik geführt, Siemens


fertigt z.B. einen 256 Mb-Chip in 0.2µ-Technologie.(http://www.infineon.com/products/ics/31/31.htm)
Ein 256 Mb-Chip würde 28 Adressleitungen brauchen. Dies würde zu sehr großen Gehäuseabmessungen
führen, die z.B. bei der Bündelung zu DIMM’s hinderlich sind. Man führt daher Adress-
Multiplexing ein: Man gibt Zeilenadresse und Spaltenadresse nacheinander über die gleichen
Leitungen an den Chip. An speziellen Leitungen wird signalisiert ob gerade eine Zeilen- oder
Spaltenadresse übergeben wird:

RAS Row Adress Strobe, Zeilenadress-Signal

CAS Column Adress Strobe, Spaltenadress-Signal

Ein Beispiel für einen solchen DRAM ist in Abb.4.19 gezeigt. Solche Chips können nicht direkt
am Bus betrieben werden, man braucht eine Speichersteuerung .
4.3. RANDOM ACCESS MEMORY (RAM) 51

Abbildung 4.19: Der 21010 DRAM von intel adressiert mit Adress-Multiplexing 1Mb (220 ) Speicher-
plätze mit 10 Adressleitungen. Anschlüsse: Ax : Adressleitungen, GND, Vcc : Masse und Betriebsspan-
nung, we: Write Enable, TF: Test Function

Interne Ansteuerung

Ausserdem ist die Kapazität des Kondensators ist kleiner als die der Bitleitungen. Man braucht
daher empfindliche Leseverstärker, um die ausgeschüttete Ladung überhaupt zu registrieren.

In Abb.4.21 ist die Ansteuerung einer Speicherzelle in einem modernen DRAM gezeigt. Ein
Lesezyklus am Beispiel des 1Mb-Chips (1024*1024 Zellen) verläuft wie folgt:

• Beide Bitleitungen liegen genau auf halber Betriebsspannung (Bereitschaftszustand)

• RAS und Zeilenadresse werden angelegt, die zugehörige Wortleitung wird aktiviert.

• Alle 1024 Tortransistoren dieser Zeile werden leitend, die Ladungen der Kondensatoren
fließen auf die Bitleitungen

• Zwischen den Bitleitungspaaren entsteht eine kleine Potentialdifferenz, z.B. 0.05V

• Alle 1024 Leseverstärker verstärken diese Differenz zu HIGH/LOW

• Die verstärkte Spannung steht auf den I/O-Leitungen zur Verfügung und fließt gleichzeitig
zurück in die Speicherzellen. Deren Ladung ist somit aufgefrischt (Refresh)

• In der Zwischenzeit wurde die Spaltenadresse übergeben und der Spaltendekoder aktiviert
einen der 1024 Gatterblöcke. Das Signal der ausgewählten Speicherzelle gelangt in den
Datenausgangspuffer. Dort wird es noch mal verstärkt und ausgegeben

• Leseverstärker und Wortleitungen werden deaktiviert, das I/O-Gatter wird gesperrt.

• die Vorladeschaltkreise werden aktiviert und bringen die Bitleitungen auf halbe Betriebs-
spannung (Erholungszeit)

• Der DRAM ist wieder lesebereit


52 KAPITEL 4. SPEICHERBAUSTEINE

Abbildung 4.20: In einem modernen DRAM ist die Kapazität der Kondensatoren kleiner als die der
Bitleitungen. Man muss daher mit empfindlichen Leseverstärkern arbeiten.

Abbildung 4.21: Timing in einem modernen DRAM. Erklärung s.Text.


4.3. RANDOM ACCESS MEMORY (RAM) 53

Anmerkungen:
1) Beim Auslesen erfolgt ein Refresh der ganzen Zeile
2) Für einen Refresh aller Speicherzellen, muss auf alle Zeilen einmal lesend oder schreibend
zugegriffen werden.
3) Ein Schreibzylus verläuft ähnlich: Die Daten kommen vom Dateneingangspuffer, werden vom
Schreib-/Leseverstärker verstärkt und gelangen über den Tortransistor in den Kondensator, da-
bei Refresh der ganzen Zeile.
4) Es müssen nicht gleich viele Zeilen und Spalten vorhanden sein, z.B kann ein 1 Mb-Chip
1024*1024 aufgebaut sein (10/10-Mapping) oder 512*2048 (9/11-Mapping).

Der Auslesevorgang eines DRAM ist in Abb.4.21 dargestellt. Die Bedeutung der Zeiten ist:
t0 Anlegen der Zeilenadresse
t1 Durchschalten des Tortransistors zur Bitleitung
t2 Leseverstärker wird aktiv
t3 Potentialdifferenz der Bitleitungen ist verstärkt
t4 Daten sind gültig, CAS zeigt das Ende des Lesevorgangs an, Erholungszeit beginnt
t5 DRAM ist wieder betriebsbereit
t0 − t4 Zugriffszeit
t0 − t5 Zykluszeit

Geschwindigkeitssteigerung

Abbildung 4.22: Im Page Mode umgeht man die Erholungszeit durch mehrfachen Zugriff bei konstanter
Zeilenadresse.

Verfeinerte Techniken versuchen, die Erholungszeit zu umgehen ([4], [12]:

Interleaving (Verschränkung) Der Speicher wird in mehrere Bänke aufgeteilt und so ange-
schlossen, dass logisch benachbarte Speicherplätze (z.B. 10A04h, 10A05h) physikalisch
auf verschiedenen Speicherchips sitzen. Dadurch sich bei sequentiellem Zugriff ein Chip
erholen, während auf den anderen zugegriffen wird. Mögl. 2-Weg, 4-Weg usw.

Page Mode Sequentieller Zugriff auf die Bits einer Zeile, die Zeilenadresse bleibt stehen, nur
die Spaltenadresse wechselt. Vorteil: Keine Vorladezeiten zwischen den Zugriffen. Es sind
bis zu 500 Zugriffe möglich, die Zykluszeit geht auf 30% zurück. (s.Abb.4.22

Fast Page Mode (FPM) Der Inhalt der Schreib-/Leseverstärker wird erst bei Zeilenwechsel
in die Zellen zurückgeschrieben
54 KAPITEL 4. SPEICHERBAUSTEINE

Enhanced Data Out (EDO) Das Ende des Lesevorgangs hier durch OE angezeigt. da-
durch wird CAS frei und kann während des Lesevorgangs schon eine neue Spaltenadresse
übergeben werden: Zeitgewinn durch Überlapp.

Burst EDO RAM, (BEDO) Die Daten werden hier normalerweise in Paketen zu z.B. vier
Doppelworten von je 32 oder 64 Bit übergeben, sog. Read Burst . Ein selbstinkrementie-
rende Zähler erzeugt aus einer Startadresse die Adressen der folgenden Speicherzellen on
Chip. Die Übergabe der Spaltenadressen entfällt also bei Folgezugriffen, statt dessen wird
nur mit CAS ein Takt angegeben. Liegt ein Folgezugriff auf einer anderen Zeile (Page
Miss), so muss unter Zeitverlust der Burst in der neuen Zeile wieder gestartet werden.

Synchrone Data RAM, (SDRAM) Alle Signale hängen an einem gemeinsamen Takt, da-
durch bessere Einbindung in das Gesamtsystem und keine Wartezeiten bei der Datenübergabe.
SDRAM’s arbeiten üblicherweise ebenfalls mit Burst-Reads. 8 ns-Zykluszeit bei Folgezu-
griffen im 125 MHz-Bustakt sind möglich. SDRAM’s nutzen intern oft Interleaving.

Neuere Entwicklungen RDRAM, Rambus DRAM (intel) und SLDRAM Sync-Link DRAM,
(Siemens) versprechen noch höhere Datenraten als SDRAM

In den meisten Fällen ist also ein Folgezugriff auf der gleichen Zeile schneller als der erste Zugriff,
man spricht daher z.B. auch von SDRAM mit 5-1-1-1 Burst. Die folgende Tabelle zeigt typische
Werte (hängen vom Bustakt ab):

DRAM-Typ Takte Takte


Erstzugriff Folgezugriff
SDRAM 5 1
BEDO 5 1
EDO 5 2
FPM 5 3

Refresh

Für den notwendigen Refresh gibt es verschiedene Möglichkeiten:

Blindlesezyklus Es wird RAS aktiviert, CAS bleibt inaktiv (RAS-only-Refresh). Es schaltet


also kein I/O-Gatter durch, aber der interne Refresh findet statt. Die richtigen Zeilen-
adressen müssen von aussen durch die CPU oder einen Refresh-Controller kommen.

Interne Refresh-Logik Moderne Speicherbausteine haben eine interne Refresh-Logik, die nur
regelmäßig vom System angestoßen wird. Sie verwaltet und inkrementiert die Zeilenadres-
sen intern. Anstoss z.B. durch CAS before RAS-Verfahren: CAS wird vor RAS aktiviert,
was im normalen Betrieb keinen Sinn ergibt:CAS-before-RAS-Refresh

Typische Refresh-Intervalle sind 1–20 ms, bei Notebooks auch mehr.

Speichermodule

In PC’s werden Speicher heute als sogenannte Speichermodule (memory moduls) eingebaut,
es gibt SIMM , Single Inline Memory Modules und DIMM, Dual Inline Memory Modules.
4.4. TESTFRAGEN 55

Auf diesen Modulen ist dann eine entsprechende Anzahl Speicherchips montiert, z.B. kann ein
128 MB-DIMM aus 16 64 Mb-Chips aufgebaut sein. Neuere Speichermodule enthalten ein
SPD-EEPROM (Serial Presence Detect) . Dieses EEPROM enthält Informationen über die
Speicherbausteine, wie z.B. Mapping, Refresh-Rate, Anzahl Bänke, Verschaltung, Spannungs-
versorgung, Parity. Die Speicherverwaltung kann über einen seriellen I 2 C-Bus diese Daten lesen
und das Modul korrekt ansteuern. (Speicher-Plug and Play)

4.4. Testfragen

Abbildung 4.23: Abb. zu Aufgabe: Speicherbaustein

1. In Abb. 4.23 ist ein Speicher dargestellt. Beantworten Sie folgende Fragen:
a) Welcher Typ Speicher ist dargestellt?
b) Welchen Inhalt haben die Zellen 10 – 13 ?

2. Wählen Sie für jede der folgenden Aufgaben einen passenden Speichertyp aus.
a) Programmspeicher für einen digitalen Fahrradtachometer nach Abschluss der Tests
b) Zwischenspeicher für Messwerte des Tankgebers in einem Auto, Geberauslesung einmal
pro Sekunde
c) Programmspeicher für Ladeklappensteuerung einer Raumfähre
d) Programmspeicher für Tests an einem Labormuster eines Festplattencontrollers

3. Müssen die Widerstände R1 und R2 in der Abbildung 4.14 kleiner oder größer als der
Widerstand der durchgesteuerten Transistoren sein?

4. Warum gelten SRAM nicht als besonders sparsame Bausteine?

5. Nennen Sie drei Methoden, mit denen die Kapazität der Speicherkondensatoren in DRAM
erhöht wird!
56 KAPITEL 4. SPEICHERBAUSTEINE

6. Ein DRAM-Baustein hat eine Kapazität von 4Mb. Wieviele Adressierungssignale braucht
er mit und ohne Adressmultiplexing?

7. Was ist ein Read-Burst?


Kapitel 5

Ein-/Ausgabebausteine

5.1. Allgemeine Eigenschaften

Ein-/Ausgabebausteine stellen die Verbindung her vom Prozessor bzw. Systembus zu allen
Bausteinen, die nicht direkt am Bus betrieben werden. Dies können Peripheriebausteine im
Rechnersystem sein, z.B auf der Hauptplatine, oder auch externe Bausteine z.B. außerhalb
des Gehäuses. Die Informationen werden von den Ein-/Ausgabebausteinen durch TTL-Pegel
transportiert. Andere Bezeichnungen für Ein-/Ausgabebausteine sind E/A-Bausteine , I/O-
Devices, I/O-Ports, Ports, I/O-Kanäle u.a. I/O-Bausteine können eigenständige Bausteine sein
oder in andere Bausteine integriert sein. Typische Anwendungen von I/O sind

• Kommunikation mit der Tastatur

• Kommunikation mit Controllern, z.B. Interrupt-Controller, DMA-Controller, Intervall Ti-


mer, Gameport, Disketten-Controller

• Kommunikation mit Schnittstellen, z.B. serielle (RS232) und parallele Schnittstelle

• Prozesssteuerungsinterface, empfangen und senden von digitalen Signalen

5.2. Einfache Ein-/Ausgabebausteine

5.2.1. Eingabe

Ein Eingabebaustein muss nach einem Einlesebefehl die von aussen kommenden TTL-Pegel
übernehmen und an den Datenbus übergeben. dazu genügt ein Treiber mit Tristateausgang
und Enable.

5.2.2. Ausgabe

Ein Ausgabebaustein muss ein Bitmuster, das vom Datenbus übergeben wird festhalten und
nach außen durchschalten. dazu kann man D-Flipflops verwenden (auch Latches genannt).

57
58 KAPITEL 5. EIN-/AUSGABEBAUSTEINE

Abbildung 5.1: Einfacher Eingabebaustein, z.B. 74LS244.

Abbildung 5.2: Einfacher Ausgabebaustein, z.B. 74LS273.


5.2. EINFACHE EIN-/AUSGABEBAUSTEINE 59

A0 A1
0 0 Port A
0 1 Port B
1 0 Port C
1 1 Steuerregister

Tabelle 5.1: Die internen Register des 8255

5.2.3. Der programmierbare Ein-/Ausgabebaustein 8255

Es gibt schaltungsprogrammierbare Bausteine, bei denen die Beschaltung eines Einganges (MO-
DE) festlegt, ob der Baustein als Ein- oder Ausgabebaustein arbeitet. Bsp.: 8212

Noch höhere Flexibilität erreicht man mit echten programmierbaren Bausteinen, der bekann-
teste ist der 8255. Hier wird die Betriebsart durch Beschreiben eines Steueregisters festgelegt.
I/O-Bausteine haben im System bestimmte Adressen, ähnlich wie Speicherbausteine. Es gibt
grundsätzlich zwei Arten, die I/O-Adressen anzulegen:

Abbildung 5.3: Der programmierbare Ein-/Ausgabebaustein 8255 hat 24 Leitungen, die nach Bedarf
als Ein- oder Ausgabe geschaltet werden können.

Der programmierbare Ein-/Ausgabebaustein 8255 hat 24 Leitungen, die nach Bedarf als Ein-
oder Ausgabe geschaltet werden können. Alle Ports können gelesen oder beschrieben werden,
Port C ist sogar in zwei Vierergruppen separat konfigurierbar. Über zwei Adresseingänge wird
gesteuert, auf welches der 4 internen Register zugegriffen wird.

Der 8255 kennt drei Betriebsarten:

Mode 0 Einfache Ein-/Ausgabe über Ports A,B,C

Mode 1 Ports A und B als Ein-/Ausgang, Port C führt Handshake-Signale für eine Da-
tenübertragung über Ports A und B

Mode 2 Bidirektionaler Datenaustausch auf Port A, Port C führt Handshake-Signale, Port B


einfache Ein-/Ausgabe

Um die Betriebsart festzulegen, muss ein entsprechendes Wort im Steuerregister hinterlegt wer-
den.
60 KAPITEL 5. EIN-/AUSGABEBAUSTEINE

D7 1=Modussteuerwort, 0= Bits von Port C einzeln setzen


D6, D5 Modus Gruppe A: 00=Modus 0, 01=Modus 1, 1x=Modus 2
D4 Port A: 0=Ausgabe, 1=Eingabe
D3 Port C High Nibble, 0=Ausgabe, 1=Eingabe
D2 Modus Gruppe B: 0=Modus 0, 1=Modus 1
D1 Port A: 0=Ausgabe, 1=Eingabe
D0 Port C Low Nibble, 0=Ausgabe, 1=Eingabe
Kapitel 6

Busanschluss und Adressverwaltung

6.1. Allgemeines

Die Aufgaben eines Busanschlussverfahrens sind:

• Vermeidung von Konflikt zwischen Bausteinen (Speicher–Speicher, Speicher–I/O, I/O–


I/O)

• Möglichst gute Ausnutzung des Adressraumes

Dabei wird in der Regel nach folgendem Grundschema vorgegangen:

• Ein Teil der Adressleitungen wird zur Bausteinauswahl benutzt, z.B. mit einem Adressde-
koder.

• Ein anderer Teil der Adressleitungen wird benutzt, um interne Adressen im Baustein
auszuwählen

• Die Adressen, unter denen interne Speicherplätze oder Register des Bausteines angespro-
chen werden, heißen der Adressraum des Bausteines.

• Die Systemadresse, unter der der Speicher-/Registerplatz mit der internen Adresse 0 an-
gesprochen wird, heißt Basisadresse des Bausteines

• Es kann sein, dass der Adressraum nicht voll ausgenutzt ist (meistens)

• Es können auch Adressleitungen frei bleiben

Wenn ein Baustein k Adresseingänge hat, kann er maximal 2k interne Speicherplätze besitzen.
Beispiele:

1. Ein 8255 (Programmierbarer I/O-Baustein) hat 4 interne Speicherplätze. Er braucht daher


2 Adressleitungen um die 22 internen Plätze zu adressieren, A0 und A1 .

2. Ein EEPROM mit einer Organisation von 4kx8Bit hat 12 Adressleitungen, um damit die
4096 internen Speicherplätze zu adressieren (A0 − A11 )

61
62 KAPITEL 6. BUSANSCHLUSS UND ADRESSVERWALTUNG

Abbildung 6.1: Allgemeines Schema zum Anschluss von Speicher- oder Ein-/Ausgabebausteinen an den
Systembus.

3. Ein Memory-Controller, der eine Speicherbank von 16MB (224 ) verwaltet, hat 24 Adres-
sleitungen (auch wenn intern mit Adressmultiplexing gearbeitet wird).

Allgemein gilt:

• n Adressleitungen auf dem Systembus, ausreichend zur Auswahl von maximal 2n Spei-
cherplätzen
• k Adresseingänge am Baustein, ausreichend zur Auswahl von maximal 2k internen Spei-
cherplätzen
• l Adressleitungen zur Bausteinauswahl, ausreichend zur Auswahl von maximal 2l Baustei-
nen

k+l ≤n

Das Adresswort sieht also dann folgendermassen aus:

Bausteinadresse, l Bit Interne Adresse, k Bit


Systemadresse, n Bit

Bei der Adressierung können folgende Probleme auftreten:

Freie Adressleitungen Freie Adressleitungen führen immer zu Mehrdeutigkeiten, da Unter-


schiede auf diesen freien Leitungen nicht ausgewertet werden. Es ergibt sich also, dass der
gleiche Baustein auf mehreren Adressen angesprochen werden kann (Spiegeladressen, Wrap
around). Im Extremfall kann ein einzelner Baustein den gesamten Adressraum belegen,
da unter jeder Adresse irgendein interner Platz angesprochen wird.
Direkte Benutzung von Adressleitungen zur Bausteinauswahl Hier existieren Adressen,
die mehrere Bausteine ansprechen, dies kann direkt zu Buskonflikten führen und ist zu ver-
meiden. man hat also verbotene Adressbereiche!
6.1. ALLGEMEINES 63

6.1.1. Beispiel: Freischaltung eines I/O-Bausteines mit einem Adressdekoder

Abbildung 6.2: Die Dekodierung eines I/O-Bausteines mit einem Vergleicher. Der Vergleicher arbeitet
als Adressdekoder auf den Adressbits A2 – A9 .

In diesem Beispiel ist die korrekte Adressierung eines I/O-Bausteins mit einem Vergleicher, der
als Adressdekoder arbeitet, beschrieben. (s.Abb.6.2)
Da der I/O-Baustein 2 Adresseingänge hat, besitzt er offenbar 4 interne Adressen (Register).
Bei korrekter Adressdekodierung belegt er auch im Systemadressraum genau 4 Adressen. Es
gibt insgesamt 10 Adressleitungen, davon werden 2 in den Baustein geführt und 8 auf den
Adressdekoder. Es ist also in obiger Formel:

l = 8; k = 2; n = 10

Das Adresswort ist also hier:

Abbildung 6.3: Das Adresswort zu der oben abgebildeten Schaltung mit Adressdekoder.

Um die belegten Adressen zu bestimmen, kann man sich anhand einer Tabelle überlegen,
bei welchen Bitmustern der Chip freigeschaltet wird und welche internen Adressen jeweils er-
reicht werden. Zu Freischaltung über CS müssen die Bitmuster an den Eingängen A und B
übereinstimmen. Aufgrund der Beschaltung an den B-Eingängen muss das Signalmuster an den
A-Eingängen also LHHLHHLL und damit das Bitmuster auf dem Adressbus 01101100 sein.

Adresse binär Adresse hex. Interne Adresse


01101100 00 1B0 Reg 0
01101100 01 1B1 Reg 1
01101100 10 1B2 Reg 2
01101100 11 1B3 Reg 3
sonst — —
64 KAPITEL 6. BUSANSCHLUSS UND ADRESSVERWALTUNG

Die Adresse 1B0h nennt man auch die Basisadresse des Bausteines. Oft möchte man in solchen
Schaltungen die Basisadresse flexibel halten, dann kann man den B-Eingang mit DIP-Schaltern
(Dual Inline Package, Miniaturschalter die auf der Platine eingelötet werden) oder mit program-
mierbaren Logikbausteinen ausrüsten. Im letzteren Fall kann das Betriebssystem beim booten
die I/O-Adressen vergeben, z.B. beim sog. Plug&Play der PC’s.

6.2. Die Trennung von Speicher und Ein-/Ausgabebausteinen

6.2.1. Memory Mapped I/O-Adressing (speicherbezogene E/A-Adressierung)

Ein Teil der Speicheradressen ist auf I/O-Bausteine geleitet, so dass diese im Adressraum des
Speichers erscheinen. Vorteil: Alle Adressierungsarten können auch für I/O-Bausteine ange-
wendet werden, z.B. Read-Modify-Write–Befehle. Nachteil: Der Adressraum für Speicher wird
verkleinert. Beispiele: Motorola 680X0, 6809, 6502

Abbildung 6.4: Der Adressraum bei Memory Mapped I/O.

6.2.2. Isolierte Adressierung

Über ein Steuersignal, das z.B. M EM/IO heißen kann, wird von der CPU mitgeteilt, ob ein Spei-
cher oder I/O-Baustein angesprochen werden soll. I/O- und Speicherbausteine haben getrennte
Adressräume, die Adressen dürfen überlappen, die Unterscheidung erfolgt über das Steuersi-
gnal. Vorteil: Volle Ausnutzung der Adressräume. Nachteil: Separate I/O-Befehle notwendig,
zusätzliches Steuersignal. Beispiele: intel 8080, 80x86, Zilog Z80

Abbildung 6.5: Für isolierte Adressierung wird eine zusätzliche Busleitung gebraucht.

Zusammenfassung: Busanschluss von Speicher- und Ein-/Ausgabebausteinen

Für Ein-/Ausgabebausteine gilt:


6.3. AUFGABEN 65

Abbildung 6.6: Der Adressraum bei isolierter Adressierung.

• Ein-/Ausgabebausteine haben in der Regel nur wenige interne Speicherplätze

• Ein-/Ausgabebausteine liegen nicht lückenlos sondern eher vereinzelt im Adressraum, sie


belegen im gesamten Adressraum nur wenige Adressen.

• Ein-/Ausgabebausteine werden relativ einfach dekodiert, es gibt keine besonderen Massnah-


men zur Geschwindigkeitssteigerung

Für Speicherbausteine gilt:

• Speicherbausteine haben viele interne Speicherplätze

• Es werden große zusammenhängende Bereiche gebraucht, u.U. viele gleiche Bausteine

• Man benutzt Adressdekoder, die in der Lage sind, Freigabesignale (Chip Select, Enable)
für viele Speicherchips zu erzeugen. Beispiel: 8205

• Die Adressdekoder sind oft in Speicherverwaltungsbausteine integriert, man unternimmt


große Anstrengungen zur Geschwindigkeitssteigerung

6.3. Aufgaben

1. Bestimmen Sie für das in Abb.6.7 dargestellte System

• welche und wie viele Adressen der Baustein im System belegt,


• das Adresswort,
• die Basisadresse.
66 KAPITEL 6. BUSANSCHLUSS UND ADRESSVERWALTUNG

Abbildung 6.7: I/O-Bausteines der mit einem Vergleicher freigeschaltet wird.


Kapitel 7

Einfache Mikroprozessoren

7.1. Grundbegriffe

7.1.1. Grundsätzlicher Ablauf eines Programms

Ein Maschinenbefehl wird im ausführbaren Code durch ein Bitmuster dargestellt. Das Bitmuster
kann je nach Befehl 1,2 oder mehr Bytes bzw. Worte umfassen. Ein ausführbares Programm
besteht aus einer Folge solcher Bitmuster: dem sog. Maschinencode , auch Operationcode
oder kurz Opcode . Bei der Programmausführung liegt der Maschinencode im Speicher. Die
Ausführung eines Befehls beginnt damit, dass der nächste Maschinencode aus dem Speicher
gelesen ( geholt“) wird, der sog. Befehlsholezyklus oder opcode fetch . Im Prozessor wird der

Maschinencode bitweise mit bekannten Mustern verglichen, um seine Bedeutung herauszufinden,
die sog. Dekodierung . Wenn der Opcode gültig war, wird der Befehl ausgeführt. Dazu kann
es notwendig sein, weitere Einheiten aus dem Maschinencode zu lesen, z.B. Direktoperanden zu
Befehlen. Das Einlesen aus dem Maschinencode wird durch einen speziellen Zeiger verwaltet,
der nach jedem Zugriff automatisch weitergerückt wird. Mit der vollständigen Abarbeitung des
Befehles ist der Befehlszyklus beendet.

Der nächste Befehlszyklus beginnt wieder mit einem Befehlsholezyklus und verläuft nach dem
gleichen Schema.

7.2. Interner Aufbau eines Mikroprozessors

7.2.1. Steuerwerk

Das Steuerwerk übernimmt die Ansteuerung und Koordinierung der übrigen Baugruppen des
Prozessors. Es führt auch die Dekodierung (Erkennung) der Opcodes durch. Ist ein gültiger
Befehl erkannt, so verfügt das Steuerwerk über die Algorithmen zu seiner Durchführung, wie
z.B. Lesen aus Speicher – Inkrementieren – Schreiben in Speicher. Bei CISC-Prozessoren sind
diese Abläufe in einem sogenannten Microcode-Speicher im Steuerwerk abgelegt.

Über das Businterface kontrolliert das Steuerwerk indirekt auch die Steuerleitungen und damit
die Vorgänge auf dem Systembus, z.B. Speicherzugriffe, I/O-Zugriffe, Unterbrechungen u.a.

67
68 KAPITEL 7. EINFACHE MIKROPROZESSOREN

Abbildung 7.1: Interner Aufbau eines Mikroprozessors

Abbildung 7.2: Steuerwerk eines einfachen Mikroprozessors. Der Mikrocode-Speicher deutet auf einen
CISC-Prozessors hin.
7.2. INTERNER AUFBAU EINES MIKROPROZESSORS 69

7.2.2. Operationswerk (Rechenwerk)

Zentraler Bestandteil des Operationswerkes ist die Arithmetical and Logical Unit, ALU (Arith-
metisch logische Einheit) Viele Prozessoren haben ein Hauptrechenregister, der sog. Accu-
mulator . Ausserdem existieren Operandenregister, in die temporäre Daten zur Weiterverar-
beitung in der ALU geladen werden. Hier werden die arithmetischen und bitweise logischen
Befehle ausgeführt. ALU’s unterscheiden sich hinsichtlich Bitbreite und Operationsbefehlssatz.
Typische arithmetische Operationen sind Inkrementieren und Dekrementieren, Addition und
Subtraktion, Multiplikation und Division, sowie bitweise Shift- und Rotationsbefehle. Typische
bitweise logische Operationen sind UND, ODER, exklusives ODER, Einerkomplement-Bildung,
Zweierkomplement-Bildung. Informationen über den Verlauf der letzten Operation werden im
Statusregister bitweise als sog. Flags abgelegt, z.B. Zeroflag, Carryflag, Overflowflag.

Abbildung 7.3: Operationswerk eines Mikroprozessors

7.2.3. Adresswerk

Hier werden aus dem Inhalt von Registern gültige Adressen berechnet. Gerade bei neueren Pro-
zessoren werden hier sehr variable Berechnungsmethoden angeboten. Beispiele sind Register-
indirekte Adressierung und Basis-Index-Adressierung. Z.B wird auf einem intel 80x86 bei fol-
gender Adressierung zur Laufzeit eine Berechnung durchgeführt:

MOV AX,[Feldanfang+BX+SI]

Prozessoren, die Multitasking unterstützen, verwalten hier auch geschützte Datenbereiche und
prüfen die Zugriffsberechtigung.

7.2.4. Registersatz

Ein Register ist eine Gruppe von Flipflops mit gemeinsamer Steuerung. Jedes Flipflop speichert
1 Bit. Alle Mikroprozessoren enthalten mehrere Register, die Breite ist in der Regel 8, 16, 32 oder
64 Bit (Flipflops). Es gibt Register, die vom Programm direkt angesprochen werden können, als
Operanden in Assemblerbefehlen. Diese nach außen sichtbaren Register bezeichnet man auch
” ”
als Registersatz . Daneben gibt es Register die vom Mikroprozessor intern benutzt werden.
Aufgrund der internen Verschaltung sind manche Register für bestimmte Zwecke vorgesehen,
die Spezialregister. Dagegen sind Universalregister sehr vielseitig verwendbar.
70 KAPITEL 7. EINFACHE MIKROPROZESSOREN

Abbildung 7.4: Prinzipieller Aufbau eines Registersatzes im Prozessor

Program Counter, PC (Programmzähler)

Der Program Counter ist ein Register, das immer auf den nächsten auszuführenden Befehl
verweist. Nach der Ausführung wird es vom Prozessor automatisch erhöht. Die Erhöhung
entspricht dem Umfang des gerade ausgeführten Befehls, typ. 1 – 4 Bytes. Ein Sprungbefehl
ändert den Inhalt des PC und schreibt die Adresse des Sprungzieles hinein. Andere Bezeichnung
Instruction Pointer, IP

Accumulator (Akkumulator, Accu)

Dies ist das Hauptrechenregister. Bei manchen Prozessoren ist für bestimmte arithmetische
Befehle die Benutzung des Accumulators vorgeschrieben oder vorteilhaft.

Stackpointer, SP

Der Stack ist ein Speicherbereich, der als LIFO-Speicher verwaltet wird. Der Stackpointer ist
das Register, das einen Zeiger auf den zuletzt in den Stack eingespeicherten Wert enthält. Ist
zum Beispiel der Stack in 16-Bit-Worten organisiert, wird beim Einschreiben bzw. Auslesen der
Stackpointer um 2 erhöht bzw. erniedrigt.

Statusregister, SR

Das Statusregister sind Statusinformationen bitweise abgelegt. Meistens hat jedes Bit seine
eigene Bedeutung, diese Bits heißen daher auch Flags. Es gibt zwei Gruppen von Flags:
7.3. BUSLEITUNGEN 71

• Flags, die vom Prozessor gesetzt werden, um Ergebnisse von logischen oder arithmeti-
schen Operationen anzuzeigen. Bsp.: Das Zeroflag zeigt an, dass das Ergebnis der letzten
Opeartion Null war.

• Flags, die vom Programm gesetzt werden und die Arbeitsweise des Prozessors steuern.
Bsp.: Das Interrupt Enable Flag steuert, ob Unterbrechungen durch den Prozessor zuge-
lassen werden.

Indexregister

Indexregister dienen als Adressierungsregister für Speicherzugriffe, also als Zeiger (lat. In-
dex=Zeiger). Mit Ihnen kann ein flexibler Zugriff auf Speicheradressen programmiert werden,
z.B. Strings, Arrays, Last in - first out, Ringpuffer u.ä.

7.3. Busleitungen

Die Busleitungen sind bei einfachen Prozessoren eingeteilt in Steuerleitungen (Steuerbus), Adres-
sleitungen (Adressbus) und Datenleitungen (Datenbus). Die Adressleitungen werden unidirek-
tional betrieben, der Prozessor arbeitet als Sender. Die Datenleitungen werden bidirektional
betrieben und die Steuerleitungen unidirektional, wobei teils der Prozessor sendet und teils der
Peripheriebaustein. Die Bustreiber sind schon in den Prozessorchip (s.Abb.7.5 integriert und so
braucht man erst externe Treiberbausteine, wenn eine gewisse Buslast überschritten ist.

Abbildung 7.5: Bei einfachen Prozessoren sind die Bustreiber in den Chip integriert.

7.4. Befehlsaufbau

Die Befehle kann man in folgende Gruppen unterteilen:

Transportbefehle Befehle mit denen Daten zwischen Speicherplätzen des Rechnersystems


transportiert werden, z.B. Speicher – Speicher, Register – Speicher, Ein-/Ausgabebaustein
– Register. Meistens wird dabei eine Kopie des Quelloperanden angelegt. Spezialgruppe:
Stackbefehle

Arithmetische Befehle Veränderung von Bitmustern, die als Zahlen interpretiert werden, mit
Rechenbefehlen, z.B. ADD.
72 KAPITEL 7. EINFACHE MIKROPROZESSOREN

Logische Befehle Veränderung von Bitmustern mit bitweise parallelen logischen Befehlen, wie
z.B. OR

Schiebe- und Rotationsbefehle Veränderung von Bitmustern durch Schiebe- oder Rotati-
onsbefehle

Sprungbefehle Sie verändern den Inhalt des Program Counter (PC) und veranlassen dadurch,
dass das Programm an einer anderen Stelle fortgesetzt wird.

Spezialbefehle Dienen z.B. zur Prozessorsteuerung. Bei Prozessoren mit Multitaskingun-


terstützung dürfen manche dieser Spezialbefehle nur mit Betriebssystemprivilegien aus-
geführt werden.

Die Befehle Ausführung des Befehles setzen sich aus bestimmten Grundmustern zusammen, wie.
z.B.

• Aus dem Speicher lesen (memory read); Spezialfall: Befehlseinholezyklus

• In den Speicher schreiben (memory write)

• Von Ein-/Ausgabegerät lesen (I/O-read)

• Auf Ein-/Ausgabegerät schreiben (I/O-write)

• Unterbrechungsbestätigung (interrupt acknoledge)

Diese Grundmuster finden sich bei CISC-Prozessoren als Programmstücke im Microcode wieder.
Die Länge der Befehle ist unterschiedlich, z.B. ein Byte oder zwei Byte. Zu jedem Befehl können
noch Operanden gehören, so dass zu einem Befehl insgesamt auch vier ode mehr Byte gehören
können.

7.5. Zeitraster bei der Befehlsausführung

Abbildung 7.6: Takt-, Maschinen- und Befehlszyklen

Die kleinste Zeiteinheit bei der Ausführung eines Befehls ist der Taktzyklus . Ein Taktzyklus
ist eine Periode des Rechtecksgnals, das vom Taktgeber erzeugt wird. Ein Maschinenzyklus
ist ein Buszugriff oder die Abarbeitung eines internen Teilschrittes; er besteht aus mehreren
Taktzyklen. Ein Befehlszyklus umfasst alles, was zur Ausführung eines Maschinen- bzw. As-
semblerbefehles notwendig ist. Er enthält mindestens einen Buszugriff, nämlich das Einlesen des
7.6. FALLBEISPIEL: MOTOROLA 6800 73

Befehles (Opcode Fetch), als ersten Maschinenzyklus. In der Regel sind weitere Maschinenzyklen
notwendig für weitere Buszugriffe oder interne Sequenzen.

Die Dauer eines Taktzyklus Tc hängt mit der Arbeitsfrequenz fA — wie bei allen zyklischen
Signalen — folgendermassen zusammen:

1
Tc =
fA

Jeder Befehl beansprucht eine bestimmte Anzahl von Taktzyklen. Aus der Arbeitsfrequenz und
dieser Anzahl kann dann die absolute Ausführungszeit eines Befehles berechnet werden. Beispiel:

Wie groß ist die Ausführungszeit eines Befehles mit 11 Taktzyklen auf einem System mit 2.5
MHz Arbeitsfrequenz?

Der Taktzyklus dauert Tc = 1/fA = 1/2500000Hz = 400ns. Ein Befehl mit 11 Taktzyklen
dauert also 400ns ∗ 11 = 4400ns = 4.4µs

7.6. Fallbeispiel: Motorola 6800

7.6.1. Eckdaten

Der Motorola 6800 (kurz: M6800) war der erste Prozessor der 68XX-Familie. Er wurde 1974/75
eingeführt und ist der Urgroßvater“ vieler Prozessoren und Controller, die heute noch aktuell

sind. Hier kurz seine wichtigsten Daten ([7], [6]):

• 8 Bit-Verarbeitungsbreite

• 16 Adressleitungen, d.h. 64 kB Adressraum

• Ein-Ausgabe mit speicherbezogenen Adressen (Memory mapped I/O)

• Ein maskierbarer und ein nicht maskierbarer Interrupteingang (IRQ,NMI)

• Flags für Übertrag (Carry, C), Überlauf (Overflow, O), Null (Zero, Z), Negativ (N), Un-
terbrechung (Interrupt, I) und Halbübertrag (Half Carry, H)

• Adressierungsarten Unmittelbar, direkt, erweitert und indiziert

• Systemtakt von 100 kHz bis 2 MHz

• 40-poliges Gehäuse (nicht alle Pins angeschlossen)

• 5V Versorgungsspannung
74 KAPITEL 7. EINFACHE MIKROPROZESSOREN

Abbildung 7.7: Die Anschlussleitungen des 6800 nach Gruppen. Der M6800 ist ein Prozessor ohne
gemultiplexte Leitungen,alle Leitungen haben nur eine Funktion.

7.6.2. Anschlussleitungen

Kurze Beschreibung der Anschlussleitungen:

A0 – A15 , Adressleitungen,Ausgänge, Adressierung des Speichers und der I/O-Bausteine im


gleichen Adressraum von 64 kB

D0-D7 Datenleitungen, Ein-/Ausgänge

R/W Read/Write (Schreiben/Lesen), Ausgang der anzeigt ob ein schreibender oder lesender
Buszugriff erfolgt

IRQ Interrupt Request (Unterbrechungsanforderung) An diesem Eingang kann ein externes


Gerät eine Unterbrechung auslösen. Kann gesperrt werden durch ein Flag (I-Bit im Flag-
Register)

NMI Non maskable Interrupt, Nicht maskierbarer Interrupt-Eingang

HALT versetzt den Mikroprozessor vorübergehend in den Haltzustand: Der aktuelle aus-
geführte Befehl wird beendet, danach Wartezustand; ermöglicht Hardware unterstützte
Debugger

RES RESET, Zurücksetzen in Initialisierungzustand; nach RESET liest der 6800 eine Adresse
von den Speicherplätzen FFFEh und FFFFh. Er beginnt mit der Programmausführung
an dieser Adresse.

VMA Valid Memory Adress (Gültige Speicheradresse) Ausgang um die Speicherbausteine nur
bei gültigen Adressen zu aktivieren
7.6. FALLBEISPIEL: MOTOROLA 6800 75

BA Bus Available, zeigt an, das die Busleitungen für einen anderen Baustein verfügbar sind,
weil der Prozessor sie in den hochohmigen Zustand versetzt. Bsp.:HALT-Zustand

DBE Data Bus Enable (Datenbus aktivieren) Eingang um die Datenbustreiber der Busschnitt-
stelle von aussen zur steuern.

TSC Tristate Control, versetzt den Adressbus und R/W in den Tristate-Zustand

φ1 , φ2 Takteingänge

+5V Pluspol der Versorgungsspannung

GND Ground (Masse), Minuspol der Versorgungsspannung

7.6.3. Interner Aufbau

Der Registersatz des M6800 ist einfach gehalten: Für arithmetische Operationen werden die
8 Bit-Akkumulatoren A und B benutzt. Alle Register, die zur Adressierung des Speichers be-
nutzt werden sind wegen der 16 Adressleitungen 16 Bit breit: Ein Stackpointer-Register (SP) ,
unterstützt das Anlegen eines Stacks (Stapelspeicher), ein Indexregister unterstützt die flexible
Index-Adressierung des Speichers, der Program Counter (PC) sichert den Programmfluss.

Abbildung 7.8: Die Register des 6800

Der M6800 ist ein einfaches Beispiel für die Realisierung eines Prozessors mit den Bestandteilen
Businterface, Steuerwerk, Operationswerk, Registersatz und Adresswerk. In Abb.7.9 ist Abb.7.1
entsprechend konkretisiert.

7.6.4. Befehlssatz

Alle erlaubten Befehle werden durch sog. Mnemonics dargestellt, Abkürzungen aus drei bis vier
Buchstaben, die die Aktion andeuten. Bsp.: RTS für Return from Subroutine“. Der M6800

kennt vier Gruppen von von Befehlen:
76 KAPITEL 7. EINFACHE MIKROPROZESSOREN

Abbildung 7.9: Der interne Aufbau des M6800 nach Funktionsblöcken.

Akkumulator- und Speicheroperationen Die größte der vier Gruppen. Als Transportbe-
fehle stehen Load und Store für beide Akkumulatoren zur Verfügung. Es gibt mehrere
varianten von Rotations- und Shift-Befehlen für beide Akkumulatoren. An arithmetischen
Operationen gibt es Inkrement und Dekrement, Addition und Subtraktion, Negieren. Auf
den Stack wirken Push und Pull. An bitweise logischen Operationen stehen UND, ODER,
Exclusive ODER und Komplementieren zur Verfügung.
Beispiele:
LDA, Load Akkumlator A, Transport vom Speicher in den Akku
STB, Store Akkumulator B, Transport vom Akku in den Speicher
ROLA, Rotate Left Accumulator A, Bitweises Rotieren des Inhalts von Accu A
LSRB, Logical shift right Accumulator B,Bitweises schieben des Inhalts von Accu B
ABA, Add Accu B to Accu A, Addiere Akku B zu Akku A
SUB, Subtract from Accu B, Subtrahiere von Accu B
EORB, Logisches Exklusives Oder auf Accu B
NEGA, Negate Accu A, Negieren (Zweierkomplement) von Accu A,

Sprung und Verzweigungsbefehle (Programmflusssteuerung) Es gibt viele bedingte Sprung-


befehle, deren Mnemonics beginnen mit B: BXX (Branch Conditional). Dazu kommt ein
unbedingter Sprungbefehl sowie Unterprogrammaufruf (BSR) und Rücksprung (RTS).
Beispiele:
JMP, Jump, Unbedingter Sprungbefehl
BEQ, Branch if equal, verzweige wenn gleich

Indexregister- und Stackpointer-befehle Der dritte Buchstabe des Mnemonic ist entweder
ein S (Stackpointer) oder X (Indexregister).
Beispiele: LDS, Load Stackpointer, INX, Increment Indexregister

Flagbefehle Befehle zum Setzen und Löschen von Flags.


Beispiele: CLC: Clear Carry Flag, SEI: Set Interrupt Flag
7.7. FALLBEISPIEL: 6502 77

Der M6800 kennt vier Adressierungsarten . Wir zeigen am Beispiel von LDA (Load Accumulator
A) alle vier Adressierungsarten:

LDA A #25 unmittelbare Adressierung: der Wert 25 wird in den Akku A geladen

LDA A $3F direkte Adressierung: Der Inhalt der Speicherzelle 3Fh wird in den Akku A geladen

LDA A $4A00 erweiterte Adressierung: Der Inhalt der Speicherzelle 4A00h wird in den Akku A
geladen

LDA A 10,X Index-Adressierung: Der Inhalt der Speicherzelle, deren Adresse durch den Inhalt
des Indexregisters+10 gegeben ist, wird in den Akku A geladen.

7.6.5. Programmbeispiele

Ein Programm wird zunächst in Assemblersprache geschrieben und dann von einem Assembler
in binären Maschinencode übersetzt. Dieser wird vom Prozessor erkannt und ausgeführt. Im
folgenden Beispiel wird 9+32-8 berechnet und auf die Variable Summe”´ gespeichert. Es ist

sowohl der Maschinencode als auch der Assemblercode mit Kommentar angegeben:

Adresse im Masch.code, Name für Assemblerbefehl Kommentar


Prog.speich. Operanden Speicherplatz
ORG 000Ah ;Origin:
;Programm wird bei 000Ah abgelegt
000A 0001 Summe RMB 1 ;Reserve Memory Byte
000B 86 09 LDA A #9 ;9 in Accu A laden
000D 8B 20 ADD A #32 ;32 zu Accu A addieren
000F 80 08 SUB A #8 ;8 von Accu A subtrahieren
0011 97 0A STA A Summe ;Ergebnis in Variable
;Summe speichern
END
Das folgende Programm löscht 32 Speicherplätze ab Adresse 500h.

LDX #500h Lade Indexregister mit 500h


L1 CLR 0,X Indexadressierung: Löschen von Speicherplatz (500+0)
INX Increment Indexregister
CPX #520h Compare Index -- 520h
BNE L1 Branch if not equal to L1
END Ende Übersetzung

Aus dem Motorola 6800 wurden die Prozessoren 6802 und 6809 sowie die Microcontroller 6801,
6805 und 6811 abgeleitet.

7.7. Fallbeispiel: 6502

Der 6502 besitzt ebenfalls 5 Register und ein Statusregister, der Registersatz unterscheidet sich
aber vom M6800. Der 6502 hat nur einen Akkumulator ( Akku A)und zwei 8-Bit Indexregister
78 KAPITEL 7. EINFACHE MIKROPROZESSOREN

Abbildung 7.10: Die Register des 6502

(X,Y) für die indizierte Adressierung. Der Stackpointer ist nur 8 Bit breit, der Stack kann also
nicht größer als 256 Byte sein. Der Program Counter (PC) ist das einzige 16-Bit-Register.

Der 6502 ist bei Berechnungen etwas umständlicher als der M6800, da er nur einen Akku hat.
Dank seiner zwei Indexregister bietet er aber mehr Möglichkeiten bei der Adressierung. Er
führte damals schon ein einfaches Prefetching durch: Während der Dekodierung wird bereits der
nächste Befehl aus dem Speicher geladen. Das machte ihn schneller als die Konkurrenz. Der 6502
wird in abgewandelter Form heute in Embeddded Systems eingesetzt, d.h. als Mikrocontroller
mit Spezialbaugruppen on Chip. Dort dient er beispielsweise zur Instrumentensteuerung in
modernen Automobilen.
7.8. FALLBEISPIEL Z80 79

7.8. Fallbeispiel Z80

7.8.1. Eckdaten

Der Z80 ist ein 8-Bit-Mikroprozessor der seit 1976 bis heute von der Fa. Zilog gefertigt wird. er
ist einfach aufgebaut und relativ leicht zu verstehen. Seine Hauptmerkmale sind:

• 8 Datenleitungen

• 16 Adressleitungen, d.h. 64 kB Adressraum

• Ein Akkumulator, 6 Universalregister, 6 Wechselregister und Spezialregister

• Arbeitsfrequenzen 2.5, 4 und 6 MHz

• Chip 5*8 mm im 40-poligen DIL-Gehäuse

• 30000 Transistoren

• Alle Ein-/Ausgänge sind TTL-kompatibel

• Alle Ein-/Ausgänge haben eine eindeutige Bedeutung, kein Multiplexing

• Versorgungsspannung 5V

7.8.2. Anschlussleitungen

Abbildung 7.11: Anschlussleitungen des Z80 nach Gruppen

Kurze Beschreibung der Anschlussleitungen:

A0 – A15 , Adressleitungen,Ausgänge, Adressierung des Speichers und der I/O-Bausteine im


gleichen Adressraum von 64 kB

D0-D7 Datenleitungen, Ein-/Ausgänge


80 KAPITEL 7. EINFACHE MIKROPROZESSOREN

RD, WR Read, Write (Schreiben/Lesen), Ausgänge die anzeigen ob ein schreibender oder
lesender Buszugriff erfolgt

MREQ, IORQ Memory Request, IO Request, signalisieren Speicherzugriff und Ein-/Ausgabe-


Zugriff

INT Interrupt (Unterbrechungsanforderung) An diesem Eingang kann ein externes Gerät eine
Unterbrechung auslösen. Kann gesperrt werden durch ein Flag (I-Bit im Flag-Register)

NMI Non maskable Interrupt, Nicht maskierbarer Interrupt-Eingang

WAIT Warten, versetzt den Mikroprozessor vorübergehend in den Wartezustand. Damit kann
z.B. die Speichersteuerung die CPU veranlassen, auf langsame Speicher zu warten.

HALT zeigt den Haltzustand des Prozessors an

RESET Zurücksetzen in Initialisierungzustand; nach RESET liest der Z80 den ersten Befehl
an der Adresse 0000h und beginnt die Programmausführung.

M1 Machine Cycle 1, Maschinenzyklus 1, zeigt innerhalb eines Befehlszyklus die Ausführung


des Maschinenzyklus 1 (Opcode Fetch) an

RFSH Refresh, Anzeige einer Speicherauffrischung

BUSREQ Bus Request, Eingang, an dem ein anderen Busmaster die Kontrolle über den Bus
anfordern kann.

BUSACK Bus Acknoledge, Ausgang an dem der Z80 die Übergabe der Buskontrolle an einen
anderen Busmaster bestätigt

CLK Clock, Takteingang

+5V Pluspol der Versorgungsspannung

GND Ground (Masse), Minuspol der Versorgungsspannung

Viele Signale haben hier die gleiche Funktion, wie beim M6800. In einigen Punkten unterscheidet
sich der Z80 allerdings:

Der Z80 unterstützt isolierte IO-Adressierung, er gibt separate Signale aus, an denen ein Spei-
cherzugriff (MREQ) oder ein IO-Zugriff (IORQ) angezeigt wird.

Der Z80 unterstützt den Refresh dynamischer RAM-Bausteine, er hat ein internes Register
(R) um die Zeilennummer für den Refresh zu verwalten und er zeigt über ein eigenes Signal
den Refresh an. Der Z80 liefert nach in jedem Befehlszyklus nach dem M1-Zyklus eine gültige
Refresh-Adresse auf den unteren 7 Bit des Adressbusses.

Der Z80 braucht nur ein Taktsignal (CLK).


7.8. FALLBEISPIEL Z80 81

7.8.3. Interner Aufbau des Z80

Im Unterschied zum M6800 verfügt der Z80 über wesentlich mehr Register, neben dem Akkumu-
lator hat er die Allzweckregister B,C,D,E,H,L und dazu die Wechselregister A’,F’,B’,C’,D’,E’,H’,L’.
Akku, Flags und Universalregister können durch Exchange-Befehle mit diesen Wechselregistern
ausgetauscht werden (A ↔ A0 , F ↔ F 0 . . .). Die speziellen Adressregister IX (Index X),IY (In-
dex Y), SP (Stackpointer), PC (Program Counter), I (Interrupt) und R (Refresh) unterstützen
bei der Adressierung des Speichers.

Abbildung 7.12: Die Register des Z80 nach Gruppen


Kapitel 8

Aufbau einfacher Systeme

Zum Aufbau einfacher Systeme brauchen wir im wesentlichen folgende Komponenten:

• Mikroprozessor

• Speicher

• I/O-Bausteine

• Taktgenerator

• Einschaltverzögerung

Die beiden letzten wollen wir hier kurz vorstellen

8.1. Hilfsschaltungen

8.1.1. Taktgenerator

Ein Taktgenerator ist eine Schaltung, die ein Signal erzeugt, das unaufhörlich und regelmäßig
von High auf Low und wieder auf High wechselt, ein sogenanntes Rechtecksignal oder auch Takt.
Dieses Signal wird zur Ansteuerung von Mikroprozessorsystemen gebraucht (s.Abschn.7.5). Zur
Erzeugung gibt es viele Schaltungsmöglichkeiten, die sog. bistabilen Kippstufen (Multivibrato-
ren). In Abb.8.1 wird eine eine Schaltung mit Invertern vorgestellt.

8.1.2. Einschaltverzögerung

Eine Einschaltverzögerung sorgt dafür, dass das RESET-Signal erst deutlich nach dem Einschal-
ten der Betriebsspannung deaktiviert wird. Dadurch können sich die internen Schaltkreise des
Mikroprozessors vor dem Bootsvorgang stabilisieren. Die Verzögerung wird durch die Auflade-
zeit eines Kondensators in einem RC-Glied erreicht und gesteuert. Die Signalflanken werden
meist noch durch Schmitt-Trigger sauber und steil geformt.

82
8.1. HILFSSCHALTUNGEN 83

Abbildung 8.1: Ein Taktgenerator kann aus zwei Invertern aufgebaut werden. Na jedem Inverter ist
das Ausgangssignal an den Eingang zurückgeführt, dadurch ist die Schaltung prinzipiell instabil. Die
Kondensatoren verlangsamen das Umkippen. Der Quarz stabilisiert durch sein Resonanzverhalten die
Schwingfrequenz.

Abbildung 8.2: Typische Einschaltverzögerung

Abbildung 8.3: Ein Z80-Minimalsystem.


84 KAPITEL 8. AUFBAU EINFACHER SYSTEME

8.1.3. Ein Z80-Minimalsystem

In Abb.8.3 ist ein kleines funktionsfähiges System mit einem Z80-Prozessor dargestellt. Ein
solches System könnte z.B. für eine einfache Anlagensteuerung benutzt werden. Wir finden darin
die am Kapitelanfang aufgezählten Komponenten wieder. Zum Design folgende Anmerkungen:

1. Das System arbeitet ohne RAM, das Programm steht in einem 2k-ROM.

2. Die Verbindung zur Aussenwelt wird über zwei Ports eines speziellen Bausteines herge-
stellt: Z80-PIA (Parallel Input/Output). Dieser besitzt 4 interne Register die über die
Adressleitungen A0, A1 angesteuert werden und z.B. über die Adressen 00h – 03h ange-
sprochen werden können.

3. Auf Adressdekoder kann verzichtet werden, die beiden Bausteine belegen jeweils den ge-
samten Adressraum.

4. Viele Anschlüsse des Z80 wurden nicht benutzt: WR, RFSH, INT, NMI, A11 – A15,
BUSREQ, BUSACK, WAIT, HALT

8.2. Testfragen
1. Das unten abgedruckte M6800-Programm löscht 8 Speicherplätze ab Adresse E0h. Ergänzen
Sie den fehlenden Befehl!

LDX #8 Lade Indexregister mit 8


L1 CLR 0DFh,X Indexadressierung: Löschen von Speicherplatz (8+DFh)
??? Welcher Befehl muss hier stehen?
BNE L1 Branch if not equal to L1
END Ende Übersetzung

2. Was bewirkt das unten abgedruckte M6800-Programm?

LDA B #FF Lade Akku B mit 255


LDX #10 Lade Indexregister mit 10
L1 STA B 0,X Inhalt von Accu B speichern nach (0+X)
INX Inkrementieren Indexreg.
DEC B Akku B dekrementieren
BNE L1 Branch if not equal to L1
END Ende Übersetzung

3. Was ist der Sinn einer Einschaltverzögerung?

4. Warum kann in dem Z80-Minimalsystem von Abb.8.3 auf einen Adressdekoder verzichtet
werden?

5. Wie viele Spiegelblöcke gibt es zu den Adressen des Z80-PIA-Bausteines in der Schaltung
von Abb.8.3?
Kapitel 9

Besondere Betriebsarten

9.1. Direct Memory Acces (DMA)


Unter Direct Memory Access (DMA) versteht man den Speicherzugriff durch einen Baustein,
der speziell auf schnelle Datenübertragung optimiert ist, z.B. beim Lesen von einer Festplatte.
DMA ist ein Beispiel für die Aktivität eines zweiten Busmasters, hier eines DMA-Controllers.
Wir wollen DMA am Beispiel des Z80 betrachten:

Abbildung 9.1: Ein DMA-Zyklus am Beispiel eines Z80-System

1. Über eine spezielle Leitung fordert der DMA-Controller vom Hauptprozessor am Eingang
BUSREQ (Bus Request, Busanforderung) die Kontrolle über den Bus an.
2. Der Hauptprozessor prüft das Signal bei ansteigender Taktflanke und erkennt die Busan-
forderung
3. Der Hauptprozessor beendet noch den laufenden Maschinentakt und bringt die Adress-
Daten- und Steuerleitungen in einen hochohmigen Zustand; Ausnahme: BUSACK (Bus
Acknoledge, Busfreigabe) Diese Leitung wird aktiviert, um dem DMA-Controller die Bus-
freigabe zu signalisieren.

85
86 KAPITEL 9. BESONDERE BETRIEBSARTEN

4. Der DMA-Controller führt seine Aufgabe durch und steuert dabei die Systemleitungen
nach Bedarf.

5. Der DMA-Controller ist fertig und nimmt das Anforderungssignal BUSREQ zurück.

6. Der Hauptprozessor erkennt die Rücknahme der Busanforderung, übernimmt wieder die
Kontrolle über den Bus und setzt sein Programm fort

Probleme können entstehen, wenn Systeme mit Bustreibern aufgebaut sind; die Bustreiber
müssen in diesem Fall einbezogen und durch das BUSACK-Signal auch in den hochohmigen
Zustand versetzt werden. DMA-Controller sind komplexe Bausteine, die meist vor Aktivierung
vom Betriebssytem programmiert werden.

9.2. Interrupts

9.2.1. Warum Interrupts?

Interrupts (Unterbrechungen) dienen dazu Service-Anforderungen externer Bausteine oder Geräte


an die CPU zu übermitteln. Nach diesen Anforderungen muss die CPU eine Service-Routine für
den betreffenden Baustein ausführen. Häufig entstehen Service-Anforderungen, weil der betref-
fende Baustein in seinem internen Puffer Daten für die CPU bereithält. Die Service-Routine holt
dann die Daten von dem Baustein ab, d.h. sie liest die Daten aus dem Puffer (I/O-Zugriff) und
überträgt sie in den Arbeitsspeicher. Wird damit zu lange gewartet, gehen Daten verloren, weil
der Puffer nur eine begrenzte Kapazität hat (manchmal nur 1 Byte!) Eine Service-Anforderung
muss also schnell bedient werden. Beispiele für solche Anforderungen sind:

• Eine Taste auf der Tastatur wurde gedrückt

• An der seriellen Schnittstelle ist ein Zeichen eingetroffen, z.B. weil die Maus bewegt wurde

• Der Festplattencontroller sendet (zuvor angeforderte) Daten

• Auf der Schnittstellenkarte treffen Zeichen aus dem Netzwerk ein

• Der Zeitgeberbaustein meldet, dass die Systemzeit aktualisiert werden muss

• Der Drucker zeigt an, dass das Papier ausgegangen ist

• Der Drucker hat alles gedruckt was im internen Pufferspeicher ist, und ist bereit neue
Daten aufzunehmen

Alle diese Anforderungen sind nicht vorherzusehen. Man müsste also in einer umfassenden
Abfrageschleife regelmäßig und in kurzen Abständen alle diese Bausteine und Geräte abfragen
das sog. Polling. Dies würde einen ständig aktivierten Systemtask erfordern, der viel Rechenzeit
verbraucht.

Zum Vergleich: Man stelle sich vor

• Das Telefon hätte nur eine Lampe, und man müßte regelmäßig daraufschauen, um zu
festzustellen, ob gerade jemand anruft
9.2. INTERRUPTS 87

• Der Wohnungstür hätte keine Klingel, man müßte regelmäßig aufmachen, um nachzu-
schauen ob jemand da ist

• Der Toaster hätte weder Zeitschaltung noch Sensor, man müßte häufig nachsehen, ob der
Toast schon dunkel wird

Besser ist das Interruptkonzept:

Über einen speziellen Eingang teilt jedes Gerät selbst mit, das es eine Service-Anforderung hat.
Daraufhin unterbricht die CPU ihr gerade ausgeführtes Programmstück und führt eine Interrupt-
Service-Routine (ISR) aus. Abfrageschleifen sind nicht notwendig

Vorteile: Kein Zeitverlust durch Abfrageschleifen, Sofortige Reaktion auf Ereignisse. Das In-
terruptkonzept erhöht die Leistungsfähigkeit der Prozessoren erheblich, daher wird es praktisch
von allen Prozessoren unterstützt (auch von 4-Bit Mikrocontrollern).

Die Funktion der Interrupt-Service-Routine liegt frei in der Hand des Programmierers (Kein
Handlungsbedarf: Sofortiger Rücksprungbefehl). ISR’s müssen kurz d.h schnell programmiert
sein, damit nachfolgende Interrupts schnell genug bearbeitet werden.

9.2.2. Problemstellen des Interruptkonzepts

• Wie wird ein Interrupt ausgelöst, Schaltungstechnik?

• Wie wird die richtige ISR gefunden?

• Wie wird der reibungslose Rücksprung ins unterbrochene Programm bewerkstelligt (Regi-
sterinhalte!) ?

• Erkennung und Bestätigung der Interrupt-Anforderung

• Was ist bei gleichzeitiger Interrupt-Anforderung mehrerer Bausteine, die sog. Priorisie-
rung

• Situationen können erfordern, dass kurzzeitig keine Interrupts bearbeitet werden

9.2.3. Interrupt Service Routinen (ISR)

Eine ISR fügt sich in den Programmablauf ähnlich wie ein Unterprogramm ein, aber mit dem
wichtigen Unterschied, dass ein Interrupt jederzeit erfolgen kann. Man kann also im unter-
brochenen Programm keinerlei Vorbereitungen treffen (z.B. Registerinhalte speichern). Die
störungsfreie Fortsetzung des unterbrochenen Programmstückes muss aber unter allen Umständen
gewährleistet sein. Nach dem Interrupt müssen also alle Register (einschl. Flags) wieder so sein,
wie vor dem Interrupt.

Typischer Ablauf eines Interrupts am Beispiel eines vektorisierten Interrupts am intel 8086:

1. Alle Flags werden bei Stattgabe eines Interrupts durch den Prozessor auf dem Stack ab-
gelegt.

2. Der aktuelle Programmzeiger wird auf den Stack gerettet (Rücksprungadresse)


88 KAPITEL 9. BESONDERE BETRIEBSARTEN

3. Interrupt- und Trapflag werden gelöscht (kein weiterer Interrupt zugelassen)

4. Interruptnummer wird vom Datenbus entgegengenommen, daraus wird die Adresse der
ISR berechnet (hier: mal 4)

5. ISR ausführen, diese muss mit IRET enden.

6. Alle Register, die innerhalb der ISR verändert werden, müssen gerettet und vor IRET
wiederhergestellt werden

7. Bei Ausführung von IRET werden Programmzeiger und Flags vom Stack zurückgeholt

8. Programmzeiger mit Rücksprungadresse laden, unterbrochenes Programm fortsetzen

Systeme mit Interrupt-Controller

In modernen Rechner wird mit einem Interrupt-Controller gearbeitet. Dieser ist speziell bei
vektorisierten Interrupteingängen vorteilhaft und kann folgende Aufgaben übernehmen:

• Verarbeitung der Interruptanforderungen einzelner Peripheriebausteine/Geräte

• Maskierung (Interruptunterdrückung) einzelner Peripheriebausteine/Geräte

• Priorisierung, evtl. komfortabel programmierbar

• Verwaltung und Information des Systemzustands: Anliegende und in Verarbeitung befind-


liche Interrupts

• Erzeugung des Vektors (Nummernbitmuster) für den Datenbus

• Abwicklung des Interrupt-Acknoledge-Zyklus mit der CPU (Interruptanforderung und -


bestätigung)

Abb.9.2 ist ein typische Interruptcontroller dargestellt (angelehnt an den 8259A des PC) Im
Interrupt Mask Register (IMR) ist verzeichnet, welche Interrupt-Eingänge freigeschaltet sind
(1=frei). Im Interrupt Pending Register (IPR) ist festgehalten, welche Interruptquellen gera-
de einen Interrupt anfordern. Im In Service Register (ISR) ist eingetragen, welcher Interrupt
gerade bearbeitet wird. Im Prioritätenregister kann die Priorität der Interrupts einprogram-
miert werden. Alle Informationen werden im Prioritäten-Schaltnetz (PSN) verarbeitet, hier
wird entschieden, welcher Interrupt zum Zuge kommt.

Im dargestellten Beispiel fordern die Interruptquellen 0, 1 und 7 gleichzeitig einen Interrupt an.
Im Maskenregister ist IQ1 maskiert, es werden daher nur IQ0 und IQ7 in IPR übernommen.
Interrupt 2 ist noch in Bearbeitung, das PSN muss also entscheiden. Auf Grund der einpro-
grammierten Prioritäten wird die Reihenfolge sein: 0,2,7. Die Bearbeitung von Int. 2 wird also
unterbrochen. Es wird bei der CPU sofort ein Int. angefordert und im folgenden Interrupt-
Acknoledge-Zyklus die Nummer 0 auf dem Datenbus übermittelt. Danach wird die ISR von
Int.2 fortgesetzt.
9.3. TESTFRAGEN 89

Abbildung 9.2: Ein typischer Interruptcontroller.

9.3. Testfragen

1. Warum müssen Service-Anforderungen schnell bedient werden?

2. Betrachten Sie den Betriebszustand am Interruptcontroller in Abb.9.3. Welchen Inhalt


hat das IPR, welche Interrupts werden als Folge dieses Zustandes bearbeitet, in welcher
Reihenfolge geschieht dies?
90 KAPITEL 9. BESONDERE BETRIEBSARTEN

Abbildung 9.3: Ein Betriebszustand an einem Interruptcontroller.


Kapitel 10

Der Intel 8086 - Urvater der


PC-Prozessoren

Der intel8086 wurde 1978 auf den Markt gebracht. Er wurde sehr bekannt, weil die Fa. IBM
einen Personal Computer (persönlicher Computer, PC) auf den Markt brachte und mit diesem
Prozessor ausrüstete. Der IBM-PC war das erste Modell der heutzutage so weit verbreiteten
PC’s.

10.1. Eckdaten

• 16-Bit-Register

• 20-Bit-Adressbus, Adressraum 1MB

• Byte-, Wortzugriff möglich (8/16-Bit)

• 14 Register zu je 16 Bit (mit Segmentreg. und Flags)

• Spezialbefehle für Blockoperationen ( Stringbefehle“)



• Arithmetikbefehle für Zahlen mit und ohne Vorzeichen, auch Multiplikation und Division

• Herstellung in NMOS und CMOS (HMOS), Arbeitsfrequenzen 5,8 und 10 MHz

• Aufgebaut aus 28000 Transistoren

• Zwei Betriebsarten: Minimum- und Maximum-Modus

• Zusammensetzung von Adressen durch die Inhalte zweier Register, dadurch Segmentierung
des Speichers

• Adress- und Datenleitungen sind gemultiplext

• Alle Steuerleitungen sind gemultiplext oder haben zumindest im Minimum- und Maxi-
mumbetriebsart verschiedene Bedeutung

• Code von Intel-8085-Prozessoren kann mit Programmen in 8086-Code verwandelt werden.

• 6-Byte Prefetch-Queue zur Verbesserung der Rechenleistung

91
92 KAPITEL 10. DER INTEL 8086 - URVATER DER PC-PROZESSOREN

10.2. Einige charakteristische Merkmale des 8086

10.2.1. Register

Der intel 8086 hat weit mehr Register als z.B. der Vorgänger 8085. Wie bei diesem sind aber die
Register nicht gleichberechtigt, sondern haben alle irgendwelche Spezialaufgaben. Alle Register
haben hier eine Breite von 16 Bit, der 8086 ist also ein 16-Bit-Prozessor“. Eine Besonderheit

ist, dass die Universalregister AX,BX,CX und DX auch in Hälften zu 8 Bit ansprechbar sind.
Bsp.: AX setzt sich zusammen aus AH (High Byte) und AL (Low Byte). Diese Registerhälften
können völlig unabhängig programmiert werden (z.B. mov ah,al), was z.B. im Betriebssystem
DOS (PC-DOS, MS-DOS) ausgiebig genutzt wird.

Die Segmentregister sind mehr dem Adresswerk als dem Registerwerk zuzurechnen, sie sind nur
für die Bildung der physikalischen Adresse gedacht und sind umständlich in der Handhabung.

Abbildung 10.1: Die Register des intel 8086

10.2.2. Adressbildung

Der intel 8086 hat 16 Bit-Register und einen 20 Bit Adressbus. Eine Adresse kann also nicht
in einem Register gespeichert werden oder aus einem Register genommen werden. Adressen
werden aus zwei 16 Bit-Registern zusammengesetzt, und zwar nach folgendem Schema:

• Der sog. Segmentanteil kommt aus einem speziellen Register, einem der Segmentregister
(CS, DS, SS, ES).

• Der sog. Offsetanteil wird aus bestimmten Registern (BX,BP,DI,SI) und/oder Konstanten
zur Laufzeit berechnet.
10.2. EINIGE CHARAKTERISTISCHE MERKMALE DES 8086 93

• Die physikalische Adresse (Bitmuster auf dem Adressbus) wird vom 8086 intern berechnet
nach der Formel

P hysikalischeAdresse = 16 ∗ Segmentanteil + Of f setanteil

Da die Multiplikation mit 16 durch einen 4-Bit-Shift realisiert ist, kann dies grafisch wie in
Abb.10.2.2 dargestellt werden.

Abbildung 10.2: Adressbildung aus Segment und Offset beim intel 8086

Damit ist es intel gelungen, zur Abspeicherung einer 20-Bit-Adresse 32 Bit zu verbrauchen!
Wichtiger ist aber, dass alle Adressen aus zwei Anteilen bestehen. Die Konsequenzen dieser
Architektur sind weitreichend und haben sich stark auf die Software der Rechner mit intel 8086-
CPU ausgewirkt:

• Die Berechnung von Segment und Offset aus einer physikalischen Adresse ist mehrdeutig

• Segmente können überlappen

• Der Bereich, den man adressieren kann, ohne ein Segmentregister zu verändern, nennt
man ein Segment ; ein Segment ist 64 kB groß

• Der Abstand eines Speicherplatzes relativ zum Segmentanfang ist der Offset.

• Ein Segmentanfang liegt immer auf einem Viefachen von 16

• Man braucht zwei Register oder Speicherworte, d.h. 4 Byte, um eine Adresse abzuspeichern
(32 belegte Bit um eine 20-Bit-Adresse aufzunehmen!).

• Man unterscheidet zwischen logischer Adresse in der Darstellung Segment:Offset und physi-
kalischer Adresse (20-Bit-Zahl). Die Physikalische Adresse ergibt sich nach obigem Schema
aus der logischen Adresse.

• Man braucht zwei Register um den Program Counter darzustellen: CS und IP, der nächste
auszuführende Befehl wird geladen von CS:IP

• Man kann Zeiger innerhalb eines Segmentes ( Near Pointer , nur Offset) und Zeiger zwi-
schen Segmenten ( Far Pointer , Segment und Offset) definieren, dies führt zu sog. Spei-
chermodellen . Programme, die mehr als 64 kB Daten oder Code haben, müssen zur
Laufzeit Segmentregister verändern (z.B. Speichermodelle LARGE, HUGE usw.)
94 KAPITEL 10. DER INTEL 8086 - URVATER DER PC-PROZESSOREN

• Bei verschiedenen Zugriffsarten (Code, Daten, Stack) werden verschiedene Segmentregister


benutzt

Beispiele:

1. Segmentanfang und Ende: Anfang des Segmentes: A200:0000, d.h. physikalische Adresse
A2000h
Ende des Segmentes: A200:FFFF, d.h. physikalische Adresse B1FFFh

2. Mehrdeutigkeit:
log. Adresse B800:0012 ergibt physikalische Adresse B8012h
log. Adresse B000:8012 ergibt physikalische Adresse B8012h
log. Adresse B401:4002 ergibt physikalische Adresse B8012h
usw.
3. Überlapp:
Anfang von Segment 1: B800:0000 = B8000 phys.Adresse; Ende bei B800:FFFF d.h. phys.
Adresse C7FFFh
Anfang von Segment 2: C000:0000 = C0000 phys.Adresse; Ende bei C000:FFFF d.h. phys.
Adresse CFFFFh
Es ergibt sich ein Überlapp von C0000h – C7FFFh, also über 32kB.

Für die Bildung des Offsets stellt die sog. Indirekte Adressierung eine recht flexible Konstruktion
dar. Sie kann durch folgende Formel beschrieben werden:

Of f set = Basisregister + Indexregister + Konstante

Die Basisregister sind BX und BP, Indexregister sind DI und SI. Die Konstante kann eine 8 Bit
oder eine 16 Bit-Konstante sein, sie wird auch Displacement genannt.

Abbildung 10.3: Schema der indirekten Adressierung beim intel 8086

10.2.3. Reservierte Speicherplätze

Nach dem Reset haben die Register folgenden Inhalt: DS=SS=ES=0000h, Flags=0002h, CS=F000h,
IP=FFF0h. Der erste Befehl wird also geladen von F0000h+FFF0h = FFFF0 phys.Adr. Dort
10.2. EINIGE CHARAKTERISTISCHE MERKMALE DES 8086 95

Inhalt Adressen
Interruptvektor für Int. Nr. 255 003FC – 003FF
. .
. .
. .
Interruptvektor für Int. Nr. 2 00008 – 0000B
Interruptvektor für Int. Nr. 1 00004 – 00007
Interruptvektor für Int. Nr. 0 00000 – 00003

Tabelle 10.1: Die Interrupt-Vektoren-Tabelle beim intel8086

muss ein Sprungbefehl stehen, der in das Urladeprogramm (Bootstrap) verzweigt. Das Urlade-
programm lädt dann von einem Laufwerk das eigentliche Betriebssystem.

Ein großer Block reservierter Speicherplätze ist die Interrupt-Vektoren-Tabelle von 00000h –
003FF (1024 Byte). Dort liegen die Interruptvektoren (Einsprungadressen) für die 256 möglichen
Interrupts. Jeder Interruptvektor besteht aus Segment und Offset belegt also 4 Byte. Daraus
ergibt sich die Gesamtlänge von 256*4 = 1024 Byte.

10.2.4. Interrupt-Struktur und -möglichkeiten

Es gibt zwei Interrupt-Eingänge:


1) Pin 18, INTR, vektorisierter maskierbarer (Int.-Flag) Interrupt-Eingang
2) Pin 17 NMI, Non maskable Interrupt

NMI ist für schwerwiegende Störungen gedacht z.B. fehlerhafte Speicherchips, erkennbar als
Speicherparitätsfehler. Andere Verwendung: der Failsafe-Timer erzeugt regelmäßig einen NMI
um den Rechner im Notfall wieder unter Kontrolle zu bringen, wenn alle Int. gesperrt sind.

Über INTR wird die Routinearbeit“ abgewickelt, d.h. die Interrupt-Anforderungen eines

normalen Betriebs. Maskierbar durch das Interrupt-Flag (Assemblerbefehle CLI/STI). Intel
hat für diesen Bereich einen eigenen Interrupt-Controller entwickelt, den programmierbaren
Interrupt-Controller PIC 8259A.

Ablauf eines durch ein Peripherie-Gerät ausgelösten Interrupts ( Hardware-Interrupt“)


1. Gerät fordert Interrupt am Programmierbaren Interrupt-Controller (PIC 8259A) an.

2. PIC aktiviert Eingang INTR des Prozessors.

3. Wenn Int.-Flag gesetzt, bestätigt der Prozessor die Anforderung mit zwei aufeinanderfol-
genden Impulsen am Ausgang INTA (Interrupt Acknoledge), gleichzeitig Deaktivierung
der Busleitungen

4. Der Prozessor liest vom Datenbus eine 8-Bit-Zahl, die Nummer des Interrupts, die vom
PIC dort aufgelegt wurde. Der Interrupt vermerkt den anliegenden Interrupt nun als in

Bearbeitung”´.

5. Der Prozessor multipliziert die Interrupt-Nummer mit vier. Das Ergebnis wird als Adresse
benutzt, um unter dieser Adresse in der Interrupt-Vektoren Tabelle die Einsprungadresse
(Interrupt-Vektor, 4 Byte) der zugehörigen Service-Routine auszulesen. Bsp. Int.5; es wird
96 KAPITEL 10. DER INTEL 8086 - URVATER DER PC-PROZESSOREN

an Adresse 20d ein Interrupt-Vektor aus der Tabelle gelesen, dies ist die Einsprungadresse
der Serviceroutine zu Int.5 .

6. Der Softwareteil des Interrupts beginnt:

• Abspeichern der Flags auf dem Stack


• Abspeichern von CS und IP auf den Stack
• Trapflag und Interruptflag löschen
• Interruptvektor nach CS:IP laden, Programm setzt in der Interrupt-Service-Routine
(ISR) fort
• ISR sendet End-of-Interrupt-Steuerwort (EOI)an den Interrupt-Controller
• ISR endet mit IRET-Befehl: Rücksprungadresse und Flags vom Stack zurückholen,
Wiederherstellung der Flags (auch TF und IF) und Rücksprung in unterbrochenes
Programm

7. Der PIC empfängt das EOI und löscht das ISR-Bit dieses Interrupts, er gilt nun als abge-
arbeitet

Das System der Interrupt-Nummern ermöglicht 256 ISR’s, der Interrupt-Controller verarbeitet
aber nur 8 oder 16 Int.-Signale. Dazu kommen Exceptions , Interrupts die in Ausnahmesitua-
tionen durch den Prozessor selbst ausgelöst werden.

Die restlichen Nummern werden genutzt für Software-Interrupts , Service-Programme, die durch
Softwarebefehl gestartet werden (und auch nicht anders gestartet werden können). Der zug.
Software-Befehl heisst INT ¡Nummer¿ in diesem Fall wird in die obige Sequenz bei 5 einge-
sprungen, das Senden von EOI entfällt.

Das System der Software-Interrupts wird nur über Nummern verwaltet. Damit ist es besonders
für die Betriebssystemanbindung geeignet, jedem Softwareinterrupt (and. Prozessoren: Traps)
ist dann eine Gruppe von BS-Diensten zugeordnet. Man bedenke z.B.:

1. Ein Anwender kann BS-Aufrufe vornehmen, ohne dass er Adressen der Interrupt-Service-
Routinen kennen muss.

2. Ein BS-Update wird vorgenommen, indem die Service-Routinen erweitert werden. Die
neuen Anfangsadressen stehen in der Interrupt-Vektoren-Tabelle, die Nummern bleiben
aber. Die Programme laufen also ohne Veränderung auch unter dem neuen BS-Release.

3. Ein Anwender kann eigene Interrupt-Service-Routinen (=BS-Erweiterungen) aktivieren.


Er muss nur den Code im Speicher ablegen und die Anfangsadresse in der IVT eintragen.

So sind z.B. PC-DOS (MS-DOS) und PC-BIOS mithilfe von Software-Interrupts aufgebaut. Die
folgende Tabelle zeigt ein Beispiel, das allerdings nicht mehr der ersten Generation von PC’s
entstammt. Die genaue Belegung der Interrupts ist teilweise vom Typ des Rechners bzw. der
Betriebssystemversion abhängig.
10.2. EINIGE CHARAKTERISTISCHE MERKMALE DES 8086 97

Nr. Bedeutung Gruppe


0 Division durch Null Exc.
1 Einzelschrittbetrieb Exc.
2 NMI Exc.
3 Breakpoint Exc.
4 Overflowauswertung mit INTO Exc.
5 Bound / Print Screen Exc./BIOS
6 ungültiger Opcode Exc.
7 kein Coprozessor vorhanden Exc.
8 IRQ0 Timerbaustein, 18.2 mal pro sec HW
9 IRQ1 Tastatur HW
Ah IRQ2 kaskadierter 8259 IRQ8–IRQ15 HW
Bh IRQ3 COM2 HW
Ch IRQ4 COM1 HW
Dh IRQ5 LPT2 HW
Eh IRQ6 Diskettenlaufwerk HW
Fh IRQ7 LPT1 HW
10h Videotreiber BIOS
11h Ermittlung der Systemkonfiguration BIOS
12h Speichergröße ermitteln BIOS
. . BIOS
14h Serielle Schnittstelle BIOS
15h Extended Memory–Zusatzfunktionen BIOS
16h Tastatur BIOS
17h Drucker BIOS
. . BIOS
1Ah Systemuhr BIOS
. . BIOS
1Fh Adresse der Grafikzeichensatztabelle BIOS
20h Programmende DOS
21h DOS–Funktionsaufruf, Funktionsnummer in AH übergeben DOS
. . DOS
27h Programm beenden und resident halten (TSR) DOS
. . DOS
2Fh CD–Rom DOS
. . DOS
33h Maus DOS
60h für eigene Anwendungen User
. . User
67h für eigene Anwendungen User
70h IRQ8 Echtzeituhr HW
. . HW
75h IRQ13 Coprozessor HW
77h IRQ15 reserviert HW

Im folgenden Beispiel ist die Verwendung eines Betriebssystemaufrufs in Assembler gezeigt:


Aufruf des Videotreibers (Int 10h, BIOS) zur Bestimmung der Cursor-Position.

mov ah,03 ; Funktion 3: Lese Cursorposition


mov bh,0 ; Bildschirmseite 0
98 KAPITEL 10. DER INTEL 8086 - URVATER DER PC-PROZESSOREN

int 10h ; Aufruf des Software-Interrupts Nr.10h (Videotreiber


mov [Reihe],dh ; Verwertung der Ergebnisse
mov [Spalte],dl ; Reihen- und Spaltenpos. werden im Speicher abgelegt

Der INT 21h (DOS–Funktionsaufruf) ist die umfangreichste Gruppe und gleichzeitig für den
Assembler–Programmierer der wichtigste Interrupt. Die Funktionen des INT 21h unterteilt
man in die Gruppen Tastaturfunktionen, Dateiverwaltung, Verzeichnisverwaltung, Laufwerks-
verwaltung, Zeichenein–/ausgabe, Speicherverwaltung, Programmverwaltung, Gerätesteuerung,
u.a. Unter DOS gibt es freie Interrupts, d.h. dass der Satz von Betriebssystem–Aufrufen durch
eigene Routinen erweitert werden kann, die dann aus jeder beliebigen Programmiersprache eben-
so leicht wie Betriebssystemaufrufe benutzt werden können.
1

10.2.5. Die Prefetch Queue (Befehlswarteschlange)

Die Prefetch Queue ist ein prozessorinterner Zwischenspeicher für die eingelesenen Befehle. Sie
gehört zur Busschnittstelle (Bei Intel: Bus Interface Unit, BIU) und arbeitet nach dem First
In-First Out-Prinzip (FIFO). Die Busschnittstelle arbeitet selbständig und asynchron zum Steu-
erwerk und läd schon die nächstfolgenden Befehle in die Prefetch Queue, auch wenn der Prozessor
intern noch mit der Bearbeitung eines Befehles beschäftigt ist, z.B. in der ALU. Wenn dann der
nächste Befehl an der Reihe ist, liegt er schon in der Prefetch Queue, d.h. schon im Inneren
des Prozessors, und kann von dort viel schneller in den Befehlsdekoder geladen werden. Man
erzielt also einen Geschwindigkeitsgewinn, und das ist tatsächlich der einzige Zweck der Prefetch
Queue. Dieser geht allerdings wieder verloren, wenn im Programm ein Sprung ausgeführt wird
und die Prefetch Queue komplett neu geladen werden muss. 2

Beim Intel8086 hat die Prefetch Queue eine Größe von 6 Byte und wird wortweise nachgeladen,
sobald zwei Byte frei sind.

10.2.6. Der Byte-organisierte Speicher am 16-Bit-Bus - Ausrichtung

Der Intel8086 hat zwar einen 16-Bit-Datenbus, unterstützt aber auch 8-Bit-Speicherzugriffe.
Dazu wird häufig ein Byte-organisierter Speicher verwendet und der Datenbus geteilt. So sind
also Speicherplätze mit gerader Adresse über die unteren 8 Bit erreichbar und Adressen mit un-
gerader Adresse über die oberen. Um den Zugriff zu steuern, wird einerseits das niederwertigste
Adressbit A0 sowie andererseits eine Steuerleitung namens BHE (Bus High Enable) benutzt.

Wenn beides aktiviert ist, erfolgt ein 16-Bit-Zugriff auf eine geraden und die nachfolgende un-
gerade Adresse. Man kann also in einem Buszyklus auf ein ganzes Wort zugreifen, wenn es an
einer geraden Adresse beginnt. Beginnt ein Wort an einer ungeraden Adresse, sind zwei Zugriffe
notwendig, die jeweils ein Byte verarbeiten. Dies wird zwar vom Prozessor automatisch erledigt,
kostet aber wertvolle Zeit. Die 8086-Assembler und -Compiler verfügen daher meist über eine
1
Die Interrupts 0 – 1fh waren laut Hersteller Intel reserviert und sollten nicht benutzt werden. Daran hat sich
aber IBM nicht gehalten, und hat z.B. die Betriebssystemroutine Print Screen“ auf Int 5 gelegt. Als dann später

die Exception BOUND“ (Bereichsgrenzenüberprüfung) eingeführt wurde und ebenfalls Int 5 auslöste, kam es zu

Konflikten!
2
Die Fortsetzung dieser Idee führt dann zu solch ausgetüftelten Prozessorfeatures wie Pipelines und Sprung-
vorhersagen
10.2. EINIGE CHARAKTERISTISCHE MERKMALE DES 8086 99

Direktive, die 16-Bit-Dateneinheiten gerade Anfangsadressen legen, auch wenn dann ein Teil der
Speicherplätze frei bleibt: Die sog. Ausrichtung . Man opfert also Speicherplatz zugunsten
eines Geschwindigkeitsgewinnes. 3

10.2.7. Buscontroller

An den Anschlussstiften 24–31 werden im Minimumsbetrieb Steuersignale für die Busse aus-
gegeben. Im Maximumsbetrieb wird ein Teil dieser Pins für andere Signale gebraucht. Ein
Grund dafür ist der mathematische Koprozessor 8087, der im Maximumbetrieb angeschlossen
werden kann. Dieser hat keine eigene Adressierungseinheit, sondern arbeitet zur Adressierung
von Speicherplätzen mit dem Hauptprozessor 8086 zusammen. Dieser muss dem Koprozessor
daher den Zustand der Prefetch Queue mitteilen und tut dies über die Pins 24, 25 (Queue Sta-
tus0,Queue Status1). Die Pins 30 und 31 werden für eine mögl. Busabgabe gebraucht, z.B. an
einen DMA-Controller.
Da also nicht mehr genug Pins für Bussteuerungssignale zur Verfügung stehen geht man hier
einen anderen Weg: Der 8086 zeigt einfach seinen momentanen Betriebszustand mit den Status-
signalen S0 , S1 , S2 (Pins 26 — 28) an und ein externer Baustein erzeugt dann die Steuersignale
in korrekter zeitlicher Abstimmung. Intel hat dazu den Buscontroller 8288 entwickelt.

S2 S1 S0 Zustand des Prozessors 8288-Signal


0 0 0 Interrupt-Annahme INTA
0 0 1 I/O-Port lesen IORC
0 1 0 I/O-Port schreiben IOWC
0 1 1 Haltzustand
1 0 0 Code lesen (Prefetch) MRDC
1 0 1 Speicher lesen MRDC
1 1 0 Speicher schreiben MWTC
1 1 1 passiv

10.2.8. Probleme bei Interrupt-Service-Routinen

Am 8086 bestehen Zeiger aus zwei Anteilen. Daraus entsteht eine Reihe von speziellen Problemen
bei Interrupt-Service-Routinen.
Beispiel 1: Umsetzen des Stackpointers

mov sp,[stackpointer2] ; unterbrechbar


mov ss,[stacksegment2]

Das Problem ist, das diese Befehlsfolge durch einen Interrupt unterbrochen werden könnte. Dann
ist also das SP-Register schon umgesetzt, das SS-Register noch nicht. Der aus SS:SP berechnete
phys. Adresse des Stackpointers ist also ungültig. Wenn die Interrupt-Service-Routine also den
Stack benutzt (was sie normalerweise tut) überschreibt sie unter Umständen fremde Daten, der
Rechner kann sogar abstürzen.
Um das zu vermeiden, muss man die Reihenfolge der beiden Befehle umstellen, der 8086 sperrt
nämlich nach dem Laden eines Segmentregisters für einen Befehl alle Interrupts, und zwar genau
aus dem geschilderten Grund.
3
Bei den 32-Bit-Nachfolgern gibt es dann die Doppelwortausrichtung
100 KAPITEL 10. DER INTEL 8086 - URVATER DER PC-PROZESSOREN

mov ss,[stacksegment2] ; nicht unterbrechbar


mov sp,[stackpointer2]

Ein ähnliches Problem entsteht beim Umsetzen von Interruptvektoren. Hier kann der Prozessor
aber nicht erkennen um was es geht. Der Programmierer muss daher per Befehl während der
Umsetzung alle Interrupts maskieren (sperren).

Beispiel 2: Umsetzung eines Interrupt-Vektors

mov es, 0 ;Interrupt-Vektoren-Tabelle adressieren


mov bx, 20 ; Interrupt Nr.5
cli Clear Interrupt-Flag, Interrupts maskieren (sperren)
mov es:[bx],IVektorOffset ; Interruptvektor überschreiben
mov es:[bx+2],IVektorSegment
sti ; Set Interrupt Enable Flag, Interrrupts freigeben

Beispiel 3: Befehl mit Präfix

mov ax, cs:[bx]

Auf Maschinenspracheebene wird dieser Befehl in zwei Befehle umgesetzt:

SEG cs ; Codesegment benutzen


mov ax,[bx] ; MOVE-Befehl

Ein Interrupt zwischen den beiden Befehlen würde zu einem Fehler führen, aber auch hier sperrt
der Prozessor alle Interrupts nach dem Segment-Präfix-Befehl.

Allgemein entstehen immer dann kritische Programmabschnitte, wenn eine Interrupt-Service-


Routine auf Strukturen zugreift, die mit mehr als einem Wort dargestellt werden. Ein weiteres
Beispiel ist ein 32-Bit-Zähler. Hier muss man sicherstellen, dass nicht zwischen Inkrementieren
des Low-Words und Eintragen des Übertrags im High Word die ISR auf den Zähler zugreift, da
er in diesem Zustand einen falschen Wert darstellt!

10.3. Der Intel 8088

Der Intel 8088 wurde etwas später auf den Markt gebracht als der i8086. Im Gegensatz zum 8086
hat er nur einen 8-Bit-Datenbus und eine 4 Byte Prefetch Queue. Er muss also jeden Wortzugriff
als Folge von zwei Byte-Zugriffen ausführen und ist dadurch deutlich langsamer. Warum brachte
man ihn auf den Markt? Der Grund ist, dass man den Aufbau von preiswerten Motherboards
ermöglichen wollte. Damals waren 8-Bit -Treiberbausteine wesentlich verbreiteter und billiger
zu haben als 16-Bit-Bausteine. Ein 8088-Board war also langsamer konnte aber wesentlich
billiger angeboten werden. Dies war der Anfang einer Reihe abgespeckter“ Prozessorvarianten,

mit denen Intel immer wieder um das Low Cost-Marktsegment gekämpft hat (8088, 80386SX,
80486SX, Celeron, ...).
10.4. AUFGABEN 101

10.4. Aufgaben

1. Berechnen Sie für die folgenden logischen Adressen auf einem i8086-System jeweils die
physikalische Adresse!
4230:8040
4B00:0240
FF0A:A100

2. In einem i8086-System beginnen zwei Segmente an den Adressen B800 und C400. Überlappen
die Segmente, wenn ja, drücken Sie die Überlappung in kB und in % aus!
3. Stacksegmentregister und Stackpointerregister eines i8086 haben den Inhalt SS=6A00,
SP=0100. Auf welchen physikalischen Adressen wird in der folgenden Befehlssequenz CX
abgespeichert?

push ax
push bx
push cx

4. Auf welchem Speicherplatz steht der erste Befehl, der bei einem i8086 nach dem booten
ausgeführt wird, welche Art von Speicher findet man dort?

5. Wo steht die Adresse der Service Routine zu Interrupt Nr.6?

6. Wie kann die Prefetch Queue die Performance des i8086 verbessern?

7. Was ist eine Wortausrichtung, warum führt man sie manchmal durch?

8. Wozu benutzt der 8086 Adress Latches, wozu einen Buscontroller?


Kapitel 11

Der Aufbau von Maschinencode

11.1. Allgemeines

Der Prozessor versteht keine Assemblerbefehle (und natürlich erst recht keine Hochsprachen-
Befehle) sondern verarbeitet nur sog. Maschinencode . Dieser besteht aus einer Folge von
Maschinenbefehlen, die wiederum aus einem oder mehreren Bytes oder Worten bestehen. Darin
sind die Befehle an den Prozessor binär codiert, d.h. in einer Folge von Nullen und Einsen
ausgedrückt. Maschinenbefehle werden zur Platzersparnis meist hexadezimal dargestellt. Für
das Auge eines Laien ergeben sie keinen Sinn, sie sind nicht lesbar“.

Beispiel: 47 BA 6A 23 B6 FF F6 56 0A D1 E9 C7 81 00 02 34 12

Wenn man weiß, für welchen Prozessor ein Maschinencode geschrieben wurde und den richtigen
Startpunkt kennt, kann man ihn mit einem sog. Disassembler in Assemblercode zurückverwandeln.
Die meisten Debugger enthalten einen Disassembler. Der Prozessor liest den den hier gezeigten
Maschinencode und verarbeitet ihn Byte für Byte.

Maschinenbefehle bestehen aus verschiedenen Bestandteilen:

Operationscode (Op-Code oder Opcode) die eigentlichen Befehle: Bitmuster, die dem
Prozessor genau die auszuführende Aktion beschreiben. (Was soll gemacht werden) Bei-
spiele:

• Lade einen Direktwert in den Akkumulator


• Addiere Register B zu Register A
• Verzweige zu Unterprogramm unter Adresse XY

Konstanten Konstanten die zu dem Op-Code gehören und mit denen in diesem Befehl gear-
beitet wird. Diese Konstanten können sein: Direktwerte, Speicheradressen, I/O-Adressen,
relative Adressen Beispiele:

• Direktwert 0
• Adresse 45B0h
• relative Sprungweite -6

102
11.2. FALLSTUDIE: INTEL 8086-MASCHINENCODE 103

Operationscodes können verschieden lang sein, durch die Variable Zahl von Konstanten kann
die Länge des gesamten Maschinenbefehls weiter variieren. In der obigen Beispiel-Sequenz kann
man also zunächst nicht erkennen welche Anteile Opcodes sind und welche Anteile Konstanten
sind, wie z.B. Adressen und Direktoperanden. Man kann noch nicht einmal erkennen wie viele
Maschinenbefehle die Sequenz überhaupt enthält.

11.2. Fallstudie: Intel 8086-Maschinencode


11.2.1. Standardschema: mod- und r/m-Feld, Steuerbits

Der Code ist prinzipiell nach folgendem Schema aufgebaut:

Präfix Opcode und Operandenspezifikation Displacement Daten

Ein Präfix ist eine Zusatzangabe, die dem Befehl vorangestellt ist. Der 8086 kennt zwei Präfixe:
Segment Override und Wiederholungspräfix. Beispiele:

MOV AX, CS:[BX] ; Befehl mit Segment Override Präfix CS


REP MOVSW ; Befehl mit Wiederholungspräfix REP

Ein Displacement ist eine relative Verschiebung in einer Datenstruktur oder einem Segment.
Beispiele:

MOV AX, [BX+128]; Befehl mit Ein-Byte-Displacement (128)


ADD CX, [SI+4096]
; Befehl mit Zwei-Byte-Displacement (4096)

Direktoperanden sind unmittelbar und fest in den Befehl codierte Daten:

MOV Al, 0 ; Befehl mit Ein-Byte-Direktoperand (0)


SUB CX, 2FFh ; Befehl mit Zwei-Byte-Direktoperand (2FFh)

Das komplizierteste sind die Operandenspezifikationen, sie sind mit dem eigentlichen Opcode
zusammengefügt zu ein oder zwei Bytes, die die Aktion des Prozessors steuern. Die Operanden-
spezifikationen bestehen aus drei Anteilen: Den Steuerbits, dem mod-Feld (Operandenmodus)
und dem r/m-Feld (Register/Momory)

Steuerbits
d=1 Transfer zum Register
d=0 Transfer vom Register
w=1 Wortbefehl
w=0 Bytebefehl
z=1 Auswertung des Zeroflags im Stringbefehl
z=0 keine Auswertung des Zeroflags im Stringbefehl
s=1 Nur bei w=1: Operand ist ein unmittelbar folgendes Datenbyte, das
vorzeichenrichtig auf 16 Bit erweitert wird
s=0 Nur bei w=1: Operand ist ein unmittelbar folgendes Datenwort
v=1 Bei Shift- und Rotationsbefehlen: Zähler in Register CL
v=0 Zähler = 1
x ohne Bedeutung
104 KAPITEL 11. DER AUFBAU VON MASCHINENCODE

mod–Feld: Operandenmodus Speicher/Register


mod=00 r/m-Feld beschreibt Speicheroperand, kein Displacement
mod=01 r/m-Feld beschreibt Speicheroperand, ein Byte Displacement: Low Byte
mod=10 r/m-Feld beschreibt Speicheroperand, zwei Byte Displ.: High Byte, Low Byte
mod=11 r/m-Feld beschreibt Registeroperand

r/m–Feld, Bedeutung wenn Speicheroperand


Wert Effektive Adresse
000 [BX+SI+Displacement]
001 [BX+DI+Displacement]
010 [BP+SI+Displacement]
011 [BP+DI+Displacement]
100 [SI+Displacement]
101 [DI+Displacement]
110 [BP+Displacement]
111 [BX+Displacement]

r/m–Feld, Bedeutung wenn Registeroperand


( reg-Feld )
Wert 16 Bit (w=1) 8 Bit (w=0)
000 AX AL
001 CX CL
010 DX DL
011 BX BL
100 SP AH
101 BP CH
110 SI DH
111 DI BH

Die folgenden Beispiele verdeutlichen den Umgang mit diesen Feldern.

1) Der INC-Befehl für ein Wortregister

Der Hersteller gibt für den INC-Befehl (Inkrementieren) für ein Wortregister folgende Konstruk-
tionsvorschrift:

Bit 76543 210


Inhalt 01000 reg

Der Befehl erzeugt also nur ein Byte Maschinencode, das auf den letzten drei Bit durch den
Registeroperanden bestimmt wird. Nehmen wir als konkretes Beispiel:

INC CX

da das Register CX ist muss reg=001 sein. Der Maschinencode ist also 0100 0001, in der
gewohnten hexadezimalen Schreibweise also 41.
11.2. FALLSTUDIE: INTEL 8086-MASCHINENCODE 105

2) Der NOT-Befehl

Der Hersteller gibt für den NOT-Befehl (Bitweise Invertieren) folgende Konstruktionsvorschrift:

Bit 76543210 76 543 210


Inhalt 1111011w mod 010 r/m

Der Befehl erzeugt also zwei Byte Maschinencode, die zum Teil durch die Operanden bestimmt
werden. Nehmen wir als konkretes Beispiel:

NOT AL

Hier liegt ein Bytebefehl vor, also ist w=0. Da der Operand ein Registeroperand ist, muss mod=11
sein und für das Register AL ergibt sich r/m=000. Der Maschinencode ist also 1111 0110 1101 0000,
in der gewohnten hexadezimalen Schreibweise also F6 D0. Dagegen ergibt sich bei

NOT WORD PTR[BX+DI+1234]

w=1, da es ein Wortbefehl ist,mod=10 da ein Zwei-Byte-Displacement vorliegt und r/m=001


da die Speicheradressierung über BX+DI+Displacement erfolgt. Man erhält also den Code
1111 0111 1001 0001, hexadezimal F7 91. Daran wird das Displacement 1234 angefügt, und
zwar in intels Little-Endian-Format (Lowest Byte first), so dass sich vier Byte Maschinencode
ergeben: F7 91 34 12.

3) Der SHR-Befehl

Der Hersteller gibt für SHR-Befehl (Shift Right) folgende Konstruktionsvorschrift:

Bit 76543210 76 543 210


Inhalt 110100vw mod 101 r/m

Nehmen wir gleich ein konkretes Beispiel:

SHR BX,CL

w=1, da Wortbefehl, mod=11, da Registeroperand, r/m=011, da Register BX und v=1, da Zähler


in CL. Der Maschinencode ist also 1101 0011 1110 1011, hex. D3 EB.

4) Der MOV-Befehl, Direktwert in Register

Konstruktionsvorschrift:
Bit 7654 3 210 76543210 76543210
Inhalt 1011 w reg Daten Daten falls w=1

Der Befehl erzeugt also 2 Byte Maschinencode für einen Bytebefehl und drei Byte für einen
Wortbefehl. Beispiel:
106 KAPITEL 11. DER AUFBAU VON MASCHINENCODE

MOV CH,100

w=0, da Bytebefehl, r/m=101, da Register CH. Erzeugter Opcode: 1011 0101, hex. B5. Mit dem
angehängten Operanden ergibt sich als Maschinencode B5 64.

Beispiel:

MOV DI,03FFh

w=1, da Wortbefehl, r/m=111, da Register DI. Erzeugter Opcode: 1011 1111, hex. BF. Mit dem
angehängten Operanden ergibt sich als Maschinencode BF FF 03.

5) Der XCHG-Befehl für Austausch zwischen Wort-Register und AX-Register

Bit 76543 210


Konstruktionsvorschrift:
Inhalt 10010 reg

Wir betrachten den Befehl:

XCHG AX,AX

Da das mit AX auszutauschende Register ebenfalls AX ist muss reg=000 sein. Der Maschinen-
code ist also 1001 0000, in der gewohnten hexadezimalen Schreibweise also 90h. Der Opcode
90h stellt also einen Befehl dar, der nichts verändert, auch kein Flag. Er ist nützlich für Warte-
schleifen. Opcode 90h wird von den meisten Assemblern auch durch das Mnemonic NOP erzeugt:
No Operation.

11.2.2. Optimierungen

Bei der Erzeugung von Maschinencode nach dem Standardschema werden bei weitem nicht
alle möglichen Opcodes ausgenutzt. Man hat daher die Möglichkeit bestimmte häufig benutzte
Befehle so zu codieren, dass sie kürzeren Maschinencode erzeugen und somit schneller ausgeführt
werden.

Einsparung der mod-r/m-Felder für Registeroperanden

Während z.B. das Inkrementieren eines Speicheroperanden zwei Byte Maschinencode erzeugt,
wird das Inkrementieren eines Wortregisters in einem Byte codiert:

FE 07 INC BYTE PTR [BX] ; 2 Byte


43 INC BX ; 1 Byte
11.3. AUFGABEN 107

Verkürzte Codierung bei Benutzung des AX-Registers (Akku)

81 C3 00 02 ADD BX,200h ; 4 Byte


05 00 02 ADD AX,200h ; 3 Byte

Ein-Byte-Befehl für INT 3 (Breakpoint)

Die meisten Debugger realisieren einen Breakpoint, indem sie den betreffenden Befehl im Code
durch einen INT 3 (Breakpoint) ersetzen. Die zugehörige Service-Routine führt dann in den
Debugger. Es ist daher nützlich, wenn INT 3 durch einen Ein-Byte-Maschinenbefehl dargestellt
wird, während normalerweise Software-Interrupts Zwei-Byte-Befehle sind.

CD 02 INT 2 ; Int 2: 2 Byte


CC INT 3 ; Int 3: 1 Byte

11.3. Aufgaben
1. Übersetzen Sie folgende Assembler-Befehle in Maschinencode:

INC DI
MOV DX,236A
MOV DH,FF
NOT BYTE PTR [BP+10]
SHR CX,1

2. Welche Aktion bewirkt der Maschinenbefehl 93h?


Kapitel 12

Die Unterstützung von


Multitasking-Betriebssystemen
durch Mikroprozessoren

12.1. Anforderungen bei Multitasking


Bei einfachen Betriebssystemen kann immer nur ein Programm gleichzeitig ablaufen. Dieses
kann zwar durch die Interrupt-Handler unterbrochen werden, diese enthalten aber in der Re-
gel keine Anwenderprogramme. Bald kam der Wunsch nach Hintergrundprogrammen auf, die
z.B. unter MS-DOS auf dem 8086 als TSR-Programme (Terminate and stay resident) realisiert
wurden. TSR-Programme liefen aber oft instabil und erfüllten die Wünsche der Benutzer nicht
ausreichend. Der Benutzer eines modernen PC erwartet beispielsweise, dass er Vorgänge im Hin-
tergrund erledigen kann, z.B. etwas aus dem Internet laden, drucken, Daten kopieren usw. Es sol-
len also mehrere Tasks scheinbar gleichzeitig ablaufen, was durch eine schnelle Taskumschaltung
nach dem Zeitscheiben-Prinzip erreicht wird. Man braucht ein Multitasking-Betriebssystem, wie
z.B. UNIX.
Weiterhin können nun im Prinzip beliebig viele Programme geladen werden, man muss also einen
sehr großen Speicher verwalten können. Wenn der wirklich vorhandene Speicher nicht ausreicht,
muss automatisch auf einen nachgeschalteten Massenspeiche ausgelagert werden. Der scheinbare
Adressraum kann dann größer sein als der physikalische Speicher, sog. virtueller Adressraum
. Last not least muss ein Multitasking-Betriebssystem stabil laufen, es kann nicht mehr durch
fehlerhafte Anwendungen zum Absturz gebracht werden. Multitasking-Betriebssysteme müssen
also einige neue Anforderungen erfüllen:

• Schutz der Systemdaten und -programme gegen Zugriffe durch Anwendungen


• Schutz der privaten“ Datenbereiche der Anwendungen gegeneinander

• Zentrale Verwaltung der Hardware, Zugriff auf Hardware (.z.B. Schnittstellen) nur auf
dem Umweg durch das Betriebssystem
• Steuerung der Zeitscheiben-Verwaltung und Abwicklung der Task-Wechsel
• Verwaltung großer Adressräume, evtl. auch virtueller Adressräume. Diese können größer
sein als der wirkliche vorhandene Hauptspeicher und werden durch teilweise Auslagerung
auf die Festplatte realisiert.

108
12.2. FALLBEISPIEL: INTEL 80386 109

Wir werden im folgenden Abschnitt am Beispiel des intel 80386 sehen, wie die Prozessorhardware
Multitasking-Betriebssysteme unterstützt.

12.2. Fallbeispiel: Intel 80386


Der intel 80386 (auch kurz 386) wurde 1985 auf dem Markt eingeführt. Er ist maschinencode-
kompatibel zu allen seinen Vorgängern (8086, 80186, 80286). Durch einen verbesserten inter-
nen Aufbau ist er schon bei gleicher Taktfrequenz ungefähr doppelt so leistungsfähig wie sein
Vorgänger 80286. Ausserdem kann er schneller getaktet werden und verfügt über viele neue
Maschinenbefehle, die die Performance weiter erhöhen.

Das eigentlich erwähnenswerte am 386 ist aber, dass er der erste Prozessor der 86er-Reihe ist,
die genügend Unterstützung für Multitasking-Betriebssysteme bieten. 1

12.2.1. Eckdaten

• 32-Bit-Adressbus, 4 GB Adressraum

• 32-Bit-Datenbus, 8-, 16- und 32-Bit-Buszugriffe

• 32-Bit-Vielzweckregister, 32-Bit-Offsetregister

• Taktfrequenzen von 16 bis 40 MHz

• Hergestellt in 1.5µm oder 1.0µm-MOS-Technologie aus 275000 Transistoren

• 132-poliges Pin Grid Array-Gehäuse (PGA)

• 16 Byte Prefetch Queue

• Erweiterter Befehlssatz: Einzelbitbefehle, bedingte Setzbefehle, stark erweiterte indirekte


Adressierung

• Drei Betriebsarten:

1. Real Mode
2. Protected Mode
3. virtual 8086-Mode

12.2.2. Betriebsarten

Der 80386 kennt drei Betriebsarten:

Real Mode Große Teile des 386 werden abgeschaltet, er funktioniert wie ein superschneller
8086. Zweck dieser Betriebsart: Vorbereitung der Umschaltung in den Protected Mode
1
Multitasking konnte auch auf dem 80286 schon realisiert werden, dem ersten intel-Prozessor mit Protected
Mode. Ihm fehlten allerdings einige Features, wie z.B. die Möglichkeit in den Real Mode zurückzuschalten.
Ausserdem war seine Rechenleistung schlicht zu gering, so dass der 80286 praktisch immer im Real Mode betrieben
wurde, also sozusagen als schneller 8086.
110KAPITEL 12. DIE UNTERSTÜTZUNG VON MULTITASKING-BETRIEBSSYSTEMEN DURCH MIKR

Abbildung 12.1: Register des 80386. Nicht abgebildet sind die Kontroll-, Debug-, Test- und Cache-
Register

Virtual 8086-Mode Mehrere virtuelle Maschinen, jede funktioniert wie ein 8086. Gedachte
Verwendung: Emulation von 8086-Umgebungen zur Ausführung alter Programme.

Protected Virtual Adress Mode, kurz Protected Mode Die leistungsfähigste Betriebs-
art, unterstützt abgestufte Privilegierungsstufen, Speicherschutzmechanismen virtuelle Spei-
cherverwaltung. Gedacht für Multitasking-Betriebssysteme.

Alles Folgende in diesem Kapitel bezieht sich auf den Protected Mode.

12.2.3. Privilegierungsstufen

Im Protected Mode kennt der 80386 vier verschiedene Privilegierungsstufen, die sog. Privilege
Levels . Mit diesem Modell wird geregelt, ob ein Programm zu bestimmten Zugriffen auf Spei-
chersegment, Programmstücke oder Schnittstellen berechtigt ist. Wichtig: Je gößer der PL-Wert
ist, umso geringer sind die Zugriffsrechte.

Privilege Level 3 (PL=3) Unterste Privilegierungsstufe: normale Anwendungsprogramme

Privilege Level 2 (PL=2) Betriebssystemerweiterungen z.B. eine Programmbibliothek, die


von Anwendungsprogrammen eingebunden wird. (z.B. API)

Privilege Level 1 (PL=1) Gedacht für Treiber und Betriebssystemaufrufe wie unter DOS
z.B. Int 21h. Mit PL1-Treibern sollen z.B. Geräte und Schnittstellen angesteuert werden.

Privilege Level 0 (PL=0) Innerster Teil des Betriebssystems, sog. Kernel. Die sog. privi-
legierten Befehle , die die zentrale Steuerung des Prozessors betreffen (z.B. LGDT, LIDT,
LMSW) können nur mit PL=0 ausgeführt werden.
12.2. FALLBEISPIEL: INTEL 80386 111

15 14 13 12 11 10 9 8 7 6 5 4 3 2 10
Index in Deskriptorentabelle TI RPL

Tabelle 12.1: Aufbau eines Selektors

Jedem Daten-Speicherbereich wird ein Requested Privilege Level, RPL zugeordnet. Jede aktive
Task hat ein sog. Current Privilege Level, CPL zugeordnet. Ein Programm kann auf ein Daten-
segment zugreifen, wenn seine Privilegierung größer oder gleichgroß wie die des Datensegmentes
ist, also

CP L ≤ RP L

RPL und CPL sind in den Segmentselektoren gespeichert (s.u.). Um auf BS-Funktionen oder
Treiber mit höheren Privilegien zuzugreifen muss man sog. Gates (Tore) benutzen. Diese
garantieren den ordnungsgemäßen Einsprungspunkt in die betreffenden Routinen und verhindern
damit unerlaubte Codebenutzung. Man unterscheidet Call Gates, Task Gates und Interrupt
Gates. Jedes Gate wird durch einen Deskriptor in der GDT beschrieben.

Der 80386 unterhält für jedes PL einen eigenen Stack. Bei Benutzung eines Gates steht im
Gate-Deskriptor, wieviele Byte vom Stack des rufenden zum Stack des aufgerufenen Task zu
übertragen sind (Parameter).

12.2.4. Geschützte Speichersegmente, Selektoren und Deskriptoren

Auch im Protected Mode ist der Speicher segmentiert. Im Gegensatz zum 8086 bzw. Real Mode
erfolgt die Segmentierung aber nicht wegen unzureichender Registerbreite (vgl. 10.2.2) sondern
zur sauberen Verwaltung der Datenbereiche. Die Segmente sind auch nicht auf eine Größe von
64kB begrenzt, sondern können den ganzen Adressraum umfassen (flaches Speichermodell). Der
Zugriff auf einen Speicherbereich erfolgt zweistufig: Ein sog. Selektoren ( Auswähler“) verweist

auf einen Deskriptor , der wiederum den Speicherbereich hinsichtlich Anfangsadresse, Länge
und Eigenschaften genau beschreibt.

Selektor → Deskriptor → Speicherbereich

Der 80386 hat immer noch die Register CS, DS, SS, ES usw. Im Protected Mode enthalten sie
aber keine Segmentadressen sondern die Selektoren. Diese sind wie folgt aufgebaut.

RPL Requested Privilege Level des beschriebenen Speicherbereiches

TI Table Indicator, TI=0 : Speicherbereich ist in der GDT beschrieben , TI=1 : Speicherbereich
ist in der LDT beschrieben.

Index Nummer des Deskriptors innerhalb der angegebenen Deskriptorentabelle

Die Deskriptoren beschreiben den betreffenden Speicherbereich im Detail, es sind 64-Bit-Strukturen


die in Deskriptorentabellen organisiert sind. Es gibt eine Globale Deskriptorentabelle, GDT in
der alle Speichersegmente beschrieben sind, die allen Tasks zur Verfügung stehen. Dies sind
112KAPITEL 12. DIE UNTERSTÜTZUNG VON MULTITASKING-BETRIEBSSYSTEMEN DURCH MIKR

• Code- und Datensegmente

• LDT’s

• Gates

• Task State Segmente (TSS)

Ausserdem gibt es für jeden Task eine Lokale Deskriptorentabelle, LDT in der dessen private
Speichersegmente beschrieben sind. In der Interrupt-Deskriptoren-Tabelle (IDT) stehen Gates
zu den Interrupt-Service-Routinen. Ein Deskriptor hat folgenden Aufbau:

Basis 32 Bit (Bit 16..39 und 56..63 ), Anfangsadresse des Bereiches

Limit 20 Bit (Bit 0..15, 48..51), gibt die Größe des Segments an, Maßeinheit entspr. G-Bit
Durch Basis und Limit sind Anfang und Ende des Speicherbereiches bekannt und ein
darüber hinaus gehender Zugriff (Schutzverletzung) kann erkannt werden.

Typ 4 Bit (Bit 40..43 ), Typ des Segments

DT 1 Bit (Bit 44), Deskriptortyp Systemsegment/Applikationssegment

DPL 1 Bit (Bit 45,46 ), Deskriptor Privilegierungsstufe

P 1 Bit (Bit 47), Present: Segment im Speicher/nachgeordneten Massenspeicher, z.B. Harddisk.


Bei Zugriff auf nicht presente Speicherdaten wird (via Int 0Bh) automatisch nachgeladen.

vf 1 Bit (Bit 52), verfügbar für Betriebssystem

res 1 Bit (Bit 53), reserviert

DB 1Bit (Bit 54), Default/Big; Diese Bit steuert, ob die Adressen und Operanden im Maschi-
nencode 16- oder 32-Bit-Größen sind.
Beispiel: B8 01 00 bedeutet bei DB=0: mov ax,1 und bei DB=1: mov eax,1

G 1Bit (Bit 55 ), Granularität (Körnung) G=0: Größenangabe ist in Byte, G=1: Größenangabe
ist in Pages, d.h. 4kB

Die Deskriptoren erlauben also eine sehr flexible Verwaltung der Speicherbereiche: Auslagerung
auf Festplatte (virtuellen Adressraum), Umschaltung 16/32-Bit-Code, Unterscheidung nach Seg-
menttyp u.a.m. Wichtig ist die Möglichkeit der Prüfung der der Zugriffsberechtigung, von dem
Segment sind ja Anfangsadresse (Basis) und Größe (Limit) bekannt.

Die maximale Segmentgröße ist bei 20-Bit-Limit und 4kB Granularität 1M * 4kB = 4GB. Da
die jede Deskriptorentabelle 8196 Einträge haben kann, können also über GDT+LDT insgesamt
64TeraByte (220 ∗ 212 ∗ 213 ∗ 2 = 246 ) adressiert werden.

Die Organisation ist in Abb.12.3 dargestellt: Der Selektor verweist auf eine der beiden De-
skriptorentabellen, der ausgewählte Selektor beschreibt dann das Datensegment. Die lokalen
Deskriptorentabellen (LDT) sind in der globalen Deskriptorentabelle (GDT) beschrieben, deren
Anfangsadresse und Länge wiederum im Prozessorregister GDTR abgelegt ist. Die Speicheror-
ganisation ist also ein Baum mit Wurzel im GDTR.
12.2. FALLBEISPIEL: INTEL 80386 113

Abbildung 12.2: Ein Segment ist mit Anfangsadresse (Basis) und Größe (Limit) beschrieben, so dass
Zugriffe ausserhalb des Segmentes sicher erkannt werden.

Abbildung 12.3: Die Speicherorganisation ist im Protected Mode als Baum aufgebaut, der seine Wurzel
im GDTR hat.
114KAPITEL 12. DIE UNTERSTÜTZUNG VON MULTITASKING-BETRIEBSSYSTEMEN DURCH MIKR

Die Benutzung der Dekriptorentabellen wird unterstützt durch mehrere spezielle Register. Das
GDTR beschreibt Anfangsadresse und Länge der GDT, laden durch Spezialbefehl LGDT (Task-
wechsel). Das LDTR enthält einen ladbaren Selektor, der in die GDT zeigt. Ausserdem enthält
es einen Cacheteil, in den beim ersten Zugriff Anfangsadresse und Länge der LDT geladen wird,
so dass ab dem zweiten Zugriff nicht mehr in der GDT gelesen werden muss. Die Selektorregister
enthalten ebenfalls Cache-Teile.

Abbildung 12.4: Die Deskriptoren- und Cache-Register des 80386. Die Cache-Register werden bei
Folgezugriffen auf die gleiche LDT bzw. über den gleichen Selektor automatisch aktiviert.

Ein Zugriff auf Daten im Hauptspeicher bei unbekannter LDT und unbekanntem Selektor erfolgt
in folgenden Schritten:

1. Der Selektor (TI-Bit) entscheidet ob der Deskriptor in der LDT oder GDT steht.

2. Aus GDTR wird die Anfangsadresse der GDT entnommen.

3. Mit dem ausgewählten Deskriptor in der GDT wird die LDT aufgesucht

4. Index*8 wird zur LDT-Basisadresse addiert

5. Der dort stehende Deskriptor wird geladen.

6. Erste Zugriffsprüfung: Aus CPL und RPL des Selektors wird der schlechtere ausgewählt,
der Effective Privilege Level, EPL . Der EPL muss gleichgut oder besser sein als der DPL
des Deskriptors. ist das nicht der Fall, wird die Exception allgemeine Schutzverletzung (
General Protection Fault ) ausgelöst, Taskabbruch!

7. Zur 32-Bit-Anfangsadresse des Deskriptors wird der 32-Bit-Offset addiert

8. Zweite Zugriffsprüfung: liegt die erzeugte Adresse ausserhalb der Segmentgrenzen wird
ebenfalls eine allgemeine Schutzverletzung ausgelöst.
12.2. FALLBEISPIEL: INTEL 80386 115

Der erste Zugriff auf eine LDT ist umständlich, weil die Anfangsadresse und Länge der neuen
LDT aus der GDT gelesen werden muss. Ab dem zweiten Zugriff wird aber der LDT-Cache-Teil
benutzt, der zusätzlich Speicherzugriff entfällt.

Dieser erste Zugriff auf ein Segment ist ebenfalls sehr langsam, weil der Segmentdeskriptor aus
der LDT gelesen werden muss. Z.B. braucht der Befehl LDS SI,[fpointer] 22 Takte. Der 386 hat
daher einen Segmentdeskriptor-Cache , der bei wiederholungszugriff über den gleichen Selektor
benutzt wird. Es entfällt also ein Speicherzugriff (LDT) und man kommt dann bei obigem Befehl
mit 7 Takten aus.

Abbildung 12.5: Der Speicherzugriff wird durch Cacheregister beschleunigt.

12.2.5. Kontrolle von I/O-Zugriffen

Ein Multitasking-Betriebssystem muss seine Schnittstellen gegen wilde“ Benutzung schützen.



Hardwarezugriffe müssen durch das Betriebssystem verwaltet werden und dürfen nicht direkt
vom Anwenderprogramm aus erfolgen. Dazu gibt es beim 386 zwei Mechanismen:

1. Das IO-Privilege-Level, IOPL , ein Zwei-Bit-Feld im Flagregister. Ein IO-Zugriff ist nur
erlaubt, wenn

CP L ≤ IOP L

Das Betriebssystem kann also das IOPL so setzen, dass z.B. Anwendertasks (PL=3) nicht
mehr auf die Hardware zugreifen können.

2. In der IO-Permission-Bitmap ist jeder IO-Adresse ein Bit zugeordnet. Steht hier eine 0, ist
der Zugriff erlaubt, bei einer 1 ist er verboten. Die IO-Permission-Bitmap hat eine Größe
von 8kB (64k IO-Adressen mal 1 Bit) und wird im Task State Segment mit abgespeichert.
116KAPITEL 12. DIE UNTERSTÜTZUNG VON MULTITASKING-BETRIEBSSYSTEMEN DURCH MIKR

12.2.6. Taskwechsel

Ein Task ist ein egenständig laufendes Programm, definiert durch den Inhalt aller Register,
Flags und Speicherinhalte einschl. Stacks. Ein regelmäßiger Taskwechsel erzeugt die scheinbare
Gleichzeitigkeit der Tasks. Beim Taskwechsel wird diese Information vollständig in einem eige-
nen Segment abgelegt, dem Task State Segment, TSS . Bei der Wiederaktivierung des Tasks
werden diese Informationen aus dem TSS wieder in den Prozessor/Speicher gebracht. Alle
Transfers führt der Prozessor selbständig aus. Ausserdem enthält das TSS einen Backlink auf
den unterbrochenen Task.

12.2.7. Paging

Wir erwähnten schon, dass ein Multitasking-Betriebssytem einen großen Speicher verwalten
muss, meist sogar virtuellen Speicher, d.h. Arbeitsspeicher der größer ist als der physikalisch
vorhandene Speicher. Dabei wird dann ein Teil der abgespeicherten Information zeitweilig auf
einen nachgeordneten Massenspeicher ausgelagert, meist eine Festplatte. Der 80386 stellt hierzu
den Mechanismus des Paging zur Verfügung. Beim Paging wird der ganze Arbeitsspeicher in Pa-
ges (Seiten) zu 4 kB unterteilt. Dies sind handliche Einheiten, die sich schnell übertragen lassen.
Zeitweilig unbenutzte Pages können also unauffällig ausgelagert werden. Da alle Pages gleich
groß sind, passt eine zurückgeladene Page immer in eine frei gewordene Lücke ( swapping“),

die Verwaltung wird sehr einfach. Ausserdem braucht nicht einmal das gesamte Datensegment
einer Anwendung geladen sein, manchmal reicht schon eine gewisse Anzahl Pages.

Der Paging Mechanismus kann wahlweise eingeschaltet werden (im Control-Register 0 des 386).
Ist er ausgeschaltet, so ist die von der Segmentierungseinheit mittels Deskriptoren ermittelte
lineare Adresse auch schon die physikalische Adresse, die auf dem Adressbus erscheint. Ist das
Paging eingeschaltet, wird die lineare Adresse nochmals umgesetzt zur physikalischen Adresse.
(Abb.12.6) Beim Paging wird der Speicher als Satz von 220 Pages zu je 4 kB betrachtet. Die

Abbildung 12.6: Umsetzung der Adressen beim Paging

physikalische Adresse wird dann über einen zweistufigen Mechanismus mit einem Page Directory
und bis zu 1024 Page Tabellen gebildet. Die Basisadresse des Pagedirectory ist im Control-
Register 3 des 80386 abgelegt. Die höchstwertigen 10 Bit der linearen Adresse werden benutzt,
um einen der max. 1024 Einträge in diesem Page Directory auszuwählen. Dieser enthält dann
einen Verweis auf eine von max. 1024 Page-Tabellen. Die Bits 12 — 21 der linearen Adresse
wählen nun in dieser Tabelle einen Eintrag aus, der die Basisadresse der gesuchten Page enthält.
Die niederwertigsten 12 Bit der linearen Adresse adressieren nun den gesuchten Speicherplatz
innerhalb der 4 kB großen Page (212 Byte). Das klingt zunächst umständlich, hat aber Vorteile.
Bei einer einstufigen Verwaltung müßte man eine Page-Tabelle von 220 Einträgen zu je 4 Byte
im Speicher halten, diese hätte schon eine Größe von 4 MB! Andererseits kostet der mehrstufige
Zugriff Zeit. Um diesen Nachteil zu mildern, ist im 80386 ein Cache für die letzten 32 benutzten
12.2. FALLBEISPIEL: INTEL 80386 117

Abbildung 12.7: Die zweistufige Adressumsetzung beim Paging

Pages integriert: Der Translation Lookaside Buffer (TLB) . Die umzusetzende lineare Adresse
wird mit den Einträgen im TLB verglichen und im Falle eines Treffers wird die physikalische
Adresse der Page direkt aus dem TLB geliefert. Damit soll eine Trefferrate von mehr als 90 %
erzielt werden.
Kapitel 13

Caching

13.1. Allgemeines und Speicherhierarchie

Cache bedeutet soviel wie Versteck oder unterirdisches Depot. Hier ist ein Cache ein schneller
Pufferspeicher, in dem Daten gespeichert bleiben, die in letzter Zeit aus dem nachgeordneten
langsameren Speicher gelesen oder in diesen geschrieben wurden. Zum Beispiel kann der Cache
ein schnelles SRAM sein und der nachgeordnete Speicher ein langsames DRAM (L2-Cache).
Werden diese Daten dann noch einmal gebraucht, können sie aus dem Cache gelesen werden
und das geht schneller. Dieser Zeitgewinn ist der Grund für die Benutzung von Caches! Caches
werden meist benutzt um Daten und Code aus dem Hauptspeicher zwischenzuspeichern, wichtig
ist aber auch das Caching von Deskriptoren (Protected Mode) und Adressen (z.B. TLB).

Ein Cache ist schneller, aber wesentlich kleiner, als der nachgeordnete Speicher. Er füllt
sich erst allmählich während des Betriebes. Irgendwann ist er vollständig mit Daten gefüllt;
für den nächsten Wert der in den Cache aufgenommen wird, muss dann ein anderer Wert
überschrieben, d.h. gelöscht werden. Eine spezielle Logik sorgt dafür, dass ein möglichst alter
Wert überschrieben wird. Wenn Daten aus dem Hauptspeicher gelesen und im Cache abgelegt
werden, geschieht dies blockweise. D.h. es wird nicht nur das angeforderte Byte, Wort oder
Doppelwort gespeichert sondern eine ganze sog. Cache-Line , ein Datenblock von z.B. 32 Byte.

Abbildung 13.1: Die Hierarchie der Cache-Speicher

Caching ergibt sowohl bei Daten als auch bei Befehlen einen deutlichen Geschwindigkeitsgewinn,
so liegen z.B. bei kleinen Programmschleifen alle Befehle im Cache. In Abb.13.1 ist ein typisches
Rechnersystem gezeigt: Ein L1-Cache liegt auf dem Prozessorchip ( on chip“) und wird mit

dem vollen Prozessortakt betrieben. Ein L2-Cache ist ein schnelles SRAM auf dem Board. Das
DRAM des Hauptspeichers dient als Cache für nachgeordnete Laufwerke, um die Anzahl der
Laufwerkszugriffe zu verkleinern.

118
13.2. CACHE-STRUKTUREN 119

Abbildung 13.2: Ein Look-through-Cache liegt zwischen Prozessor und Hauptspeicher

Ein Look Through-Cache liegt zwischen Prozessor und Hauptspeicher. Bei einem Zugriff wird
also zunächst nur im Cache nachgeschaut. Falls das Datum nicht im Cache liegt, wird im Haupt-
speicher zugegriffen, allerdings dann mit zusätzlichem Zeitverlust. Beim Look-aside-Cache liegt
der Cache parallel zum Hauptspeicher. Beim Zugriff wird gleichzeitig im Hauptspeicher und im
Cache gesucht. Wird das Datum nicht im Cache gefunden, so wird es ohne zusätzlichen Zeitver-
lust aus dem Hauptspeicher geholt. Andererseits wird der Look-aside-Cache mit dem Bustakt
betrieben, während Look-through-Caches mit höherem Takt an den Prozessor angebunden wer-
den.

Abbildung 13.3: Ein Look-aside-Cache liegt parallel zum Hauptspeicher

13.2. Cache-Strukturen
Cache-Speicher werden realisiert durch Assoziativspeicher oder auch Content Adressable Me-
mories (CAM). Bei diesen wird nicht nur das Datum aus dem Hauptspeicher sondern auch die
Hauptspeicheradresse, unter der das Datum gefunden wurde, abgespeichert. Außerdem enthält
der Baustein eine Vergleichslogik, die den Adressteil mit einer aktuell angefragten Adresse ver-
gleicht. Es wird dann festgestellt, ob das Datum im Cache gespeichert ist (Cache Hit) oder nicht
(Cache Miss).
Ein Cache hat eine bestimmte Anzahl von Zeilen (z.B. 64) und in jeder Zeile ist Platz für einen
oder mehrere Einträge. Ein Eintrag im Cache besteht aus folgenden Anteilen:

• Die ganze oder teilweise Adresse der Cache-Line im Hauptspeicher (bzw. nachgeordneten
Speicher), dem sog. Tag
• Der Cache-Line, die die Daten enthält
• zusätzlichen Bits zur Verwaltung der Daten, z.B. D=dirty (verändert), V=valid (gültig)

Charakteristisch für Caches ist die Art, wie der große Hauptspeicher auf den relativ kleinen
Cache abgebildet wird. dazu gehört vor allem die Zuteilung der Daten auf die Zeilen des Cache.
120 KAPITEL 13. CACHING

Vollassoziativer Cache Beim vollassoziativen Cache kann eine Cache-Line in jeder beliebigen
Zeile des Cache gespeichert sein. Es ist daher erforderlich, einen parallelen Vergleich aller
Tags mit einer angefragten Adresse durchzuführen. Man braucht also für jede Cache-Zeile
einen Vergleicher, das ist ein hoher Hardwareaufwand!

Direkt zuordnender Cache (direct mapped Cache) Beim direkt zuordnenden Cache wird ein
Teil der Adresse (Index) benutzt, um der Cache-Line eine Zeile im Cache zuzuweisen. Die
Cache-Line kann dann nur dort gespeichert werden, auch wenn dadurch ein relativ neuer
Eintrag überschrieben wird. Wenn nun eine Adresse an diesem Cache angefragt wird,
wird der gleiche Teil der Adresse benutzt, um sofort zu bestimmen, an welcher Stelle die
Cache-Line stehen muss, falls sie gespeichert ist. Es ist also auch nur noch ein Vergleicher
erforderlich. Man hat geringen Hardwareaufwand als beim vollassoziativen Cache, es kann
aber zu ungünstigen Betriebszuständen kommen, bei denen immer wieder eine bestimmte
Cachezeile ersetzt wird.

Mehrfach assoziativer Cache Dieser Cache ist ein Kompromiss zwischen den beiden erst-
genannten Formen. Auch hier wird ein Teil der Adresse, der Index, benutzt um der
Cache-Line einen Eintrag zuzuweisen, jede Zeile besteht aber aus mehreren Plätzen für
einen Eintrag, den Sätzen. Einer dieser Sätze wird dann für die Cache-Line ausgewählt.
Dabei kann dann eine Ersetzungsstrategie befolgt werden, z.B. löschen des ältesten Ein-
trags. Mehrfach assoziative Caches brauchen für jeden Satz einen Vergleicher, denn das
gesuchte Datum kann ja innerhalb der Zeile in jedem der vorhandenen Sätze liegen. Heut-
zutage haben die meisten Caches zwei oder vier Sätze, man sagt sie sind 2-fach oder 4-fach
assoziativ. Sie besitzen dann 2 bzw. 4 Vergleicher und sind ein guter Kompromiß zwischen
Aufwand und Nutzen.

13.3. Aktualisierungsstrategien

Es gibt unterschiedliche Strategien, die Daten in Hauptspeicher und Cache zu verwalten. Zum
Beispiel kann beim Schreiben eines Datums, das sich aktuell im Cache befindet, konsequent in
den Cache und gleichzeitig in den Hauptspeicher geschrieben werden, das sog. Write through-
Verfahren . Alternativ kann das Datum nur in den Cache geschrieben werden und später, wenn
dieser Platz im Cache gebraucht wird (oder das Programm beendet wird), in den Hauptspeicher
kopiert werden, das sog. Copy Back-Verfahren oder auch Write Later .

Beim Schreiben eines Datums, das sich nicht im Cache befindet, kann man ebenfalls unterschied-
lich vorgehen. Man kann es nur in den Speicher schreiben (write through with no allocation)
oder in den Speicher und in den Cache (write through with allocation).

Zwei wichtige Begriffe:

Konsistenz Alle Kopien eines Datenobjektes im System haben den gleichen Inhalt

Kohärenz Das korrekte Fortschreiten des Systemzustandes

Beim Copy Back-Verfahren besteht also vorübergehend Dateninkonsistenz (auch Cacheinkon-


sistenz ): Von einem Datenobjekt existieren Kopien verschiedenen Inhaltes. Eine Inkohärenz
würde z.B. auftreten, wenn bei inkonsistentem Hauptspeicher veraltete Daten von dort gelesen
werden. Die Absicherung der Kohärenz ist eine der Hauptaufgaben beim Caching. Die Probleme
sind unterschiedlich je nach Komplexität des Systems.
13.3. AKTUALISIERUNGSSTRATEGIEN 121

Cache- Write-Through with Write-Through with Copy-Back


Zugriff No-write-Allocation Write-Allocation
Read-Hit Cache-Datum → CPU Cache-Datum → CPU Cache-Datum → CPU
Read-Miss Speicherblock,Tag → Cache Speicherblock,Tag → Cache Cache-Zeile → Speicher ∗
Speicherdatum → CPU Speicherdatum → CPU Speicherblock,Tag → Cache
1→V 1→V Speicherdatum → CPU
1→V, 0→D
Write-Hit CPU-Datum→Cache, CPU-Datum→Cache, CPU-Datum→Cache,1→D
Speicher Speicher
Write-Miss CPU-Datum→Speicher Speicherblock,Tag → Cache Cache-Zeile → Speicher ∗
1→V Speicherblock,Tag → Cache
CPU-Datum→Cache, 1→V
Speicher CPU-Datum→Cache
1→D

Tabelle 13.1: Aktualisierungsstrategien für Caches. Die Flags V und D bedeuten: V=Valid
(gültig) , D=Dirty (verändert). Das Zurückkopieren in den Speicher (∗) ist nur notwendig,
wenn V=D=1.

System aus einem Busmaster und einem Cache Dies ist ein relativ einfacher Fall, bei Co-
py Back-Strategie wird das Datum im Speicher als dirty“ (verändert) gekennzeichnet, um

vor dem späteren Überschreiben noch das Kopieren in den Speicher auszulösen.

Zusätzliche Busmaster ohne Cache Das Kohärenzproblem tritt z.B. schon dann auf, wenn
ein anderer Busmaster auf einen Speicherplatz schreibt, von dem eine Kopie im Cache
existiert. Es tritt auch auf, wenn ein anderer Busmaster ein Datum aus dem Hauptspeicher
liest, von dem eine neuere Kopie im Cache existiert (Copy Back). Es gibt drei gebräuchliche
Lösungen:
1) Man kann einen Bereich vom Caching ausklammern, in dem die gemeinsam benutzten
Daten liegen: Non-cacheable-Data
2) Jeder Busmaster wird durch einen eigenen Task gesteuert und beim Taskwechsel wird
der Cache komplett geleert: cache clear , cache flush
3) Der Cache-Controller beobachtet am Bus die angelegten Adressen und Aktivitäten der
anderen Busmaster und reagiert entsprechend darauf: Bus snooping

Mehrere Busmaster mit jeweils eigenem Cache Der komplizierteste Fall. Eine mögliche
Lösung ist das Write Through-Verfahren in Verbindung mit Bus Snooping. Jeder Cache-
Controller kann dann ein gecachtes Datum für ungültig erklären, wenn ein anderer Bus-
master auf den entsprechenden Speicherplatz geschrieben hat. Sollen die Caches aber im
Copy Back betrieben werden, ist ein aufwendigeres Protokoll notwendig, z.B. das MESI-
Kohärenz-Protokoll . Es kennt die vier Zustände Modified, Exclusive, Shared und Invalid
und verwaltet korrekt alle Übergänge zwischen diesen vier Zuständen. das MESI-Protokoll
wird u.a. vom Pentium-Prozessor unterstützt.
Kapitel 14

CISC- und RISC-Prozessoren – zwei


ganz verschiedene Konzepte

14.1. CISC-Prozessoren – Software in der Hardware


Zur Erinnerung: Prozessoren enthalten ein Steuerwerk, das die Abläufe im Prozessor und im
System steuert. Dazu gehört die Steuerung der ALU, das Aktivieren von internen Datenwegen
von und zu Registern, die Aktivierung der Bustreiber, die Ausführung der Interrupt-Annahme
u.a.m. Bei komplexen Befehlen ist dazu eine lange Folge von Teilschritten erforderlich. Bei
vielen Prozessoren werden diese Abläufe durch einen internen Programmspeicher gesteuert. Die
Abläufe sind als sog. Mikroprogramm entworfen. Dieses wird in Binärcode übersetzt, den
Mikrocode der im Mikrocode-ROM gespeichert ist. Der Befehlsdekoders wählt dann nach der
Erkennung des Befehles den richtigen Einsprungpunkt in den Mikrocode. Das Mikrocode-ROM
liegt innerhalb des Prozessors und hat typischerweise eine Größe von 2—4 kB. Die Einzelschritte
des Mikroprogramms heißen auch Mikrooperationen (µOps).
Durch die Mikroprogrammierung kann man auch komplexe Befehle mit langen Abläufen gut
realisieren. Ein gutes Beispiel dafür sind die Stringbefehle mit Wiederholungspräfix der intel
80x86-Reihe:

REP MOVSW

Dieser Befehl kopiert einen ganzen Datenblock durch wiederholte Wortzugriffe im Speicher.

Bleibt zu überlegen, ob das Prinzip der Mikroprogrammierung nicht einfach zu viel Zeit ver-
braucht und die Performance verschlechtert. Die Mikroprogrammierung entstand zu einer Zeit,
in der man sehr langsame Hauptspeicher betrieb (Ferritkerne). In der gleichen Zeit, in der ein
Hauptspeicherzugriff erfolgte konnte innerhalb der CPU zehnmal oder mehr auf Register und
interne Speicherplätze zugegriffen werden. Die Engstelle“ war also der Hauptspeicherzugriff,

der sog. von Neumann-Flaschenhals“. Man hatte daher genug Zeit, um Mikroprogramme aus-

zuführen und beide Bereiche – Prozessor und Systembus – waren ungefähr gleich gut ausgelastet.
Wegen der schnellen Caches und Hauptspeicher hat sich das heute geändert!

Die Mikroprogrammierung bietet folgende Vorteile:

Flexibilität Auf Software-Ebene können einem Prozessorbefehlssatz neue Befehle hinzugefügt


werden.

122
14.2. RISC-PROZESSOREN 123

Kompatibilität und Emulation Bei neuen Prozessorkonzepten kann auf Software-Ebene der
Befehlssatz von Vorgängern nachgebildet werden und dadurch Kompatibilität hergestellt
werden. Sogar die Emulation anderer Prozessoren ist möglich.

Varianten Es können leicht Varianten von Prozessoren mit anderen Befehlssätzen hergestellt
werden, sogar Änderungen am Befehlssatz nach Kundenwunsch sind möglich.

Diese Vorteile führten dazu, dass der Befehlssatz der mikroprogrammierten Prozessoren immer
größer wurde, und die neuen Befehle wurden immer komplexer. Die Prozessoren haben also
mittlerweile einen komplexen Befehlssatz und werden entsprechend Complex Instruction Set
Computer oder kurz CISC genannt. Heutzutage nennt man alle Prozessoren mit Mikropro-
grammierung CISC-Prozessoren.

14.2. RISC-Prozessoren – weniger ist mehr


Mit den schneller werdenden Hauptspeichern und Caches verlagerte sich die langsamste Stelle
im System in den (mikroprogrammierten) Prozessor. Der Systembus ist nicht ausgelastet, es
muss auf die CPU gewartet werden: Der sog. ”´CPU-Flaschenhals“. Die Idee der RISC-
Prozessoren ist nun, sich auf einfache Befehle zu beschränken und diese in möglichst hohem
Tempo auszuführen. Man verzichtete also auf die Mikroprogrammierung und ließ im Befehlssatz
nur noch Befehle solche zu, die sich direkt auf die vorhandene Hardware beziehen. Es gibt
innerhalb der Prozessorbefehle keine Algorithmen mehr und keine Mikroprogrammierung, jeder
Befehl spricht direkt eine entsprechende Baugruppe an. Kann z.B. in einem CISC-Prozessor
eine Multiplikation algorithmisch abgewickelt werden, muss es in einem RISC-Prozessor einen
Hardware-Multiplizierer geben (oder es gibt keinen Multiplikationsbefehl). Der Befehlssatz ist
dann kleiner, daher der Name Reduced Instruction Set Computer, RISC . Die Befehle eines
RISC-Prozessors können verglichen werden mit den Mikrooperationen im Mikrocode. Man kann
auch den Programmcache als dynamischen Microcode-Speicher betrachten.

Wie groß sind aber die Nachteile, die durch den Verzicht auf komplexe Befehle entstehen? Es
hat sich herausgestellt (IBM-Untersuchung), dass in 80% der Rechenzeit nur 20% der Befehle
benutzt werden, und zwar die einfachen Befehle. Die dynamische Häufigkeit der komplexen
Befehle ist also gering. Ausserdem hat sich herausgestellt, dass die Ausführungszeit für einen
komplexen Befehl manchmal größer ist als für eine gleichwertige Folge einfacher Befehle. Auf der
anderen Seite belegen komplexe Befehle viel Platz im Mikroprogrammspeicher und verbrauchen
viel Dekodierungszeit. Das RISC-Konzept ist also machbar.

Merkmale und Entwicklungsziele von RISC-Rechnern:

Load/Store-Architektur Die Kommunikation mit dem Hauptspeicher wird nur über die Be-
fehle Laden und Speichern (LOAD und STORE) abgewickelt. Alle Operationen wirken

Die ALU-Operationen können nur auf Register angewendet werden Es geht zum Bei-
spiel kein Read-Modify-Write-Befehl

Viele Register zwischen 40 und mehreren Hundert; Ziel: möglichst viele Variable in Regi-
stern halten und zeitraubende Hauptspeicherzugriffe einsparen. Geschickte Ausnutzung:
Registerfenster

Feste Befehlswortlänge Vereinfacht die Dekodierung, verursacht aber eine Code-Verlängerung


(z.B. 50%)
124 KAPITEL 14. CISC- UND RISC-PROZESSOREN

Horizontales Befehlsformat Bei allen Befehlen haben Bits an gleicher Position auch die glei-
che Bedeutung; auch dies beschleunigt die Dekodierung.

Skalarität Alle Befehle sollen möglichst in einem Takt abgearbeitet werden. (Mehr als ein
Befehl pro Takt: Superskalar) Kann nur erreicht werden durch Zusatzmaßnahmen wie
Caching und Pipelining

Optimierende Compiler Damit die Pipeline eines RISC-Prozessors wirklich gut ausgenutzt
wird, muss ein entsprechend guter Maschinencode erzeugt werden.

Die heutigen RISC-Prozessoren gehen auf Forschungsarbeiten an den Universitäten von Berkeley
(SPARC) und Stanford (MIPS) zurück. Diese Prozessoren kennen ca. 30-50 Befehle. (zum
Vergleich: Der Pentium kennt ca. 400 Befehle)

14.2.1. Registersatz

Ein RISC-Prozessor besitzt in der Regel viele gleichwertige universelle Register. Diese sind
mehr oder weniger geschickt organisiert. Das Ziel ist jeweils, Variablen möglichst in Registern
zu behalten und Hauptspeicher- bzw. Cachezugriffe zu vermeiden. Im einfachsten Fall sind die
Register als homogener Block organisiert. Oft ist der Registersatz in Blöcken organisiert, so
dass z.B. ein Block Register für globale Daten vorhanden ist und jedes Unterprogramm einen
Registerblock für private Daten hat. Ein globale Zeiger macht jeweils einen Teilbereich der Re-
gister für das aktive Unterprogramm zugänglich, das sog. Registerfenster . Eine Verfeinerung
stellen die teilüberlappenden Registerfenster dar. Hier existiert ein Überlappungsbereich, der
für den aktive Unterprogramm und ein von diesem aufgerufenes Unterprogramm benutzt wird.
Dieser Bereich ist für die Parameterübergabe vorgesehen, so dass der Zeitverlust für eine Pa-
rameterübertragung via Stack völlig entfällt. (s.Abb.14.1 Für ein Multitasking mit schnellem
Task-Switch können dann mehrere solcher Registersätze existieren.

Abbildung 14.1: RISC-Prozessoren haben viele Register, die auf verschiedene Art organisiert
sein können.
14.2. RISC-PROZESSOREN 125

14.2.2. Pipelining

In einem einfachen CISC-Prozessor wird ein Befehl in mehreren Stufen squentiell abgearbeitet,
z.B.

1.Takt: Instruction Fetch Einlesen des Befehles

2.Takt: Decode Dekodieren des Befehles

3.Takt: Operand Fetch Operanden lesen

4.Takt: Execute Ausführungsphase

5.Takt: Write Back Ergebnisse zurückschreiben

Die Situation ist in Abb. 14.2 dargestellt: Die fünf Bearbeitungstufen sind schlecht ausgelastet
und die die Ausführung eines Befehles dauert fünf Takte.

Abbildung 14.2: Ein einfacher Befehl wird auf einem einfachen Prozessor sequentiell abgearbei-
tet. Die Ausführung braucht so viele Takte wie Bearbeitungstufen vorhanden sind, die Bearbei-
tungstufen sind schlecht ausgelastet.

Die Grundidee des Pipelining ist nun, Befehle – so weit wie möglich – überlappend und synchron
parallel in den Verarbeitungsstufen zu verarbeiten. Dadurch wird die Auslastung der Verarbei-
tungsstufen besser und im Idealfall (100% Auslastung) erhält man mit jedem Takt einen fertig
ausgeführten Befehl (Skalarität). Allerdings muss zunächst in einer Anlaufphase die Pipeline
erst einmal gefüllt werden, die sog. Latenzzeit , s.Abb.14.3. Die Situation kann mit einem
Fließband z.B. bei der Automobilherstellung verglichen werden: Die Herstellung eines Autos
dauert mehrere Stunden, trotzdem läuft alle 5 min ein fertiges Auto vom Band.

Typisch sind vier- oder fünfstufige Pipelines. Ein Beispiel dafür ist der intel80486 dessen Pipeline
ungefähr der oben dargestellten entspricht. 1 In der Praxis wird keine 100%-ige Auslastung
erreicht, es gibt verschiedene Pipeline-Hemmnisse (Pipline-Interlocks) Diese Hemmnisse werden
entweder auf Software-Ebene behandelt – z.B. durch das Einfügen von No-Operation-Befehlen
– oder auf Hardware-Ebene durch Scoreboarding, Bypassing etc.
1
Der 486 ist ein CISC-Prozessor bei dem später RISC-Architektur-Merkmale eingeführt wurden. Er ist
aufwärtskompatibel zum i386, beherrscht dessen großen Befehlssatz und kann weiterhin auch komplexe Befehle
verarbeiten. Daher wird die 3.Stufe teilweise noch zum dekodieren gebraucht.
126 KAPITEL 14. CISC- UND RISC-PROZESSOREN

Abbildung 14.3: Ideale 5-stufige Pipeline. Die Verarbeitungsstufen sind vollständig ausgelastet,
mit jedem Takt wird ein Befehl beendet.

Ein einfaches Pipeline-Hemmnis ist ein Hauptspeicherzugriff, der oft nicht in einem Takt durch-
geführt werden kann, weil der Systembus zum Hauptspeicher mit geringerer Taktfrequenz be-
trieben wird. Die Pipeline muss dann warten und läuft für einige Takte leer (s.Abb.14.4.

Abbildung 14.4: Ein Zugriff auf den relativ langsamen Hauptspeicher dauert mehrere Takte, die
Pipeline muss warten.

Ein weiteres Hemmnis sind Resourcenkonflikte . Diese entstehen dadurch, dass verschiedene
Verarbeitungsstufen der Pipeline gleichzeitig auf den gleichen Teil der Hardware zugreifen wollen.
Beispielsweise löst ein Befehl, der auf einen Speicheroperanden zugreift zwei Hauptspeicherzu-
griffe aus: Beim Lesen des Opcodes und beim Operandenzugriff. Dieser Resourcenkonflikt wird
von vielen Prozessoren dadurch vermieden, dass für Daten und Code separate Caches betrieben
werden. Hauptspeicherkonflikte durch mehrfachen Operandenzugriff (z.B. bei Read-Modify-
Write-Befehlen) können bei Load-Store-Architektur nicht entstehen, was diese Forderung nun
verständlich macht.

Ein anderes Hemmnis sind Sprünge. Die Verarbeitung der Befehle wird beim Sprungziel fortge-
setzt. Die Pipeline muss neu gefüllt werden, die schon vorverarbeiteten Befehle sind nun wertlos
14.2. RISC-PROZESSOREN 127

geworden. Der Prozessor muss nun alle Veränderungen aus diesen Befehlen rückgängig machen
und die Zwischenergebnisse verwerfen. Das vereinfacht man z.T. dadurch, dass man mehrere
NOP-Befehle (No Operation) nach dem Sprung einfügt, so dass bei Ausführung des Sprunges
keine Veränderungen rückgängig gemacht werden müssen (Delayed Branch, NOP’s=Delayed
Slots). Sprünge verursachen große Verzögerungen in der Pipeline. Die modernen Prozessoren
arbeiten daher mit einer Sprungvorhersage ( Branch Prediction ).

Abbildung 14.5: Durch einen Sprung werden die schon vorverarbeiteten Befehle (hier Befehl 3
– Befehl 6) wertlos, sie werden verworfen und die Pipeline muss neu gefüllt werden.

Abbildung 14.6: Der Zeitverlust durch Datenabhängigkeiten kann durch Bypassing (Forwar-
ding) gemildert oder behoben werden. Dabei wird ein Operand nicht nur ins Register sondern
gleichzeitig an die ALU übertragen. (Register Bypassing)

Ein weiteres Pipeline-Hemmnis sind Datenabhängigkeiten . Diese entstehen z.B. dann, wenn ein
Befehl einen Datenoperanden benutzt der sich noch in Berechnung befindet. Der Befehl muss
dann auf das Ablegen im Register warten. Datenabhängigkeiten zählen zu den kompliziertesten
Pipeline-Hemmnissen und es gibt phantasievolle Lösungen zu ihrer Behebung. Um den Zeitver-
lust klein zu halten, wird beim Register Bypassing ein Operand gleichzeitig ins Zielregister und
in die ALU übertragen. Kommt der Operand aus der ALU spricht man vom Result Forwarding
, kommt er aus dem Speicher spricht man vom Load Forwarding .(s.Abb.14.6). Forwarding wird
nicht von allen RISC-Prozessoren unterstützt, da die Steuerung sehr aufwendig ist. In [3] ist ein
Beispiel für eine 4-stufige Pipeline gegeben (Ri = Register):
128 KAPITEL 14. CISC- UND RISC-PROZESSOREN

;Beispiel 1: Load Forwarding


LOAD <Adr>,R1 ; Inhalt von Adresse <Adr> nach R1 laden
ADD R1,R2,R3 ; R3=R1+R2
SUB R4,R5,R6 ; R6=R4-R5

Im gleichen Takt in dem der Speicheroperand nach R1 geladen wird, wird der (veraltete) Inhalt
von R1 schon in der Addition benutzt. (s.Abb.14.7)

Abbildung 14.7: Durch eine Datenabhängigkeit entsteht ein Problem: Der Inhalt von Register
R1 wird im gleichen Takt neu geladen und in einem Additionsbefehl benutzt.

Eine mögliche Lösung bietet hier das Load Forwarding: Gleichzeitig mit dem Einschreiben in
Register R1 steht der neue Inhalt auch schon an der ALU zur Addition zur Verfügung.(Abb.14.8)
Wenn der Prozessor kein Forwarding unterstützt, könnte durch Einfügen von NOP-Befehlen (No

Abbildung 14.8: Durch Load Forwarding kann das Pipeline-Hemmnis beseitigt werden: Gleich-
zeitig mit dem Einschreiben in das Register steht der neue Inhalt auch an der ALU für die
Addition zur Verfügung.

Operation) ein Pipelinefehler vermieden werden. Dabei würde allerdings die Pipeline für einen
Takt kein Ergebnis liefern (Leerlauf). (Abb.14.9) Es gibt aber eine intelligentere Lösung: Der
nachfolgende SUB-Befehl ist nicht von einer Datenabhängigkeit betroffen und kann vorgezogen
werden. So wird das Problem auf Software-Ebene gelöst, ohne dass Leerlauf entsteht. Man sieht
hier sehr schön, dass bei RISC-Prozessoren Hardware und Software eine Einheit bilden und ein
optimierender Compiler sehr wichtig für die Performance des Prozessors ist.
14.2. RISC-PROZESSOREN 129

Abbildung 14.9: Durch Einfügen von NOP’s kann die Datenabhängigkeit auf Kosten eines
Leerlauf-Taktes aufgelöst werden.

Abbildung 14.10: Durch Umordnen der Befehle kann ein guter Compiler die Datenabhängigkeit
ohne Zeitverlust auflösen.

Eine weitere interessante Technik ist das Register Renaming . Darunter versteht man einen
Aufbau, bei dem die dem Programmierer bekannten Register, wie z.B. EAX, EBX usw. ,
auf eine größere Anzahl physikalisch vorhandener Register abbildet. Durch Register Renaming
können bestimmte Datenabhängigkeiten aufgelöst werden, speziell bei Prozessoren mit mehreren
Pipelines.
Kapitel 15

PC-Prozessoren der 90er Jahre

Der Intel Pentium, seine Nachfolger Pentium Pro, Pentium II und Pentium III, sowie seine
Konkurrenten AMD K6, K6-2, K6-3 und Athlon sowie Cyrix 6x86 sind Zwitterkonstruktionen“,

die sehr schön die Entwicklung in der Mikroprozessortechnik widerspiegeln.

Alle diese Prozessoren sind Nachfolger des 8086, ein CISC-Prozessor der 1978 von Intel auf den
Markt gebracht wurde. (s.Abschn. 10) Alle Nachfolgeprozessoren unterstützten weiterhin den
8086-Befehlssatz, wodurch für die PC-Anwender und -Softwarehersteller garantiert war, das die
Programme ohne Neuübersetzung auch auf zukünftigen PC’s laufen können (Maschinencode-
Kompatibilität). Angesichts der explosionsartig anwachsenden Palette an PC-Software sicher
eine wichtige und richtige Entscheidung. Bis zur Einführung des Intel 80386 im Jahre 1985 wur-
den die Befehlssätze der Prozessoren mit jeder Generation deutlich vergrößert (von 123 beim
8086 auf knapp 400 beim 80386), eine typische CISC-Entwicklung. Danach kam eine Wende.
Man erkannte, dass die Zukunft den RISC-Prozessoren gehören wird und änderte die Zielrich-
tung. Seitdem wurde der Befehlssatz kaum noch vergrößert und die Prozessoren erhielten mehr
und mehr RISC-Merkmale wie z.B. Pipelines, Register-Renaming, u.a.m. Für die Konstrukteure
eine schwierige Aufgabe: RISC-Architekturen müssen in einen Prozessoren eingefügt werden, der
sehr viele und auch komplexe Befehle auszuführen muss. Letztere sind nach wie vor mikropro-
grammiert. Unter dem scharfen Konkurrenzdruck eines schnell wachsenden Marktes entstanden
in den PC-Prozessoren aber sehr fortschrittliche und innovative RISC-Techniken. So kommt es,
dass die heutigen PC-Prozessoren einerseits CISC-Dinosaurier mit einem riesigen Befehlssatz
teilweise komplexer Befehle sind, andererseits aber hochmoderne RISC-Technologie enthalten.

15.1. Intel Pentium

Die wichtigsten Daten:

• entspricht dem 586, Arbeitsname zeitweise auch P5

• 32-Bit-Register, 32-Bit-Adressbus, 64-Bit-Datenbus

• Zwei L1-Caches: 8 kB Daten und 8 kB Code (2-Weg Set-assoziativ, 128 Sets, Cache Lines
zu 32 Byte)

• Betriebsarten Real Mode, Protected Mode, Virtual-8086-Mode

130
15.1. INTEL PENTIUM 131

• Integrierte Gleitkommaeinheit

• Zwei fünfstufige Integer-Pipelines, eine achtstufige Gleitkomma-Pipeline

• dynamische Verzweigungsvorhersage

• Performance Monitoring zur Optimierung von Code

• System Management Mode zur Implementierung von Stromsparfunktionen

• aufgebaut aus 3.1 Mio. Transistoren

• 296 Anschlüsse, SPGA-Gehäuse (Staggered Pin Grid Array), 13W Leistung

• Arbeitsfrequenzen 75 — 200 MHz

Auffälligstes Merkmal des Pentium sind die beiden fünfstufigen Integer-Pipelines, u-Pipeline und
v-Pipeline die wie folgt aufgebaut sind:

1. Instruction Fetch

2. Decode 1

3. Decode 2 / Operand Fetch

4. Execute

5. Write Back

Die u-Pipeline kann alle Befehle bearbeiten, die v-Pipeline nur einfache Befehle. Damit beide
Pipelines gleichzeitig arbeiten können, müssen die bearbeiteten Befehle sog. Paarungsregeln
erfüllen. Da dies nicht immer der Fall ist, sind die beiden Pipelines nur teilweise ausgelastet.
Trotzdem ist es möglich, dass im zeitlichen Mittel mehr als ein Befehl pro Takt ausgeführt
beendet wird. Der Pentium ist daher ein Superskalar Komplexe 80x86-Befehle werden durch
Mikrocode ausgeführt. Dieser Microcode ist so optimiert worden, dass möglichst beide Pipelines
parallel arbeiten (Implizite Befehlspaarung).

Wie wir im Abschnitt 14.2.2 sahen, wird der Pipeline-Betrieb durch einen Sprung immer stark
gebremst, weil die Pipeline beim Sprung geleert werden muss und die Auswirkungen teilverar-
beiteter Befehle wieder rückgängig gemacht werden müssen. Der Pentium besitzt daher eine
dynamische Verzweigungsvorhersage, aufgebaut aus einer Steuereinheit und dem Branch Tar-
get Buffer (BTB). Dieser ist ein Cache, in dem zu allen bisher benutzten Sprungbefehlen das
Sprungziel und statistische Informationen über die Wahrscheinlichkeit des Sprunges festgehalten
werden. Der Pentium kann so bei den meisten Sprüngen richtig vorhersagen, ob ein Sprung aus-
geführt wird und die entsprechenden Befehle in die beiden Pipelines einlesen. Sprünge führen
somit nur noch selten zu Verzögerungen. Der BTB wird wie ein Cache während des Betriebes
ständig aktualisiert.

Der Pentium ist für einen Betrieb mit zwei Prozessoren (Dual-Processing) vorbereitet. Dazu
unterstützt er das MESI-Kohärenz-Protokoll. Ausserdem besitzt er einen weiterentwickelten
Interruptcontroller on-chip, den APIC. Im Dual-Processing kommunizieren die beiden APIC’s
über einen eigenen Bus und teilen sich so die Interrupts auf.

Für die immer kompliziertere Hardware gibt es im Pentium einen eingebauten Selbsttest, den
Build in Self Test (BIST), der in wenigen Millisekunden das Mikrocode-ROM, die Caches, TLB,
132 KAPITEL 15. PC-PROZESSOREN DER 90ER JAHRE

BTB u.a.m elektrisch prüft; das Ergebnis steht in EAX (0=kein Fehler). Daneben ist ein Boun-
dary Scan Test vorgesehen, der es ermöglicht am fertig vergossenen Chip über die Anschlussstifte
bestimmte Baugruppen von außen zu testen. Ein neuer Befehl (CPUID) veranlasst den Pentium
seine eigenen Typangaben auszugeben.
Eine gute Performance des Pentium hängt von den Trefferraten der Caches, der Sprungvorhersa-
ge, einer guten Befehlspaarung, Häufigkeit von Hemmnissen u.a.m ab. Informationen über diese
statistischen Werte erhält der Entwickler durch das sog. Performance Monitoring . Die dafür
vorgesehene on-chip-Hardware umfasst einen 64-Bit-Zeitmarkenzähler (Time Stamp Counter,
TSC), zwei Eventzähler und ein Event-Auswahlregister auf. Mit diesem Auswahlregister kann
man bestimmen, welche Ereignisse in den Eventzählern erfasst werden sollen. Der Zeitmar-
kenzähler erlaubt, die Ausführungszeit bestimmter Codeabschnitte in Takten zu bestimmen.
Beispiel: Man spezifiziert, dass die Anzahl der Treffer und Fehltreffer im Datencache mitgezählt
wird, und vergleicht dann zwei Unterprogramme, die mit verschiedenen Algorithmen arbeiten.
Die absolute Ausführungszeit lässt sich gleichzeitig über den TSC ermitteln.

15.2. Intel Pentium Pro


Der Pentium Pro ist eine Weiterentwicklung des Pentium und zeichnet sich hauptsächlich durch
die sog. Dynamic Execution (Dynamische Befehlsausführung) aus. Hinter diesem etwas nichts-
sagenden Namen verbirgt sich ein sehr modernes Konzept. Dabei werden die Pipelines aufgelöst
und durch eine noch flexiblere Konstruktion ersetzt.
Die hereinkommenden Befehle werden auf 3 Dekoder verteilt und in sog. Mikrooperationen
(µOps) zerlegt. Die Dekoder 1 und 2 dekodieren einfache Befehle und erzeugen eine Mikro-
operation/Takt, der dritte Dekoder dekodiert die komplexen Befehle und produziert bis zu 4
Mikrooperationen/Takt. Die drei Dekoder produzieren also bis zu 6 Mikrooperationen/Takt.
Die Mikrooperationen werden in ein Befehlsreservoir (Reservierungsstation) eingeleitet, in der
bis zu 20 Mikrooperationen in Wartestellung sind. Die dabei benutzten Register (EAX,EBX,
usw.) werden auf 40 gleichwertige interne Register (Alias-Register) abgebildet, verwaltet in der
Register Alias Table (RAT). Dabei wird durch geschickte Zuordnung auch ein Teil der Daten-
abhängigkeiten aufgelöst. Von der Reservierungsstation werden die Mikrooperationen in eine der
fünf Ausführungseinheiten übergeben, dort werden typ. 3 Mikrooperationen/Takt ausgeführt.
Die Reihenfolge der Ausführung ist nicht mit der Reihenfolge im Code identisch (Out of Order
Execution). In der Rückwandlungseinheit werden nach einer Konsistenzprüfung die Ergebnisse
korrekt in die x86-Register eingeschrieben.
Der Pentium Pro besteht aus 5,5 Mio.Transistoren, dazu kommen noch 15 bzw. 31 Mio. Tran-
sistoren der L2-Caches, die im gleichen Gehäuse untergebracht sind. Dies führte allerdings zu
Fertigungsproblemen.

15.3. Intel Pentium MMX, Pentium II und Pentium III – Prozessoren mit
Multimedia-Unterstützung
Die Verarbeitung von Audio- und Videodaten erfordert viele Berechnungen an kleinen Daten-
einheiten. So wird ein Lautstärkewert (Abtastwert) in CD-Qualität durch 2 Byte (16 Bit)
dargestellt, ein Grauwert oft durch 1 Byte, ein Farbwert durch 3 Byte. Die Prozessor-Register
mit 32 oder mehr Bit sind also schlecht ausgenutzt. Die Idee ist nun, mehrere Dateneinheiten
in einem Befehl zu bearbeiten: Single Instruction - Multiple Data ( SIMD )
15.3. INTEL PENTIUM MMX, PENTIUM II UND PENTIUM III 133

Abbildung 15.1: Die dynamische Befehlsausführung des Pentium Pro.

Zweites Problem: Die Standardarithmetik der ALU ist oft unpraktisch für die Bearbeitung von
Audio- und Videodaten. Die Erhöhung eines Helligkeitswertes in 8-Bit-Darstellung von 255 führt
durch den Überlauf zu einem Helligkeitswert 0, der sicher nicht erwünscht ist. Besser wäre ein
Sättigungsendwert von 255, also 255+1=255. Entsprechend wäre bei Multimediadaten sinnvoll
0-1 = 0. Feste Endwerte statt Überlauf und Unterlauf nennt man auch Sättigungsarithmetik .

Eine weitere für Multimedia wünschenwerte Eigenschaft ist ein Multiply and Accumulate-Befehl
(MAC-Befehl), der in der digitalen Signalverarbeitung ständig gebraucht wird. MAC-Befehle
multiplizieren zwei Zahlen und addieren das Ergebnis zu einer mitgeführten Summe. Eine solche
Operation erfordern z.B. digitale Filter.

Der Pentium MMX bietet nun eine spezielle Verarbeitungseinheit an, die sowohl SIMD als auch
Sättigungsarithmetik enthält. Dazu stehen 8 MMX-Register mit je 64 Bit Breite genutzt. Die
64 Bit werden in belegt durch

8 Byte: Packed Byte


134 KAPITEL 15. PC-PROZESSOREN DER 90ER JAHRE

4 16-Bit-Worte Packed Word

2 32-Bit-Worte Packed Double Word

1 64-Bit-Wort

Ergänzend wurden einige Spezialbefehle eingeführt, z.B. PMADD, ein MAC-Befehl der nur einen
Takt braucht, im Gegensatz zu den 10 – 11 Takten, die ein normaler Pentium braucht. Diese
ganze Einheit wird von intel Multimedia Extension genannt, Abk. MMX.

Zur Benutzung der MMX-Einheit gibt eine Gruppe von 57 neuen Befehlen, deren Namen alle
mit P beginnen (p=packed).

Beispiel: PADDB Dieser Befehl addiert acht 8-Bit-Werte in Reg. MMX1 zu den acht 8-Bit-Werten
in Reg. MMX0 und beachtet dabei Sättigungsarithmetik.

Man hat allerdings beim Pentium MMX keine wirklich neuen Register eingebaut (für die war
kein Platz im Task State Segment), sondern benutzt die Gleitkommaregister. Die Programme
müssen also Abschnitte mit Gleitkommaberechnungen und Abschnitte mit MMX-Operationen
sauber trennen. Dazu dient auch der Befehl EMMS (Empty MMX State), mit dem nach Abschluss
der MMX-Operationen die Register leert und wieder für Fließkommaoperationen zur Verfügung
stellt.

Der Pentium II vereint die Eigenschaften von Pentium Pro und Pentium MMX. Seit März 1999
ist nun der Nachfolger Pentium III (früherer Codename: Katmai) verfügbar. Er kann mit 500
MHz und mehr getaktet werden. Wichtiger ist aber, dass der Multimedia-Befehlssatz wesentlich
erweitert wurde zum sog. ISSE , die Abkürzung für Internet Streaming SIMD Extension (alte
Bezeichnung: KNI für Katmai New Instructions). Damit verbunden wurden acht neue Register
zu je 128 Bit eingeführt, in der auch Gleitkomma-SIMD-Befehle bearbeitet werden können.

Mittlerweile hat auch Konkurrent AMD seinen neuen Prozessor Athlon vorgestellt, der dem Pen-
tium III in Punkto Leistung offenbar nicht nachsteht. Im Bereich der PC-Prozessoren dürfen wir
uns wohl auch weiterhin auf ein rasantes Entwicklungstempo einstellen, wobei die neuen Produk-
te jeweils mit wohlklingenden Namen vorgestellt werden. Einige Namen der intel-Prozessoren
der letzten Jahre sind in der folgenden Tabelle aufgeführt.

Pentium MMX Pentium-Prozessor mit Multimedia Extension: Auf den Registern der Nume-
rikeinheit kann jetzt mit einem neuen SIMD-Befehlssatz gearbeitet werden

Pentium Pro Verbesserter Pentium mit dynamischer Befehlsausführung ( Superpipelined Su-



perskalar“), 256/512 kB L2-Cache im Gehäuse integriert, Sockel 8

Pentium II Pentium, der die sowohl MMX als auch dynamische Befehlsausführung bietet

Klamath Erste Generation der Pentium II-Prozessoren, 2.8V, 0.35µm, je 16kB L1-Cache für
Daten und Code, bis zu 300 MHz, L2-Cache auf Steckmodul (Slot 1) mit halbem Prozes-
sortakt

Deschutes Dritte Pentium II-Generation, sparsamer als Vorgänger, 2.0V, 0.28µm, bis zu 400
MHz

Mendocino Deschutes mit 128 kB L2-Cache

Celeron low cost-Variante des Deschutes ohne L2-Cache 266/300 MHz, Slot 1, (Covington)
15.3. INTEL PENTIUM MMX, PENTIUM II UND PENTIUM III 135

Celeron XXXA verbesserter Celeron mit Mendocino-Kern: 128kB L2-Cache mit vollem Pro-
zessortakt

Xeon Deschutes-Variante für Server und Workstations, Slot 2, bis zu vier Prozessoren gekop-
pelt, großer L2-Cache mit vollem Prozessortakt, z.B. 2MB

Katmai Nachfolger von Deschutes, Kern des Pentium III, bis 550 MHz, 4*AGP on Chip, Di-
rectRAMbus, MMX2, KNI-Befehlssatz

Merced geplanter Serverprozessor


Literaturverzeichnis

[1] H.Müller, L.Walz, Mikroprozessortechnik, Vogel Fachbuch Verlag


FH-Bibliothek: elt 600 34 Lehrbuchsammlung

[2] Thomas Flik, Hans Liebig, Mikroprozessortechnik. Springer–Verlag, Berlin, 5.Aufl. 1998.
Inhalt: CICS, RISC. Systemaufbau, Assembler und C. 650S., 88,00 DM
FH-Bibliothek: in Beschaffung, ältere Auflagen unter DAV 340 41

[3] Helmut Bähring, Mikrorechnersysteme, Springer–Verlag, Berlin, 2.Aufl. 1994. Inhalt: Mik-
roprozessoren, Speicher, Peripherie. 68,00 DM
FH-Bibliothek: DAV 340 122 4, 124

[4] Hans-Peter Messmer, Das PC-Hardwarebuch, 6. Aufl. 1998. Inhalt: Aufbau, Funktionswei-
se, Programmierung. Ein Handbuch nicht nur für Profis. 1442 S., 99.90 DM Erscheint laut
Verlag Juli 1999 in neuer Auflage. Derzeit nicht lieferbar.
FH-Bibliothek: ältere Auflagen unter DAV 350 116 50

[5] Bodo Richard, Mikroprozessortechnik, Hanser–Verlag 1989 Inhalt: Mikroprozessoren, Spei-


cher, Schnittstellen und Systemaufbau
FH-Bibliothek: dav 340 33

[6] Günter Schmitt, Mikrocomputertechnik mit dem Prozessor 6809 und den Prozessoren 6800
und 6802 maschinenorientierte Programmierung ; Grundlagen - Schaltungstechnik - An-
wendungen, Oldenbourg, 1988.
FH-Bibliothek: dav 350 87, Standort : Lehrbuchsammlung 70

[7] Ron Bishop, Einfache Mikroprozessoren und der 6800, Editions Mengis 1981
FH-Bibliothek: dav 350 49, Standort : Lehrbuchsammlung 70

[8] Dieter Hannemann, Einführung in die Mikrocomputer-Technik Programmierung - Schal-


tungstechnik - Anwendung von Mikroprozessoren, 3., überarb. Aufl., Girardet 1984
FH-Bibliothek: dav 350 88, Standort : Lehrbuchsammlung

[9] Rudolf Schief, Einführung in die Mikroprozessoren und Mikrocomputer am Beispiel der
Mikroprozessoren 8080, 8085, Z 80, 8086/8088, 80286, 80386/80386 SX, 80486, PEN-
TIUM/PENTIUM PRO, MMX-Prozessoren, 15., überarb. und erw. Aufl., Tübingen :
ATTEMPTO-Verl., 1997.
FH-Bibliothek: dav 350 89 Standort : Lehrbuchsammlung

[10] Klaus Beuth, Elektronik 2: Bauelemente, Vogel Fachbuch Verlag, 15.Aufl. 1997
FH-Bibliothek: elt 600 34 Lehrbuchsammlung 11

[11] Klaus Beuth, Elektronik 4: Digitaltechnik, Vogel Fachbuch Verlag


FH-Bibliothek: elt 600 34-4 Lehrbuchsammlung 19

136
LITERATURVERZEICHNIS 137

[12] Ulrike Kuhlmann, Schnelle Speicherkäfer, ct magazin 10/97 50

[13] Andreas Bleul, Computer ad astra, ct magazin 5/99, S.108 5

[14] Richard Sietmann, Winzige Schichten – gewaltige Perspektiven, ct magazin 6/99, S.146 47
Index

386, 106 direkt zuordnender, 117


6502, 74 vollassoziativer, 117
8086, 88 cache clear, 118
8259, 92 cache flush, 118
80386, 106 Cache-Line, 115
Cacheinkonsistenz, 117
Accumulator, 66 CAS, 47
Adress-Multiplexing, 47 CAS-before-RAS-Refresh, 51
Adressbus, 6 central processing unit, CPU, 6
Adressierungsarten, 74 CISC, 120
Adressleitungen, 6 CMOS, 22
Adressraum, 58 Complex Instruction Set Computer, 120
AIM, 40 Copy Back-Verfahren, 117
Akzeptoren, 11 CPU-Flaschenhals, 120
allgemeine Schutzverletzung, 111 Current Privilege Level, CPL, 108
ALU, 66
Assembler, 74 Daten, 6
Assemblersprache, 74 Datenabhängigkeiten, 124
Assoziativspeicher, 116 Datenbus, 6
Athlon, 131 Dateninkonsistenz, 117
Ausgabebausteine, 6 Datenleitungen, 6
Ausrichtung, 96 Dekodierung, 64
avalanche induced migration, 40 Deskriptor, 108
Diffusionskonstante, 27
Basis, 13 DIMM, 51
Basisadresse, 58 Diode, 12
BEDO, 51 Dioden-Transistor-Logik, 24
Befehle, 6 Direct Memory Access, 82
Befehlsholezyklus, 64 Direktoperanden, 100
Befehlszyklus, 69 Disassembler, 99
bidirektional, 34 Displacement, 100
Bit, 9 DMA, 82
Bitleitungen, 36 Donatoren, 11
Branch Prediction, 124 Dynamic Execution, 129
Branch Target Buffer, 128
Buffer, 34 E/A-Bausteine, 54
Build in Self Test, 128 EDO, 50
Bus, 6 EEPROM, 42
Bus snooping, 118 Effective Privilege Level, EPL, 111
Busleitungen, 6, 30 Eingabebausteine, 6
Byte, 9 einseitig bidirektionalen Bustreibern, 34
Embeddded Systems, 75
Cache, 115 Emitter, 13

138
INDEX 139

Emitter Coupled Logic, 24 least significant bit, LSB, 10


Emitterschaltung, 13 Leseverstärker, 48
Epitaxie, 27 Lithografie, 26
EPROM, 42 Little Endian Format, 102
Erholungszeit, 48 Load Forwarding, 124
Exceptions, 93 Lokale Deskriptorentabelle, LDT, 109
Look Through-Cache, 116
Failsafe-Timer, 92 Look-aside-Cache, 116
FAMOST, 40 Low-aktives Signal, 33
Fan in, 20
Fan out, 20 Maschinencode, 64, 99
Far Pointer, 90 Maschinenwort, 9
Flags, 66 Maschinenzyklus, 69
Flash-EEPROM, 43 memory moduls, 51
Floating Gate, 40 MESI-Kohärenz-Protokoll, 118
FPM, 50 Microcode-Speicher, 64
Fusible Link, 40 Mikrocode, 119
Mikrocode-ROM, 119
Gates, 108
Mikrocomputer, 6
GDTR, 111
Mikrooperationen, 119, 129
General Protection Fault, 111
Mikroprogramm, 119
Globale Deskriptorentabelle, GDT, 108
Mikroprozessor, 4
Grabenkondensatoren, 46
Mikrorechnersystem, 6
Harvard-Architektur, 7 Mnemonics, 72
Hybridtechnik, 24 Monolithtechnik, 24
MOSFET, 17
IC, 6 most significant bit, MSB, 10
Indexregister, 72
Indirekte Adressierung, 91 n-Kanal-FET, 18
Instruction Pointer, IP, 67 Near Pointer, 90
Int 21h, 95 Nibble, 9
integrated circuit (IC), 24 NMI, 92
Integrationsgrad, 24 NMOS, 22
intel 80386, 106 Non-cacheable-Data, 118
Interrupt Controller, 92 NOP, 103
Interrupt-Deskriptoren-Tabelle (IDT), 109
Interrupt-Service-Routine (ISR), 84 Offset, 89
Interrupt-Vektoren-Tabelle, 92 oktal Bustransceiver, 34
INTR, 92 Opcode, 64
IO-Permission-Bitmap, 112 opcode fetch, 64
IO-Privilege-Level, IOPL, 112 Organisation eines Speicherbausteines, 38
ISSE, 131 OTPROM (one time programmable read on-
ly memory), 39
Kohärenz, 117
Kollektor, 13 p-Kanal-FET, 18
Konsistenz, 117 p-leitend, 11
Paarungsregeln, 128
L1-Cache, 115 Page Directory, 113
L2-Cache, 115 Page Tabellen, 113
Langsame störsichere Logik, LSL, 24 Paging, 113
Latenzzeit, 122 PC, 88
140 INDEX

Pegelumsetzer, 19 Single Instruction - Multiple Data, 129


Pentium II, 131 Software Interrupts, 93
Pentium III, 131 Software-Interrupts, 93
Performance Monitoring, 129 SPD-EEPROM, 52
Physikalische Adresse, 90 Speichermodelle, 90
physikalische Adresse, 90 Speichermodellen, 90
Pipeline-Hemmnisse, 122 Speichermodule, 51
Pipeline-Interlocks, 122 Speichersteuerung, 47
Planartechnik, 27 Sperrschicht, 11
PMOS, 22 Sprungvorhersage, 124
Präfix, 100 Stackpointer-Register (SP), 72
Prefetch Queue, 95 Standard-TTL, 21
Prefetching, 75 Superskalar, 128
Priorisierung, 84
Privilege Levels, 107 Tag, 116
privilegierten Befehle, 107 Taktgeber, 6
Program Counter (PC), 72 Taktzyklus, 69
Programmierimpuls, 39 Task State Segment, TSS, 113
Prozessor, 6 Tetrade, 9
tiegelfreies Zonenziehen, 26
RAS, 47 TLB, 114
RAS-only-Refresh, 51 Transistor, 4
Raumladungszone, 11 Transistor-Transistor-Logik, 21
Read Burst, 51 Translation Lookaside Buffer, 114
Rechner, 6 Treiber, 34
Reduced Instruction Set Computer, RISC, trench technology, 46
120 Tristate-Ausgänge, 32
Refresh, 46, 50 TTL, 17, 21
Register Alias Table, 129
Register Bypassing, 124 virtueller Adressraum, 105
Register Renaming, 126 von Neumann-Flaschenhals, 119
Registerfenster, 121 von Neumann-Architektur, 7
Registersatz, 66
Wafer, 26
Requested Privilege Level, RPL, 108
WIRED AND, 32
Resourcenkonflikte, 123
Wort, 9
Result Forwarding, 124
Wortleitungen, 36
Sättigungsarithmetik, 130 Write Later, 117
Schaltkreisfamilien, 17 Write through-Verfahren, 117
SDRAM, 51
Zentraleinheit, 6
Segment, 90
Zonenziehen, tiegelfreies, 26
Segmentanteil, 89
Zugriffszeit, 38
Segmentdeskriptor-Cache, 112
zweiseitig bidirektionalen Bustreibern, 34
Segmentregister, 89
Zykluszeit, 38
Selbstleitende FET, 18
selbstsperrend, 18
Selektoren, 108
Service-Anforderungen, 83
Service-Routine, 83
SIMD, 129
SIMM, 51