Computersysteme Michael Zwick Technische Universität München Inhalt 1 Motivation: Wie funktioniert ein Computer? ................................ 10 1.1 Komponenten eines Computers ................................................................................................ 10 1.1.1 Peripherie-Geräte und Netzteil ....................................................................................... 12 • Netzteil .................................................................................................................................... 12 • Grafikkarte .............................................................................................................................. 15 • DVD-ROM .............................................................................................................................. 24 • DVD-Brenner .......................................................................................................................... 33 • Festplatte ................................................................................................................................. 34 1.1.2 Komponenten auf der Hauptplatine - Überblick .............................................................. 42 • Prozessor ................................................................................................................................. 44 • Arbeitsspeicher ........................................................................................................................ 49 • Busse ....................................................................................................................................... 56 • GMCH = Graphics and Memory Controller Hub (B) ............................................................. 65 • ICH = Input/Output Controller Hub (C) ................................................................................. 65 • SIO-Controller = Super Input/Output Controller (D) ............................................................. 65 1.2 Von Neumann-Architektur .......................................................................................................... 66 1.3 Harvard-Architektur .................................................................................................................... 70 1.4 Vom Algorithmus zum Prozessor – Abstraktionsebenen ....................................................... 71 Inhalt 1 Aufgaben ‘‘Wie funktioniert ein Computer’’ 81 Netzteil . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 Grafikkarten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Optische Laufwerke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82 Festplatte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 Prozessor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85 Bussystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 Rechner-Architekturen . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 2 Darstellung von Zahlen und Zeichen 89 2.1 Bits, Byte, Datenworte und Logikpegel . . . . . . . . . . . . . . . . . . 90 2.2 Zeichen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92 2.3 Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 2.4 Codierung von Festkommazahlen . . . . . . . . . . . . . . . . . . . . . 98 Vorzeichenlose Festkommazahlen . . . . . . . . . . . . . . . . . . . . . 98 Vorzeichenbehaftete Festkommazahlen . . . . . . . . . . . . . . . . . . 106 Vorzeichen und Betrag . . . . . . . . . . . . . . . . . . . . . . . . . 106 Einer-Komplement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110 Zweier-Komplement . . . . . . . . . . . . . . . . . . . . . . . . . . . 114 2.5 Codierung von Gleitkommazahlen nach IEEE 754 . . . . . . . . . . . . 118 Format von Gleitkommazahlen . . . . . . . . . . . . . . . . . . . . . 119 Rechnen mit Gleitkommazahlen . . . . . . . . . . . . . . . . . . . . 121 3 Arithmetische Schaltungen 127 3.1 Schaltungselemente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Logikgatter . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Multiplexer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127 Demultiplexer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130 Decoder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 Speicherelemente: Flipflops und Register . . . . . . . . . . . . . . . . . 132 3.2 Halbaddierer (HA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137 4 3.3 Volladdierer (VA) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 3.4 Ripple-Carry-Addierer/Subtrahierer . . . . . . . . . . . . . . . . . . . . 139 3.5 Carry-Look-Ahead . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141 Einstufige Carry-Look-Ahead-Schaltung . . . . . . . . . . . . . . . . . 143 Kaskadierung von Carry-Look-Ahead-Schaltungen . . . . . . . . . . . 145 3.6 Addition und Subtraktion von Gleitkommazahlen . . . . . . . . . . . . 153 3.7 Kombinatorischer Multiplizierer . . . . . . . . . . . . . . . . . . . . . . 153 3.8 Sequentieller Multiplizierer . . . . . . . . . . . . . . . . . . . . . . . . . 157 Multiplexer-basierte Implementierung der Steuerung . . . . . . . . . . 161 ROM-basierte Implementierung der Steuerung . . . . . . . . . . . . . . 166 Multiplikation vorzeichenbehafteter Zahlen . . . . . . . . . . . . . . . . 170 Multiplikation von Gleitkomma-Zahlen . . . . . . . . . . . . . . . . . . . 170 3.9 Subtraktion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Allgemein . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171 Halb-Subtrahierer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173 Voll-Subtrahierer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174 Ripple-Borrow-Subtrahierer . . . . . . . . . . . . . . . . . . . . . . . . . 175 3.10 Division . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Allgemein . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178 Kombinatorischer Dividierer . . . . . . . . . . . . . . . . . . . . . . . . . 180 Sequentieller Dividierer . . . . . . . . . . . . . . . . . . . . . . . . . . . 181 Implementierung des Zustandsautomaten mit Multiplexern . . . . . . . 185 Implementierung des Zustandsautomaten mit Speicherbausteinen . . . 188 4 Prozessor-Datenpfad 191 4.1 Vom zu lösenden Problem abhängige Schaltung . . . . . . . . . . . . 191 4.2 Universalrechner: Schaltung unabhängig vom Problem . . . . . . . . 192 Allgemein . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Beispiel-Schaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Verständnisfragen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196 Programmieraufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200 Quadratische Gleichung . . . . . . . . . . . . . . . . . . . . . . . . . 200 Kugelvolumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202 5 4.3 Assembler . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204 Assembler als leicht verständliche hardwarenahe Sprache . . . . . . . 204 Definition einer Assembler-Sprache für den Universalrechner . . . . . . 205 Assembler als Übersetzer . . . . . . . . . . . . . . . . . . . . . . . . . . 210 5 Befehlssätze und deren Klassifikation 215 Befehlssatz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215 Klassifikation nach Komplexität . . . . . . . . . . . . . . . . . . . . . . 215 CISC = Complex Instruction Set Architecture . . . . . . . . . . . . . 215 RISC = Reduced Instruction Set Architecture . . . . . . . . . . . . . 215 Klassifikation nach Verortung der Operanden . . . . . . . . . . . . . . . 216 Register-Speicher-Architektur . . . . . . . . . . . . . . . . . . . . . 216 Register-Register-Architektur/Load-Store-Architektur . . . . . . . . 216 Klassifikation nach der Anzahl der Operanden . . . . . . . . . . . . . . 216 Drei-Adress-Maschine . . . . . . . . . . . . . . . . . . . . . . . . . . 216 Zwei-Adress-Maschine . . . . . . . . . . . . . . . . . . . . . . . . . 216 Ein-Adress-Maschine/Akkumulator-Maschine . . . . . . . . . . . . 216 Null-Adress-Maschine/Stack-Maschine . . . . . . . . . . . . . . . . 216 6 MMIX-Prozessor 218 6.1 Programmiermodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219 6.2 Register . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 Allzweckregister . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220 Spezialregister . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221 Verständnisfragen/Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . 222 Allgemein . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 Allzweckregister . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222 Spezialregister . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223 6.3 Speicher . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 Wortbreiten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225 Ausrichtung der Daten im Speicher - Alignment . . . . . . . . . . . . . 225 Big- und Little Endian . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227 Speicherorganisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . 228 Text-Segment: Programme und Interrupt-Vektoren . . . . . . . . . 228 Daten-Segment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 Pool-Segment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231 Stack-Segment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 232 6 Betriebssystem-Segment . . . . . . . . . . . . . . . . . . . . . . . . 232 Virtueller Speicher . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Verständnis Speicher . . . . . . . . . . . . . . . . . . . . . . . . . . 234 Alignment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235 Big- und Little-Endian . . . . . . . . . . . . . . . . . . . . . . . . . . 236 Speicherorganisation . . . . . . . . . . . . . . . . . . . . . . . . . . 238 Virtueller Speicher . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241 6.4 MMIX-Programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Aufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242 Assembler- und Loader-Befehle . . . . . . . . . . . . . . . . . . . . . . 243 Der IS-Befehl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Der GREG-Befehl . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243 Der LOC-Befehl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244 Die Befehle BYTE, WYDE, TETRA und OCTA . . . . . . . . . . . . . 245 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246 Übersetzungsprozess . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253 Befehlswort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258 6.5 MMIX Befehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 Definitionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260 Register-Register-Befehle . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Hardware . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263 Arithmetische Befehle auf Festkommazahlen . . . . . . . . . . . . . 266 Direktoperand in Register schreiben . . . . . . . . . . . . . . . . . . 268 Umwandlung Gleitkommazahl $ Festkommazahl . . . . . . . . . . 271 Arithmetische Befehle auf Gleitkommazahlen . . . . . . . . . . . . . 272 Schiebe-Befehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274 Logische Operationen auf Bit-Ebene . . . . . . . . . . . . . . . . . . 276 Register-Speicher-Befehle . . . . . . . . . . . . . . . . . . . . . . . . . 279 Daten vom Speicher in ein Register laden . . . . . . . . . . . . . . . 280 Daten vom Register in den Speicher schreiben (speichern) . . . . . 289 Adressen in ein Register laden . . . . . . . . . . . . . . . . . . . . . . . 294 Zugriff auf Spezialregister . . . . . . . . . . . . . . . . . . . . . . . . . . 296 Verzweigungsbefehle . . . . . . . . . . . . . . . . . . . . . . . . . . . . 298 Unbedingte Verzweigung . . . . . . . . . . . . . . . . . . . . . . . . 298 Bedingte Verzweigungen . . . . . . . . . . . . . . . . . . . . . . . . 298 7 Befehle für Funktionsaufrufe . . . . . . . . . . . . . . . . . . . . . . . . 302 Namensräume - der PREFIX-Befehl . . . . . . . . . . . . . . . . . . . . 303 Funktionsaufrufe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305 Wert-Übergabe und Referenz-Übergabe . . . . . . . . . . . . . . . 306 Aufrufkonventionen . . . . . . . . . . . . . . . . . . . . . . . . . . . 307 Parameterübergabe auf dem Stack beim MMIX . . . . . . . . . . . 307 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 318 Beispielprogramm: Quadratische Gleichung . . . . . . . . . . . . . 327 7 Pipelining 333 7.1 Pipelining-Datenpfad . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334 7.2 Pipelining-Konflikte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 Datenkonflikte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 337 Erkennen von Datenkonflikten . . . . . . . . . . . . . . . . . . . . . 337 Auflösen von Datenkonflikten durch Einfügen von NOP-Befehlen . . 339 Auflösen von Datenkonflikten mittels Befehlsumstellung . . . . . . . 340 Auflösen von Datenkonflikten durch ‘‘Stalls’’ . . . . . . . . . . . . . 342 Auflösen von Datenkonflikten durch Forwarding-Pfade . . . . . . . 342 Strukturkonflikte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 346 Steuerungskonflikte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 348 8 Cache 351 8.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351 8.2 Speicher-Hierarchien . . . . . . . . . . . . . . . . . . . . . . . . . . . . 353 8.3 Begriffsklärungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 Cache-Hit, Hit-Time und Hit-Rate . . . . . . . . . . . . . . . . . . . . . 354 Cache-Miss, Miss-Time und Miss-Rate . . . . . . . . . . . . . . . . . . 354 Verdrängungsstrategien . . . . . . . . . . . . . . . . . . . . . . . . . . . 354 Schreibstrategien . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 355 Aufgaben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 356 8.4 Direkt-Abgebildeter Cache . . . . . . . . . . . . . . . . . . . . . . . . . 357 8.5 Voll-Assoziativer Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . 360 8.6 Set-Assoziativer Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . 361 9 Pipelining 4 8 9 10 1 Motivation: Wie funktioniert ein Computer? In diesem Kapitel geben wir Ihnen eine kleine Einführung in den Vorlesungsstoff der Computertechnik. Dieses Kapitel ist jedoch mehr als nur eine Einführung. Es dient als Überblick über den Aufbau und die Funktionsweise gängiger Arbeitsplatzrechner. Während dieses Kapitel dabei einen kompletten PC betrachtet, fokussieren die restlichen Kapitel fast ausschliesslich auf den Prozessor. Ziel dieses Kapitel ist es, Ihnen das Umfeld von Prozessoren und die Interaktion von Prozessoren mit diesem Umfeld näherzubringen. Wenn Sie verstanden haben, welche Aufgabe Prozessoren in diesem Umfeld haben, dann kennen Sie automatisch auch das Funktionsvermögen von Prozessoren, wissen also, was so ein Prozessor eigentlich können muss. Dies ist die Voraussetzung für die restlichen Kapitel dieses Skripts, in denen wir uns einen eigenen Prozessor zusammenbauen werden. 1.1 Komponenten eines Computers In diesem Kapitel öffnen wir einen gewöhnlichen Arbeitsplatzrechner und schauen uns einmal an, was da alles drinnen steckt. Dabei werden wir die zutage tretenden Komponenten hinsichtlich Funktion und Aufbau untersuchen. Nachdem wir uns bis zu den auf der Hauptplatine befindlichen Komponenten vorgearbeitet haben, werden wir durch eine Abstraktion (Verstecken von Details) die prinzipielle Funktionsweise des PCs zu erläutern. Nach dieser Abstraktion werden wird wieder detailreicher, wenn wir das reale (nicht abstrahierte) Zusammenspiel der einzelnen Komponenten betrachten. Nachfolgende Abbildung zeigt den Arbeitsplatzrechner, den wir im Folgenden zerlegen werden. Abb. 1: Computer-Arbeitsplatz 11 Wir schrauben die Seitenverkleidung ab … Abb. 2: Öffnen eines Computers … und identifizieren die dann erscheinenden Komponenten. DR NT DB DL GK FP FW Abb. 3: Geräte in einem Computer 12 1.1.1 Peripherie-Geräte und Netzteil • Netzteil Das mit NT gekennzeichnete Gerät ist das Netzteil. Es dient zur Stromversorgung des PCs. Abb. 4: Computer-Netzteil Computernetzteile wandeln die aus der Steckdose kommenden 230 V Wechselspannung in folgende Gleichspannungen um: − +3,3 V und +5 V für das Mainboard (die grosse grüne Platine) und die darauf befindlichen bzw. damit verbundenen elektrischen Bauteile. − +12 V für die Motoren der Laufwerke und Lüfter. − -5 V und -12 V, die heutzutage meist gar nicht mehr verwendet werden, sondern zumeist nur noch aus Gründen der Kompatibilität zu älteren Geräten vorhanden sind (z.B. -5 V und -12 V für den ISA-Bus, der in der heutigen Zeit fast nur noch in der Industrie zur Maschinensteuerung (z.B. CNC-Fräßmaschine) verwendet wird oder -5 V zur ±5 V-Versorgung älterer FloppyController, die zur Verstärkung des Lesesignals noch Operationsverstärker ohne Ladungspumpe einsetzen). Insbesondere der hohe Stromverbrauch des Hauptprozessors und der Grafikkarte erfordern die Bereitstellung hoher Ströme. Nachfolgende Abbildung zeigt eine typische Aufteilung der Leistung auf die +3,3 V, +5V und +12 V Leitungen. Die Leitung mit der Bezeichnung +5 VSB (SB = Standby) dient zur Versorgung bestimmter Rechner-Komponenten im Standby-Modus (z.B. Arbeitsspeicher). 13 Ausgangsspannung Strom (max.) +3,3 V +5 V +5 VSB +12 V 26 A 42 A 2,5 A 18 A 12,5 W 216 W Leistung (max.) 220 W max. Gesamtleistung 450 W Abb. 5: Typische Ausgangsleistung eines ATX-Netzteils Aufgrund dieser hohen Ströme erfolgt die Spannungsreduktion von 230 V auf die gewünschten Ausgangsspannungen nicht durch einen gewöhnlichen Transformator, sondern durch den Einsatz eines Schaltnetzteils. In PCs eingesetzte Schaltnetzteile haben oft folgenden Aufbau: Gleichrichter ° 230 V ~ ° ° • ~ °• ° • • ° LeistungsSchalter Gleichrichter HF-Trafo • = ° ° ° 1 2 ° ° ° ° ~ 3 °• ° Potentialtrennung ° ° ° ° TiefpassFilter ° ° • ° ° • ° • • 4 ° • = 5 Regler = 7 6 Abb. 6: Prinzip-Aufbau eines Schaltreglers Eine mögliche Zuordnung der Komponenten ist in nachfolgender Abbildung angegeben. 4 3 2 5 2 6 1 3 7 3 Abb. 7: Identifizierung von Schaltregler-Komponenten 14 ° 5V= ° Der in Abb. 6 gezeigte Schaltregler funktioniert wie folgt: − Die Netzspannung (230 V Wechselspannung, 50 Hz) wird an einen Gleichrichter (1) angelegt, der daraus eine Gleichspannung generiert. − Über einen Leistungsschalter (2) wird diese Spannung der Primärseite eines HF-Trafos (3) zugeführt. Der Leistungsschalter sorgt durch permanentes Ein- und Ausschalten dafür, dass die am HF-Trafo angelegte Spannung mit einer Frequenz von ca. 20 – 200 kHz ein- und ausgeschaltet wird. − Der HF-Trafo (3) überträgt die an der Primärseite angelegte Spannung auf seine Sekundärseite. − Der Gleichrichter (4) erzeugt aus der sekundärseitigen Wechselspannung wieder einen rein positiven Spannungsverlauf, der durch das Tiefpassfilter (5) auf einen Mittelwert gebracht wird. − Dieser Mittelwert entspricht der aktuellen Ausgangsspannung. − Die Ausgangsspannung dient als Eingang für den Regler (6), der zur Aufgabe hat, die Ausgangsspannung auf einem bestimmten Niveau zu halten. Dies erreicht der Regler durch Änderung des An-/Aus-Verhältnisses des Signals, das den Leistungsschalter steuert. Die Ausgangsspannung des Schaltnetzteils ist dabei lediglich abhängig vom Tastverhältnis (Verhältnis der An-/Aus-Zeit) des Signals, das den Leistungsschalter ein- bzw. ausschaltet. − Die Potentialtrennung (7), die in der Regel durch Optokoppler erreicht wird, verhindert, dass die 230 V Netzspannung über den Regelkreis zum Ausgang des Netzteils gelangt. Zwar müssen in Schaltreglern auch Trafos eingesetzt werden, diese können jedoch wesentlich kleiner gebaut werden, da sie durch die Verwendung einer hohen Frequenz (20 – 200 kHz statt 50 Hz Netzfrequenz) wesentlich mehr Leistung (proportional zur Frequenz) übertragen können und die Windungsanzahl somit gering bleiben kann. Wenige Windungen auf der Sekundärseite ⇔ geringer Innenwiderstand der Sekundärseite ⇔ in der Sekundärseite wird wenig Leistung in Wärme umgewandelt ⇒ guter Wirkungsgrad. Nachfolgend angegebene Steckerbelegung eines ATX-Netzteils zeigt, dass aufgrund der hohen Strombelastung bei +3,3 V und +5 V diese Spannungen über mehrere Kontakte parallel übertragen werden. +3,3 V 11 1 +3,3 V -12 V 12 2 +3,3 V GND 13 3 GND PS_ON 14 4 +5 V GND 15 5 GND GND 16 6 +5 V GND 17 7 GND -5 V 18 8 PW_OK +5 V 19 9 +5 VSB +5 V 20 10 +12 V Abb. 8: Steckerbelegung eines (ATX-) Netzteils Die Signale PS_ON und PW_OK haben folgende Funktion: − PS_ON ist die Abkürzung für Power supply on. Dieses Signal ist ein Eingangs-Signal und dient dazu, das Netzteil einzuschalten. Die Leitung PS_ON muss dabei auf Masse (GND für engl. Ground) gelegt werden. − PW_OK ist die Abkürzung für Power ok. Dieses Signal liegt beim Einschalten des Netzteils auf Masse und wechselt auf einen Pegel von etwa 5 V, wenn sich die vom Netzteil gelieferte Spannung nach dem Einschalten stabilisiert hat. PW_OK ist auf der Hauptplatine mit dem Taktgeber des Prozessors verbunden und sorgt über die Reset-Leitung dafür, dass der Prozessor erst dann mit der Abarbeitung von Befehlen beginnt, wenn sich die Versorgungsspannung stabilisiert hat. Auf diese Weise wird verhindert, dass der Prozessor in einen undefinierten Zustand gerät. 15 • Grafikkarte Die in Abb. 3 auf Seite 12 mit GK gekennzeichnete Einsteck-Platine ist die Grafikkarte. Stecker für zusätzliche Stromversorgung Anschluss für den Monitor (DVI) Speicherchips mit Kühlkörper BIOS Anschluss für den Monitor (VGA) GPU mit Kühlkörper (GPU = Graphics Processing Unit) AGP-Anschluss (Verbindung zum Prozessor) Abb. 9: Grafikkarte Die Grafikkarte besteht aus folgenden Komponenten: − GPU (Graphics Processing Unit): Der Prozessor der Grafikkarte. Die GPU implementiert die von der Grafikkarte bereitgestellten Funktionen: + + + + + Kommunikation mit dem PC-Prozessor (hier über AGP) Ansteuerung der Speicherchips RAMDAC → Wandlung der digitalen Bildinformationen in analoge Bildschirm-Signale (s.u.) Kommunikation mit dem Monitor (über VGA oder DVI) Beschleunigung von 3D-Funktionen − Speicherchips, um Bilddaten und sonstige anfallende Daten abspeichern zu können − BIOS (Basic Input Output System), um die Grafikkarte auch schon vor dem Laden von Grafikkartentreibern verwenden zu können (s.u.) − AGP-Anschluss (oder auch PCI-Express) zur Kommunikation mit dem PC-Prozessor − VGA- bzw. DVI-Anschluss zur Kommunikation mit dem Monitor 16 Die Grafikkarte hat im wesentlichen zwei Aufgaben: − Sie dient als Schnittstelle zwischen Computer und Bildschirm. − Sie beschleunigt grafikrelevante Berechnungen (insbesondere 3D-Berechnungen). Als Schnittstelle zwischen Computer und Bildschirm übersetzt die Grafikkarte die Daten, die der Prozessor liefert, in Signale, die der Bildschirm zur Anzeige benötigt. Die Grafikkarte verfügt über einen sog. Grafik-Speicher (oft auch Video-Speicher genannt). − In diesen Speicher schreibt der Prozessor die Daten, die er als Bild angezeigt bekommen will. − Die Grafikkarte liest diese Daten aus und erzeugt aus diesen Daten die entsprechenden Bildschirm-Signale. 1 Die einzelnen Byte im Video-Speicher werden direkt auf Pixel -Farben abgebildet. Die Farbe eines einzelnen Pixels ergibt sich dabei aus der Kombination eines roten (R), grünen (G) und blauen (B) Bildschirmpunkts. Nachfolgende Abbildung zeigt, wie die im Video-Speicher abgelegten Byte der Intensität (Helligkeit) der jeweiligen Bildschirmpunkte (Grundfarben) zugeordnet werden. Video-Speicher in der Grafikkarte Bildschirm 0x3F pro Grundfarbe 1 Byte ⇒ 24 Bit Farbtiefe 0 G R 0x00 B 0x78 1 Pixel 0xE8 B B R G R G R G R 0xFF B B B R G R G R G B B R … R G … … Abb. 10: Abbildung der im Video-Speicher abgelegten Werte auf die Intensität von Bildschirm-Punkten Durch Ändern einzelner Byte im Grafik-Speicher kann der Prozessor die Intensität jedes rot (R)-, grün (G)- oder blau (B)-Anteils eines Pixels ändern. Soll ein Pixel beispielsweise Rot erscheinen, werden den zugehörigen drei Byte im Grafik-Speicher die Werte R = 0xFF, G = 0x00, B = 0x00 zugeordnet. Grün entspricht dann R = 0x00, G = 0xFF, B = 0x00 und ein dunkles Grau etwa R = 0x60, G = 0x60, B = 0x60. Zum Verständnis der Umwandlung der im Grafik-Speicher der Grafikkarte abgelegten Byte in ein Bildschirm-Signal ist es sinnvoll zu wissen, wie diese Bildschirmsignale überhaupt aussehen. Bildschirm-Signale, die aus dem DVI-Anschluss kommen, sind digital und können in der Regel nur von TFT-Bildschirmen verwendet werden. Die Signale, die aus dem VGA (Video Graphics Array)-Anschluss einer Grafikkarte kommen, sind analog und so aufgebaut, dass sie sich sehr leicht von einem Röhrenmonitor verarbeiten lassen. Aus diesem Grund schauen wir uns erst einmal kurz an, wie ein Röhrenmonitor funktioniert (auch wenn diese gerade von TFT-Bildschirmen vom Markt gedrängt werden). 1 Pixel ist ein aus picture element zusammengesetztes Kunstwort und bezeichnet die Punkte, aus denen gerasterte Bilder aufgebaut sind. Die Farbe eines Pixels wird dabei aus den drei Grundfarben rot, grün und blau zusammengemischt. 17 Ein (Farb-)Röhrenmonitor enthält drei Kathoden, die jeweils einen Elektronenstrahl aussenden. Jeder Elektronenstrahl (und somit jede Kathode) ist dabei für eine der drei Grundfarben (RGB) zuständig. Die drei Elektronenstrahlen können in der Röhre durch sog. Ablenkspulen derart abgelenkt werden, dass der Auftreffpunkt der Elektronenstrahlen auf der Bildschirmvorderseite horizontal und vertikal verschoben werden kann. Durch Anlegen einer geeigneten Spannung kann man den Elektronenstrahl somit an einer beliebigen Stelle auf der Vorderseite der Bildröhre auftreffen lassen. Abb. 11: Durch geeignete Spannungen an den Ablenkspulen kann der Auftreffpunkt der drei Elektronenstrahlen beliebig in horizontaler und vertikaler Richtung verschoben werden. Um aus den Elektronenstrahlen Farben erzeugen zu können, sind innen auf der Bildschirmvorderseite abwechselnd phosphorhaltige Stoffe aufgebracht, die bei Elektronenbeschuss entweder Rot, Grün oder Blau leuchten. Damit die Elektronenstrahlen immer nur die drei zu einem bestimmten Pixel gehörigen Punkte treffen und nicht auch noch benachbarte, ist zwischen den Kathoden und der fluoreszierenden Schicht noch eine Lochblende eingebaut. Kathoden 3 Elektronenstrahlen Lochblende G R B B B B R G R G R G B B R R G … Spulen zur Ablenkung der Elektronenstrahlen B R G R G R G R Fluoreszierende Schicht B Abb. 12: Die von den Kathoden abgegebenen drei Elektronenstrahlen werden von Spulen abgelenkt und treffen dann auf eine Lochblende, welche die Elektronenstrahlen genau auf die rot, grün oder blau fluoreszierenden Punkte des gewünschten Pixels fokussiert. 18 … In Führt man die drei Elektronenstrahlen wie in nachfolgender Abbildung angegeben über den Bildschirm, werden alle rot, grün und blau fluoreszierenden Punkte von den zugehörigen Elektronenstrahlen getroffen. Abb. 13: Weg der drei Elektronenstrahlen über den Monitor An den Ablenkspulen zur horizontalen Ablenkung muss also eine periodisch ansteigende Spannung (Sägezahn) Hsync anliegen, so dass die drei Elektronenstrahlen von links nach rechts wandern. − Hat Hsync einen bestimmten negativen Wert, dann befindet sich der Elektronenstrahl ganz links. − Hat Hsync einen bestimmten positiven Wert, dann befindet sich der Elektronenstrahl ganz rechts. Bei den Ablenkspulen zur vertikalen Ablenkung muss ebenfalls eine von einem bestimmten negativen Wert bis zu einem bestimmten positiven Wert ansteigende Spannung Vsync angelegt werden, so dass die drei Elektronenstrahlen von oben nach unten wandern. Vsync muss dabei jedoch eine um die Anzahl der Bildzeilen niedrigere Frequenz als Hsync haben. So gelangen die drei Elektronenstrahlen erst dann am unteren Ende der Bildröhre an, wenn alle Zeilen von links nach rechts durchlaufen wurden. Nachfolgende Abbildung zeigt die von einem VGA-Anschluss gelieferten Signale. Hsync und Vsync sind dabei die gerade besprochenen Spannungen zur Positionierung der drei Elektronenstrahlen, R, G, und B sind die Spannungen, welche die Strahlungsintensität der zugehörigen Kathoden und damit die Intensität jeder Pixel-Grundfarbe steuern. R G B Hsync Vsync t 1. Zeile 2. Zeile letzte Zeile 1. Bild Abb. 14: Signale am VGA-Anschluss 19 1. Zeile 2. Bild Zur Umwandlung der im Grafik-Speicher abgelegten Daten in die analogen Signale R, G und B verwenden Grafikkarten sog. RAMDACs. Diese RAMDACs wenden auf die im Grafik-Speicher (GrafikRAM; RAM = Random Access Memory, s.u.) abgelegten Byte eine Digital-/Analog-Wandlung (DAC = Digital Analog Converter) an. Die Daten werden dabei byteweise ausgelesen und dann in die analogen Spannungen umgewandelt, die am VGA-Anschluss (vgl. Abb. 14) der Grafikkarte herauskommen. Nachfolgende Abbildung zeigt den Verlauf der Daten auf dem Weg vom Prozessor zum Bildschirm. Kabel bei 0x3F RAMDAC (für Rot) 0x00 0x78 • ••• •• • •• • •• • • • RAMDAC (für Grün) 0xFF 0xE8 RAMDAC (für Blau) … … … Prozessor Digital Cz Video-Speicher auf der Grafikkarte Digital-Analog-Wandler (RAMDAC) . B. c:\> + habel bei Analog VGABildschirm Buchse ( VG A) Abb. 15: Datenverlauf vom Prozessor zum Bildschirm Die Darstellung von Bildern auf dem Bildschirm funktioniert wie folgt: − Der Prozessor schreibt die Farbwerte für die Pixel in den Video-Speicher. − Die im Video-Speicher liegenden Daten werden permanent vom RAMDAC in VGA-Signale übersetzt und über die VGA-Buchse an den Bildschirm ausgegeben, der das Bild dann anzeigt. − Das am Bildschirm angezeigte Bild bleibt solange dasselbe, bis der Prozessor andere Werte in den Video-Speicher der Grafikkarte schreibt. Die Daten, die der Prozessor in den Video-Speicher schreibt, müssen jedoch erst berechnet werden, was im Vergleich zu den von der Grafikkarte auszuführenden Aktionen (Auslesen der Daten aus dem Grafik-Speicher und Wandlung durch die RAMDACs [und der Darstellung am Bildschirm]) relativ lange dauert. Nehmen Sie an, auf den Bildschirm soll eine Linie mit einer bestimmten Dicke und einer bestimmten Länge gezeichnet werden, wie z.B. die nachfolgend abgebildete Linie. ' In ) ÷ ( xz , yz ) Abb. 16: Linie Um im Grafik-Speicher für jedes Pixel die Intensität der drei Grundfarben Rot, Grün und Blau ablegen zu können, muss der PC-Prozessor zunächst berechnen, welche Pixel beim Zeichnen der Linie mit welcher Farbe eingefärbt werden müssen. 20 HDMD Ausgehend von einer mathematischen Beschreibung der Linie, z.B. der Geradengleichung y = mx + t, kann man bestimmen, welche Pixel von der Linie überhaupt getroffen werden. 2 Nachfolgende Abbildung zeigt, wie ein kurzer Ausschnitt der Linie auf den Pixeln zu liegen kommt. Farbpunkte auf dem Bildschirm zu zeichnende Linie einzelne Pixel Abb. 17: Ausschnitt der Linie Für alle Pixel, die von der Linie berührt werden, muss der Prozessor jetzt berechnen, zu welchem Teil die Pixel von der Linie bedeckt werden. − Bedeckt die Linie den Pixel vollständig, wird er schwarz eingefärbt, d.h. im Grafik-Speicher werden an der entsprechenden Speicherstelle für Rot, Grün und Blau jeweils die Werte 0 eingetragen. − Bedeckt die Linie die Pixel nur zu 40 Prozent, so trägt die Farbe der Linie (hier schwarz) auch nur zu 40 Prozent zur Farbe des Pixels bei. Die restlichen 60 Prozent der Farbe des Pixels entsprechen der ursprünglichen Farbe des Pixels (bei uns also der Farbe weiss). Mit RGBschwarz = (0, 0, 0) und RGBweiss = (255, 255, 255) ergibt sich damit für die neue Farbe RGBneu = (0,4 ⋅ 0 + 0,6 ⋅ 255 , 0,4 ⋅ 0 + 0,6 ⋅ 255 , 0,4 ⋅ 0 + 0,6 ⋅ 255), also der neue Farbwert RGBneu = (153, 153, 153). offen = Die Pixel-Darstellung der Linie ergibt sich damit wie folgt: I 1 | Abb. 18: Pixeldarstellung der Linie SX Der Übergang von der Darstellung „Linie mit y = mx + t“ in die Pixeldarstellung wird in der Computergrafik als rendern bezeichnet. Das Vorgehen, von der Linie berührte Pixel nicht einfach in der Farbe der Linie darzustellen, sondern die Farbe des Pixels aus dem prozentualen Anteil der Überdeckung zu Mischen, wird Antialiasing genannt. 2 Im obersten linken Pixel ist noch einmal dargestellt, wie die Pixel auf dem Bildschirm durch rote, grüne und blaue Punkte erzeugt werden. 21 Die für die Render-Vorgänge benötigten Berechnungen werden von optimierten Assembler-Routinen durchgeführt, die im Betriebssystem verankert sind. Diese Routinen können über die Schnittstelle des Betriebssystems aufgerufen werden, so dass jeder Programmierer Linien, Kreise, aber auch einzelne Punkte auf dem Bildschirm zeichnen kann. Obwohl die Render-Vorgänge bereits als optimierter Assembler-Code geschrieben sind, dauert deren Ausführung (im Vergleich zur Darstellung der im Video-Speicher abgelegten Daten auf dem Bildschirm) relativ lange. Würden die langsamen Render-Vorgänge direkt auf dem Grafik-Speicher ausgeführt werden, dann würden Objekte bereits dann auf dem Bildschirm erscheinen, wenn sie noch gar nicht fertig berechnet sind, was vom Betrachter insbesondere bei bewegten Objekten als sehr störend empfunden würde (flickern). *¥ Aus diesem Grund wird beim Rendern nicht direkt in den Grafik-Speicher, sondern in einen sog. BackBuffer gerendert, der ebenfalls auf der Grafikkarte zu finden ist. Ist das Bild fertig gerendert, werden Grafik-Speicher und Back-Buffer vertauscht. Dabei werden die in den Puffern enthaltenen Daten jedoch nicht kopiert, sondern es wird den RAMDAC-Bausteinen einfach mitgeteilt, dass sich der GrafikSpeicher jetzt an einer anderern Adresse befindet. Der ehemalige Grafik-Speicher wird dann automatisch zum Back-Buffer. 0x3F 0x00 0x78 0xFF wird gerade dargestellt 0xE8 … RAMDAC (für Rot) … RAMDAC (für Grün) • ••• •• • •• • •• • • • c:\> RAMDAC (für Blau) 0x4C … 0x38 0x79 0x00 0xFE wird gerade erstellt und im Anschluss dargestellt … Prozessor Front- und Back-Buffer Digital-Analog-Wandler (RAMDAC) VGABuchse Bildschirm Abb. 19: Front- und Back-Buffer Um das Verhältnis von Grafik-Speicher und Back-Buffer zu verdeutlichen, wird der Grafik-Speicher auch oft Front-Buffer genannt. 22 Die Berechnungen zur Oberflächenstrukturierung, Beleuchtung und Verdeckung sind sehr aufwendig. Ohne Grafikbeschleunigung müssten diese Berechnungen alle vom PC-Prozessor ausgeführt werden. Mit Grafikbeschleunigung kann die Arbeit des PC-Prozessors auf die Berechnung der PolygonPositionen beschränkt bleiben, da die Grafikkarte den Rest erledigt. Da die Grafikkarte auf diese Art von Berechnungen spezialisiert ist, kann sie diese wesentlich schneller ausführen als der PCProzessor. Darüber hinaus arbeitet die Grafikkarte parallel zum Prozessor, so dass die Grafikkarte beispielsweise ein Bild rendern kann, während der PC-Prozessor gerade die Polygon-Positionen des nächsten Bildes berechnet. 24