Vorlesung „Programmieren“ Funktionsweise von Computern Prof. Dr. Stefan Fischer Institut für Telematik, Universität zu Lübeck http://www.itm.uni-luebeck.de/people/fischer Inhalt 1. Ein Blick zurück 2. Stand der Technik 3. Funktionsweise von Computern 2 Ein Blick zurück Überblick • „Mechanische Ära“ – 1623: Rechenmaschine von Wilhelm Schickard – 1642: Pascaline – 1805: Jacquardwebstuhl – 1822: Difference Engine – 1834: Analytical Engine • „Elektromechanische Ära“ – 1936: Zuse Z1 – 1941: Zuse Z3 • • „Transistoren Ära“ – 1960: PDP 1 – 1964: IBM 360 – 1970: PDP 11 • „Mikroprozessor Ära“ – 1971: Intel 4004 – 1974: Intel 8080 „Röhren Ära“ – – – – – – 1941: Atanasoff-Berry-Computer 1943: Colossus 1944: Mark 1 1946: ENIAC 1 1949: EDVAC 1952: IAS 4 „Elektromechanische Ära“ 1936: Zuse Z1 • Erfinder: Konrad Zuse – Vorläufer des modernen Computers – Besaß Kontrolleinheit, Speicher, Mikrobefehle und Fließkommaberechnung – Binäre Zahlendarstellung • Steuerung in Form von mit Löchern gestanzten, altem Filmmaterial als Lochkarten – Mangel: Verhakung der mechanischen Schaltglieder (Bleche) • Im zweiten Weltkrieg zerstört und in den 60ern nachgebaut 5 1936: Zuse Z1 6 1941: Zuse Z3 • Nachfolger des Z1 (bzw. Zwischenversion Z2) – Basiert (wie Z2) auf Relais-Technik – Ein- und Ausgabegeräte – Benutzerinteraktion während des Rechenvorgangs – Unterstützung von Mikroprogrammen • Erster funktionsfähiger, frei programmierbarer Digitalrechner – „Turing-vollständig“!!! 7 1941: Zuse Z3 (2) 8 Lochkarten Bildquelle: Ziko-C , http://de.wikipedia.org/w/index.php?title=Datei:2005-11_lochkarten.JPG&filetimestamp=20080322185413 9 Lochkarten 10 1944: Mark 1 (Röhren) 11 Elektronenröhren Quelle: http://de.wikipedia.org/wiki/Elektronenröhre 12 1946: ENIAC (17.468 Röhren) 13 1952: Von Neumann-Architektur • Entwickelt von John von Neumann am Institute for Advanced Studies in Princeton • Programme werden im Speicher abgelegt (bis dahin nur Daten) • Von Neumann-Architektur – Bis auf wenige Ausnahmen bildet diese Architekturform seit 50 Jahren die Grundlagen von Computern 14 1952: Von Neumann-Architektur 15 „Transistoren Ära“ 1960: PDP 1 • PDP-1 (Programmed Data Processor) war der erste „Minicomputer“ – Firma DEC (Digital Equipment Corporation) • Einsatz von Transistor- statt Röhrentechnik – Speicheradressierung in 18 Bit-Worten – Hauptspeicher: 4000 18 Bit-Worte = 9 kByte – Programmierbar in Assembler oder LISP statt Maschinensprache – Monitor: rundes Oszilloskop – Erstes Computerspiel (statt Kriegsaufgaben) – Textcodierung bereits nach ASCII-Standard 16 „Mikroprozessor Ära“ 1971: Intel 4004 • Intel 4-Bit-Mikroprozessor – Erster „Ein-Chip-Mikroprozessor“ in Serienproduktion • Technische Daten – Strukturbreite: 10 µm (heute: ~32nm) – Transistoren: 2300 (heute: ~hunderte Mio.) – Taktfrequenz: 500 kHz–740 kHz (heute ~GHz) – Harvard-Architektur (heute: von Neumann) – 46 Befehle – Bauform: 16 Pin Dual Inline Package (DIP) 17 Stand der Technik Typische Merkmale moderner Computer • Typische Merkmale – Binäre Arithmetik (Wortbreite: 32-/64-Bit) – Von Neumann-Architektur • Weitreichende Standardisierung – Insbesondere der Schnittstellen • Hochintegrierte Schaltungen (z.B. Intel Core i7 Dual Core Prozessor) – – – – 383 Mio. Transistoren (Die-Größe: 81 mm²) Fertigungstechnik: 32nm 2,17 GHz Taktfrequenz Taktraten: 2,8–3,6 GHz 19 Von-Neumann-Architektur: Komponenten Steuert Programmfluss Auch: ALU (Arithmetic Logic Unit) Sagt Rechenwerk was zu tun ist. Addition, etc Verbindet Daten (Quelle und Ziel) mit ALU Steuert Übertragung (zur Ein- und Ausgabe) von Daten Interaktion mit Peripherie: Lochstreifenleser, Bildschirm, Keyboard, … Speichert Daten und Programm (RAM) 20 Beispiel: Moderne Rechnerarchitektur Ein-/ Ausgabewerk CPU mit Rechenwerk und Steuerwerk Speicherwerk Busse 21 Peripherie • Beispiele – – – – – – Festplatten Maus Tastatur Drucker Bildschirm ... • Bussystem – Verbindet Prozessor, Speicher und Peripherie – Zur Übertragung von Daten zwischen diesen Komponenten 22 Grafikkarte Bildquelle: Clemens Pfeiffer, http://upload.wikimedia.org/wikipedia/commons/9/97/PCI-Express-graphics-board.jpg Speicherwerk • Auch: Random Access Memory (RAM) – Enthält Programm und Daten • Wahlfreier Zugriff auf Speicherzellen – Wahlfrei: Muss nicht sequenziell oder in Blöcken gelesen/geschrieben werden – Gegenbeispiel: EEPROM – Zugriff auf einzelne Zellen über Adresse • Bei großen Speichern: Wortweiser Zugriff – Wortbreite abhängig von Architektur (Busbreite) – Beispiele: 8-, 32-, 64-Bit Adresse Inhalt ... ... 1001 12 1002 123 1003 7 1004 7 1007 9 1008 11 ... ... 23 Central Processing Unit (CPU) • Agiert in Takten – Gegeben durch Taktfrequenz • Hat interne Speicher: Register CPU Steuerwerk Befehls-/Register-Speicher Programmzähler Befehlsdekoder steuert Rechenwerk • Arbeitet in vier Schritten 1. Fetch Befehl und Daten aus Speicher holen 2. Decode Befehl decodieren und Steuersignal an das Rechenwerk (ALU) anlegen 3. Execute Berechnung ausführen 4. Store Ergebnis in Speicher schreiben (Rechen-)Registerspeicher Rechenschaltungen 24 Central Processing Unit (CPU) • CPU führt ständig Befehle aus Adresse – Befehl wird aus dem Speicher gelesen Inhalt ... – Instruction Pointer (IP) Register enthält Adresse des nächsten Befehls (für Fetch) 1001 234 – Beginnt nach Neustart an festgelegter Adresse 1002 Tu dies – Wird nach jedem Befehl verändert (z.B. um 4 erhöht) 1003 Tu das 1004 123 1007 1 • Befehle 1008 – Arithmetische/logische Operationen ... – Steuerung der zeitlichen Reihenfolge anderer Befehle • Wie unterscheidet die CPU Befehle von Daten? 25 Abarbeitung von Programmen ... 1003 ... Lese von Speicher #1007 in Register A 1007 1 1008 2 Takt #1 Lese von Speicher #1008 in Register B Takt #2 ... 1005 Addiere Register B auf A Takt #3 A B 1006 Schreibe Register A in Speicher #1008 Takt #4 1 2 A B 3 2 1004 1007 1 1008 2 3 ... ... ... ... 1007 1 1008 3 ... 26 Die CPU – Maschinencode-Beispiel x86 00000000: EA 05 00 C0 07 B4 00 CD 16 2C 30 00 C0 04 30 88 00000010: C1 B4 0E BB 07 00 B0 0D CD 10 B0 20 CD 10 CD 10 00000020: B0 0D CD 10 88 C8 3C 30 72 DB 3C 3A 72 0C 3C 45 00000030: 73 D3 B0 31 CD 10 88 C8 2C 0A CD 10 EB C7 00 00 Sprungbefehl: Lade Programmzähler mit Adresse 07C0:0005 Datenregister mit Konstante laden: Schreibe 0 in das Register ah Ein-/Ausgabewerk benutzen: Signal „16“ bedeutet bei ah=0: Lese einen Tastendruck ein. Ergebnis (ASCII-Wert) wird in das Register al geschrieben Addiere: Rechne „Wert in al“ + „Wert in al“ und schreibe Ergebnis nach al. Und so weiter… Subtrahiere Konstante: Subtrahiere 30 vom Wert in al und schreibe Ergebnis nach al 27 Woher weiß man die Codes? • Beispiel: Intel Manual – http://www.intel.com/design/intarch/manuals/243191.htm 28 Woher weiß man die Codes? • Beispiel: Intel Manual – http://www.intel.com/design/intarch/manuals/243191.htm 29 Ausführung von Programmen Programm Programm Programm Programm Betriebssystem (Windows, Linux, Mac OS, ...) Treiber Treiber Programm Treiber Security - 04 Cryptology #30 Die Central Processing Unit (CPU) • CPU: Gewiefte Verschaltung von Transistoren • Transistor: Schalter – Abhängig vom Eingang lassen sie Strom passieren – Positive Spannung: Auch 1, Vdd oder High genannt – Lässt nur dann Strom von „oben“ nach „unten“ fließen wenn an A eine positive Spannung anliegt – Lässt nur dann Strom von „oben“ nach „unten“ fließen wenn an A keine positive Spannung anliegt 31 Die Central Processing Unit (CPU) • Transistoren sind so verschaltet, dass damit gerechnet werden kann • Verwendet das Binärsystem – Mit nur zwei unterschiedlichen Zuständen können alle möglichen Berechnungen realisiert werden – Wie funktioniert das konkret? • Wichtige Schaltung: NAND-Gatter 32 NAND-Gatter Positive Versorgungsspannung Eingang A Eingang B A B Ausgang A NAND B Masse Wahrheitstabelle? 33 NAND-Gatter • Eingabe – A = Low – B = Low • Ausgabe – Out = High Vdd A B A NAND B 0 0 1 34 NAND-Gatter • Eingabe – A = High – B = Low • Ausgabe – Out = High A B Vdd A NAND B 0 0 1 1 0 1 35 NAND-Gatter • Eingabe – A = Low – B = High • Ausgabe – Out = High Vdd A B A NAND B 0 0 1 1 0 1 0 1 1 36 NAND-Gatter • Eingabe – A = High – B = High • Ausgabe – Out = Low Vss A B A NAND B 0 0 1 1 0 1 0 1 1 1 1 0 37 Andere logische Verknüpfungen • CPUs bestehen ausschließlich aus NANDs – Realisieren damit alle Rechenarten und logische Verknüpfungen • Man kann jede beliebige logische Verknüpfung auf NAND Gatter zurückführen – Logikchips bestehen nur aus NAND Gattern – Logik entsteht durch Verknüpfung dieser Gatter 38 NOT x mittels NAND realisieren • Wahrheitstabelle NOT • Wahrheitstabelle NAND x y x NOT x 0 1 1 0 x NAND y 0 0 1 0 1 1 1 0 1 1 1 0 • NOT mittels NANDs x NOT x x NAND x 0 1 1 1 0 0 39 NOT x = x NAND x • Eingabe – A = Low • Ausgabe – Out = High Vss A A A NAND A 0 0 1 40 NOT x = x NAND x • Eingabe – A = Low • Ausgabe – Out = High Vss A A A NAND A 0 0 1 1 1 0 41 Logische Verknüpfungen mit NANDs Verknüpfung Umsetzung NOT x x AND y x NAND y x NAND x (x NAND y) NAND (x NAND y) x NAND y x OR y (x NAND x) NAND (y NAND y) x NOR y ((x NAND x) NAND (y NAND y)) NAND ((x NAND x) NAND (y NAND y)) x XOR y x XNOR y (x NAND (y NAND y)) NAND ((x NAND x) NAND y) ((x NAND y) NAND y)) NAND ((x NAND y) NAND x)) (x NAND y) NAND ((x NAND x) NAND (y NAND y)) ≡ x⇔y verum (x NAND x) NAND x falsum ((x NAND x) NAND x) NAND ((x NAND x) NAND x) 42 Anwendung: Addition • Dezimale Addition – Zahlen {0,1,2,3,4,5,6,7,8,9} – Beispiel: 9+1 = 0 Übertrag 1 x x+y Addition y Übertrag • Binäre Addition – – – – – Zahlen {0,1} 0+0=0 0+1=1 1+0=1 1 + 1 = 0 Übertrag 1 x y x+y Übertrag 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 43 Anwendung: Addition • Umsetzung – x+y: x XOR y (x NAND (y NAND y)) NAND ((x NAND x) NAND y) x y x+y Übertrag 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 x XOR y x⊕y – Übertrag: x AND y (x NAND y) NAND (x NAND y) x AND y xɅy • Fertige Schaltung nennt sich “Halbaddierer” 44 Volladdierer • Zusätzlicher Eingang für Übertrag vorhergehender Berechnung 0 1 0 1 + • Lässt sich auch zwei Halbaddierern und einem ODER-Gatter konstruieren x y Übertrag 1 1 0 x+y Addition Übertrag 45 3-bit Addierwerk • Eingabe: Zwei 3-bittige Zahlen x2x1x0 und y2y1y0 • Ausgabe: 4-bittige Zahl r3r2r1r0 (inkl. Übertrag) – Für die Berechnung jeder Ausgabe wird ein Takt benötigt x x+y y Addition Üneu Üein x2 y2 x x+y y Addition Üneu Üein x1 y1 x0 y0 0 x x+y y Addition Üneu Üein r0 r1 r2 r3 46 Central Processing Unit (CPU) • Auf ähnliche Art und Weise lassen sich alle Grundrechenarten realisieren • Ebenfalls so realisiert: Befehlsdekoder, etc. • Wichtig – Repräsentation von Zahlen im Computer – Rechnen mit (heute ausschließlich binären) Zahlen 47 Zusammenfassung • Computer sind weniger „magisch“ als vielleicht gedacht • Programmierer: normal keine Kenntnis der Maschinensprache erforderlich • Erledigen Entwicklerwerkzeuge (sog. Compiler) auf Basis höherer Programmiersprachen 48 NAND-Gatter • Eingabe – A = High – B = High • Ausgabe – Out = Low Vss A B A NAND B 0 0 1 1 0 1 0 1 1 1 1 0 49