1. Organisation und Überblick Informatik II Vorlesung: 4 Semesterwochenstunden Informatik II SS 2006 Übung zur Vorlesung: 2 Semesterwochenstunden Kapitel 1: Organisation und Überblick Dienstag, 14:15-15:45 Uhr, MN67 Freitag, 14:15-15:45 Uhr, MN67 Dienstag, 16:00-17:30 Uhr, MN67 Theoretische/praktische Tutorenstunden: 2 Semesterwochenstunden Raum/Zeit je nach Gruppe Dr. Michael Ebner Dr. René Soltwisch Lehrstuhl für Telematik Institut für Informatik Universität Göttingen - Informatik II - SS 2006 1. Organisation und Überblick 1. Organisation und Überblick Verantwortliche Personen Webseiten Dr. Michael Ebner (Vorlesung) Email: [email protected] Telefon: (05 51) 39-1 44 09 Dr. René Soltwisch Email: [email protected] Telefon: (05 51) 39-1 44 13 Vorlesungsseite: http://user.informatik.uni-goettingen.de/~info2/SS2006/ Wiki: https://wiki.informatik.uni-goettingen.de/ wiki/index.php/Module:Informatik2 Univis: http://univis.uni-goettingen.de (Vorlesungsverzeichnis Æ Interdisziplinäre Wissenschaftliche Zentren Æ ZFI Æ Pflichtblöcke Æ Informatik) Bachelor/Master Studiengang Informatik: http://www.informatik.uni-goettingen.de/studies Dipl.-Inf. Marco ZibullAndre Siebeck (Übung/Tutorien) Email: [email protected] Telefon: (05 51) 39-1 44 20 Dipl.-Inform. Marc Njoku Email: [email protected] Telefon: (05 51) 39-1 35 81 1.2 Gemeinsame email Adressen: [email protected]: Ebner, Soltwisch, Zibull, Njoku v_info2_1@, ..., v_info2_7@: Jeweiliger Tutor v_info2_all@: Dozenten und Tutoren Universität Göttingen - Informatik II - SS 2006 1.3 Universität Göttingen - Informatik II - SS 2006 1.4 1. Organisation und Überblick 1. Organisation und Überblick Tutorien Übungszettel I Einteilung über verteilte Tutorenliste Gruppenwechsel sind in eigener Regie vorzunehmen und sind mit den jeweiligen Tutoren abzustimmen Wechsel zwischen theoretischer und praktischer Tutorenstunde entscheidet Tutor bzw. Gruppe Konto im Informatik CIP-Pool ist notwendig (nicht Numerik-Pool!) Termine Ausgabe: Vor der Übung am Dienstag Rückgabe: Dienstag, bis 14:15 Uhr, Info II Kästen in der NAM elektronische Abgabe nur bei Programmen CIP = Computer-Investitions-Programm des BMBF Voraussichtlich 11 Übungszettel á 100 Punkte max. zwei Studierende können einen Übungszettel gemeinsam abgeben (Gemeinsame Abgabe ist sogar erwünscht!) 50% der Gesamtpunktzahl sind zum Bestehen der Übungszettel hinreichend Montag 14-16Uhr und 16-18Uhr Mittwoch 11-13Uhr, 16-18Uhr und 18-20Uhr Donnerstag 9-11Uhr Freitag 16-18Uhr Tutorien beginnen ab dem 24. April Die Einteilung wird am Freitag, den 21. April bekannt gegeben Universität Göttingen - Informatik II - SS 2006 1.5 Universität Göttingen - Informatik II - SS 2006 1. Organisation und Überblick 1. Organisation und Überblick Übungszettel II Klausur Sollten wir anhand der gemachten Fehler erkennen, dass Schriftliche Klausur über gesamten Stoff der Vorlesung Übungszettel abgeschrieben worden sind, erkennen wir diese nicht an. Korrekt abgeschriebene Lösungen helfen Ihnen nicht, Ihr Wissen zu überprüfen und zu intensivieren und helfen uns nicht missverständliche Vorlesungsinhalte zu erkennen und ggf. zu MUNOPAG/WOPAG für BScInf, WiInf, WiPäd, etc. Ansonsten erfolgt die Anmeldung über eine Liste im Sekretariat des Lehrstuhls für Telematik Leistungszertifikate und Scheine können nur über das Bestehen der Klausur erstanden werden 1.7 Dauer: 120 Minuten Termin: Mittwoch, 26. Juli, 9:00 - 11:00Uhr Ort: ZHG 011 Kreditpunkte: 9 ECTS Klausureinsicht: Freitag, 28. Juli, 10:00-12:00Uhr, Raum MN68 Anmeldung verbessern bzw. zu wiederholen. Universität Göttingen - Informatik II - SS 2006 1.6 Für Nebenfächler werden wahlweise benotete und unbenotete Scheine ausgestellt Universität Göttingen - Informatik II - SS 2006 1.8 1. Organisation und Überblick 1. Organisation und Überblick Literatur I Literatur II Douglas E. Comer: “Essentials of Computer Architecture”, Prentice Hall International, ISBN: 0-13-196426-7, 2004, http://www.eca.cs.purdue.edu W. Stallings: „Betriebssysteme - Prinzipien und Umsetzung“, Prentice Hall, 2003, ISBN 3-8273-7030-2 Hopcroft, Motwani, Ullman: „Einführung in die Automatentheorie, Formale Sprachen und Komplexitätstheorie“, Pearson Studium 2002, ISBN 3827370205 Uwe Schöning: „Theoretische Informatik kurzgefaßt“, 2001, ISBN 3827410991 Uwe Schöning: „Logik für Informatiker“, Spektrum Akademie Verlag Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman: „Compilerbau.“Oldenbourg Verlag 1999, Teil 1: ISBN 3-486-25294-1, Teil 2: ISBN 3-486-25266-6 G. Krüger & D. Reschke: „Lehr- und Übungsbuch Telematik --- Netze – Dienste – Protokolle“, Fachbuchverlag Leipzig (Carl-Hanser), 2. Auflage, ISBN 3-446-22073-9, 2002 Universität Göttingen - Informatik II - SS 2006 1.9 1. Organisation und Überblick Überblick Rechenberg & Pomberger: „Informatik-Handbuch“, Hanser Verlag, ISBN 3446-21842-4 Wikipedia: http://de.wikipedia.org Wikibooks: http://www.wikibooks.de Weitere Literaturangaben sind auf der Webseite zur Vorlesung zu finden oder werden im Laufe der Vorlesung bekannt gegeben Die Folien zur Vorlesung werden auf der Webseite zur Vorlesung veröffentlicht VORSICHT: Nicht alle Inhalte der Vorlesung sind auf den Folien berücksichtigt! Der Tafelanschrieb ist daher auch zu berücksichtigen!!! Fehler auf den Folien bitte per email melden (Nobody is perfect!) Universität Göttingen - Informatik II - SS 2006 1.10 1. Organisation und Überblick Detaillierter Überblick I Compilerbau (Kapitel 7) Automaten und Sprachen (Kapitel 6) 1. Einführung Betriebssysteme (Kapitel 5) Vorstellung der beteiligten Personen Ablauf der Übungen Inhalt der Vorlesung 2. Zahlen und Logik Maschinenorientierte Programmierung (Kapitel 4) von-Neumann-Rechner (Kapitel 3) 3. Von-Neumann-Rechner Speicher Zahlen und Logik (Kapitel 2) Kommunikation (Kapitel 8) Logische Schaltnetze und Schaltwerke Rechnermodelle 4. Grundlagen der maschinenorientierten Programmierung von-Neumann-Rechner Universität Göttingen - Informatik II - SS 2006 Informationsdarstellung Zahlensysteme Rechnerarithmetik Aussagenlogik und logische Gatter Prädikatenlogik 1.11 Assemblerprogrammierung Universität Göttingen - Informatik II - SS 2006 1.12 1. Organisation und Überblick 1. Organisation und Überblick Detaillierter Überblick II Motivation: Wie funktioniert ein Computer??? Anwendungen (Browser, Email, etc.) 5. Grundlagen von Betriebssystemen Prozesse und Threads Interprozesskommunikation Automaten Betriebssystem & Formale (Linux, Compiler Sprachen Windows, Assembler MacOS, ...) Software 6. Automaten und formale Sprachen Chomsky-Hierarchie Reguläre Sprachen und endliche Automaten Kontextfreie Sprachen und Kellerautomaten Befehlsarchitektur Hardware Prozessor Speicher 7. Compilerbau Digitale Logik Schaltkreisdesign Transistoren, Layout integrierte Schaltungen Grundlagen Rechnernetze Grundlegende Protokollmechanismen Lokale Netze und Internet Universität Göttingen - Informatik II - SS 2006 Verberge unnötige Implementierungsdetails Hilft zur Beherrschung realer, komplexer Systeme 1.13 Universität Göttingen - Informatik II - SS 2006 Wo und wie Daten abgelegt werden macht einen großen Unterschied. Schon das Umordnen von Statements kann hilfreich sein. Jeder Rechner hat 5 klassische Komponenten Compiler können optimierten Code für einen Prozessor erzeugen Betriebssysteme verwalten Ressourcen Gutes Eingabe/Ausgabe Verhalten ist für Datenbanken und Netzwerke wichtig Verwaltung der eigenen Daten/Code im Speicher Universität Göttingen - Informatik II - SS 2006 1.15 Grundlegende Hardwarekomponenten: Datenpfad, Speicher, Eingabe/Ausgabe Geräte und Kontrolle; sowie die darunterliegende digitale Schaltungen/Logik Prinzipien von Software: Betriebssysteme, Kommunikationssysteme, Compiler; Automaten und formale Sprachen Prinzipien der Abstraktion sind wichtig zum Verstehen und Bauen von geschichteten Systemen Softwareentwicklung erfordert oftmals wissen über Rechnersysteme Informatik II studiert die Funktionsweise von Rechnern Was passiert beim Übersetzen des Quellcodes? Warum ist Rechnerarithmetik manchmal falsch? Was ist ein Busfehler oder Speicherzugriffsfehler? Wie kann schneller ausführbarer Code erstellt werden? Zusammenfassung Das Wissen über die Rechnerarchitektur hilft das Design von Programmiersprachen zu verstehen 1.14 1. Organisation und Überblick Architektur und Programmierung Informatik II Grundidee: Ebenen der Abstraktion 1. Organisation und Überblick E/A System Datenpfade & Kontrolle Aufbau und Funktionsweise von Compilern Lexer und Parser Konzepte von Programmiersprachen 8. Grundlagen von verteilten Systemen Netzwerke (TCP/IP, Ethernet, WLAN, ... Datenrepräsentation ist wichtig für die Leistung des Systems, Verwendung von Ressourcen und besseren Genauigkeit. Abstraktion und hierarchisches Design sind fundamentale Konzepte zur Handhabung von Komplexität Rohe Daten (Bitmuster) können alles bedeuten (integer, float, char, etc.). Erst ein Programm legt die Bedeutung fest Wissen über Rechnersysteme hilft beim Programmieren und beim Software-Engineering Universität Göttingen - Informatik II - SS 2006 1.16 2. Zahlen und Logik Überblick Zahlen Informationsdarstellung Zahlensysteme Rechnerarithmetik Informatik II Logik SS 2006 Aussagenlogik und logische Gatter Prädikatenlogik Kapitel 2: Zahlen und Logik Teil 1: Zahlen Dr. Michael Ebner Dr. René Soltwisch Lehrstuhl für Telematik Institut für Informatik Universität Göttingen - Informatik II - SS 2006 2. Zahlen und Logik 2. Zahlen und Logik Nachricht, Daten, Information (1) Nachricht, Daten, Information (2) Gleiche Informationen sind in verschiedenen Codierungen möglich Für verschiedene Empfänger hat die gleiche Information oft unterschiedliche Bedeutung Information muss für den Empfänger nicht neu sein, evtl. ist der Informationsgehalt auch leer Nachricht „Zeichen oder kontinuierliche Funktion, die zum Zwecke der Weitergabe Information aufgrund bekannter oder unterstellter Abmachungen darstellen.“ (DIN 44300) Daten „Zeichen oder kontinuierliche Funktion, die zum Zwecke der Verarbeitung Information aufgrund bekannter oder unterstellter Abmachungen darstellen.“ (DIN 44300) Information Information „Inhalt von Nachrichten oder Daten“ Nachricht Daten Information 2.1-2 Codierung Information Codierung Information Weitergabe Verarbeitung Bedeutung/Inhalt Codierung 2.1-3 Zweck Nachricht ‘5 Grad’ menschliche Sprache Duden Weitergabe der Information in einem Gespräch Datum ‘5 Grad’ 1011’0101 0010’0000 1100’0111 1111’0010 0110’0001 0110’0100 ASCII Weiterverarbeitung in einem Textverarbeitungsprogramm Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 Interpretation Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-4 2. Zahlen und Logik 2. Zahlen und Logik Informationsdarstellung Analoge Daten & Digitale Daten Zur Übertragung von Nachrichten/Daten müssen diese in Signale umgesetzt werden. Signal: physikalische Darstellung von Nachrichten/Daten Signaltypen: Radiowellen, Rauchsignale, Stromfluss, Schallwellen, usw. Physikalische Prozesse werden im Allgemeinen durch kontinuierliche Funktionen beschrieben. Diese liefern im Prinzip unendlich viele Werte, wobei sich diese aufgrund der Unschärferelation nicht unbedingt unterscheiden lassen. Wo begegnen uns analoge Daten? Quecksilberthermometer, Uhren, Schallplatten, Audio-Kassetten, Waagen Digitale Daten Signalparameter: Ausprägung eines Signals mit dessen Hilfe Nachrichten/Daten dargestellt werden. Parameterarten: Frequenz, Farbe, Form, Spannung, Lautstärke, usw. Signal Analoge Daten Quantisierung, d.h. der eventuell unendliche Wertebereich wird auf endlich viele Werte abgebildet Wo begegnen uns digitale Daten? DVD, CD, Computerdisketten, digitale Uhren, digitale Thermometer, MP3 Information/Wissen Nachricht/Daten Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-5 2. Zahlen und Logik Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-6 2. Zahlen und Logik Vorteile von digitalen Daten Wie kommt man in einer ‘analogen‘ Welt zu digitalen Daten? Auswahl diskreter Werte zur digitalen Interpretation erleichtert die rechnergestützte Verarbeitung und kann auch die Genauigkeit erhöhen Daten werden in Rechnern praktisch ausschließlich in digitaler Form dargestellt/verarbeitet. Meist in Form von „binären“ Signalen Binäre Signale: Signale, die nur zwei Zustände annehmen können. Beispiel: Digitalisierung von Sprache Analoge Telephonie basiert auf der “Ähnlichkeit” von elektronischen Wellen und Schallwellen Sprachübertragung in der analogen Telephonie (‘analog‘ ≅ ‘ähnlich‘) Zustand 1 0 Anmerkung: Prinzip gilt auch für die Digitalisierung von Musik (z.B. MP3), erfordert aber eigene Annahmen. Zeit Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-7 Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-8 2. Zahlen und Logik 2. Zahlen und Logik Sprach- und Signalisierungsübertragung Digitalisierung: Prinzip (1/3) „digital“ ≅ „ziffernmäßig“ Beispiel: Zusätzlich zur Nutzinformation werden Signalinformationen übertragen. Menge von Kartoffeln in einem Sack lässt sich durch zählen oder wiegen beschreiben. 100 kg lässt sich durch die Folge 1-0-0 im Dezimalsystem beschreiben Digitaltechnik: binärer Zeichenvorrat, d.h. 0 und 1 10010 ≅ 11001002 Ähnlich lassen sich elektrische Wellen in einem Telefon und der Telefonleitung beschreiben. Fazit: Elektrische Welle wird in regelmäßigen Abständen “abgehorcht” und der dann aktuelle Wert wird notiert Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-9 2. Zahlen und Logik Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-10 2. Zahlen und Logik Digitalisierung (2/3) Digitalisierung (3/3) Abtasttheorem Ein Signal muss mindestens mit einer (Abtast-) Frequenz abgetastet werden, die doppelt so hoch ist wie die höchste im Signal enthaltene Frequenz. Andernfalls kann das Signal nicht originalgetreu reproduziert werden. Abtastfrequenz = 1/(Abstand zwischen zwei Abtastpunkten) •Filter für Frequenzen >3400Hz Telephonie: Frequenzen (Töne): Abtastfrequenz: Tiefpass: 300 Hz bis 3400 Hz 8000 Hz Filter für Frequenzen > 3400 Hz •(------------ Hüllkurve angedeutet) Durch Abtastung entsteht eine Folge von Impulsen (Werten). Hüllkurve dieser Abtastwerte ergibt wieder das alte Signal. Verfahren: Pulsamplitudenmodulation (PAM) Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-11 Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-12 2. Zahlen und Logik 2. Zahlen und Logik Quantisierung (1/2) Quantisierung (2/2) Impulse sind ja immer noch analog, d.h. die gemessenen Werte sind für die digitale Repräsentation u.U. noch zu genau. Sie müssen zu digitalen Signalen verarbeitet werden. (⇒ Einschränkung auf eine darstellbare endliche Wertemenge) Maximal mögliche Amplitudenwert wird in eine endliche Anzahl von Amplitudenstufen unterteilt (=quantisiert) Je mehr Stufen (Quantisierungsschritte) benutzt werden, desto genauer wird das Originalsignal abgetastet und desto originalgetreuer kann es wieder gewonnen werden. Telekom-Netzbetreiber verwenden 28 = 256 Quantisierungsschritte (mit 8Bit darstellbar) Bitrate eines Fernsprechkanals? Abtastfrequenz: 8000Hz = 8000/s 8Bit * 8000/s = 64000 Bit/s = 64 kBit/s Informationsdarstellung Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-13 2. Zahlen und Logik Universität Göttingen - Informatik II - SS 2006 2.1-14 2. Zahlen und Logik Zeitmultiplexverfahren Datenaufbewahrung Physikalische Prozesse mit deren Hilfe sich Signale und Informationen aufbewahren und wiederherstellen lassen Je nach Anwendung kann man zwischen RAM und ROM unterscheiden: Speichermedium ROM RAM 2.1-15 Wert 1 Webstuhl-Brettchen Bohrung Keine Bohrung Lochstreifen/Lochkarte Lochung Keine Lochung Kippschalter Kontakt zu Kontakt offen Magnetschicht ↑H ↓H Transistor 0,5 V 4,5 V Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 Wert 0 Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-16 2. Zahlen und Logik 2. Zahlen und Logik Codierung - Grundlagen Codierung - Codes (1/2) Alphabet (Zeichenvorrat): Code: Endliche Menge von Zeichen, die zur Darstellung von Informationen benutzt wird Beispiele: Ziffern: {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} Alphanumerisches Alphabet: {a,...,z, A,...,Z, 0,...,9} Binärzeichen: {0, 1} zwei Zeichenvorräte: Urbildmenge und Bildmenge eindeutige Abbildung von der Urbildmenge auf die Bildmenge Binärcode: Code, bei dem jedes Zeichen der Bildmenge ein Wort aus Binärzeichen (Binärcode) ist. Wort: Folge von Zeichen, die in einem bestimmten Kontext als Einheit betrachtet werden Beispiele: Zahlwörter: Schreibwörter: Binärwörter: 105, 75, 73, 15, ... Kohlkopf, Hunger, Hund 001, 10010010, 1, 0, ... Bemerkungen zum Kontext: in Englisch hat das Wort ‘Kohlkopf’ keine Bedeutung ‘010’ kann von Rechner mit Wortlänge 8 nicht verarbeitet werden Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-17 2. Zahlen und Logik 2.1-18 Alphanumerische Codes Sind zur gemeinsamen Darstellung von Zahlen und Buchstaben in Texten notwendig. Alphabet: Beispiel: Codierung der Zahlen 0 ... 9 als Binärwörter Abkürzungen BCD: Binary Coded Decimal EBCDIC: Extended Binary Decimal Interchange Code ASCII: American Standard Code for Information Interchange BCD EBCDIC (Dualzahl) 0 1 2 3 4 5 6 7 8 9 + - Universität Göttingen - Informatik II - SS 2006 2. Zahlen und Logik Codierung - Codes (2/2) Dezimalzahl Informationsdarstellung 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 ASCII (P: Paritätsbit) 1111’0000 1111’0001 1111’0010 1111’0011 1111’0100 1111’0101 1111’0110 1111’0111 1111’1000 1111’1001 P011’0000 P011’0001 P011’0010 P011’0011 P011’0100 P011’0101 P011’0110 P011’0111 P011’1000 P011’1001 P010’1011 P010’1101 26 Großbuchstaben (A ... Z) 26 Kleinbuchstaben (a ... z) 10 Zahlen (0 ... 9) 62 Zeichen 62 Zeichen lassen sich in einem Binärwort der Länge 6 codieren (26 = 64). Was ist mit nationalen Sonderzeichen und Satzzeichen? Zum Beispiel: Ä Ü Ö , ; : - + ( ) Man benutzt daher einen 7 Bit Code mit dem sich 128 Zeichen (27 Zeichen) codieren lassen. Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-19 Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-20 2. Zahlen und Logik 2. Zahlen und Logik Codierung - ASCII Code (1/2) Bits P000 76543210 ASCII: American Standard Code for Information Interchange 8 - Bit Code: 7 Bit zur Codierung von Zeichen 1 Bit Paritätsbit P001 P010 P011 P100 P101 P110 P111 0000 NULL DC0 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 SOM EOA EOM EOT WRU RU BELL FE HT/SK LF DC1 DC2 DC3 DC4 ERR SYNC LEM S0 S1 S2 ! „ # $ % & ‘ ( ) * 1011 V/TAB S3 1100 1101 1110 1111 FF CR SO SI S4 S5 S6 S7 0 @ P ‘ p 1 2 3 4 5 6 7 8 9 : A B C D E F G H I J Q R S T U V W X Y Z a b c d e f g h i j q r s t u v w x y z + ; K , . / < = > ? L M N O Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-21 2. Zahlen und Logik ↑ ← l m n o ACK UC ESC DEL Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-22 2. Zahlen und Logik Codierung - ASCII Code (2/2) Der Unicode-Standard (1/4) Die meisten Computer arbeiten jedoch mit einer 8 Bit Codierung ohne Paritätsbit, d.h. anstelle von 27 (=128) Zeichen werden 28 (= 256) Zeichen kodiert. Man spricht dann von “Extended Character Sets“. Extended Character Sets werden z.B. benutzt um Linienzeichnungen (z.B. ⎤ oder ⎝) und andere wichtige Zeichen zu kodieren (z.B. ☺ oder ). Natürlich auch zur Berücksichtigung von nationalen Varianten (z.B. ß, ü, Ü, ö, Ö, ä, Ä, û, ú, ù, Æ, æ, è, é, Ó). Typischerweise reichen 256 Zeichen jedoch nur aus um eine nationale Variante zu unterstützen, wodurch es dann wieder viele verschiedene nationale Extended Character Sets gibt. Ein Ausweg aus diesem Chaos soll der Unicode sein, einer 16 Bit Kodierung von Zeichen, bei der die ersten 128 Kodierungen der normalen 7 Bit ASCII entsprechen. Allgemeines Universeller Standard zur Zeichencodierung Voll Identisch mit ISO/IEC 10646:2003: Information Technology Universal Multiple- Octet Coded Character Set (UCS) Ziele: Codierung multilingualer Texte Einfacher Austausch von Textdateien über nationale Grenzen hinweg Einbeziehung mathematischer und technischer Symbole Unicode ist Standardcodierung bei Java Unterstützung in C++ durch Datentyp wchar_t und Klassenbibliotheken wie QT Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 k \ 2.1-23 Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-24 2. Zahlen und Logik 2. Zahlen und Logik Der Unicode-Standard (2/4) Der Unicode-Standard (3/4) Zeichenumfang Zeichencodierung Jedes Zeichen ist eindeutig einem 16-Bit-Codewert zugewiesen ≈ 65.500 Zeichen; ausreichend für die Codierung aller Zeichen aller geschriebenen Sprachen Codierung (v.4.0) Alphabetics, Symbols 11 649 CJK Ideographs 27 786??? Hangul Syllables 11 172 Private Use 6 400 Surrogates 2 048 Controls 65 Unicode entspricht in Not Characters den unteren Total assigned 16-bit code values 128 Werten Unassigned 16-bit code values dem ASCII-Code 34 59 213 Unterstützte Sprachen: Latein, Griechisch, Chinesisch/Japanisch/Koreanisch, Kyrillisch, Arabisch, Bengalisch, Gujarati,... Zusammengesetzte Zeichen (z. B. Umlaute) können wahlweise dargestellt werden: durch „vorkomponierte“ Zeichen (aus Kompatibilität), z. B. ä, oder durch Kombination von Grundzeichen und Diakritika (vorteilhaft bei Sortierung), z. B. a“ Änderung der Schreibrichtung kann durch spezielle Zeichen eingeleitet werden, z. B. beim Wechsel zwischen Englisch und Arabisch Unicode legt nicht das Aussehen (glyph) von Zeichen fest; statt dessen Zuweisung eines Namens, z. B. „LATIN CAPITAL LETTER A“ 6 3236 Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-25 2. Zahlen und Logik Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2. Zahlen und Logik Der Unicode-Standard (4/4) Codierung - Schichtenmodell Schichtenmodell als Gedankenmodell Quellen Unicode Consortium (http://www.unicode.org) The Unicode Consortium. The Unicode Standard, Version 4.1.0, defined by: The Unicode Standard, Version 4.0 (Boston, MA, Addison-Wesley, 2003. ISBN 0-321-18578-1), as amended by Unicode 4.0.1 (http://www.unicode.org/versions/Unicode4.0.1) and by Unicode 4.1.0 (http://www.unicode.org/versions/Unicode4.1.0). C3 C2 C1 C0 Beispiel: Codierungen sind häufig geschachtelt. D.h. eine höhere Schicht stützt sich auf die nächst tiefere ab. Die höhere Schicht nimmt Zeichen entgegen, ignoriert aber deren tiefere Codierung. C++ – Schlüsselwörter Großbuchstaben ISO ISO 7-Bit 8-Bit Bytes Binärstellen, Bits Schaltzustände Elektronenebene Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-26 2.1-27 Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-28 2. Zahlen und Logik 2. Zahlen und Logik Rückblick: Information und Informationsdarstellung Überblick Signal, Daten, Nachricht, Information Analoge Daten & digitale Daten Codierungen Zahlen Informationsdarstellung Zahlensysteme Rechnerarithmetik Zahlencodes alphanumerische Codes Logik Aussagenlogik und logische Gatter Prädikatenlogik Codes BCD Code EBCDIC Code ASCII Code Unicode Schichtung von Codierungen Informationsdarstellung Universität Göttingen - Informatik II - SS 2006 2.1-29 2. Zahlen und Logik 2.1-30 2. Zahlen und Logik Polyadische Zahlensysteme (1/2) Polyadische Zahlensysteme (2/2) Potenzen zu einer Basis B als Stellenwert N-1 n = ∑ai * Bi z.B. Codierung von 198510 BCD (kein polyadisches Zahlensystem): 0001 1001 1000 0101 (B, ai ∈ N0, B > 1) i=0 1 9 = ((...(aN-1 * B) + aN-2) * B + ...)*B + a1) *B + a0 (Horner Schema) besagt das <ZAHL> einen Wert im Zahlensystem mit der Basis <Basis> beschreibt. 123 im Dezimalsystem, z.B. 12310 11102 1110 im Dualsystem 5 Dualsystem (Basis 2): 111110000012 = 1*210 + 1*29 + 1*28 + 1*27 + 1*26 + 0*25 + 0*24 + 0*23 + 0*22 + 0*21 + 0*20 =(((((((((1*2 + 1)*2 + 1)*2 + 1)*2 + 1)*2 + 0)*2 + 0)*2 + 0)*2+ 0)*2+ 0)*2+ 1 =198510 Zahlensysteme Universität Göttingen - Informatik II - SS 2006 8 Dezimalsystem (Basis 10): 198510 = 1 * 103+9 * 102 +8 * 101 + 5 * 100 = ((1 * 10) + 9) * 10 + 8) *10 + 5 = aN-1 * BN-1 + aN-2 * BN-2 + ... + a1 * B1 + a0 Konvention: <ZAHL><BASIS> Universität Göttingen - Informatik II - SS 2006 2.1-31 Zahlensysteme Universität Göttingen - Informatik II - SS 2006 2.1-32 2. Zahlen und Logik 2. Zahlen und Logik Zahlensysteme mit Zweierpotenz als Basis Umrechnung zwischen Zahlensystemen Binärsystem (Basis 2) Vierersystem (Basis 4) Oktalsystem (Basis 8) Hexadezimalsystem (Basis 16) (Zeichenvorrat: 0...9, A...F) Einfache Umrechnung: „Umgruppieren der Binärstellen“ Beispiel: 146310 = 101101101112 = 01 01 10 11 01 11 1 1 2 3 1 3 = = 010 110 110 111 2 6 6 7 0101 1011 0111 5 B 7 Im allgemeinen reicht es nicht aus einfach nur die Binärstellen umzugruppieren. Empfehlung für die manuelle Umrechnung: I. Darstellung mit Basis B1 Multiplikative Umrechnung im Zielsystem (hier Basis 10) (1) * II. Darstellung mit Basis 10 = 1123134 Dividierende Umrechnung im Quellsystem (hier Basis 10) (2) / =26678 III. Darstellung mit Basis B2 =5B716 Zahlensysteme Universität Göttingen - Informatik II - SS 2006 2.1-33 2. Zahlen und Logik 2.1-34 Beispiel für manuelle Umrechnung (2/3) DB716 = ???7 (1) Multiplikative Umrechnung mit Basis 10 (2) + B16 * 16101 + 716 * 16100 = D16 * 25610 + B16 * 1610 + 716 = 1310 * 25610 + 1110 * 1610 + 710 = + + 710 = D16 * 16102 332810 = 17610 Dividierende Umrechnung im Quellsystem (Quellsystem: Basis 10, Zielsystem: Basis 7) (Einfaches ‘Ausmultiplizieren’) 351110 oder entsprechend dem Horner Schema DB716 Universität Göttingen - Informatik II - SS 2006 2. Zahlen und Logik Beispiel für manuelle Umrechnung (1/3) DB716 Zahlensysteme 351110 / 7 = 501 Rest 4 = a0 501 / 7 = 71 Rest 4 = a1 71 / 7 = 10 Rest 1 = a2 10 / 7 = 1 Rest 3 = a3 1 / 7 = 0 Rest 1 = a4 0 / 7 = 0 Rest 0 = a5 ... / 7 = 0 Rest 0 = a6 = ((D16 * 1610) + B16) * 1610 + 716 = ((1310 * 1610) + 1110) * 1610 + 710 ... ... ... ... ... ... ... ... ... = (20810 + 1110) * 1610 + 710 ... ... ... ... ... ... 0 = an = 350410 + 710 = 351110 Universität Göttingen - Informatik II - SS 2006 (a4a3a2a1a0)7 = 131447 Zahlensysteme 2.1-35 Zahlensysteme Universität Göttingen - Informatik II - SS 2006 2.1-36 2. Zahlen und Logik 2. Zahlen und Logik Empfehlung für manuelle Umrechnung zwischen Zahlensystemen (Zusammenfassung) Beispiel für manuelle Umrechnung (3/3) Beispiel: DB716 = ???7 I. Darstellung mit Basis B1 Also: (1) Multiplikative Umrechnung im Zielsystem (hier Basis 10) * DB716 = 351110 = 131447 Schritt (1) Schritt (2) (Multiplikation) (Division) DB716 = ((D16 * 16) + B16) * 16 + 716 = ((13 * 16) + 11)*16 +7 = (208 + 11) * 16 + 7 = 219 * 16 + 7 = 3504 + 7 = 351110 II. Darstellung mit Basis 10 (2) Dividierende Umrechnung im Quellsystem (hier Basis 10) / 3511 501 71 10 1 :7 :7 :7 :7 :7 = 501 = 71 = 10 = 1 Rest = 0 Rest Zahlensysteme 2.1-37 2. Zahlen und Logik Zahlensysteme Universität Göttingen - Informatik II - SS 2006 2.1-38 2. Zahlen und Logik Direkte Umrechnung einer Zahlendarstellung mit Basis B1 in eine Zahlendarstellung mit der Basis B2 (1/2) Direkte Umrechnung einer Zahlendarstellung mit Basis B1 in eine Zahlendarstellung mit der Basis B2 (2/2) Dividierende Umrechnung im Quellsystem Multiplikative Umrechnung im Zielsystem Beispiel: DB716 = ???7 Beispiel: DB716 = ???7 Einfaches ‘Ausmultiplizieren’ DB716 4 = a0 4 = a1 1 = a2 = a3 = a4 DB716 = 351110 = 131447 III. Darstellung mit Basis B2 Universität Göttingen - Informatik II - SS 2006 Rest Rest Rest 3 1 = = = = D16 * 5147 167 * 5147 124637 131447 ( 1610 = 1016 = 227, 16102= 25610 = 5147) + + + B16 * 227 147 * 227 3417 + + + 716 107 107 DB716 / 716 = 1F516 1F516 / 716 = 4716 / 716 A16 / 116 / Rest 4 = a0 4716 Rest 4 = a1 = A16 Rest 1 = a2 716 = 116 Rest 3 = a3 716 = 016 Rest 1 = a4 oder entsprechend dem Horner Schema DB716 = = = = = ((D16 * 227) + B16) * 227 + 716 ((167 * 227) + 147) * 227 + 107 (4157 + 147) * 227 + 107 131347 + 107 131447 a4 a3 a2 a1 a0 = 131447 Zahlensysteme Universität Göttingen - Informatik II - SS 2006 2.1-39 Zahlensysteme Universität Göttingen - Informatik II - SS 2006 2.1-40 2. Zahlen und Logik 2. Zahlen und Logik Darstellung von Brüchen Handhabung von unechten Brüchen Brüche werden als negative Potenzen der Basis dargestellt. zB = -N ∑ai * Vor dem Komma anfallende Ziffern entsprechen dem Rest bei der Division im Quellsystem (vgl. Folie 2.1-36). (B, ai ∈ N0, B > 1, ai<B) Bi i=-1 Für Umrechnung Aufspalten in Horner Schema: z= 1 (a + -1 B 1 (a-2 + B 1 (a-3 + ... + B 1 (a-N+1 + B 1 a-N) ... ) B ganze Zahl und echter Bruch. zB = 0 , a-1 a-2 a-3 a-4 ... a-N Darstellung: Wiederholte Multiplikation mit der Basis B bringt die Ziffern ai vor das Komma: -N -N zB * B = a-1 + ∑ai * Bi (wobei immer gilt : ∑ai * Bi < 1) i=-2 z= a-1 + i=-2 1 (a + -2 B 1 B (a-3 + ... + 1 (a -N+1 + B 1 a ) ... ) -N B z.B.: 0.5310 * 1010 = 5,310 Zahlensysteme Universität Göttingen - Informatik II - SS 2006 2.1-41 2. Zahlen und Logik Universität Göttingen - Informatik II - SS 2006 2.1-42 2. Zahlen und Logik Umrechnung im Quellsystem Beispiel: Umrechnung im Quellsystem (1/2) Beispiel: 12,023 = ??,??2 Ganzahliger Anteil: 123 = 1012 Echter Bruch: 0,023 = 0,???2 Zahlensysteme 0,023 = 0,???2 (Bemerkung: 123 = 510) Dividierende Umrechnung im Quellsystem (vgl. Folie 2.1-36) bedeutet sukzessive Division durch 1/B (Division mit Bruch = Multiplikation mit Kehrwert des Bruches) Sukzessive Division durch 1/B entspricht einer Sukzessiven Multiplikation mit der Basis B. Der ganzzahlige Anteil bei den Multiplikationsschritten bildet die ai im Zielsystem. Zahlensysteme Universität Göttingen - Informatik II - SS 2006 2.1-43 Zahlensysteme Universität Göttingen - Informatik II - SS 2006 2.1-44 2. Zahlen und Logik 2. Zahlen und Logik 0,023 * 23 = 0,113 a-1 = 0 0,113 * 23 = 0,223 a-2 = 0 0,223 * 23 = 1,213 a-3 = 1 Beispiel: Umrechnung im Quellsystem (2/2) Ergebnis: 12,023 Periode 0,213 * 23 = 1,123 a-4 = 1 0,123 * 23 = 1,013 a-5 = 1 0,013 * 23 = 0,023 a-6 = 0 0,023 * 23 = 0,113 a-6 = 0 0,113 = 101,0011102 ~ 5,2221710 5,210 Darstellung von Brüchen in unterschiedlichen Zahlensystemen kann zu Ungenauigkeiten führen. d.h. 0,023=0,0011102 0,22 Zahlensysteme Zahlensysteme 3 Universität Göttingen - Informatik II - SS 2006 2.1-45 2. Zahlen und Logik Umrechnen im Zielsystem (2/2) z.B. 0.43657 ???10 (Erinnerung: multiplikative Umrechnung, vgl. Folie 2-34) wg. Darstellung als negativer Exponent der Basis heißt das Division Division nach Horner mit Anschreiben der Ziffern in umgekehrter Reihenfolge 1 7 * (4 + 5 2.1-46 2. Zahlen und Logik Umrechnen im Zielsystem (1/2) 0,43657 = Universität Göttingen - Informatik II - SS 2006 1 7 1 * (3 + 71 * (6 + 7 5))) 1 1 = ((( 7 + 6) * 7 + 3) * 7 + 4) * 1 7 510 : 710 = 0,714310 6, 714310 : 710 = 0,959210 3, 959210 : 710 = 0,565610 4, 565610 : 710 = 0,652210 0, 4 3 6 5 Zahlensysteme Universität Göttingen - Informatik II - SS 2006 2.1-47 7 0, 6 5 2 2 10 Zahlensysteme Universität Göttingen - Informatik II - SS 2006 2.1-48 2. Zahlen und Logik 2. Zahlen und Logik Überblick Zahlendarstellung und Rechnen im Dualsystem (1/3) Zahlen Durch N Bits lassen sich 2N Zahlenwerte codieren Nur positive Zahlen, Wertebereich: 0 ... (2N–1) Positive und negative Zahlen: Informationsdarstellung Zahlensysteme Rechnerarithmetik (N-1) - Bit Zahl mit Vorzeichen darstellbarer Wertebereich: [-2N-1 ... 0 ... 2N-1-1] Logik Aussagenlogik und logische Gatter Prädikatenlogik „Most significant“ Bit als Vorzeichencodierung 7 ↑ N=8 N= 16 6 5 4 3 2 1 0 „most significant bit“ 0 = positive Zahl 1 = negative Zahl Wertebereich: 0 ... 255 oder -128 ... +127 Wertebereich: 0 ... 65535 oder -32768 ... +32767 Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-49 2. Zahlen und Logik Universität Göttingen - Informatik II - SS 2006 2.1-50 2. Zahlen und Logik Zahlendarstellung und Rechnen im Dualsystem (2/3) Zahlendarstellung und Rechnen im Dualsystem (3/3) N Bits erlauben 2N Möglichkeiten zur Zahlendarstellung, d.h. nur eine Darstellung mit endlicher Genauigkeit. Was macht man? man führt Operationen auf einem Zahlenring durch Darstellung (Codierung) der Zahlen als Binärworte Bei positiven Zahlen: Zahlen n und n + BN sind nicht unterscheidbar (höchstwertige Bit geht verloren) Bei positiven und negativen Zahlen: Additionsüberlauf kann zu negativen Ergebnissen führen Beispiel: 0 1001110 78 + 0 1011000 1 0100110 | + 88 166 > 128 -38 negatives Vorzeichen Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-51 Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-52 2. Zahlen und Logik 2. Zahlen und Logik 3 Darstellungsformen für Zahlen 1. 2. 3. Darstellung mit Vorzeichen und Betrag (1/2) Vorzeichen und Betrag (engl. Sign-/Magnitude) Stellenkomplement Basiskomplement Wortlänge N N-1 Bits beschreiben den Betrag der Zahl 1 Bit beschreibt das Vorzeichen der Zahl zwei Darstellungen für die NULL engl. ‘Sign-/Magnitude Representation‘ Die Vorzeichen und Betrag Darstellung entspricht dem was man so kennt. Warum 3 Darstellungsformen? Ziel: möglichst einfache ALU (CPU Baustein, der Rechenoperationen durchführt) Wie macht man das? Subtraktion wird auf die Addition zurückgeführt Multiplikation wird auf die Addition zurückgeführt Division wird auf die Multiplikation (d.h. Addition) zurückgeführt Rechnerarithmetik Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 Universität Göttingen - Informatik II - SS 2006 2.1-53 2. Zahlen und Logik 2. Zahlen und Logik Darstellung mit Vorzeichen und Betrag (2/2) 0 Nachteile der Betrag-/Vorzeichen-Darstellung Man benötigt Addier- und Subtrahierwerk in der ALU Man benötigt spezielle Logik um zu bestimmen, ob addiert oder subtrahiert werden soll Beispiel: die Operanden x und y sollen addiert werden 011...1 100...0 111...1 -0 +0 111...1 2.1-54 10...0 00...0 es sind folgende Fälle zu unterscheiden: 011...1 Fall Beispiel für diese Darstellung: Dezimal Vorzeichen Betrag + 92 0000 0101 1100 - 92 1000 0101 1100 Operanden 2.1-55 ⇒ x≥0 –x ⇒ x < 0 +y ⇒ y≥0 –y ⇒ y < 0 Auszuführende Operation 1 +x +y (zwei positive Operanden) Addition 2 -x-y (zwei negative Operanden) Addition -(x + y) 3 |positiver Operand| ≥ |negativer Operand| +x, -y, |x| ≥ |y| bzw. +y, -x, |y| ≥ |x| Subtraktion x – y bzw. y – x 4 |negativer Operand| ≥ |positiver Operand| +x, -y, |x| < |y| bzw. +y, -x, |y| < |x| Subtraktion –(|y| – |x|) bzw. – (|x| – |y|) Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 +x x+y Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-56 2. Zahlen und Logik 2. Zahlen und Logik Komplementdarstellungen 1. 2. Stellenkomplement (1/2) C für das Stellenkomplement: N-1 C = BN – 1 Darstellung einer Zahl a: n = ∑ai * Bi i=0 Komplementbildung: Stellenkomplement (B-1 Komplement) Basiskomplement N-1 a= C–a= Ziel: Rückführung der Subtraktionen auf die Addition (BN-1) - ai * Bi i=0 Komplementbildung: b = C – b (für geeignetes C) Subtraktion durch Addition des Komplements: a+b = a–b+C ⇔ a–b = a+b–C N-1 = N-1 Bi+1 - N-1 Bi i=0 - i=0 ai * Bi i=0 | BN – 1 N-1 = d.h. wenn (1.) das Komplement leicht zu bilden ist und (2.) die Reduktion mod C einfach ist, dann kann die Subtraktion auf eine Addition des Komplements zurückgeführt werden ((B – 1) – ai) * Bi i=0 Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-57 2. Zahlen und Logik ((B – 1) – ai) bedeutet: (B-1)-Komplement kann für jede Stelle (= Stellenkomplement) gebildet werden. Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-58 2. Zahlen und Logik Stellenkomplement für die Basis 2 Stellenkomplement und andere Basen N-1 N-1 Wie funktioniert die (B-1)-Komplementbildung für die Basis 2? einsetzen in die bekannten Formeln: N-1 a = ∑ai * 2i Formeln: a = ∑ai * Bi; a = ∑ ((2 – 1) - ai ) * 2i Man kann das Stellenkomplement auch auf andere Zahlensysteme (neben dem Dualsystem) anwenden, z.B. Dezimalsystem (d.h. B = 10): i=0 i=0 i=0 N-1 i=0 (1 – ai ) d.h. Invertierung jeder Stelle der Dualzahl x=357 Beispiel: x = x5 x4 x3 x2 x1 x0 = 0 1 0 0 1 0 x5 = 0 x4 = 1 x3 = 0 x2 = 0 x1 = 1 x0 = 0 → → → → → → x5 = 1 – x5 = 1 – 0 = 1 x4 = 1 – x4 = 1 – 1 = 0 x3 = 1 – x3 = 1 – 0 = 1 x2 = 1 – x2 = 1 – 0 = 1 x1 = 1 – x1 = 1 – 1 = 0 x0 = 1 – x0 = 1 – 0 = 1 Universität Göttingen - Informatik II - SS 2006 ((B – 1) – ai) * Bi im Dualsystem: Komplementbildung ≅ „Bits stellenweise invertieren“ i=0 N-1 = ∑ (1 - ai ) * 2i a= x=101101 x2 = 3 → x2 = (10 – 1) – x2 = 9 – 3 = 6 x1 = 5 → x1 = (10 – 1) – x1 = 9 – 5 = 4 x0 = 7 → x0 = (10 – 1) – x0 = 9 – 7 = 2 x=642 Rechnerarithmetik 2.1-59 Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-60 2. Zahlen und Logik 2. Zahlen und Logik Eigenschaften Stellenkomplement (Dualsystem) Zahlenring im Stellenkomplement Im Rechner werden die negativen Zahlen als Komplemente der positiven Zahlen dargestellt. Das „most significant Bit“ beschreibt das Vorzeichen der repräsentierten Zahl: -7 8 1000 positive Zahlen -3 12 1100 1 1 1 ... 1 0101 4 3 -2 13 1101 2 -1 14 1110 +(½ * BN – 1) 0110 5 negative Zahlen -4 11 1011 Zwei Darstellungen der Null Darstellbarer Zahlenbereich –(½ * BN – 1) ... 6 -5 10 1010 1 ⇒ – Und 0111 -6 9 1001 0 ⇒ + 0 0 0 ... 0 7 +- 0 1 0100 0011 0010 0001 0000 1111 Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-61 2. Zahlen und Logik Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-62 2. Zahlen und Logik Stellenkomplement: Reduktion mod C (1/7) Stellenkomplement: Reduktion mod C (2/7) 1. Fall: a, b > 0 ; a > b ⇒ d > 0 Erinnerung: Stellenkomplement ist nur sinnvoll, wenn Abschätzung: BN ≤ a + b < 2*BN d.h.: Es tritt ein Überlauf von 1 in die (nicht existierende) (N+1).te Stelle auf. Warum? C – b) a+b= a+( Komplementbildung einfach ist (Stellenweise invertieren) Reduktion mod C einfach ist | Reduktion mod C: d = a – b = a + b –C Es sind 3 Fälle zu unterscheiden: = = a+( a–b BN – 1 – 1 + BN – b) | 0 < d < BN 1. Fall (zwei positive Zahlen) a, b > 0 ; a > b ⇒ d>0 2. Fall (zwei positive Zahlen) a, b > 0 ; a ≤ b ⇒ d≤0 3. Fall (zwei negative Zahlen) d = –a – b < 0 ; |d| = a + b Ignorieren des Übertrags entspricht einer Subtraktion von BN Aufaddieren einer 1 entspricht dann einer Subtraktion von C = BN – 1 d.h. man muß den Überlauf addieren um zum richtigen Ergebnis zu gelangen. Stichwort: “Einserrücklauf“ Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-63 Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-64 2. Zahlen und Logik 2. Zahlen und Logik Stellenkomplement: Reduktion mod C (3/7) Stellenkomplement: Reduktion mod C (4/7) 1. Fall: 3 Beispiele 1. Fall: 3 Beispiele I. Dezimalsystem (N = 3) a–b 65 – 43 III. Dualsystem (N = 5) Dezimal a+b–1 14 01110 – 0 + 11111 1 01101 1 14 01110 a+b–1 065 + 956 1 021 Komplementbildung 43 = 999 – 043 = 956 1 022 22 II. Dualsystem (N = 5) a–b 01110 ⇒ –00111 a+b–1 01110 + 11000 1 00110 1 00111 Bemerkung 1: 00000 = 11111 Bemerkung 2: „negative Null stört nicht“ Dezimal (Komplement) – ⇒ 14 7 7 Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-65 2. Zahlen und Logik 3. Fall: d = –a – b < 0 ; |d| = a + b Differenz d = a – b ist negativ, d.h. d muß selbst in der Komplementdarstellung vorliegen: d ⇒ C – |d| d in Komplementdarstellung d = C - |d| ist erwünscht a + b = (C – a) + (C – b) = (C – (a + b)) + C = (C – |d|) + C = |d| + (BN – 1) d = – |d| = a + b – C ⇔ C – |d| = a + b ≤ C = BN – 1 verschwindet durch ignorieren des Überlaufs und Einserrücklauf d.h. die Addition des Komplements liefert bereits d in der richtigen Darstellung! Es tritt kein Überlauf in die (N+1).te Stelle auf, weil: a + b ≤ BN – 1 Beispiel: Universität Göttingen - Informatik II - SS 2006 2.1-66 Stellenkomplement: Reduktion mod C (6/7) 2. Fall: a, b > 0 ; a ≤ b ⇒ d ≤ 0 5 – 7 – 2 Universität Göttingen - Informatik II - SS 2006 2. Zahlen und Logik Stellenkomplement: Reduktion mod C (5/7) dezimal Rechnerarithmetik a+b dual – 00101 00111 Gewünschte Ergebnis ⇒ + 00101 11000 11101 Rechnerarithmetik 2.1-67 Überlauf in die (N+1).te Stelle und Einserrücklauf liefern |d| in Komplementdarstellung (d.h. das gewünschte Ergebnis) Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-68 2. Zahlen und Logik 2. Zahlen und Logik Stellenkomplement: Reduktion mod C (7/7) Basiskomplement (B-Komplement) 3. Fall: d = –a – b < 0 ; |d| = a + b C für das Basiskomplement: C = BN Komplementbildung: N-1 N-1 Ba = BN – ai * Bi = (BN-1) – ( ai * Bi ) + 1 Beispiel: – – 7 5 Dual 11000 + 11010 = – 12 i=0 i=0 +1 d.h. die Komplementbildung ist für das Basiskomplement etwas aufwendiger 1 10010 1 10011 B-1a (B–1)–Komplement bilden Aufaddieren einer 1 (12 ≅ 0 1 1 0 0) Beispiel: (B-1)-Komplement: 5 ≅ 00101 B–15 ≅ 11010 Aufaddieren von 1: + ≅ B5 1 11011 Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-69 2. Zahlen und Logik Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-70 2. Zahlen und Logik Eigenschaften Basiskomplement (Dualsystem) Zahlenring im Basiskomplement -8 1000 Negative Zahlen werden als Komplemente der positiven Zahlen dargestellt. Das „most significant Bit“ beschreibt das Vorzeichen der Zahl. -7 9 1001 0111 6 -5 11 1011 1 ⇒ – Es gibt nur eine Null Bemerkung: Komplement der Null liegt beim Basiskomplement, anders als beim Stellenkomplement, nicht mehr im darstellbaren Zahlenbereich (Übertrag in die (n+1).te Stelle). negative Zahlen -4 12 1100 positive Zahlen +(½ * – 1) 3 2 -1 15 1111 2.1-71 0101 4 -3 13 1101 -2 14 1110 BN 0110 5 Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 7 -6 10 1010 0 ⇒ + Darstellbarer Zahlenbereich –(½ * BN ) ... 8 0 0000 1 0100 0011 0010 0001 Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-72 2. Zahlen und Logik 2. Zahlen und Logik Reduktion mod C im Basiskomplement (1/2) Reduktion mod C im Basiskomplement (1/2) einfach, da C = BN, d.h. Überlauf in die (N+1).te Stelle ignorieren entspricht bereits der Subtraktion von BN ⇒ „kein Einserrücklauf“ Beispiele: Dezimalsystem (N=3) 065 – 043 B043 = 956 + 1 ⇒ 022 Beispiele: Dualsystem (N=5) dezimal 5 – 065 + 957 1 022 ⇓ 022 Dual 7 00101 + –2 11001 11110 (≅ B2) Fall d < 0: Ergebnis ist bereits in Komplementdarstellung Dualsystem (N=5) dezimal – Dual 14 01110 7 + 11001 7 1 00111 (≅ B7) Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-73 2. Zahlen und Logik 2.1-74 Stellen- und Basiskomplement (2/2) Überschreiten des zulässigen Zahlenbereichs Fall 1: a, b > 0 Bei Operanden mit ungleichem Vorzeichen ist ein Überschreiten des zulässigen Zahlenbereichs nicht möglich: oder |a – b| ≤ |b| Ein Fehler entsteht dann, wenn gilt a + b ≥ BN-1 Das vorderste (‚most significant‘) Bit wird gesetzt und als falsches Resultat entsteht eine negative Zahl. Es gibt jedoch keinen Überlauf in die (N+1).te Stelle. Fall 2: Überschreitung möglich, wenn: a, b < 0 Universität Göttingen - Informatik II - SS 2006 2. Zahlen und Logik Stellen- und Basiskomplement (1/2) |a – b| ≤ |a| Rechnerarithmetik a, b < 0 Ein Fehler entsteht dann, wenn gilt (Basiskomplement) |a| + |b| > BN-1 (Stellenkomplement) ≥ BN-1 Das Vorzeichenbit wird dann zurückgesetzt, es gibt einen Überlauf in die (N+1).te Stelle und es entsteht ein falsches ‚positives‘ Resultat. Beim Stellenkomplement führt dieses normalerweise zum Einserrücklauf oder a, b > 0 da das oberste Bit das Vorzeichen repräsentiert, kann bei Überschreitung des Zahlenbereichs das Vorzeichen wechseln. In so einem Fall muß: - ein Überlauf angezeigt werden, - eine arithmetische Fehlerbedingung aktiviert werden - „Overflow error“ angezeigt werden, - .... - usw. Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-75 Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-76 2. Zahlen und Logik 2. Zahlen und Logik Gegenüberstellung der 3 Zahlencodierungen Rechenwerk Multiplikation und Division (1/2) Negation Einserrücklauf Vorzeichen-/ Betrag Add / Sub Vorzeichen invertieren Stellenkomplement Add Ziffern komplementieren Ja Basiskomplement Add Stellenkomplement+ 1 Nein Nein zurückführen auf Addition (bzw. Subtraktion) Multiplikation: Wiederholtes Verschieben (Shift-Operationen) und Addieren im Dualsystem 010110101 * 0 1 0 0 0 0 0 1 0 Stellenkomplement: Verzögerung beim Rechnen wg. Einserrücklauf Zwei Darstellungen der NULL + Basiskomplement Mehraufwand beim Herstellen des Komplements Verzögerung beim Negieren 1 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 1 0 1 0 1 0 0 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 0 0 0 0 0 0 0 0 1 1 1 1 1 0 0 0 1 Shift-Operationen 1 0 1 0 0 0 1 1 0 Praxis: heute fast nur noch Basiskomplement (Genügend Wortbreite für das Resultat angenommen) Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-77 2. Zahlen und Logik 2.1-78 BCD–Darstellung & BCD–Arithmetik (1/4) 4.te Alternative zur Darstellung und zum Rechnen mit ganzen Zahlen BCD–Darstellung und BCD–Arithmetik wird von verschiedenen Mikroprozessoren direkt unterstützt BCD–Codierung: Division: – Universität Göttingen - Informatik II - SS 2006 2. Zahlen und Logik Multiplikation und Division (2/2) 1 1 0 –1 0 0 1 0 – 1 1 – Rechnerarithmetik 1 1 0 0 0 1 0 0 0 0 0 0 1 – 1 1 0 0 1 1 1 0 0 1 0 1 0 0 0 1 1 0 0 : 10010 = 10111 Rest: 1 0 1 1 0 0 0 1 1 0 1 1 010 110 210 310 410 510 610 710 810 910 Wiederholtes Verschieben und Subtrahieren im Dualsystem Schwierig bei negativem Divisor eine Lösung: rechnen mit absoluten Beträgen und anschließend Vorzeichenrechnung Fehlermeldung für Divisor = 0 („Zerodivide“) ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ ≅ 0000BCD 0001BCD 0010BCD 0011BCD 0100BCD 0101BCD 0110BCD 0111BCD 1000BCD 1001BCD Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-79 ‘+‘ ≅ 1010 ‘-‘ ≅ 1011 1100 1101 1110 ungenutzte Werte 6 Codierungen, die nicht zur Zahlendarstellung benutzt werden 1111 Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-80 2. Zahlen und Logik 2. Zahlen und Logik BCD–Darstellung & BCD–Arithmetik (2/4) Beispiel 1: dezimal BCD–Darstellung & BCD–Arithmetik (3/4) Beispiel 3: 4739 + 1287 = 6026 BCD –Darstellung 23 0010 0011 0100 0111 0011 1001 +14 0001 0100 0001 0010 1000 0111 1 37 0011 0111 normale Dualzahlenaddition liefert hier das korrekte Ergebnis Beispiel 2: dezimal BCD –Darstellung 29 0010 1001 +14 0001 0100 3? (6) 0011 1101 0110 43 0100 1 → ungültiger BCD Code → Korrektur 0011 Bei Überträgen und beim Erreichen von ungültigen BCD-Codierungen liefert die Addition von 610 (= 0110BCD) das richtige Ergebnis 0101 1001 1100 0000 0110 → Übertrag →+6 0101 1001 1100 0110 → ungültiger BCD Code 1 0110 0101 1010 0010 1 0110 0110 0000 0010 0110 ⇓ 0 ⇓ 2 ⇓ 6 ⇓ 6 →+6 0110 → ungültiger BCD Code →+6 Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-81 2. Zahlen und Logik Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-82 2. Zahlen und Logik BCD–Darstellung & BCD–Arithmetik (4/4) Gleitkommazahlen: Motivation Häufig berichteter Fehler in GCC (GNU Compiler Collection) Abschließende Bemerkungen: Der BCD-Code erlaubt auch das Rechnen mit Festzahlen, d.h. Zahlen bei denen die Anzahl der Stellen hinter dem Komma festliegt Wenn der Ablauf „Zahleneingabe, Arithmetik, Zahlenausgabe“ ohne Umwandlung ins Binärsystem erfolgen soll, wird der BCD-Code bevorzugt. Der BCD-Code wird vorwiegend im technischen Bereichen verwendet, z.B. für 7-Segment-Anzeigen zur Darstellung von Zahlen. Quelle: http://gcc.gnu.org/bugs.html#known (Stand 19. April 2004) Non-bugs: „The following are not actually bugs, but are reported often enough to warrant a mention here.“ Inkorrekte Handhabung von Gleitkommazahlen, z.B.: #include <iostream> int main() { double a = 0.5; double b = 0.01; std::cout << (int)(a / b) << std::endl; return 0; } In Abhängigkeit von der verwendeten Genauigkeit und Rundung wird als Ergebnis 50 (korrekt) oder 49 (falsch) geliefert. Kein Fehler des Compilers, sondern Einschränkung von Gleitkommazahlen Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-83 Universität Göttingen - Informatik II - SS 2006 2.1-84 2. Zahlen und Logik 2. Zahlen und Logik Gleitkommazahlen: „Floating Point Numbers“ (1/3) Gleitkommazahlen: „Floating Point Numbers“ (2/3) Rechner speichert die Position des Dezimalpunktes z.B. 0.473 * 1015 oder 0.3715 * 10-7 Allgemein: X = m * Be (m: Mantisse, B: Basis, e: Exponent) Bit-Darstellung: Darstellung negativer Exponenten: bereits bekannte Möglichkeiten: Vorzeichen-/Betragdarstellung Komplementdarstellung (Stellen- oder Basiskomplement) aber, die allgemein übliche Form ist die Darstellung mittels einer sog. Charakteristik ch = e + K Mantisse (z.B. 23 Bit) z.B. mit K = BN/2 (sog. BIAS) (bei N-stelligen Exponenten) Exponent (z.B. 8 Bit) d.h. anstelle des Exponenten wird die Charakteristik dargestellt Vorzeichen (1 Bit) Speziell: X Exponent wird meist zur Basis 2, 10 oder 16 angegeben. Führende Nullen der Mantisse sollten möglichst vermieden werden (‚Normalisieren‘) = m * Bch (m: Mantisse, B: Basis, ch: Charakteristik) Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-85 2. Zahlen und Logik Format: 1 Bit Vorzeichen, 8 Bit Exponent (Charakteristik), 23 Bit Mantisse Schritt: Dezimalzahl Normenvorschlag der IEEE Computer Society, der von fast allen Mikrocomputer-Herstellern übernommen worden ist (z.B. Intel 80X86, Motorola 680X0) 32 Bit Format: Dualzahl 31 +(26,625)10 = +(11010.101)2 S Schritt: Normalisieren (Anpassen der Mantisse m, 1/B ≤ m < 1) (11010.101)2 * 20 = (0.11010101)2 * 25 3. 2.1-86 Gleitkommadarstellung nach IEEE Standard 754 (1/5) Beispiel: +26.625 soll als 32 Bit Gleitkommazahl dargestellt werden 2. Universität Göttingen - Informatik II - SS 2006 2. Zahlen und Logik Gleitkommazahlen: „Floating Point Numbers“ (3/3) 1. Rechnerarithmetik 30 23 22 Charak. E 0 Mantisse M mit 0 < E < 255, Bias = 127 Schritt: Charakteristik berechnen: X = (-1)S * 2E-127 * (1.M)2 N=8 Mantisse ist normiert: 1.M, d.h. K = 27 = 128 ch = e + K = 510 + 12810 (101)2 + (10000000)2 = (10000101)2 31 30 0 10000101 11010101000000000000000 ch M Vorz 23 = 22 führende 1 wird nicht dargestellt Erhöhung der Genauigkeit um eine Stelle 0 Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 (Basis 2) 2.1-87 Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-88 2. Zahlen und Logik 2. Zahlen und Logik Gleitkommadarstellung nach IEEE Standard 754 (2/5) Gleitkommadarstellung nach IEEE Standard 754 (3/5) Zahlenbereiche Beispiel: x= -1.5 x = (-1)S * 2E-127 * (1.M)2 1 * 2-126 ≤ |x| ≤ (2 – 2-23) * 2127 mit 0 < E < 255 oder dezimal umgerechnet 1.18 * 10-38 ≤ |x| ≤ 3.40 * 1038 Bias = 127 darstellbare negative Zahlen 31 30 1 S 01111111 Charakteristik E 23 22 0 darstellbare positive Zahlen negativer Überlauf 1 0 0 0 ..................................... 0 Mantisse M positiver Überlauf 0 (-1)1 -1 2127-127 * * 20 -(2 – 2-23) * 2127 * (1.1)2 = * (1.1)2 = -(1.1)2 = -1.510 -1.0 * 2-126 Universität Göttingen - Informatik II - SS 2006 2.1-89 2. Zahlen und Logik Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-90 2. Zahlen und Logik Gleitkommadarstellung nach IEEE Standard 754 (4/5) Gleitkommadarstellung nach IEEE Standard 754 (5/5) Besonderheiten des IEEE Formats Abschließende Bemerkungen: Not-a-Number: Darstellung „ungültiger“ Zahlen, z.B. Division durch 0, Wurzel aus negativer Zahl. Überlauf wird als unendlich dargestellt, d.h. es kann mit unendlich (∞) weitergerechnet werden. Unterlauf kann denormalisiert dargestellt werden, d.h. es kann mit geringerer Genauigkeit weitergerechnet werden. Null: eigene Darstellung E M 255 ≠0 =0 0 < E < 255 beliebig 0 ≠0 =0 0 (2 – 2-23) * 2127 Es existiert eine Lücke im Bereich der darstellbaren Zahlen, die insbesondere die 'NULL' enthält. Man benötigt eine eigene Darstellung der 'NULL' Rechnerarithmetik 255 1.0 * 2-126 x Erklärung NaN Not a Number (-1)S ∗ ∞ ±∞ (-1)S∗2E-127∗(1.M)2 (-1)S∗2126∗(0.M)2 (-1)S ∗ 0 Normalbereich Neben dem 32-Bit Format existieren noch 64- und 80-Bit Formate. Sie erlauben das Rechnen mit größerer Genauigkeit, aber prinzipiell folgt die Darstellung dem vorgestellten Mechanismus. Die Norm geht davon aus, dass zuerst mit beliebiger Genauigkeit gerechnet wird und danach auf das jeweilige Zielformat gerundet wird. Daher verwenden die meisten Implementierungen eine höhere Genauigkeit für interne Berechnungen. Moderne Gleitkommarecheneinheiten ermöglichen z.B. auch trigonometrische und logarithmische Operationen. Links zu Demonstrationswerkzeugen und weitergehende Informationen über IEEE 754 sind auf der Vorlesungsseite angegeben. Denormalisiert 0 Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-91 Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-92 2. Zahlen und Logik 2. Zahlen und Logik Größerer Fehler bei präziserer Genauigkeit sind möglich Beispiel: Zahlenbereiche für Typ double in « nearest to even » Modus: Gleitkommaarithmetik: Multiplikation Z = X ∗ Y = (m[X] ∗ m[Y]) ∗ Be[X]+e[Y] m[X]: Mantisse von X, m[Y]: Mantisse von Y e[X]: Exponent von X, e[Y]: Exponent von Y Multiplikation der Mantissen Addition der Charakteristiken (- Bias) 16.0 + X = 16.0 Sun Solaris : 64 bits registers X ∈ [-8.8817841970012523e-16 .. 1.7763568394002505e-15] Intel Linux : 80 bits registers (more accurate handling of expressions) X ∈ [-8.8861210056911943e-16 .. 1.7772242011382389e-15] VX CHX MX VY CHY = - Bias (127) = MY VZ CHZ MZ ⊕ + ∗ = Gegebenenfalls normalisieren Division entsprechend Sonderregeln für 0 als Operand Der Fehler ist größer auf der präziseren Architektur (Intel Linux) Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-93 2. Zahlen und Logik Universität Göttingen - Informatik II - SS 2006 2. Zahlen und Logik Gleitkommaarithmetik: Addition und Subtraktion Gleitkommaarithmetik: Beispiel für Addition Z = X + Y = (m[X] * Be[X]-e[Y] + m[Y]) ∗ Be[Y] für: e[x] ≤ e [y] m[X]: Mantisse von X, m[Y]: Mantisse von Y e[X]: Exponent von X, e[Y]: Exponent von Y Basis = 10, vierstellige Mantisse Z = X + Y; X = 0.5320 ∗ 10-2; Y = 0.4162 ∗ 101 Berechne e[X] – e[Y]: 1. 2. 3. 4. 2.1-94 Berechne e[X] – e[Y] Skalieren: Angleichen der Mantisse des kleineren Exponenten Addition der Mantissen gegebenenfalls Normalisieren -2 – 1 = -3 Skalieren von m[X]: 0.5320 * 10-3 = 0.0005320 * 100 (Verschieben um 3 Stellen nach Rechts, evtl. mit Genauigkeitsverlust) Addition der Mantissen: Übernahme des größeren Exponenten + Subtraktion entsprechend 0.4162 0.0005 0.4167 ∗ ∗ ∗ 101 101 101 Normalisieren entfällt Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-95 Rechnerarithmetik Universität Göttingen - Informatik II - SS 2006 2.1-96 2. Zahlen und Logik Überblick Zahlen Informationsdarstellung Zahlensysteme Rechnerarithmetik Logik Aussagenlogik und logische Gatter Prädikatenlogik Universität Göttingen - Informatik II - SS 2006 2.1-97 2. Zahlen und Logik Überblick Zahlen Informatik II SS 2006 Logik Kapitel 2: Zahlen und Logik Informationsdarstellung Zahlensysteme Rechnerarithmetik Aussagenlogik und logische Gatter Prädikatenlogik Teil 2: Logik Dr. Michael Ebner Dr. René Soltwisch Lehrstuhl für Telematik Institut für Informatik Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2. Zahlen und Logik 2. Zahlen und Logik Ziel: Rechnerarithmetik implementieren 2.2-2 Darstellung binärer Größen Bitweise logische Operationen E E=A?B = x"34" ? x"1C" In digitalen Systemen werden Informationen in binärer Form dargestellt. Binäre Größen können von jedem Baustein dargestellt werden, der nur 2 Operationszustände besitzt. Beispiel: Schalter. Zuweisung der Zustände 0 für offen und 1 für geschlossen ermöglicht die Darstellung binärer Werte. Typischerweise werden folgende Spannungen zugewiesen: ? ... beliebige logische Verknüpfung a5 a4 a3 a2 a1 a0 Operand A 1 1 0 1 0 0 Operand A b5 b4 b3 b2 b1 b0 Operand B 0 1 1 1 0 0 Operand B e5 e4 e3 e2 e1 e0 Ergebnis E 1 0 0 0 0 0 Ergebnis E Binäre 1: Eine beliebige Spannung zwischen 2V und 5V Binäre 0: Eine beliebige Spannung zwischen 0V und 0.8V Spannungen zwischen 0.8V und 2V werden nicht genutzt und können zu Beschädigungen führen. Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-3 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-4 2. Zahlen und Logik 2. Zahlen und Logik Boolesche Algebra (1/2) Boolesche Algebra: Definition der Booleschen Algebra Variable, die nur zwei Werte annehmen können. Diese Werte werden mit L - H , wahr - falsch oder 0 - 1 bezeichnet. Boolesche Variable sind logische Variable. Boolesche Operatoren: Die Booleschen Algebra (speziell die Aussagenlogik) ist ein Formalismus zur Beschreibung der Funktion digitaler Komponenten. Binäre oder Boolesche Variable (BV): Boolesche Algebra (2/2) Auf Boolesche Variable können Boolesche Operatoren angewendet werden: NOT, OR, AND,XOR, ... Boolesche Ausdrücke, Boolesche Funktionen: Boolesche Ausdrücke oder Boolesche Funktionen ergeben sich durch Verknüpfung von Boolesche Variable mit Booleschen Operatoren. Die Booleschen Algebra ist eine algebraische Struktur. Sie besteht aus einer Menge M = {e1, e2, …}, den Operatoren ψ und φ, Axiomen und wichtigen Sätzen. Eine spezielle Boolesche Algebra ist die Aussagenlogik. Sie wird charakterisiert durch folgende Eigenschaften: M: {0,1} e: 1 wahr n: 0 falsch ψ: ∧ zweistellige Operation φ: ∨ zweistellige Operation Die Boolesche Algebra wurde von George Boole um 1850 entwickelt Claude Shannon verwendete um 1937 die Boolesche Algebra als erster für den Schaltungsentwurf Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-5 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2. Zahlen und Logik 2. Zahlen und Logik Operation Wahrheitstabellen Eingaben Funktion x1,..,xn f(x) Ausgabe y Darstellung der Abhängigkeiten zwischen der Eingabe und Ausgabe Alle möglichen Kombinationen der Eingabe (A,B) werden mit der korrespondierenden Ausgabe (X) angegeben. Beispiel: Eingabe Funktion von n Eingangsvariablen: A B Nur vom gegenwärtigen Wert der Eingänge anhängig, kein "Gedächtnis" y = f(x) = f(xn, ... ,x3,x2,x1), xi ∈ {0,1} Für n Eingangsvariablen gibt es 2n Wertekombinationen. Die Wertekombinationen heißen auch die Belegungen Xj der Eingangsvariablen 2.2-6 Logische Operationen können auf zwei, sinngemäß gleiche Wege dargestellt werden: Boolescher Ausdruck: endlich, aber nicht eindeutig Wahrheitstabelle: endlich und eindeutig Ausgabe ? X 2.2-7 A 0 1 0 1 X 0 0 0 1 Die Ausgabe ist nur 1, wenn beide Eingaben 1 sind. Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 B 0 0 1 1 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-8 2. Zahlen und Logik 2. Zahlen und Logik UND-Operator ODER-Operator Name UND (AND) Tabelle b 0 0 1 1 Schriftlich a 0 1 0 1 y 0 0 0 1 y = a ∧ b oder = ab oder =a*b UND wird verwendet, um Bits gezielt auf 0 zu setzen. Dazu hat die Maske an allen Bitpositionen, die übernommen werden sollen, eine 1 und an den Stellen, die rückgesetzt werden sollen, eine 0. Name ODER (OR) Tabelle b 0 0 1 1 x“14“ = x"34" ∧ x"1C" 1 1 0 1 0 0 Operand A 0 1 1 1 0 0 Operand B Schriftlich y 0 1 1 1 y = a ∨ b oder =a+b Gatter & a 0 1 0 1 OR wird verwendet, um Bits gezielt auf 1 zu setzen. Dazu hat die Maske an allen Bitpositionen, die übernommen werden sollen, eine 0 und an den Stellen, die gesetzt werden sollen, eine 1. x“3C“ = x"34“ ∨ x"1C" 1 1 0 1 0 0 Operand A 0 1 1 1 0 0 Operand B 1 1 1 1 0 0 Ergebnis E ≥1 Gatter 0 1 0 1 0 0 Ergebnis E Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-9 2. Zahlen und Logik NICHT (NOT) Tabelle a 0 1 Universität Göttingen - Informatik II - SS 2006 Gängige logische Operationen: XOR NICHT wird auch als Inverses oder Komplement bezeichnet. y 1 0 Name XOR Tabelle b 0 0 1 1 x“0B“ = ~x"34" Schriftlich Gatter y=a 1 1 0 1 0 0 Operand A 0 0 1 0 1 1 Ergebnis E Schriftlich 1 a 0 1 0 1 y 0 1 1 0 y = a b oder =a⊕b Sprache "C" 2.2-11 XOR wird verwendet, um Bits gezielt zu invertieren. Dazu hat die Maske an allen Bitpositionen, die invertiert werden sollen, eine 1 und an allen sonstigen Stellen eine 0. x“28“ = x"34" x"1C" 1 1 0 1 0 0 Operand A 0 1 1 1 0 0 Operand B 1 0 1 0 0 0 Ergebnis E y=a^b Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-10 2. Zahlen und Logik NICHT-Operator Name Aussagenlogik und logische Gatter Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-12 2. Zahlen und Logik 2. Zahlen und Logik Gatter (1/2) Gatter (2/2) Funktion Elektrische Realisierung mittels Schalter: Relais, Knipser, Röhren, bipolare Transistoren, Feldeffekt – Transistoren (MOS-FET), etc. Funktion Realisierung Knipser Realisierung MOS-FET L a a Gatter MOS-FET Q=ā NOT Knipser Gatter _ a a + + AND Q A & b a Q b Q B Q a b NAND A & Q B + + OR A a b a b >=1 B Q Q Q a NOR b 2.2-13 2. Zahlen und Logik a∨0=a a∧0=0 R1 a∨1=1 a∧1=a R2 a∨a=a a∧a=a R3 a∨a=1 a∧a=0 R4 a=a Assoziativgesetz Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 a ∨ (b ∨ c) = (a ∨ b) ∨ c = a∨b ∨c Vereinfachung von Ausdrücken Beispiel 1: Y = A ∧ B ∧ C ∧ D ∨ A ∧ B ∨ ( B ∨ (A ∧ A) ) R4 = A ∧ B ∧ C ∧ D ∨ A ∧ B ∨ ( B ∨ 0) ) R1 ... =A∧B∧C∧D∨A∧B∨B =A∧B∧C∧D∨B =B R5 a ∧ (b ∧ c) = (a ∧ b) ∧ c = a∧b ∧c R6 a∨b=b∨a a∧b=b∧a R7 Distributivgesetz a ∨ (b ∧ c) = (a ∨ b) ∧ (a ∨ c) a ∧ (b ∨ c) = (a ∧ b) ∨ (a ∧ c) R8 Beispiel 2: R9 R5: De Morgan: De Morgan'sches Gesetz 2.2-14 Anwendung der Regeln Kommutativgesetz Absorptionsgesetz Q 2. Zahlen und Logik 10 Regeln für logische Operationen Boolesche Variablen a, b Elemente aus {0,1} >=1 B + Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 A a ∨ (a ∧ b) = a (a ∨ b) = a ∧ b Universität Göttingen - Informatik II - SS 2006 a ∧ (a ∨ b) = a (a ∧ b) = a ∨ b Y=(A∧B∧C) +(D∧E∧F) Y = ( A ∧ B ∧ C ) + (D ∧ E ∧ F ) Y = ( A ∧ B ∧ C ) ∧ (D ∧ E ∧ F ) R10 Aussagenlogik und logische Gatter 2.2-15 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-16 2. Zahlen und Logik 2. Zahlen und Logik Implikationen aus dem De Morgan'schen Gesetz (a ∨ b) = a ∧ b A (a ∨ b) Q (a ∧ b) = a ∨ b NOR 1 B & A 1 (a ∧ b) Q B 1 >=1 Q 1 A & B Alternative NOR Darstellung a∧b A NAND B A a∧b >=1 Q a∨b >=1 Q B Q B Name NAND Tabelle b 0 0 1 1 Schriftlich y=a∧b Das NAND-Symbol ist abgesehen von dem kleinen Kreis am Ausgang identisch mit dem AND-Symbol. Der kleine Kreis stellt die Invertierung dar. a 0 1 0 1 y 1 1 1 0 1 1 0 1 0 0 Operand A 0 1 1 1 0 0 Operand B 1 0 1 0 1 1 Ergebnis E & Alternative NAND Darstellung A & NAND-Operator Gatter a∨b Invertieren Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-17 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2. Zahlen und Logik 2. Zahlen und Logik NOR-Operator Name NOR Tabelle b 0 0 1 1 Schriftlich a 0 1 0 1 Alternative Darstellung von Gattern Das NOR-Symbol ist abgesehen von dem kleinen Kreis am Ausgang identisch mit dem OR-Symbol. Der kleine Kreis stellt die Invertierung dar. Für die Gatter UND, ODER, NICHT, NAND und NOR gibt es eine Alternative Darstellung y 1 0 0 0 1 y=a∨b 1 0 1 0 0 Operand A Invertiere jeden Eingang und Ausgang des Standardsymbols Ändere das Operationssymbol von UND zu ODER, oder von ODER zu UND Die alternative Darstellung repräsentiert den gleichen physikalischen Baustein. Beispiele: A Gatter 2.2-18 0 ≥1 1 1 1 0 0 Operand B NOR 0 0 0 0 1 1 Ergebnis E NAND 2.2-19 & Q >=1 Q B & B Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 Q B A Invertieren A >=1 A Q B Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-20 2. Zahlen und Logik 2. Zahlen und Logik Vollständige Operatorensysteme Normalformen (1/2) Ein vollständiges Operatorensystem erlaubt die Darstellung aller möglichen Funktionen Die folgenden Systeme sind u.a. vollständig: Bei zweistelligen, booleschen Funktionen sind dies 16 Möglichkeiten NICHT: UND: ODER Beschränkung auf ein vollständiges Operatorensystem reicht nicht für Eindeutigkeit Die Normalformen dienen dazu, anhand von Zustandstabellen Schaltungen zu entwickeln. Dabei werden logische Funktionen in Schaltkreise umgesetzt. Randbedingungen: Beispiel für NAND: UND, ODER, NICHT UND, NICHT ODER, NICHT NAND NOR Es gibt keinen eindeutigen booleschen Ausdruck für eine boolesche Funktion a∧a (a∧b)∧(a∧b) (a∧a)∧(b∧b) die Zahl der Schaltkreise sollte möglichst gering sein die einzelnen Bauelemente sollten möglichst gleich sein Standarddarstellung im Operatorensystem UND/ODER/NICHT Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-21 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2. Zahlen und Logik 2. Zahlen und Logik Normalform (2/2) Übersetzungsregel für disjunktive Normalform Disjunktive Normalform (DNF) disjunktive Verknüpfung von Konjunktionen Konjunktionen müssen alle Variablen enthalten (bejaht oder negiert) Konjunktionsterme werden Minterme genannt In der DNF werden alle UND – Verknüpfungen (Konjunktionen) disjunktiv verknüpft (ODER- verknüpft), deren Ausgangsvariablen den Wert „1“ annehmen. amerikanischer Ausdruck: “sum of products“ (SOP) Konjunktive Normalform (KNF) Konjunktive Verknüpfung von Disjunktionen Disjunktionen müssen alle Variablen enthalten (bejaht oder negiert) Disjunktionsterme werden Maxterme genannt In der KNF werden alle ODER – Verknüpfungen (Disjunktionen) konjunktiv verknüpft (UND- verknüpft), deren Ausgangsvariablen den Wert „0“ annehmen. Man geht von der Einsstellenmenge aus. Für jede Belegung ersetzt man die 1 durch eine bejahte Variable die 0 durch eine negierte Variable und bildet eine UND Verknüpfung (Minterm). Die Maxterme werden ODER verknüpft “Disjunktive Normalform“ DNF Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-22 2.2-23 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-24 2. Zahlen und Logik 2. Zahlen und Logik DNF Übersetzung Übersetzungsregel für konjunktive Normalform Man geht von der Nullstellenmenge aus. Für jede Belegung ersetzt man die 0 durch eine bejahte Variable die 1 durch eine negierte Variable und bildet eine ODER Verknüpfung (Maxterm). Die Maxterme werden UND verknüpft “Konjunktive Normalform“ KNF Oktal Index (x4,x3,x2,x1) f -> y 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 0,0,0,0 0,0,0,1 0,0,1,0 0,0,1,1 0,1,0,0 0,1,0,1 0,1,1,0 0,1,1,1 1,0,0,0 1,0,0,1 1,0,1,0 1,0,1,1 1,1,0,0 1,1,0,1 1,1,1,0 1,1,1,1 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-25 -> -> -> -> -> -> -> -> -> -> -> -> -> -> -> -> 0 0 0 1 0 0 1 0 0 1 - Beispiel: Durch 3 teilbare BCD Ziffern Å Logische 1 für: x4 = 0, x3 = 0, x2 = 1, x1 = 1 x4 x3 x2 x1 Å Logische 1 für: x4 = 0, x3 = 1, x2 = 1, x1 = 0 x4 x3 x2 x1 Å Logische 1 für: x4 = 1, x3 = 0, x2 = 0, x1 = 1 x4 x3 x2 x1 E = {3, 6, 11} 3 (0,0,1,1) 6 (0,1,1,0) 11 (1,0,0,1) y= x4 x3 x2 x1 ∨ x4 x3 x2 x1 ∨ x4 x3 x2 x1 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2. Zahlen und Logik 2.2-26 2. Zahlen und Logik Übersetzung DNF Gleichung in Hardware Beschreibung von logischen Schaltnetze Jede Gleichung läßt sich 1:1 in Hardware umsetzen y = x4 x3 x2 x1 ∨ x4 x3 x2 x1 ∨ x4 x3 x2 x1 Logische Schaltnetze können mit den grundlegenden logischen Verknüpfungen UND, ODER und NICHT beschrieben werden: 1. x4 2. 1 3. & x3 1 x2 1 x1 1 & >1 y & x = AB ∨ C x = (A ∨ B) C x = (A ∨ B) C ∨ A Die Verwendung nur eines Gattertyps erleichtert die technische Realisierung, weswegen NAND oder NOR basierte Systeme oftmals verwendet werden. Logische Schaltnetze können durch die Minimierung der logischen Verknüpfung minimiert werden In vielen Fällen sind einfachere Schaltungen schneller Weniger Gatter reduziert die Kosten Es wird weniger Energie benötigt Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-27 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-28 2. Zahlen und Logik 2. Zahlen und Logik Minimierung Minimierungsverfahren DNF liefert relativ aufwendige Lösungen Baut auf den Mintermen auf Jedes UND Gatter enthält alle Eingangsvariablen Nicht praktikabel in „echten“ Anwendungen Es gibt 3 Arten von Minimierungsverfahren Die Suche nach einer einfacheren Lösung ist Ziel der Optimierung (Minimierung). Voraussetzung jeder Optimierung: Kostenfunktion beschreibt Ziel. In unserem Fall: Möglichst wenige, möglichst kleine Gatter Genauer: Die Anzahl der Eingänge in alle Gatter soll minimal werden. In einer Gleichung ist dann die Anzahl der Variablen aller Terme plus die Anzahl der Terme (Länge) minimal. _ _ _ Y = (D C B A) ∨ (D C B) ∨ (E C) => L = 4+3+2+3 = 12 algebraische Verfahren graphische Verfahren (z.B. KV-Diagramme) tabellarische/algorithmische Verfahren (z.B. Quine/McCluskeyVerfahren) Algebraische Verfahren werden praktisch nicht verwendet Graphische Verfahren sind für bis zu 6 Variablen handhabbar Tabellarische Verfahren sind auch für mehr als 6 Variablen geeignet Wie erzielen wir möglichst kleine Gatter? Wir versuchen, durch Anwendung der Rechenregeln, die einzelnen Terme kürzer zu machen. Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-29 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2. Zahlen und Logik 2.2-30 2. Zahlen und Logik Algebraische Minimierung Blöcke Vereinfachung durch Ausklammern und Anwendung der Regeln: _ _ _ _ _ _ _ Bsp: y = c b a ∨ c b a = c a (b ∨ b) = c a 1 = c a In Belegungsschreibweise c b a y _ c b a 0 1 1 -> 1 _ _ c b a 0 0 1 -> 1 Zwei Belegungen, die sich nur in einer Komponente unterscheiden, heißen benachbart. Die identischen Komponenten heißen "gebundene", die unterschiedlichen "freie" Komponenten. Die freien Komponenten werden durch einen "-" gekennzeichnet. Es entsteht ein (Belegungs-) Block. Ein Block mit r freien Komponenten enthält ("überdeckt") 2r Belegungen. Beispiel: Wir suchen Belegungen, die Einsstellen sind und sich nur in einer Komponente unterscheiden (benachbart sind) 4 (0,1,0,0) (0,1,0,-) 5 (0,1,0,1) Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-31 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-32 2. Zahlen und Logik 2. Zahlen und Logik Minimierung über Nachbarschaftsbeziehungen Oktal Index 0 1 2 3 4 5 6 7 (x3,x2,x1) f -> y 0,0,0 0,0,1 0,1,0 0,1,1 1,0,0 1,0,1 1,1,0 1,1,1 -> -> -> -> -> -> -> -> 0 0 0 0 1 1 0 1 Bildung größerer Blöcke Oktal Index Zugehörige DNF: 0 1 2 3 4 5 6 7 y = (x3 x2 x1) ∨ (x3 x2 x1) ∨ (x3 x2 x1) Benachbarte Belegungen: Minimierte Gleichung: 4: 5: Block: y = (x3 x2) ∨ (x3 x2 x1) 1, 0, 0 1, 0, 1 1, 0, - (x3,x2,x1) f -> y 0,0,0 0,0,1 0,1,0 0,1,1 1,0,0 1,0,1 1,1,0 1,1,1 -> -> -> -> -> -> -> -> 0 0 0 0 1 1 1 1 Benachbarte Belegungen: 4: 1, 0, 0 5: 1, 0, 1 Block: 1, 0, 1, 0, 1, 1, 6: 1, 1, 0 Block: 1, -, 7: 1, 1, 1 Block: 1, 1, - Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-33 (x4,x3,x2,x1) f -> 0,0,0,0 0,0,0,1 0,0,1,0 0,0,1,1 0,1,0,0 0,1,0,1 0,1,1,0 0,1,1,1 1,0,0,0 1,0,0,1 1,0,1,0 1,0,1,1 1,1,0,0 1,1,0,1 1,1,1,0 1,1,1,1 -> -> -> -> -> -> -> -> -> -> -> -> -> -> -> -> Minimierte Gleichung: y = x3 Universität Göttingen - Informatik II - SS 2006 2.2-34 y Zusammenfassung Blockbildung Mögliche Blöcke: 1 0/2: 00-0 0 2/6: 0-10 1 2/12: -010 0 5/7: 01-1 0 5/15: -101 1 5/7/15/17: -1-1 6/7: 0111 6/16: -110 6/7/16/17: -111 0 7/17: -111 2/12/6/16: --10 1 11/15: 1-01 1 12/16: 1-10 0 15/17: 11-1 0 16/17: 1111 1 1 _ _ _ _ _ y = x4x3x1 ∨ x4x2x1 ∨ x3x1 ∨ x2x1 Die Bildung von Blöcken kann zur Minimierung herangezogen werden. Benachbarte Blöcke können zu größeren Blöcken zusammengefasst werden Betrachtet werden nur die Einsstellen Benachbarte Belegungen werden zu Blöcken zusammengefasst. es gelten dieselben Regeln. Blöcke bestehen immer aus 2r Belegungen (r = Anzahl der Striche) Ein Block, der sich nicht mehr vergrößern lässt, heißt "Primblock" Gesucht ist die minimale Anzahl von möglichst großen Blöcken, die alle Einsstellen überdeckt. Übergang zur disjunktiven Form Für Blöcke gelten dieselben Übersetzungsregeln, aber freie Komponenten ("Striche") werden ignoriert. Ein aus einem Primblock entstehender Term heißt "Primimplikant" Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 Minimierte Gleichung: 2. Zahlen und Logik Blockbildung bei komplizierteren Funktionen 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 y = (x3 x2 x1) ∨ (x3 x2 x1) ∨ (x3 x2 x1) ∨ (x3 x2 x1) Aussagenlogik und logische Gatter 2. Zahlen und Logik Oktal Index Zugehörige DNF: 2.2-35 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-36 2. Zahlen und Logik 2. Zahlen und Logik Minimierung per KV-Diagramm Karnaugh-Veitch-Diagramme Erstellung durch wechselweise horizontales und vertikales Spiegeln x1 KV-Diagramme bieten einen graphischen Weg zur Minimierung Es können minimale konjunktive oder disjunktive Formen gebildet werden 0 KV-Diagramm: x1 x2 Koordinatendarstellung der Funktionstabelle Jede Zelle entspricht einer Belegung (Achtung: Zahlen sind im Oktalsystem angegeben) 1 0 1 2 3 x1 x2 0 1 5 4 2 3 7 6 x5 x3 x2 2. Zahlen und Logik 5 4 24 25 21 20 0 1 5 4 2 3 7 6 2 3 7 6 26 27 23 22 12 13 17 16 12 13 17 16 36 37 33 32 10 11 15 14 10 11 15 14 34 35 31 30 x2 x4 x4 x3 x3 2.2-37 1 0 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 x1 x1 x1 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-38 2. Zahlen und Logik KV-Diagramm Minimierung per KV-Diagramm x5 x2 x2 Eintragung in das KV-Diagramm x1 x1 0 1 5 4 24 2 3 7 6 26 25 27 2 3 21 20 23 22 33 32 12 13 17 16 36 10 11 15 14 34 35 31 30 50 51 55 54 74 75 71 70 52 53 57 56 76 77 73 72 42 43 47 46 66 67 63 62 40 41 45 44 64 65 61 60 37 Oktal Index 0 1 2 3 4 5 6 7 x4 (x3,x2,x1) f -> y 0,0,0 0,0,1 0,1,0 0,1,1 1,0,0 1,0,1 1,1,0 1,1,1 -> -> -> -> -> -> -> -> 0 0 0 0 1 1 0 1 __ __ x3 x2 __ x1 ∨ x3 x2 x1 ∨ x3 x2 x1 x6 x1 x2 x3 0 0 1 1 0 0 1 0 x3 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-39 Universität Göttingen - Informatik II - SS 2006 Aussagenlogik und logische Gatter 2.2-40 2. Zahlen und Logik 2. Zahlen und Logik Blockbildung im KV-Diagramm Interpretation eines KV-Diagramms Fall x1 x2 x1 0 1 0 0 0 0 0 0 __ __ x3 x2 x1 x2 0 0 0 0 1 0 0 0 x3 x3 x1 0 0 0 x2 0 __ __ x3 x2 x1 x1 0 0 1 0 x3 x2 x1 x2 0 0 0 1 0 0 0 0 x3 x3 x1 ÎDarstellung der DNF einer Schaltfunktion x2 0 1 0 1 1 0 1 0 x3 __ __ x3 x2 x1 __ __ x3 x2 x1 ∨ x3 x2 __ x1 ∨ __ x3 x2 __ x1 __ ∨ x3 x2 x1 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-41 2. Zahlen und Logik x1 x2 0 1 1 0 0 1 0 0 0 0 1 1 0 0 0 1 1 2 0 0 1 0 1 3 0 0 1 1 1 4 0 1 0 0 0 5 0 1 0 1 0 6 0 1 1 0 0 7 0 1 1 1 0 10 1 0 0 0 0 11 1 0 0 1 1 12 1 0 1 0 0 13 1 0 1 1 1 14 1 1 0 0 0 15 1 1 0 1 0 16 1 1 1 0 0 17 1 1 1 1 0 1 1 1 2 B 5 3 1 1 12 0 13 10 6 0 17 0 11 1 0 7 0 1 4 0 0 16 0 15 14 D 0 0 C __ _ _ __ _ _ _ _ __ DNF: Z = A B C D ∨ A B C D ∨ A B C D ∨ A B C D Minterme: 0: 0000 1: 0001 13: 1011 00-0 (Blöcke) 2: 0010 3: 0011 00-1 11: 100110-1 _ _ _ __ _ Minimierte Gleichung: Z = A C D ∨ A C D ∨ ACD Primblöcke: 00-- -0-1 __ _ Minimierte Gleichung mit Primtermen: Z = C D ∨ A C Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-42 Blockbildung bei unvollständig definierten Schaltfunktionen x1 0 0 0 2. Zahlen und Logik Beispiel für Blockbildung in KV-Diagrammen 1 A D C B A Z x2 x3 x1 1 0 0 1 1 0 0 1 x3 Vorläufige Blöcke. Es entfällt je x3. x2 1 0 0 1 1 0 0 1 Freistellen (do not care Stellen) können 0 oder 1 sein. Festlegung derart, dass maximal große Blöcke entstehen. x3 Endgültiger Block. Es entfällt x2. x1 Kann ein vorläufiger Block nicht mehr durch einen weiteren, symmetrisch gelegenen gleich großen Block vergrößert werden, so erhält man den maximal großen Block: Primblock Der zugehörige Term heißt Primterm. x2 x1 0 1 - 0 0 1 - - x2 x3 0 1 0 1 x1 - 0 =1 =0 =1 x3 - x2 0 1 0 1 - 0 =1 =0 =1 - x3 Jede vollständige Blocküberdeckung ist eine gültige Darstellung einer Funktion. Vollständig: Jede Einsstelle wird von einem Block überdeckt. Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-43 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-44 2. Zahlen und Logik 2. Zahlen und Logik Minimierung per KV-Diagramm Minimierung per KV-Diagramm (1/3) Minimierungsverfahren Minimierungsverfahren 1. Spezifikation der Funktion durch Terme 2. Eintragung in das KV-Diagramm 3. Bestimmen der Primblöcke Beispiel Sukzessive Bildung von Blöcken mit 2, dann 4, dann 8 Belegungen, usw. Verfolgung aller möglichen Kombinationen Wenn Blockbildung abbricht, sind alle Primblöcke gefunden. Ergebnis: 4. Auswahl der kleinsten Anzahl Primblöcke, die zur vollständigen Überdeckung nötig sind Bereits erledigt: 1. Spezifikation der Funktion durch Terme 2. Eintragung in das KV-Diagramm x1 Identifikation der Kerne: Markierung aller Primblöcke, welche alleine eine Funktionsstelle überdecken. Falls diese bereits alle Stellen überdecken, ist minimale Lösung erreicht. Reichen diese nicht zur Überdeckung aller Stellen aus, müssen weitere Primblöcke hinzugenommen werden. 0 1 1 0 x2 0 0 1 1 0 0 1 - 5. Bildung eines kürzesten Ausdrucks (DMF: disjunktive Minimalform) x3 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-45 2. Zahlen und Logik x4 1 0 0 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-46 2. Zahlen und Logik Minimierung per KV-Diagramm (2/3) Minimierung per KV-Diagramm Beispiel (3/3) x1 Beispiel 4. Auswahl der kleinsten Anzahl Primblöcke, die zur vollständigen Überdeckung nötig sind • Identifikation der Kerne: Markierung aller Primblöcke, welche alleine eine Funktionsstelle überdecken. • Falls diese bereits alle Stellen überdecken, ist minimale Lösung erreicht. • Reichen diese nicht zur Überdeckung aller Stellen aus, müssen weitere Primblöcke hinzugenommen werden. 3. Bestimmen der Primblöcke • Sukzessive Bildung von Blöcken mit 2, dann 4, dann 8 Belegungen, usw. • Verfolgung aller möglichen Kombinationen • Wenn Blockbildung abbricht, sind alle Primblöcke gefunden. w2 x1 w4 Primimplikanten: 0 1 1 w3 0 w1 x2 0 0 1 1 0 0 1 - - 1 0 0 => x4 w5 x3 Grau gekennzeichnete Blöcke: Primblöcke w1 = x3 x2 __ __ w2 = x4 x2 x1 __ w3 = x4 x3 x1 __ __ w4 = x3 x2 x1 __ __ w5 = x4 x3 x2 5. Bildung eines kürzesten Ausdrucks (DMF: disjunktive Minimalform) Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-47 x2 0 1 1 0 0 0 1 1 0 0 1 - - 1 0 0 x1 x2 x4 x3 0 1 1 0 0 0 1 1 0 0 1 - - 1 0 0 x4 x3 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-48 2. Zahlen und Logik 2. Zahlen und Logik Minimierung mittels KV-Diagramm Oktal Index 0 1 2 3 4 5 6 7 Blöcke: 10– 1-1 (x3,x2,x1) f -> y 0,0,0 0,0,1 0,1,0 0,1,1 1,0,0 1,0,1 1,1,0 1,1,1 -> -> -> -> -> -> -> -> 0 0 0 0 1 1 0 1 Minimierung in der konjunktiven Form x1 0 x2 0 0 2 0 0 1 3 1 5 1 4 1 7 0 6 x3 Kern-Blöcke: 101-1 •• • >1 •• • >1 & y •• • •• • Minimierte Gleichung: __ y = x3 x2 ∨ x3 x1 >1 z.B. _ _ y= (a ∨ b ∨ c) (a ∨ b ∨ c) Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-49 2. Zahlen und Logik Bei BCD kodierten Ziffern können nur Werte von 0 bis 9 vorkommen: Das Verhalten der Schaltung bei Eingangswerten > 9 (118) ist gleichgültig. R = { 12,13,14,15,16,17} E = { 3,6,11} N = {0,1,2,4,5,7,10} Universität Göttingen - Informatik II - SS 2006 Universität Göttingen - Informatik II - SS 2006 2.2-50 2. Zahlen und Logik Ermittlung der Maxterme Beispiel Durch 3 teilbare BCD Ziffern Aussagenlogik und logische Gatter Oktal Index (x4,x3,x2,x1) f -> y Oktal Index (x4,x3,x2,x1) f -> y 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 0,0,0,0 0,0,0,1 0,0,1,0 0,0,1,1 0,1,0,0 0,1,0,1 0,1,1,0 0,1,1,1 1,0,0,0 1,0,0,1 1,0,1,0 1,0,1,1 1,1,0,0 1,1,0,1 1,1,1,0 1,1,1,1 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 0,0,0,0 0,0,0,1 0,0,1,0 0,0,1,1 0,1,0,0 0,1,0,1 0,1,1,0 0,1,1,1 1,0,0,0 1,0,0,1 1,0,1,0 1,0,1,1 1,1,0,0 1,1,0,1 1,1,1,0 1,1,1,1 -> -> -> -> -> -> -> -> -> -> -> -> -> -> -> -> 0 0 0 1 0 0 1 0 0 1 - Aussagenlogik und logische Gatter 2.2-51 -> -> -> -> -> -> -> -> -> -> -> -> -> -> -> -> 0 0 0 1 0 0 1 0 0 1 - ÅLogische 0 für: x4 ∨ x3 ∨ x2 ∨ x1 = 0 • •• •• • ÅLogische 0 für: _ x4 ∨ x3 ∨ x2 ∨ x1 = 0 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-52 2. Zahlen und Logik 2. Zahlen und Logik KNF für Beispiel N = {0,1,2,4,5,7,10} Minimierung mit KV-Diagramm x1 y= 0 0 (0,0,0,0) 1 (0,0,0,1) 2 (0,0,1,0) 4 (0,1,0,0) 5 (0,1,0,1) 7 (0,1,1,1) 10 (1,0,0,0) (x4 ∨ x3 ∨ x2 ∨ x1) _ ∧ (x4 ∨ x3 ∨ x2 ∨ x1) _ ∧ (x4 ∨ x3 ∨ x2 ∨ x1) _ ∧ (x4 ∨ x3 ∨ x2 ∨ x1) _ _ ∧ (x4 ∨ x3 ∨ x2 ∨ x1) _ _ _ ∧ (x4 ∨ x3 ∨ x2 ∨ x1) _ ∧ (x4 ∨ x3 ∨ x2 ∨ x1) 0 x2 0 1 5 0 2 12 - 1 3 4 0 0 7 0 13 - 17 - 10 11 0 1 15 - 1 6 16 14 - x4 x3 y = (x2 ∨ x4) ∧ (x1 ∨ x3) _ _ ∧ (x3 ∨ x1) Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-53 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2. Zahlen und Logik 2. Zahlen und Logik Überblick Prädikatenlogik Zahlen 2.2-54 Siehe Tafelanschrieb Informationsdarstellung Zahlensysteme Rechnerarithmetik Logik Aussagenlogik und logische Gatter Prädikatenlogik Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-55 Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-56 2. Zahlen und Logik Ausblick Compilerbau (Kapitel 7) Automaten und Sprachen (Kapitel 6) Betriebssysteme (Kapitel 5) Maschinenorientierte Programmierung (Kapitel 4) von-Neumann-Rechner (Kapitel 3) Speicher Zahlen und Logik (Kapitel 2) Kommunikation (Kapitel 8) von-Neumann-Rechner Aussagenlogik und logische Gatter Universität Göttingen - Informatik II - SS 2006 2.2-57 3. Rechnerarchitektur Informatik II SS 2006 Kapitel 3: Rechnerarchitektur Teil 1: Schaltwerke Dr. Michael Ebner Dr. René Soltwisch Lehrstuhl für Telematik Institut für Informatik Schaltnetze Universität Göttingen - Informatik II - SS 2006 3. Rechnerarchitektur 3.1-2 3. Rechnerarchitektur Kombinatorische Schaltelemente (Schaltnetze) ZIEL DER VORLESUNG: Verstehen lernen, was in einem Rechner vorgeht. Wie er aufgebaut ist und wie die einzelnen Bits und Bytes den Rechner steuern…. Spezielle Verknüpfungselemente für Computer Signalauswahl: Registerauswahl: Werte vergleichen Addieren Arithmetisch-Logische Einheit (ALU) 0000 0001 0000 1010 0101 0000 0010 0000 0000 0000 0001 0000 1010 0101 0101 0110 0000 0010 0000 0010 0010 0100 1010 0000 Multiplexer Demultiplexer Dekoder Vergleicher Addierer Schaltnetze Universität Göttingen - Informatik II - SS 2006 3.1-3 Schaltnetze Universität Göttingen - Informatik II - SS 2006 3.1-4 3. Rechnerarchitektur 3. Rechnerarchitektur Multiplexer (1/2) A 2:1 Mux B Multiplexer (2/2) A y B 4:1 Mux C S S y 0 A 1 B _ SA ∨ SB y A A B B C C D D S1 S0 E y 8:1 Mux S2,S1,S0 y F S1,S0 y 0, 0 A 0, 1 B 1, 0 C 1, 1 D Si .. Selektionseingänge __ __ (S1 __ S0 A) ∨ (S1 S0 __ B) ∨ (S1 S0 C) ∨ (S1 S0 D) D 0, 0, 0 0, 0, 1 0, 1, 0 0, 1, 1 1, 0, 0 1, 0, 1 1, 1, 0 1, 1, 1 G H S2 S1 S0 A B C D E F G H 8:1 Mux E y F G S2,S1,S0 y H 0, 0, 0 0, 0, 1 0, 1, 0 0, 1, 1 1, 0, 0 1, 0, 1 1, 1, 0 1, 1, 1 S2 S1 S0 A B C D E F G H Schaltnetze Universität Göttingen - Informatik II - SS 2006 3.1-5 Schaltnetze Universität Göttingen - Informatik II - SS 2006 3. Rechnerarchitektur 3. Rechnerarchitektur Dekoder/Demultiplexer Vergleicher A B C y1 y2 y3 y4 A B 2 bit Dekoder 3 bit Dekoder y1 y2 y3 y4 y5 y6 y7 y8 A3 A2 A1 A0 B3 B2 B1 B0 y4,y3,y2,y1 C,B,A y8,y7,y6,y5,y4,y3,y2,y1 A 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0 0, 0, 1 0, 1, 0 0, 1, 1 1, 0, 0 1, 0, 1 1, 1, 0 1, 1, 1 0, 0, 0, 0, 0, 0, 0, 1, B 0, 0, 1, 0, 0, 1, 0, 0, 1 0 0 0 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1 0 0 0 0 0 0 0 A=B B, A A>B A=B A<B 4 bit Größe > < = = = = = = = = = Schaltnetze Universität Göttingen - Informatik II - SS 2006 3.1-7 0 1 A3,B3, A2,B2, A1,B1, A0,B0, A>B,A=B,A<B A>B,A=B,A<B 4 A>B A=B A<B A=B B≠A B=A 4 bit Identität 4 B, A 0 1 0 1 3.1-6 > < = = = = = = = > < = = = = = > < = = = 1 0 1 0 0 0 1 1, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 1 0 1 0 1 0 1 0 0 1 Schaltnetze Universität Göttingen - Informatik II - SS 2006 3.1-8 3. Rechnerarchitektur 3. Rechnerarchitektur Addierer (1/4) Addierer (2/4) B, A Halbaddierer 0, 0, 1, 1, s A HA B c s, c 0 1 0 1 0, 1, 1, 0, Mehrstelliger Addierer 0 0 0 1 A0 B0 HA Einstelliger Addierer für Addition zweier Binärzahlen A und B, Ergebnis Summe S und Übertrag (Carry) C s0 A B S C c 0 0 0 0 0 1 1 0 1 0 1 0 1 1 0 1 s1 A1 Volladdierer HA Bi ≥1 HA A2 ci VA c B2 c B & C Beispiel: 5 + 7 (5) 0101 (7) 0111 .. 1 1 1 <- Übertrag (Carry) 1100 c s S Mehrstellige Additionsaufgabe s2 Ai =1 c B1 si ci-1 VA A Allgemein: 1. Summand 2. Summand Übertrag Summe A4 B4 C5 S5 A3 B3 C4 S4 A2 B2 C3 S3 A1 B1 C2 S2 Si = (Ai + Bi ) + Ci (+ = Addition) Ci+1 = Ci Ai v CiAi v AiBi Schaltnetze Universität Göttingen - Informatik II - SS 2006 3.1-9 3. Rechnerarchitektur B0 HA c1 Universität Göttingen - Informatik II - SS 2006 3.1-10 Addierer (4/4) 4 bit Paralleladdierer mit „carry look-ahead“ (paralleler Übertrag) „Serienaddierer“: ökonomisch, aber langsam A0 Schaltnetze 3. Rechnerarchitektur Addierer (3/4) s0 A0 B0 C1 0 S1 S0 Beschleunigung mittels Parallelisierung durch Carry-Vorausberechnung: „carry look-ahead“ C2 = C3 = = C4 = C5 = G1 ∨ C1P1 Cn+1 G2 ∨ C2P2 = G2 ∨ (G1 ∨ C1P1)P2 G2 ∨ G1 P2 ∨ C1P1P2 G3 ∨ G2 P3 ∨ G1P2P3 ∨ C1P1P2P3 G4 ∨ G3 P4 ∨ G2P3P4 ∨ G1P2P3P3 ∨ C1P1P2P3P4 = (BnAn) ∨ (Cn(Bn An)) Gn Pn G = generate carry (erzeuge Übertrag s1 A1 VA c2 B1 s2 A2 VA c3 B2 Cn+1 = (BnAn) ∨ (Cn(Bn An)) Gn Cn+1 = Gn ∨ CnPn C2 = C3 = = C4 = C5 = Pn C = propagate carry (leite Übertrag weiter) B4 A4 B3 A3 B2 A2 B1 A1 C1 | | | | | | | | | Σ4 G1 ∨ C1P1 G2 ∨ C2P2 = G2 ∨ (G1 ∨ C1P1)P2 G2 ∨ G1 P2 ∨ C1P1P2 G3 ∨ G2 P3 ∨ G1P2P3 ∨ C1P1P2P3 G4 ∨ G3 P4 ∨ G2P3P4 ∨ G1P2P3P3 ∨ C1P1P2P3P4 | | | | | C5 Z4 Z3 Z2 Z1 Schaltnetze Schaltnetze Universität Göttingen - Informatik II - SS 2006 3.1-11 Universität Göttingen - Informatik II - SS 2006 3.1-12 3. Rechnerarchitektur 3. Rechnerarchitektur Addierer-Subtrahierer Arithmetisch-Logische Einheit (ALU) (1/2) S4 S3 S2 S1 Z B4 | | | A4 | | | & & B3 | | | A3 | | | B2 | | | & & & A2 | | | B1 | | | & & A1 | | | & Auswahl =1 =1 =1 =1 =1 =1 =1 Komplement Σ4 C5 | | Z4 | | Z3 | | Z2 | | Z1 =1 0 0 0 0 C1 S4 0 S3 0 0 1 C1-1 0 0 1 0 C1-1 0 0 1 1 C1-2 0 0 C1+A S2 S1 0 0 1 1 0 1 C1-A-1 0 1 1 0 C1+A-1 0 1 1 1 C1-A-2 1 0 0 0 C1+B 1 0 0 1 C1+B-1 1 0 1 0 C1-B-1 C1 1 0 1 1 C1-B-2 1 1 0 0 C1+A+B 1 1 0 1 C1+B-A-1 1 1 1 0 C1+A-B-1 1 1 1 1 C1-A-B-2 funktionaler Kern eines Digitalrechners führt arithmetische und logische Operationen aus Eingabe: Daten und Steuersignale Ausgabe: Ergebnis und Statussignale Meist nur für Festkommazahlen (Gleitkomma wird oft von einem speziellen Arithmetik-Coprozessor ausgeführt oder in Festkommazahlen unterteilt) Schaltnetze Universität Göttingen - Informatik II - SS 2006 3.1-13 3. Rechnerarchitektur Universität Göttingen - Informatik II - SS 2006 3.1-14 3. Rechnerarchitektur Arithmetisch-Logische Einheit (ALU) (2/2) Register X Schaltnetze Schaltwerke x1 x2 Eingangs- x 3 variablen Register Y s1 Multiplexerschaltnetz s2 Schaltnetze xn sign overflow arithmetisch-logisches Schaltnetz s3 s4 Schaltwerk s5 cout Schiebeschaltnetz s6 s7 Takt Speicher elemente Reset Register Z Schaltnetze Universität Göttingen - Informatik II - SS 2006 Ausgangsvariablen yn cin zero y1 y2 y3 3.1-15 Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-16 3. Rechnerarchitektur 3. Rechnerarchitektur Takt Moore- oder Zustandsautomat Schaltwerke befinden sich zu gegebener Zeit in einem Zustand Q. Ein solcher Zustand ist beispielsweise durch die Werte der Ausgangsleitungen zu diesem Zeitpunkt charakterisiert. Zustände ändern sich nur zu bestimmten diskreten Zeitpunkten, bei Eintreffen eines Taktes, das heißt, wenn eine 1 auf der Taktleitung anliegt oder bei Pegeländerung auf der Taktleitung, d.h. bei positiver oder negativer Flanke. Ausgangsbelegungen sind nur vom Zustand des Schaltwerkes abhängig X Speicher Schaltnetze Schaltnetze Y Takt Takt=1 Flanke 1 0 Zeit Takt=0 Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-17 Schaltwerke Universität Göttingen - Informatik II - SS 2006 3. Rechnerarchitektur 3. Rechnerarchitektur Mealy- oder Übergangsautomat Speicherelemente Ausgangsbelegungen sind vom Zustand und vom Wert der Eingangsbelegungen abhängig Binäre Speicherelemente: X Schaltnetze 3.1-18 Speicher Schaltnetze Y kleinste logische Bausteine zur Aufbewahrung von Information. Speicherung durch Einnahme der Zustände “0” oder “1”. Realisierung als Schaltwerke. D Q En Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-19 Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-20 3. Rechnerarchitektur 3. Rechnerarchitektur RS-Flipflop Realisierung eines RS-Flipflop Ein RS-Flipflop besitzt zwei besondere Eingänge zum • Setzen (auf “1”; Set) und • Rücksetzen (auf “0”; Reset) des Inhalts. Funktionstabelle der Schaltfunktion für neuen Zustand Q(n+1) aus aktuellem Zustand Q(n) R Takt T T=0: Zustand ändert sich nicht, T=1: Zustand kann sich ändern. Dann wird das RS-Flipflop durch folgende Tabelle beschrieben: S T Q(n) S 0 0 1 1 Q(n+1) Q(n+1) Q(n) 0 1 nicht def. R 0 1 0 1 S 0 0 0 0 1 1 1 1 R 0 0 1 1 0 0 1 1 Q(n) 0 1 0 1 0 1 0 1 Q(n) R 0 1 1 1 0 0 - S Q(n+1) 0 1 0 0 1 1 undef. undef. __ __ Q(n+1) = R Q (n) ∨ S = R (Q (n) ∨ S) ________ Q(n+1) = R ∨ (Q (n) ∨ S) R ≥1 Q Rückkopplung _ Q ≥1 Nebenbedingung: r ∧ s = 0 S Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-21 3. Rechnerarchitektur Schaltwerke Universität Göttingen - Informatik II - SS 2006 3. Rechnerarchitektur Erweiterung zum RS-Latch Funktionstabelle der Schaltfunktion für neuen Zustand Q(n+1) aus aktuellem Zustand Q(n) RS-Flipflop Takt (Pegelsteuerung), „Clock“: Clk Clk=0: Zustand ändert sich nicht, Clk=1: Zustand kann sich ändern. Symbol R S R 0 0 1 1 0 0 1 1 Q(n) 0 1 0 1 0 1 0 1 Q(n+1) 0 1 0 0 1 1 undef. undef. R & ≥1 Tabelle Symbol 0 0 1 0 1 0 0 0 1 1 0 1 - 0 1 0 1 verb. Q R S Clk Clk R S Q Q Q# 0 - - Q 1 - - Q ↑ 0 0 Q ↑ 1 0 0 ↑ 0 1 1 Zeitdiagramm für das RS Latch Clk & _ Q ≥1 S S R R Q Q Clk S Q Schaltwerke Universität Göttingen - Informatik II - SS 2006 RS-Latch Tabelle RSQ Q Q Q# => VerUNDung von S und R mit Clk S 0 0 0 0 1 1 1 1 3.1-22 3.1-23 Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-24 3. Rechnerarchitektur 3. Rechnerarchitektur Taktflankensteuerung Taktflankengesteuerte Flipflops Wir haben bisher ein taktpegelgesteuertes RS-NORFlipflop. Taktflankensteuerung 2: Ersetzen der UND-Glieder durch Impulsglieder Positive Flankentriggerung Clk 1 Clk & Z 1 0 Z X & Clk Z Negative Flankentriggerung 1 0 t R Q S Q X Clk X 1 t & Positive Flankentriggerung X 1 Z X Clk & 0 Clk 1 t 0 Clk 1 t 0 Z t 0 Z t t Z t Clk Schaltwerke Universität Göttingen - Informatik II - SS 2006 Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-25 3. Rechnerarchitektur 3. Rechnerarchitektur D-Latch und D-Flipflop D-Latch Tabelle Symbol Häufig ist es wünschenswert, dass statt Set und Reset nur ein Eingangssignal benutzt wird. Der Wert des Eingangssignals wird dann beim entsprechendem Enable- oder Taktsignal übernommen. D Q(n) 0 1 0 1 0 1 0 1 Q(n+1) __ R 0 R=S ≥1 & 1 0 Clk 0 1 ≥1 & En 1 S D undef. undef. D: „Vorbereitungseingang“ Q Q 0 1 Q D D = Delay En D _ Q Q Schaltwerke Universität Göttingen - Informatik II - SS 2006 En Zeitdiagramm 1 R 0 0 1 1 0 0 1 1 Q Q# En Eingangsseitige Erweiterungsbeschaltung von R und S. S 0 0 0 0 1 1 1 1 3.1-26 3.1-27 Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-28 3. Rechnerarchitektur 3. Rechnerarchitektur D-Flipflop -- Flankengesteuert Q Q# Clk Tabelle Symbol Tabelle Symbol D T-Flipflop (als Vorstufe zu JK Flipflop) Clk Q 0 1 ↑ Q Q D D Q Q# Clk Clk Q 0 1 ↓ Q Q D Soll bei jeder Taktflanke den Zustand wechseln, wenn an einem Steuereingang der Signalpegel 1 anliegt, sonst nicht („gesperrt“). Erweiterung des RS-Flipflop R1 R2 Zeitdiagramm (positiv flankengetriggert) Clk & ≥1 Q & ≥1 _ Q Clk Clk S1 S2 R & & S D Q R & T & ≥1 Q & ≥1 _ Q Clk Clk Meistgebrauchtes Flipflop: Basis-Flipflop für alle Register in Prozessoren und in Controllern & S Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-29 3. Rechnerarchitektur Tabelle Tabelle Symbol Clk T Q Q Q Q# T = Toggle 3.1-30 JK-Flipflop (1/2) Symbol Clk Universität Göttingen - Informatik II - SS 2006 3. Rechnerarchitektur T-Flipflop T Schaltwerke 0 1 ↑ ↑ ↑ 0 1 1 0 1 Q Q Q 1 0 Möglichst vielseitiges Flipflop: Speicherfall, Setzfall, Rücksetzfall, Kippfall: Auswahl durch 2 Steuerleitungen (J=Jump, K=Kill) Clk T Q Q T Clk Q Q# 0 1 ↓ ↓ ↓ 0 1 1 0 1 Q Q Q 1 0 Modifikation des T-Flipflops T & & ≥1 Q & ≥1 _ Q Clk Clk & Zeitdiagramm (positiv flankengetriggert) R S Clk T K & J & ≥1 Q & ≥1 _ Q Clk Clk Q R & S Hauptanwendung: Zählerschaltungen Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-31 Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-32 3. Rechnerarchitektur JK-Flipflop (2/2) Symbol 3. Rechnerarchitektur Clk J K Q Q# J K Clk Zeitdiagramm Symbol Tabelle 0 1 ↑ ↑ ↑ ↑ 0 1 0 1 Bevorrechtigte Eingänge Tabelle Q Clk J K Q J - Q - Q 0 Q 0 1 1 0 1 /Q Q Q# K Clk 0 1 ↓ ↓ ↓ ↓ 0 1 0 1 - Q - Q 0 Q 0 1 1 0 1 /Q Oft möchte man Flipflops gezielt auf einen Wert setzen Gezieltes Laden eines Zählers auf einen Wert Daher besondere Eingänge eines Flipflops zum Setzen / Rücksetzen J müssen nicht beide vorhanden sein Reset häufiger als Set. Sondereingänge können direkt wirken Clk K Beispiele: Rücksetzen einer Schaltung beim Einschalten oder "Reset Taster" man nennt das asynchron Vorteil: Wirkt immer, auch ohne Takt Nachteil: Auch kurze Impulse können Reset auslösen (gefährlich!) Also: ok für General-Reset, nicht für logische Funktion Gegensatz: Synchrone Eingänge wirken mit der Taktflanke Q Auch für Logikfunktionen nutzbar Aber: Taktgenerator muss laufen, sonst funktioniert z.B. Reset nicht. Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-33 3. Rechnerarchitektur S D Clk R Q Q# Zeitdiagramm Universität Göttingen - Informatik II - SS 2006 Synchrone bevorrechtigte Eingänge Tabelle Symbol: D-Flipflop mit Tabelle Setz- und Rücksetzeingang Clk R S D Q R S Clk DQ 0 1 1 1 1 1 1 0 0 0 0 0 1 ↑ ↑ 0 1 0 1 Q Q 0 1 R und S wirken auch ohne Takt. R ist bevorrechtigt. S D Clk R Q Q# Zeitdiagramm Clk Clk R R D D Q Q Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-34 3. Rechnerarchitektur Asynchrone bevorrechtigte Eingänge Symbol: D-Flipflop mit Setz- und Rücksetzeingang Schaltwerke 3.1-35 0 1 ↑ ↑ ↑ ↑ 0 1 1 1 1 0 0 0 1 Q Q 0 1 0 1 R und S wirken nicht ohne Takt. Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-36 3. Rechnerarchitektur 3. Rechnerarchitektur Das Register Das Register: Anwendung Ein Register ist Anwendung: Standardspeicher in Prozessoren eine Aneinanderreihung von D-Flipflops, z.B. 8, oder 16 oder 32 Stück ("Breite" des Registers) Der Takt ist allen FFs gemeinsam D4 D3 D2 D1 Ein Register hat oft bevorrechtigte Eingänge Clk Clr Clk Clk Clk Clk Q3 Wie bei den Einzelflipflops, z.B. Set oder Reset (synchron oder asynchron) Ein Eingang wirkt auf alle Flipflops des Registers S D R S D R S D R S D R Typischer bevorrechtigter Eingang: Clock Enable Q4 Für den Benutzer sichtbare Register Viele Register für Zwischenwerte Q2 Q1 CE muß 1 sein, damit Register synchrone Operation ausführt Effekt: Register behält den alten Wert bei, "hält seinen Zustand„ Typische Anwendung zur Auswahl eines bestimmten Registers Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-37 3. Rechnerarchitektur Beispiel Register Q 0 1 ↑ Qi Qi Di Universität Göttingen - Informatik II - SS 2006 3.1-38 3. Rechnerarchitektur mit Reset Der Zähler (1/3) mit Enable Tabelle Clk Schaltwerke Asynchronzähler Besteht aus Flipflops, die nicht durch einen gemeinsamen Takt gleichzeitig 1 geschaltet werden. T Asynchrone Dualzähler Q Q T Duales Zahlensystem, Q# Clk Q# Aufbau aus T-Flipflops 0 Zeitdiagramm für Register mit Enable E Q0 2 0 __ Q0 1 Q1 2 1 __ Q1 0 Q2 2 2 __ Q2 1 Q3 2 3 __ Q3 Prinzipieller Aufbau Clk Clk G Q0 D X"00" Q X"??" X"55" X"AA" X"55" X"FF" Q1 X"AA" Q2 Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-39 Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-40 3. Rechnerarchitektur 3. Rechnerarchitektur Der Zähler (2/3) Clk Qi ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ ↑ 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 0000 Carry 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 Der Zähler (3/3) Grundsätzliche Zähler-Tabelle Symbol Tabelle (Kurzform) mit bevorrechtigten Eingängen Clk Qi Carry Clk, R, Ld,En,Di ↑ Qi 0 1111 1 Qi+1 0 ↑ ↑ ↑ - 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 Qi Carry Zeitdiagramm - 0000 0 Di Di 0 Qi 0 - Qi+1 0 - 1111 0 - 1111 1 Clk Clr Wird zur Kaskadierung mit dem Enable-Eingang des nachfolgenden Zählers verbunden, der dann bei der nächsten positiven Flanke hochzählen kann. Achtung: En beeinflusst Carry Load EnP/T D X"A" X"5" Q X"?" X"0" X"5" X"6" Schaltwerke Universität Göttingen - Informatik II - SS 2006 Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-41 3. Rechnerarchitektur 3.1-42 3. Rechnerarchitektur Das Schieberegister (1/5) Das Schieberegister (2/5) Aneinanderreihung von N Flipflops, deren Ausgang jeweils mit dem Eingang des nachfolgenden Flipflops verbunden ist und mit gemeinsamer Taktleitung. Beispiel 4-bit Schiebregister: Q1 Clk 1 2 3 4 5 1 2 3 4 5 D Q1 Schieberichtung Q2 Q2 Q3 Q4 Q3 Q4 D Clk S D Clk R Q# S D Clk R Q# S D Clk R Q# S D Clk R Q Q# Clk D Q1 Q2 Q3 Das Signal, das an D anliegt, wird mit jedem Clock-Signal zum nachfolgenden Flipflop weiter geschoben. Q4 Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-43 Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-44 3. Rechnerarchitektur 3. Rechnerarchitektur Das Schieberegister (3/5) Tabelle Clk, SerIn ↑ ↑ ↑ ↑ ↑ 1 1 0 1 1 0 Das Schieberegister (4/5) Q 0000 0001 0010 0101 1011 0110 Anwendung: Serielle Datenübertragung verschiedene Implementierungen Parallel – Serienwandlung Serien – Parallelwandlung Verzögerung Rechenoperationen Verschiedene Ausführung, je nach Anwendung: Nur Serien-Eingang und –Ausgang Serien-Eingang und -Ausgang plus FF-Ausgänge für Verzögerungen zur Seriell-Parallel Wandlung Serien-Eingang und -Ausgang plus FF Eingänge Universal Schieberegister: Alle Ein- Ausgänge zur Parallel-Seriell Wandlung Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-45 Schaltwerke Universität Göttingen - Informatik II - SS 2006 3. Rechnerarchitektur 3. Rechnerarchitektur Das Schieberegister (5/5) Ausblick Bevorrechtigte Eingänge: Reset: setzt alle FFs auf 0 Set ist ungebräuchlich Load: paralleles Laden des Registers Shift Enable: Es wird geschoben wenn Enable 1 ist. Direction: Nach rechts oder links schieben. Mit diesen Bausteinen kann man nun komplexe Schaltwerke aufbauen, die aus in der Größenordnung 107 (!) Gattern und Latches bestehen. Solch hochkomplexe Systeme kann man natürlich nicht manuell und unsystematisch aufbauen. Generell gilt: Mathematische Bedeutung des Schiebens: Bsp: 0000 0010 dezimal 2 0000 0100 dezimal 4 0000 1000 dezimal 8 3.1-46 Realisiere Funktionen durch Gatterschaltungen Realisiere Register und kritische Speicherplätze durch Master Slave Latches Benutze zur Konstruktion Hardwarebeschreibungssprachen (Hardware Description Languages, HDL) und übersetze sie in Schaltungen, so wie man Programme in Maschinenprogramme transformiert. Schieben nach links: Multiplikation mit 2 Schieben nach rechts: Division durch 2 Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-47 Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-48 3. Rechnerarchitektur 3. Rechnerarchitektur ENDE Universität Göttingen - Informatik II - SS 2006 ENDE 3.1-49 3. Rechnerarchitektur Universität Göttingen - Informatik II - SS 2006 3.1-50 3. Rechnerarchitektur Taktflankensteuerung (1/2) Wir haben bisher ein taktpegelgesteuertes RS-NORFlipflop. X Taktflankensteuerung 1: Ersetzen der UND-Glieder durch Impulsglieder Negative Flankentriggerung X ENDE 1 0 Clk 0V Z Z t C Clk 1 0 1 X & Clk +5V 1 t || + 5V Z t R Q S Q Clk Schaltwerke Universität Göttingen - Informatik II - SS 2006 3.1-51 Universität Göttingen - Informatik II - SS 2006 3.1-52 3. Rechnerarchitektur 3. Rechnerarchitektur Bistabile Schaltungen Bistabile Schaltungen Wenn man über einfache Logikgatter verfügt, kann man auch Speicherglieder bauen, und darauf aufbauend schliesslich ganze Schaltwerke Falldiskussion: a b y y = nicht (a und nicht(b und y)) Idee: konstruiere bistabile Schaltungen aus Gattern x Beispiel: Analysiere folgende Schaltung y = nicht (1 (nicht(y)) und nicht(1 nicht(y))und y)) = y hält y x = nicht (b und y) a=0, b=1: y = nicht (0) (0 und nicht(1 und y)) = 1 setzen y = nicht (a und x) a=1, b=0: y = nicht (1) (1 und 1) nicht(0)) nicht(0 und y)) = 0 rücksetzen a=b=1: Es ist: a b y x Also y = nicht (a und nicht(b und y)) Universität Göttingen - Informatik II - SS 2006 a=b=0: 3.1-53 3. Rechnerarchitektur y = nicht (0) (0 und nicht(0 und y)) = 1 unbenutzt Universität Göttingen - Informatik II - SS 2006 3.1-54 3. Rechnerarchitektur Basis R/S FlipFlop Basis R/S FlipFlop ff Wir nennen diese Schaltung auch Basis R/S FlipFlop, FlipFlop weil sie einen Haltezustand (a=b=1) hat, in dem sie jeden Wert y über die Rückkopplung halten kann, sowie eine Rücksetz ((a,b)=(1,0)) und eine Setzkombination ((a,b)=(0,1)) allerdings noch keine Taktkontrolle hat. Die Zustandsänderung wird durch Legen eines der Eingänge auf den Wert 0 erreicht. Da der Wert 0 die Änderung bewirkt, nennt man solche Eingänge auch low active und überstreicht ihren Namen bzw. hängt ein Z an: RZ oder R Das Überstreichen ist als Kurzschreibweise für die Negation zu sehen. Die Aktivität die mit dem Eingangsnamen verbunden wird, findet statt, wenn der Ausdruck wahr ist, d.h. Rücksetzen findet statt wenn RZ=Nicht(R) wahr, also R=0 ist. Damit ergibt sich folgende Benennung der Anschlüsse: Universität Göttingen - Informatik II - SS 2006 3.1-55 SZ oder S RZ oder R Q QZ oder Q Folgende Tabelle gibt das Verhalten wieder: Sie gibt für die benutzten Eingangskombinationen (RZ,SZ)<>(0,0) den Folgezustand Q‘ von Q an: RZ SZ Q QZ Q’ QZ’ 1 0 1 1 1 0 Q Q Q QZ Q QZ 0 QZ 1 QZ 1 0 Universität Göttingen - Informatik II - SS 2006 3.1-56 3. Rechnerarchitektur 3. Rechnerarchitektur R/S FlipFlop ff Aufgabe: R/S FlipFlop ff Steuere das Basis RS FlipFlop durch einen Taktzustand Lösung: Wir verknüpfen einfach den Takt mit den Kontrolleitungen RZ und SZ: S R Analyse: 1 R clk 0 1 Schaltsymbol: Q clk Q Für clk=0 werden SZ, RZ auf nicht(0)=1 gezwungen. ⇒ Haltezustand Q Für clk= 1 werden SZ(RZ) auf nicht(1 und S)=nicht(S) (nicht(1 und R)=nicht(R)) Für clk=0 werden SZ, RZ auf nicht(0)=1 gezwungen Universität Göttingen - Informatik II - SS 2006 Q R S Q R Analyse: S R clk 1 S S abgebildet. Man kann also nur in der 1 Phase setzen oder rücksetzen. 3.1-57 3. Rechnerarchitektur Universität Göttingen - Informatik II - SS 2006 3.1-58 3. Rechnerarchitektur Master/Slave Latch Häufig macht die Gefahr, daß sich R,S in der 1 Phase des Taktes clk ändern könnte, (dann ist ja R,S transparent mit Q,QZ verbunden) den Entwurf schwierig. Man möchte daher die Zeit, in der sich R,S nicht ändern darf, so kurz wie möglich halten. Dies erreicht man, indem man den Übernahmezeitpunkt eng um die 1/0 Flanke des Taktes clk, wie in folgender Schaltung, legt: Master/Slave Latch: Timing Verdeutlichung des Übernahmeverhaltens am Zeitdiagramm: ts th clk S,R 0 1 Q(Master) clk Q R S clk Q Q(Slave) R S td Universität Göttingen - Informatik II - SS 2006 3.1-59 Universität Göttingen - Informatik II - SS 2006 3.1-60 3. Rechnerarchitektur Ausblick Mit diesen Bausteinen kann man nun komplexe Schaltwerke aufbauen, die aus in der Grössenordnung 107 (!) Gattern und Latches bestehen. Solch hochkomplexe Systeme kann man natürlich nicht manuell und unsystematisch aufbauen. Generell gilt ¾ Realisiere Funktionen durch Gatterschaltungen ¾ Realisiere Register und kritische Speicherplätze durch Master Slave Latches ¾ Benutze zur Konstruktion Hardwarebeschreibungssprachen (Hardware Description Languages, HDL) und übersetze sie in Schaltungen, so wie man Programme in Maschinenprogramme transformiert. Universität Göttingen - Informatik II - SS 2006 3.1-61 3. Rechnerarchitektur Von Neumann Prinzipien (1946) 1. Rechner besteht aus vier Werken: Haupt- bzw. Arbeitsspeicher für Programme und Daten Steuerwerk Rechenwerk (ALU) Ein- / Ausgabewerk (I/O) Informatik II SS 2006 2. Kapitel 3: Rechnerarchitektur 3. 4. Teil 2: von Neumann Architektur 5. Dr. Michael Ebner Dr. René Soltwisch 6. 7. Lehrstuhl für Telematik Institut für Informatik Programmsteuerung (universelle Hardware) Gemeinsamer Speicher Hauptspeicher besteht aus adressierbaren Zellen Programm besteht aus einer Folge von Befehlen Sprünge sind möglich (bedingte und unbedingte) Speicherung erfolgt binär Universität Göttingen - Informatik II - SS 2006 3. Rechnerarchitektur 3. Rechnerarchitektur Bestandteile eines von Neumann Rechners RAM, ROM Datenbus, Adressbus, Steuerbus Keyboard, Maus, Scanner, ….. Drucker, Bildschirm, …. Festplatten / Magnetbänder Steuerwerk (auch Leitwerk genannt) Rechenwerk Ein- / Ausgabewerk (I/O) Busse Speicher Haupt- bzw. Arbeitsspeicher für Programme und Daten Speicherwerk (Hauptspeicher, Arbeitsspeicher). Persistente Speicher wie Festplatten sowie Caches und Register zählen wir logisch nicht zum Speicher. Der Arbeitsspeicher besitzt einen eingeschränkten Adressumfang Ergänzung durch Hintergrundspeicher (z.B. Plattenspeicher, Magnetbandspeicher, etc.), die persistent sind. Die Zugriffsgeschwindigkeit zum Arbeitsspeicher sollte der Arbeitsgeschwindigkeit der CPU angepasst sein. Je schneller der Speicher desto teurer Æ Speicherhierarchie Für die verschiedenen Einsatzbereiche der Speicher werden unterschiedliche Speicherarten verwendet, die sich unterscheiden hinsichtlich: Speichermedium und physikalischem Arbeitsprinzip Organisationsform Zugriffsart Leistungsparameter Preis Register Arithmetical Logical Unit (ALU) Steuerwerk + Rechenwerk = CPU Universität Göttingen - Informatik II - SS 2006 3.2-2 3.2-3 Universität Göttingen - Informatik II - SS 2006 3.2-4 3. Rechnerarchitektur 3. Rechnerarchitektur Busse Ein gemeinsam genutztes Medium Die Anzahl gleichzeitig übertragbarer Bits heißt Busbreite. Busse können hierarchisch organisiert sein über Brücken CPU direkt am Front Side Bus North Bridge Beispiel Busse Schnittstelle USB 1.0/1.1 USB 2.0 Hi-Speed Firewire Serielle Schnittstelle Parallele Schnittstelle SCSI (SCSI 1) Fast SCSI (SCSI 2) Ultra SCSI Ultra Wide SCSI Ultra 2 Wide SCSI Ultra 3 Wide SCSI AGP / PCI South Bridge Seriell / Audio / USB / Firewire Übertragungsgeschw. 1,5 MByte/s 60 MByte/s 50 MByte/s 0,12 MByte/s 0,12 MByte/s 5 MByte/s 10 MByte/s 20 MByte/s 40 MByte/s 80 MByte/s 160 MByte/s Max. Kabellänge 5m 5m 4,5 m 100 m 5m 6m 3m 1,5 m 1,5 m 12 m 12 m Beispiel eines älteren PCs Universität Göttingen - Informatik II - SS 2006 3.2-5 3. Rechnerarchitektur Universität Göttingen - Informatik II - SS 2006 3.2-6 3. Rechnerarchitektur Ein- und Ausgabe (I/O für input / output) In den Bereich I/O fallen alle Geräte, die Daten ausgeben oder Eingaben annehmen wie Monitore oder Soundkarten Auch die Festplatten sind nach von Neumann I/O Geräte DMA – Direct Memory Access Bock Mode bei eigenem Cache I/O Geräte sind über den Bus mit Speicher und Prozessor verbunden Universität Göttingen - Informatik II - SS 2006 3.2-7 Universität Göttingen - Informatik II - SS 2006 3.2-8 3. Rechnerarchitektur 3. Rechnerarchitektur Das Leitwerk (Steuerwerk, control unit) Das Leitwerk steuert die Arbeitsweise des Rechenwerks durch schrittweise Interpretation der Maschinenbefehle Der Befehlszähler (PC) enthält die Adresse des nächsten auszuführenden Befehls; Das Leitwerk erhöht diesen Wert vor jeder Operation um 1. (PC:=PC+1) Das Befehlsregister (IR) enthält den aktuellen Befehl Das Statusregister (SR) nimmt Rückmeldungen aus dem System auf Das Leitwerk decodiert den Befehl Der Operationsteil (auch Opcode genannt) bestimmt dabei welche Operationen ausgeführt werden sollen Operanden werden durch Angabe von Registern oder Speicheradressen bestimmt Direktoperanden können durch Konstanten angegeben werden Decodierung i.d.R. durch Mikroprogramme Das Leitwerk erzeugt die nötigen Steuersignale für das Rechenwerk Universität Göttingen - Informatik II - SS 2006 3.2-9 3. Rechnerarchitektur 3.2-10 3. Rechnerarchitektur Das Rechenwerk Universität Göttingen - Informatik II - SS 2006 Rechneraufbau Das Rechenwerk bildet zusammen mit dem Steuerwerk die CPU Es besteht aus einer (oder mehreren) ALU und Registern arithmetische Operationen (Addition, Subtraktion, ...) logische Operationen (UND, ODER, NICHT, ...) Verschiebe-Operationen u. U. Bitmanipulation Vergleichs- und Bit-Test-Operationen Quelle: Rechenberg, Pomberger Informatik-Handbuch S. 301 Universität Göttingen - Informatik II - SS 2006 3.2-11 Universität Göttingen - Informatik II - SS 2006 3.2-12 3. Rechnerarchitektur 3. Rechnerarchitektur Der Befehlszyklus Der Befehlszyklus 1. 2. 3. 4. 5. FETCH – Befehlsholphase DECODE – Dekodierungsphase FETCH OPERANDS – Operanden nachladen EXECUTE – Befehl ausführen UPDATE PC – PC auf den nächsten Befehl zeigen lassen Universität Göttingen - Informatik II - SS 2006 3.2-13 Die Gemeinsame Arbeitsweise von Leitwerk und Rechenwerk wird durch den Maschinenbefehlszyklus beschrieben Der Befehlszyklus wird von der CPU ständig durchlaufen Die Befehle stehen im Speicher Das Leitwerk "weiß" jederzeit, welcher Befehl als nächster auszuführen ist Die Adresse (= Nummer der Speicherzelle) des nächsten auszuführenden Befehls steht in einem speziellen Register des Leitwerks, dem Befehlszähler (PC) Üblicherweise stehen aufeinander folgende Befehle in aufeinander folgenden Speicherzellen, der zuerst auszuführende Befehl hat die niedrigste Adresse Zu Beginn des Programms wird der PC mit dessen Startadresse geladen Universität Göttingen - Informatik II - SS 2006 3. Rechnerarchitektur 3.2-14 3. Rechnerarchitektur Ablauf des Befehlszyklus im Detail Programm-Unterbrechungen (Interrupts) – I (1a) Befehlsholphase: Speicherzugriff auf die vom PC angezeigte Adresse. (1b)Der Befehl wird in das Befehlsregister des Leitwerks gebracht. Anschließend wird der PC erhöht, er zeigt dann auf den nächsten Befehl. Besteht ein Befehl aus mehreren Speicherworten, so setzt sich diese Phase auch aus mehreren Speicherzugriffen zusammen, bis der Befehl vollständig im IR steht. Das Befehlsregister (instruction register IR) ist untergliedert in Opcode-Register (OR, Befehlsregister) und Adress- Register (AR). (2) Der Befehl im OR wird decodiert (Befehlsdecoder) und der Ablaufsteuerung zugeführt. Diese kann als Mikroprogramm oder hart verdrahtet realisiert sein. Die Ablaufsteuerung erzeugt die für die Befehlsausführung nötigen Steuersignale. (3) Benötigt der Befehl Operanden, so wird deren Adresse aus dem Inhalt des AR ermittelt. (4a)Nun erfolgt der Speicherzugriff auf die so festgelegte Operandenadresse. (4b)Die Operanden werden in das vom Opcode spezifizierte Register des Rechenwerks oder in ausgewählte Speicherzellen gebracht. (5) Falls die Art des Opcodes weitere Teiloperationen erfordern, werden diese nun ausgeführt. Dabei kann auch der Inhalt des PCs verändert werden (Sprungbefehle, Prozeduraufrufe). Universität Göttingen - Informatik II - SS 2006 Universität Göttingen - Informatik II - SS 2006 3.2-15 Der Programmablauf muss manchmal unterbrochen werden. Lesen von Daten, Terminal Eingaben usw. Die Unterbrechung erfolgt durch ein an die CPU gesandtes Signal, das interrupt request (IRQ) genannt wird. Die CPU veranlasst das gerade laufende Programm zu unterbrechen und eine Befehlsfolge auszuführen, die auf die Unterbrechung reagiert Nach dem Abarbeiten der interrupt service routine (ISR) fährt der Rechner mit der Ausführung des unterbrochenen Programms fort. 3.2-16 3. Rechnerarchitektur 3. Rechnerarchitektur Programm-Unterbrechungen (Interrupts) – II RISC vs. CISC Als Reaktion auf eine Unterbrechungsanforderung geschehen zwei Dinge: Retten des aktuellen Programmzustands: Der Maschinenstatus, d.h. der Inhalt der Register der CPU, muss festgehalten werden. Dies geschieht durch Wegspeichern der Registerinhalte des gerade unterbrochenen Programms (Zustandsvektor) auf den Stack. Laden der Register mit dem Zustandsvektor der ISR (z.B. Startadresse der ISR): Der Zustandsvektor steht an einer festgelegten Adresse im Speicher (InterruptVektor). Das Programm wird nun ab der Startadresse der ISR fortgesetzt. Die Unterbrechung darf nicht mitten in einer Befehlsausführung erfolgen (undefinierter Prozessorstatus!), sondern erst nachdem der gerade laufende Befehl vollständig abgearbeitet ist, also am Ende des Befehlszyklus. Nach Ende der ISR wird der ursprüngliche Zustandsvektor wieder vom Stack geholt und das Programm an der Unterbrechungsstelle fortgesetzt. Während des Rettens des Programmzustands und des anschließenden Ladens des Zustandsvektors der ISR darf keine neue Unterbrechungsanforderung auftreten (Zustandsinformation unvollständig!). Der Befehlssatz der Prozessoren enthält daher spezielle Befehle zum Sperren und Freigeben von Unterbrechungsanforderungen Universität Göttingen - Informatik II - SS 2006 3.2-17 SIMD Single Instruction Multible Data MIMD Multible Instruction Multible Data Der Earth Simulator: Nach Daten und Instruktionen MISD Multible Instruction Single Data Universität Göttingen - Informatik II - SS 2006 3.2-18 Was ist möglich? Klassifikation nach Flynn SISD Single Instruction Single Data Das Konzept des Pipelinings wurde verfolgt 3. Rechnerarchitektur Nicht von Neumann Architekturen weniger Befehle gleiche Länge der Befehle kürzere Ausführungszeit pro Befehl pipelining feste Verdrahtung die arithmetischen Befehle werden nur auf Registern ausgeführt nicht auf den Speicher Auf den Speicher kann nur über Lade- und Schreibbefehle zugegriffen werden Universität Göttingen - Informatik II - SS 2006 3. Rechnerarchitektur Die Intel x86 CPUs und Motorola 68000 Serie sind CISC Prozessoren – CISC (Complex Instruction Set Computer) Der RISC Prozessor ist einfacher aufgebaut (Reduced Instruction Set Computer) 3.2-19 5,120 (640 8-way Knoten) 500 MHz NEC CPUs 8 GFLOPS per CPU (41 TFLOPS total) 2 GB (4 512 MB FPLRAM modules) per CPU (10 TB total) shared memory in jedem Knoten 640 × 640 crossbar switch zwischen den Knoten 16 GB/s Bandbreite zwischen den Knoten 20 kVA Stromverbrauch pro Knoten Universität Göttingen - Informatik II - SS 2006 Der Earth Simulator -- NEC SX Earth Simulation Center Yokohama – Japan http://www.es.jamstec.go.jp/ www.top500.org 3.2-20 3. Rechnerarchitektur 3. Rechnerarchitektur Ausblick Benchmarking Analyse der Geschwindigkeit von Rechnern (Performance) Was sagen die MIPS (million instructions per second [nicht unser MIPS Prozessor!!!]) und Flops (Floating point Operations) aus? So genannte Mixe aus verschiedenen Operationen, um die Leistung zu bewerten. Compilerbau (Kapitel 7) Automaten und Sprachen (Kapitel 6) Betriebssysteme (Kapitel 5) Maschinenorientierte Programmierung (Kapitel 4) Der LINPACK-Benchmark ist wichtig für die Numerik Es gibt viele weitere: SPAC, WHETSTONE, DHRYSTONE, EDN, SSBA-Suite, …usw. von-Neumann-Rechner (Kapitel 3) Die Thematik ist sehr komplex und würde alleine eine ganze Vorlesung füllen. Speicher Zahlen und Logik (Kapitel 2) Kommunikation (Kapitel 8) von-Neumann-Rechner Universität Göttingen - Informatik II - SS 2006 3.2-21 Universität Göttingen - Informatik II - SS 2006 3.2-22 4. Assembler Assembler Programmierung – Motivation Was ist ein Programm? Eine Reihe von Befehlen, die der Ausführung einer Aufgabe dient Dazu wird das Programm sequentiell abgearbeitet und Befehl für Befehl abgearbeitet. Der Prozessor arbeitet dabei zustandsbasiert Informatik II Problem: SS 2006 Welche Befehle kennt der Prozessor? Sind das dieselben Befehle, die ein Mensch verwendet? Kapitel 4: Assembler Programmierung Sich Schritt für Schritt dem Prozessor nähern… Anweisung: Addiere die Zahlen von eins bis hundert und speichere das Ergebnis! Integer: Ergebnis := Sum(1+2+3+4+…+100); ….aber das sind immer noch nicht die Befehle, die ein Prozessor versteht. Dr. Michael Ebner Dr. René Soltwisch Lehrstuhl für Telematik Institut für Informatik Universität Göttingen - Informatik II - SS 2006 4. Assembler 4. Assembler Assembler Allgemein – Befehle (Maschinensprache) Assembler vs. Maschinensprache Die Befehle, die der Computer versteht und ausführen kann, sind Bitfolgen Maschinensprache, in der Regel für jede CPU unterschiedlich. Ausnahme: (aufwärts-) kompatible Rechnerfamilien Beispiel: 286, 386, 486, Pentium Der Befehl muss zwei Angaben enthalten (v. Neumann-Rechner): Gesamtheit aller vom Prozessor ausführbaren Befehle (Maschinenbefehle) heißt Maschinensprache Prozessoren können nur numerische Instruktionen ausführen. 0000 0010 0010 0100 0000 0010 0000 Addiere den Inhalt der Register 17 und 18 und speichere das Ergebnis im Register 8 ab für den Menschen nicht gut verständlich durchzuführende Operation (Was!) Operations-Code verwendeter Operand (Womit!) Adresse Häufig gehen diese Angaben auch direkt in den Op-Code ein. Nach der Anzahl der Operanden im Adressteil unterscheidet man: 8-Bit-Mikrocomputer arbeiten fast immer mit Einadress-Befehlen (1. Quelle und Zieladresse implizit gegeben, z.B. Akkumulator), 16-Bit-CPUs dagegen oft mit Zweiadress-Befehlen. Ein Befehl kann aus einem oder mehreren Speicherworten bestehen Bei Computern mit großer Wortlänge können auch mehrere Befehle in einem Speicherwort stehen Bei 8-Bit-Mikros besteht der OP-Code aus einem Byte, der Adress-Teil aus einem oder zwei Bytes (= eine Adressangabe) Universität Göttingen - Informatik II - SS 2006 4-2 4-3 Ein Assembler setzt die Befehle um und verwaltet symbolische Adressen Der Wortschatz eines Assembler heißt Assemblersprache oder auch einfach Assembler Universität Göttingen - Informatik II - SS 2006 4-4 4. Assembler 4. Assembler Assembler Vom Assembler zur Hochsprache Lösung des Problems: eine Hochsprache Es werden dem Programmierer mehr Befehle angeboten Speicherverwaltung wird übernommen Die Befehle sind Prozessor unabhängig Aber auch die Maschinenbefehle (bzw. Assemblerbefehle) sind für den Menschen schwer zu verstehen, selbst wenn er nicht direkt in der binären Maschinensprache programmieren muss. Es gibt keine Variablen Einige Befehle stehen nicht direkt zur Verfügung. Jeder Prozessor ist anders, also auch jeder Assembler Das bedeutet, dass ein Programmierer ein Assemblerprogramm (z.B. Summe von 1 bis 100) für jeden Prozessor neu schreiben muss. Wer vermittelt nun zwischen Hochsprache und Maschinensprache? Ein Compiler übersetzt das Hochsprachenprogramm in Assemblerprogramm. Diesen Vorgang nennt man kompilieren Ein Assembler macht aus einem Assemblerprogramm ein Maschinensprachenprogramm Anstelle des Compilers kann auch ein Interpreter verwendet werden. Dieser erzeugt auch Maschinencode, aber erst zur Laufzeit. Im Unterschied zum Interpreter übersetzt der Compiler das gesamte Programm. Universität Göttingen - Informatik II - SS 2006 4-5 4. Assembler Universität Göttingen - Informatik II - SS 2006 4-6 4. Assembler Wo wir jetzt sind – ein kurzes Fazit Vorher Zahlendarstellung / Gatter von Neumann Rechner ALU Programm in einer temp = v[k]; Hochsprache (C, Java) v[k] = v[k+1]; Compiler Assembler Programm (Spim für MIPS R2000) Jetzt Assembler Programmierung Assembler Später: Compilerbau: Wie bekomme ich aus einer Hochsprache ein Assemblercode? Wie optimiere ich den Compiler? In welcher Sprache schreibe ich einen solchen Compiler? Formale Sprachen: Formale Analyse der Sprachen und ihrer Mächtigkeit, usw. Maschinensprache Programm (MIPS R2000) Universität Göttingen - Informatik II - SS 2006 4-7 v[k+1] = temp; lw lw sw sw $15, $16, $16, $15, 0($2) 4($2) 0($2) 4($2) 0000 1001 1100 0110 1010 1111 0101 1000 1010 1111 0101 1000 0000 1001 1100 0110 1100 0110 1010 1111 0101 1000 0000 1001 0101 1000 0000 1001 1100 0110 1010 1111 Interpretation durch Leitwerk Registertransfer IR ← Imem[PC]; PC ← PC + 4 Anweisungen ALUOP[0:3] ⇐ InstReg[9:11] & MASK ° ° Universität Göttingen - Informatik II - SS 2006 C code Assemblerprogramm Maschinencode Registertransfer Anweisung 4-8 4. Assembler 4. Assembler Wie können wir nun Programmieren? Arbeitsweise des R 2000 Wir brauchen: Einen Simulator: 1. 2. MIPS R2000 – Stanford Projekt: Microprocessor without Internal Pipeline Stages RISC Prozessor SPIM (unser Simulator) unterliegt der GNU-Lizenz 3. Der Befehl wird geladen Der Befehl wird decodiert Daten werden in die Register geladen Die zugehörigen Operanden werden geladen 4. http://www.cs.wisc.edu/~larus/spim.html Linux: xspim; Windows© PCSpim In Abhängigkeit des aktuellen Befehls werden die Register verändert. z.B. der Inhalt von zwei Registern wird addiert und das Ergebnisse in ein anderes Register geschrieben. Einen Texteditor 5. Daten werden aus den Registern in den Speicher geschrieben Zum Erstellen der Programme Universität Göttingen - Informatik II - SS 2006 4-9 4. Assembler Universität Göttingen - Informatik II - SS 2006 4-10 4. Assembler Adressierung des Speichers Der Speicher Warum Hexadezimal? Von Neumann-Rechner haben gemeinsamen Speicher für Daten und Programm Der Programmierer muss verhindern, dass der Rechner versucht, die abgelegten Daten als Programm auszuführen. Der Prozessor soll das Programm nicht mit Daten überschreiben Selbstmodifizierender Code ist möglich (Beispiel: Computer Viren) Lösung: Segmente für Daten, Programm, OS und Stack Größe des Speichers Jede Zelle ist 8 Bit (1 Byte) Groß und hat eine 32 Bit Adresse Kilobyte 1KB = 1024 Byte = 210Byte Megabyte 1MB = 1024 KB = 220 Byte Gigabyte 1GB = 1024 MB = 230 Byte Mit den Direktiven .data und .text geben wir an, wohin die folgenden Befehle geschrieben werden Der Programmierer kann aber auch direkt in den Speicher schreiben. Universität Göttingen - Informatik II - SS 2006 4-11 Universität Göttingen - Informatik II - SS 2006 4-12 4. Assembler 4. Assembler Hauptspeicher Verwaltung Datentypen Adresse 32 Bit Der Speicher besteht aus 232 Zellen à einem Byte .text und .data sind Direktiven, die angeben, was Programm und was Daten sind. Speicherzellen 8 Bit 0xFFFFFFFF Betriebssystem und ROM 0x80000000 0x7FFFFFFF Stack Segment Ganze Zahlen .word – 32-Bit-Zahlen .half – 16-Bit-Zahlen .byte – 8-Bit-Zahlen Zeichenketten Freier Bereich .ascii – 8Bit pro Zeichen (256 verschiedene Zeichen) .ascii .asciiz “Das ist ein Beispieltext. Und ohne “ “Zeilenumbruch geht es weiter.“ Floating Point wird vom Coprozessor unterstützt. Daten Segment 0x10000000 Text Segment 0x00400000 Reserved 0x00000000 Universität Göttingen - Informatik II - SS 2006 4-13 4. Assembler Big Endian: Mainfraim, IBM Litte Endian: PC, Intel, AMD Bi Endian: PowerPC Daten sollten im Speicher ausgerichtet (Aligned) sein Beispiel: 00000000 00000000 00000100 00000001 (1025) Universität Göttingen - Informatik II - SS 2006 4-14 4. Assembler Speicher – Litte Big Endian Litte-Endian vs. Big-Endian Big Endian „denkt“, dass das erste Byte, das er liest, das größte ist. Little Endian „denkt“, dass das erste Byte, das er liest, das kleinste ist Universität Göttingen - Informatik II - SS 2006 R 2000 Register Adresse Big-Endian Darstellung von 1025 Little-Endian Darstellung von 1025 00 00000000 00000001 01 00000000 00000100 02 00000100 00000000 03 00000001 00000000 4-15 32 General Purpose Register mit 32 Bit Wortbreite $0 bis $31 oder per „Name“ $zero enthält immer(!) den Wert 0 $at temporäres Assemblerregister $v0, $v1 Funktionsergebnisse $a0 bis $a3 Argumente für Prozeduraufrufe $t1 bis $t9 temporäre Register $s0 bis $s7 langlebige Register $k0, $k1 Kernel Register $gp Zeiger auf Datensegment $sp Stack Pointer $fp Frame Pointer $ra Return Address Zusätzlich lo und hi (Spezialregister) Universität Göttingen - Informatik II - SS 2006 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 $zero $at $v0 $v1 $a0 $a1 $a2 $a3 $t0 $t1 $t2 $t3 $t4 $t5 $t6 $t7 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 $s0 $s1 $s2 $s3 $s4 $s5 $s6 $s7 $t8 $t9 $k0 $k1 $gp $sp $fp $ra 4-16 4. Assembler 4. Assembler Die Assembler Befehle Assembler Programme Befehlsformat Sequentielle Abarbeitung von Befehlen <Marke>: <Befehl1> <Arg_1> <Arg_2> <Arg_3> # <Kommentar> <Marke>: <Befehl2>, <Arg_1>, <Arg_2>, <Arg_3> # <Kommentar> Sprünge sind möglich Nur ein Befehl pro Zeile „#“ leitet einen Kommentar ein „<name>:“ ist ein Label Befehle Lade- / Speicherbefehle Arithmetische Operationen (+ , * , - , / ) Logische Operationen (AND , OR , XOR , NAND , …) Schiebe- / Rotationsbefehle Sprungbefehle Das Label „main:“ muss immer vorhanden sein Label können angesprungen werden z.B. „while:“ oder „for:“ Den Namen des Labels entscheidet der Programmierer (bis auf „main:“) Pseudobefehle werden vom Assembler in mehrere Befehle umgesetzt in die Befehle, die der Prozessor verarbeiten kann. Direktiven sind Assembleranweisung, die NICHT in Befehle umgesetzt werden; z.B. um Platz zu lassen für Variablen (beginnen mit einem Punkt z.B. „.data“) Universität Göttingen - Informatik II - SS 2006 4-17 4. Assembler Assembler Programm – ein Beispiel Register Format (R) rsrs 6 5 rtrt rdrd 5 5 shamt shamt 5 # Beispielprogramm V. 001 # berechnet den Umfang eines Dreiecks mit den Kanten x, y, z # kein sehr sinnvolles Programm .data x: .word 12 y: .word 14 z: .word 5 u: .word 0 .text main: lw $t0, x lw $t1, y lw $t2, z add $t0, $t0, $t1 # $t0 := x + y add $t0, $t0, $t2 # $t0 := x + y + z sw $t0, u # u := x + y + z li $v0, 10 # EXIT syscall funct funct 6 Immediate Format (I) Op-Code Op-Code rsrs rtrt 16--Bit Bit Konstante Konstante(Imm) (Imm) 16 6 5 5 16 Sprung Format (J) Op-Code Op-Code 4-18 4. Assembler Die drei Instruktionsformate Op-Code Op-Code Universität Göttingen - Informatik II - SS 2006 26Bit BitSprungadresse Sprungadresse 26 6 Universität Göttingen - Informatik II - SS 2006 26 4-19 Universität Göttingen - Informatik II - SS 2006 4-20 4. Assembler 4. Assembler Ladebefehle und Adressierungsarten I Ladebefehle und Pseudoinstruktionen lw Rd, Adr Weitere Befehle Der Befehl lw (load word) lädt ein Wort in ein Register Rd und Adr sind die Argumente. Adr ist die Adresse im Hauptspeicher, von wo der Befehl in das Register Rd geladen wird. Adressierungsmodi I – „...wie wird die Adresse angegeben?“ Register Indirekt (RS): Der Wert steht an der Adresse, die im Register RS angegeben ist. Direkt: Die Adresse wird direkt angegeben über ein Label oder Label + Konstante. Indexierte – Label (RS): Der Wert wird durch ein Label angegeben + den Wert aus Register RS (+ Konstante) lb Rd, Adr lbu Rd, Adr lh Rd, Adr lhu Rd, Adr ld Rd, Adr : load byte 8 Bit : load unsigned byte 8 Bit : load halfword 16 Bit : load unsigned halfword 16 Bit : load double-word ist eine Pseudoinstruktion Pseudoinstruktionen werden vom Assembler aufgelöst ld Rd, Adr := lw Rd, Adr lw Rd+1,Adr+4 Daten müssen aligned im Speicher sein Adressen von Wörtern müssen durch 4 teilbar sein. Adressen von Halbwörtern müssen gerade sein. Oder es werden die Befehle ulw, ulh und ulhu verwendet. Universität Göttingen - Informatik II - SS 2006 4-21 4. Assembler Universität Göttingen - Informatik II - SS 2006 4-22 4. Assembler … und nun das Ganze noch mal zum Speichern Register Transfer Befehle und Adressierungsarten II sw Rs, Adr sb Rs, Adr sh Rs, Adr sd Rs, Adr ush Rs, Adr usw Rs, Adr Register direkte Adressierung: Es wird direkt auf die Register zugegriffen unter Nennung der Registernamen Rd (destination) und Rs (source). store word store byte store halfword store double-word (Pseudoinstruktion) unaligned store halfword unaligned store word move Rd,Rs move Rs Rd Unmittelbare Adressierung: Dort wird eine Konstante unmittelbar in ein Register übertragen. Die Konstante ist Teil des Programmcodes, nicht der Daten. li Rd, Imm load immediate (Imm ist dann eine Konstante) lui Rs, Imm load upper immediate Rs Imm * 216 Universität Göttingen - Informatik II - SS 2006 4-23 Universität Göttingen - Informatik II - SS 2006 4-24 4. Assembler 4. Assembler Arithmetische Befehle (Addition & Subtraktion) Überläufe und Ausnahmen Können nur direkt auf den Registern ausgeführt werden Addition und Subtraktion (mit Overflow) add Rd, Rs1, Rs2 addi Rd, Rs1, Imm sub Rd, Rs1, Rs2 Was passiert, wenn die Summe zweier positiver Zahlen negativ wird? Es tritt eine Ausnahme (Exception) auf. Ausnahmen sind Fehler, die während der Laufzeit des Programms auftreten. Rd := Rs1 + Rs2 Rd := Rs1 + Imm Rd := Rs1 – Rs2 Der Exception Handler beendet in diesem Fall das Programm! add kann auch mit einer Konstanten (unmittelbaren Operanden) verwendet werden. Der Assember benutzt dann automatisch addi. sub und alle weiteren arithmetischen Befehle können mit einer Konstanten verwendet werden. ☺ Universität Göttingen - Informatik II - SS 2006 4-25 4. Assembler A= 0111 B= 0001 + -------------S= 1000 7 1 ---8 Universität Göttingen - Informatik II - SS 2006 4-26 4. Assembler Addition ohne Überlauf addu addiu aubu Ein klassisches Beispiel ist auch die Division durch Null. Beispiel: Die Halfbytes (4 Bit) a und b werden addiert. Multiplikation und Division Rd, Rs1, Rs2 Rd, Rs1, Imm Rd, Rs1, Rs2 Problem eines Überlaufs ist sehr wahrscheinlich und es werden sogar doppelt so viel Bits zum Speichern benötigt. Beispiel: (1 * 232) * (1* 232) = 1 * 232+32 = 1* 264 Der MIPS verfügt über zwei Spezialregister hi und lo Es gibt aber nur 4 Maschinenbefehle für Multiplikation und Division U sollte nicht durch unsigned übersetzt werden, da auch bei Addition von vorzeichenlosen Zahlen Überläufe auftreten können. div Rd, Rs divu Rd, Rs mult Rd, Rs multu Rd, Rs hi:=Rd MOD Rs; lo:= Rd DIV Rs hi:=Rd MOD Rs; lo:= Rd DIV Rs hi:=Rd * Rs DIV 232; lo:=Rd * Rs MOD 232 hi:=Rd * Rs DIV 232; lo:=Rd * Rs MOD 232 Die Ergebnisse von Maschinenbefehlen werden immer in hi und lo gespeichert. Universität Göttingen - Informatik II - SS 2006 4-27 Universität Göttingen - Informatik II - SS 2006 4-28 4. Assembler 4. Assembler Multiplikation und Division SPIM – Ein- und Ausgaben Diese Pseudobefehle arbeiten direkt auf den Registern: div Rd, Rs1, Rs2 Rd:=Rs1 MOD Rs2 mit Überlauf divu Rd, Rs1, Rs2 Rd:=Rs1 MOD Rs2 ohne Überlauf mul Rd, Rs1, Rs2 Rd:= Rs1 * Rs2 ohne Überlauf mulo Rd, Rs1 ,Rs2 Rd:= Rs1 * Rs2 mit Überlauf Der Befehl syscall Der Befehl hat keine Argumente. Ein Parameter wird über das Register $v0 übergeben. Das Verhalten des Simulators ist abhängig vom Register $v0 $v0=1 print_int Wert in $a0 wird dezimal ausgegeben auf dem Bildschirm $v0=4 print_string Die mit Chr0 endende Zeichenkette wird ausgegeben. $a0 muss die Adresse enthalten, an der die Zeichenkette im Speicher beginnt. Das Ergebnis wird in Rd gespeichert. Ob div ein Maschinenbefehl oder Pseudobefehl ist, erkennt der Assembler an der Anzahl der Parameter. Logische Operationen Sprünge Jetzt erst mal weiter mit dem SPIM Ein- und Ausgaben… Universität Göttingen - Informatik II - SS 2006 4-29 4. Assembler 4-30 4. Assembler Syscall Parameter Logische Befehle Vor Aufruf von syscall muss der Parameter in $v0 gegeben werden 1 print_int Wert in $a0 wird dezimal ausgegeben 2 print_float 32 Bit Gleitkommazahl aus Register $f12/13 wird ausgegeben 3 print_double 64 Bit … 4 print_string Die an ($a0) beginnende und auf Chr 0 endende Zeichenkette wird ausgegeben. 5 read_int Schreibt eine Dezimalzahl in $v0 6 read_float Schreibt eine Gleitkommazahl in $f0 (32 Bit) 7 read_double Schreibt eine Gleitkommazahl in $f0/1 (64 Bit) 8 read_string Schreibt eine Zeichenkette bis Chr 0 in den Speicher. Startadresse: $a0 Max. Länge $a1 9 sbrk Reserviert Speicher 10 exit Beendet das Programm Universität Göttingen - Informatik II - SS 2006 Universität Göttingen - Informatik II - SS 2006 4-31 and Rd, Rs1, Rs2 andi Rd, Rs, Imm nor Rd, Rs1, Rs2 or Rd, Rs1, Rs2 ori Rd, Rs, Imm xor Rd, Rs1, Rs2 xori Rd, Rs, Imm not Rd, Rs Rd:=Rs1 AND Rs2 Rd:=Rs AND Imm Rd:=Rs1 NOR Rs2 Rd:=Rs1 OR Rs2 Rd:=Rs AND Imm Rd:=Rs1 XOR Rs2 Rd:=Rs AND Imm Rd:= NOT(Rs) := xori Rd, Rs, -1 Universität Göttingen - Informatik II - SS 2006 4-32 4. Assembler 4. Assembler Rotations- und Schiebebefehle Vergleiche Rotation: Alle Bits in einem Register werden nach links oder rechts verschoben; das Letzte kommt dann an den Anfang. Schiebebefehle: Wie Rotation allerdings fällt das letzte Bit weg. Das erste Bit wird durch 0 ersetzt (logische Schiebebefehle) oder das höchstwertige Bit wird übernommen, damit das Vorzeichen erhalten bleibt (arithmetische Schiebebefehle). rol Rd, Rs1, Rs2 rotiert Rs1 um Rs2 Stellen nach links (ror für rechts) sll und sllv (shift left logical); srl und srlv (shift right logical); sra und srav (shift right arithmetic) V steht für Variable, was bedeutet, dass ein Register die Anzahl der Schritte bestimmt; ansonsten ist der Wert eine Konstante. Universität Göttingen - Informatik II - SS 2006 4-33 4. Assembler Es werden zwei Werte verglichen und wenn die Bedingung (z.B. gleich, > , < ,….) erfüllt ist, wird in das Zielregister eine 1 geschrieben und sonst eine 0. Beispiel: seq Rd, Rs1, Rs2 Falls (Rs1)=(Rs2) Rd:=1, sonst Rd:=0 sne – ungleich; sge – größer oder gleich; sgeu – größer oder gleich (unsigned) usw. Bei den Vergleichen gibt es nur 4 Maschinenbefehle: slt Rd, Rs1, Rs2 sltu Rd, Rs1, Rs2 slti Rd, Rs1, Imm sltui Rd, Rs1, Imm set less than set less than unsigned set less than immediate set less than immediate unsigned Universität Göttingen - Informatik II - SS 2006 4-34 4. Assembler Sprünge Kontrollstrukturen Sprünge machen Programme erst mächtig. Der Spim unterstützt bedingte und unbedingte Sprünge (jumping) an eine Marke (Label). Im Gegensatz zu Hochsprachen unterstützt der Assembler bedingte Sprünge nur aufgrund von Größenvergleichen zweier Register oder eines Registers mit einer Konstanten. Sprünge (bedingte und unbedingte) If-then-else, Case Loop (n Durchläufe) While (Abbruchbedingung) b label – unbedingter Sprung zum Label beq Rs1, Rs2 label – bedingter Sprung falls Rs1 = Rs2 Es gibt insgesamt 21 Befehle für bedingte Sprünge, die auch =,<>,<=,>=,<,>,=0, usw. abfragen. Mit den Sprüngen können wir die Schleifenkonstrukte und Fallunterscheidungen der Hochsprachen nachbilden. Eigentlich erwartet der Assembler einen Offset zu PC (Branching), wir verwenden allerdings Marken, damit sind die Befehle j und b identisch im Spim. Universität Göttingen - Informatik II - SS 2006 4-35 Universität Göttingen - Informatik II - SS 2006 4-36 4. Assembler 4. Assembler Beispiel: While in Assembler Beispiel: if–then–else in Assembler if ($t8 < 0) $s0 = $t1 = } else{ $s0 = $t2 = } main: $v0 = 1; while ($a1 < $a2) do{ $t1 = mem[$a1]; $t2 = mem[$a2]; if ($t1 != $t2) go to break; $a1 = $a1 +1; $a2 = $a2 –1;} return break: $v0 = 0 return then{ 0 - $t8; $t1 + 1; $t8; $t2 + 1; bgez sub addi b $t8, else $s0, $zero, $t8 $t1, $t1, 1 next # # # # if ($t8 is > or = zero) branch to else $s0 gets the negative of $t8 increment $t1 by 1 branch around the else code ori addi $s0, $t8, 0 $t2, $t2, 1 # $s0 gets a copy of $t8 # increment $t2 by 1 li $v0, 1 # Load $v0 with the value 1 bgeu lb lb bne addi addi b $a1, $t1, $t2, $t1, $a1, $a2, loop # # # # # # # li $v0, 0 loop: else: next: $a2, done 0($a1) 0($a2) $t2, break $a1, 1 $a2, -1 If( $a1 >= $a2) Branch to done Load a Byte: $t1 = mem[$a1 + 0] Load a Byte: $t2 = mem[$a2 + 0] If ($t1 != $t2) Branch to break $a1 = $a1 + 1 $a2 = $a2 - 1 Branch to loop break: # Load $v0 with the value 0 done: Universität Göttingen - Informatik II - SS 2006 4-37 4. Assembler Universität Göttingen - Informatik II - SS 2006 4-38 4. Assembler Komplexe Datenstrukturen – Felder Beispiel: Schleifen in Assembler $a0 = 0; Wir können im MIPS Felder deklarieren, indem wir die Felder explizit belegen. Beispiel: .data feld: .word 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 For ( $t0 =10; $t0 > 0; $t0 = $t0 -1) do { $a0 = $a0 + $t0; } li $a0, 0 # $a0 = 0 li $t0, 10 # Initialize loop counter to 10 Oder wir reservieren den Platz für 13 Wörter Beispiel: .data feld: .space 52 Hier wird nur Platz reserviert, aber nicht initialisiert! loop: add $a0, $a0, $t0 addi $t0, $t0, -1 # Decrement loop counter bgtz $t0, loop # If ($t0 >0) Branch to loop Ein Feld ist vergleichbar mit einem Array sw $t0, feld($t0) # feld[i] := i Universität Göttingen - Informatik II - SS 2006 4-39 Universität Göttingen - Informatik II - SS 2006 4-40 4. Assembler 4. Assembler Der Stack Keller für mehr Daten Ein LIFO Speicher Kellerzeiger (SP) zeigt auf 0x7FFF FFFC Einige CISC Prozessoren verfügen über Extrabefehle (push, pop) zum Einkellern von Daten. Beim Spim müssen wir die Kellerverwaltung selbst übernehmen. Unterbrechungen müssen beachtet werden sw $t0, ($sp) addi $sp, -4 Besser: addi $t0, -4 sw $t0, 4($sp) Für den Fall, dass man mehrere Daten speichern will addi $sp, -12 sw $t0, 12($sp) sw $t1, 8($sp) sw $t2, 4($sp) Lesen analog mit dem Befehl lw Erst den Lesebefehl und dann den SP wieder neu setzen. # tep. Reg. $t0 auf Stack # Stack Pointer neu setzen Universität Göttingen - Informatik II - SS 2006 Wir sind nun in der Lage, die ganzen temporären Register zu sichern. 4-41 4. Assembler Universität Göttingen - Informatik II - SS 2006 4-42 4. Assembler Unterprogramme Beispiel: Das Unterprogramm swap als C Programm Aus Hochsprachen ist das Konzept von Unterprogrammen bekannt. In Hochsprachen heißen sie Prozeduren, Methoden, Subrotinen oder Funktionen. Der Grund von Unterprogrammen ist die Wiederverwendung von Programmteilen. Programme können leichter verständlich werden, wenn Unterprogramme sinnvoll eingesetzt werden. Auch Assembler unterstützen das Konzept von Unterprogrammen. Universität Göttingen - Informatik II - SS 2006 #gleich für 3 Worte der SP setzen # t0 sichern # t1 sichern # t2 sichern swap vertauscht v[k] mit v[k+1] swap (int v[], int k) { int temp; temp = v[k]; v[k] = v [k+1]; v[k+1] = temp; } 4-43 Universität Göttingen - Informatik II - SS 2006 4-44 4. Assembler 4. Assembler Swap als MIPS Assembler Programm swap: addi sw sw sw sll add $29, $29, -12 $2, 4($29) $15, 8($29) $16, 12($29) $2, $5, 2 $2, $4, $2 lw lw sw sw lw lw lw addi jr $15, 0($2) $16, 4($2) $16, 0($2) $15, 4($2) $2, 4($29) $15, 8($29) $16, 12($29) $29, $29, 12 $31 # # # # # # # # # # # # # # # # Unterprogramme reserve space on stack save $2 on stack save $15 on stack save $16 on stack reg $2 = k * 4 reg $2 = v + (k*4) $2 con. addr. of v[k] $15 <-- v[k] $16 <-- v[k+1] $16 --> v[k] $15 --> v[k+1] restore $2 from stack restore $15 from stack restore $16 from stack restore stackpointer return Universität Göttingen - Informatik II - SS 2006 Das Unterprogramm wird mit „jal swap“ aufgerufen. Die Parameter müssen in $4, $5 übergeben werden. Die Rückkehradresse wird automatisch in $31 gespeichert. jr $31 ist der Rücksprung aus dem Unterprogramm und entspricht einem Return. 4-45 4. Assembler Universität Göttingen - Informatik II - SS 2006 4-46 4. Assembler Konventionen für Prozeduren (Prolog) Konventionen für Prozeduren (Epilog) Für den Aufrufer (Caller) Callee Sichere $a0-$a3, $v0, $v1, da diese in der Prozedur verändert werden dürfen. Speichere die zu übergebenden Argumente in $a0 bis $a3. Weitere Argumente werden über den Stack übergeben (das fünfte ist das letzte Argument auf dem Stack). Beachte: Call-by-Value vs. Call-by-Reference. Prozedur wird mit jal gestartet. Für den Aufgerufenen (Callee) Rückgabe des Funktionswerts in $v0, $v1 Register wieder herstellen $fp als letztes Register wieder herstellen Stackframe entfernen $sp = $sp – Größe des Frames Return (jr $ra) Caller Auf dem Stack gesicherten Register wieder herstellen Argumente vom Stack nehmen Platz für Stackframe reservieren. Sichere alle „callee-saved“ Register, die verändert werden. $fp, $ra, $s0 - $s7 Achtung Fehlerquelle: der Befehl jal verändert $ra Erstelle $fp durch $sp + Stackframe Universität Göttingen - Informatik II - SS 2006 4-47 Universität Göttingen - Informatik II - SS 2006 4-48 4. Assembler 4. Assembler RISC- Prozessoren und Pipelining Pipelining Ein-Zyklus-Maschinenbefehle IF Instruction Fetch ID Instruction Decode OF Operand Fetch OE Operation Execute OS Operand Store Phasen-Pipelining im RISC Möglichst alle Befehle laufen in einem Taktzyklus ab. Ohne Pipelining Load/Store-Architektur Nur über Load/Store-Befehle Zugriff auf den Hauptspeicher. Alle anderen Befehle: Reg.-Reg. IF ID OF OE OS IF Keine Mikroprogrammierung ID OF OE OS Festverdrahtete Ablaufsteuerung Mit Phasen-Pipelining Möglichst wenige Befehle und Adressierungsarten Typischerweise ca. 50 Befehle, 2 Adressierungsarten: PC-relativ und indiziert. Nur Befehle aufnehmen, wenn sie eine deutliche Geschwindigkeitssteigerung im Mittel bringen. Einheitliches Befehlsformat IF ID OF OE OS IF ID OF OE OS IF ID OF OE OS IF ID OF OE 1 Wort = 1 Befehl (einfache Dekodierung) Aufwandsverlagerung in den Compiler Optimierender Compiler erzeugt Code (später mehr dazu). Universität Göttingen - Informatik II - SS 2006 4-49 4. Assembler Universität Göttingen - Informatik II - SS 2006 4-50 4. Assembler Pipelining Optimierung des Phasen-Pipelinings Der Befehl wird nicht schneller ausgeführt, aber es können mehr Befehle pro Zeit ausgeführt werden. Data Forwarding Operand kann vor dem Rückspeichern an den nächsten Befehl übergeben werden. Parallelität und damit eine Geschwindigkeitssteigerung um die Anzahl der Pipelinestufen. Delayed Load Beim Ladebefehl darf nicht sofort im nächsten Befehl auf den geladenen Operanden zugegriffen werden, sondern erst im übernächsten. Es wird die „Blase“ vermieden, dafür müssen evt. nop Befehle eingeschoben werden. Mit „Blase“ ist die Zeit gemeint, in der der Prozessor nicht weiß, was er tun soll und auf das Rückspeichern wartet. Pipelinekonflikte Datenfluss-Konflikt durch Datenabhängigkeiten (Data Interlock) Beispiel: add $t0, $t1, $t2 # $t0 $t1 + $t2 addi $t0, 1 # $t0 $t0 + 1 add OS ID $t1,$t2 + $t0 addi ID $t0 +1 Universität Göttingen - Informatik II - SS 2006 $t0 4-51 Universität Göttingen - Informatik II - SS 2006 4-52 4. Assembler 4. Assembler Steuerfluss-Konflikte Fazit und Ausblick Delayed Branch (verzögerter Sprung) RISC hat sich durchgesetzt Verzweigung wird erst ab dem übernächsten Befehl wirksam. Das „Loch“ wird durch einen Befehl, der eigentlich vor dem Branch hätte ausgeführt werden sollen, gestopft. Einsatz in PCs, Workstation, Parallelrechnern und zunehmend auch in Mikrocontrollern. Moderne CICS- Prozessoren haben mehr und mehr RISC Techniken übernommen Für den Programmierer lästig, für optimierende Compiler kein Problem. traditioneller Sprung verzögerter Sprung LOAD X, R1 ADD 1, R1 BRANCH L ADD R1, R2 SUB R3, R2 L: STORE R1, Y LOAD X, R1 ADD 1, R1 BRANCH L NOP ADD R1, R2 SUB R3, R2 L: STORE R1, Y optimierter verzögerter Sprung LOAD X, R1 BRANCH L ADD 1, R1 ADD R1, R2 SUB R3, R2 L: STORE R1, Y Universität Göttingen - Informatik II - SS 2006 4-53 4. Assembler Ausblick Compilerbau (Kapitel 7) Automaten und Sprachen (Kapitel 6) Betriebssysteme (Kapitel 5) Maschinenorientierte Programmierung (Kapitel 4) von-Neumann-Rechner (Kapitel 3) Speicher Zahlen und Logik (Kapitel 2) Kommunikation (Kapitel 8) von-Neumann-Rechner Universität Göttingen - Informatik II - SS 2006 4-55 z.B. Intel Pentium-Familie Neue Technologien besonders RISC geeignet (z.B. Galliumarsenid) Universität Göttingen - Informatik II - SS 2006 4-54 5. Betriebssysteme Überblick Informatik II SS 2006 Einführung Prozessverwaltung Speicherverwaltung Ein- und Ausgabe Dateisysteme Kapitel 5: Betriebssysteme Dr. Michael Ebner Dr. René Soltwisch Lehrstuhl für Telematik Institut für Informatik Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme Literatur (1/2) Literatur (2/2) Das Kapitel orientiert sich an William Stallings: „Betriebssysteme - Prinzipien und Umsetzung“, Prentice Hall (Pearson Studium), 4. überarbeitete Auflage, 2003, ISBN 3-8273-7030-2 (englisch: „Operating Systems: Internals and Design Principles“) Andere, empfehlenswerte Bücher: Universität Lübeck (ehemals Universität Braunschweig), Prof. Dr. S. Fischer: http://www.itm.uni-luebeck.de/teaching/ws0405/bks/index.html?lang=de Universität Karlsruhe, Herr Liefländer: http://i30www.ira.uka.de/teaching/currentcourses/lecture.php?courseid=91 Daran orientiert sich die Spezialvorlesung Betriebssysteme A. Silberschatz, P. Galvin, G. Gagne: „Operating System Concepts“, John Wiley & Sons, ISBN 0-471-41743-2 Foliensätze zu Büchern: A. Tanenbaum: „Moderne Betriebssysteme“, Prentice-Hall (Pearson Studium), ISBN 3-8273-7019-1 (englisch: „Modern Operating Systems“) Foliensätze (aus denen Folien übernommen wurden): 5-2 Tanenbaum: http://www.cs.vu.nl/~ast/books/mos2/ Stallings: http://www.williamstallings.com/OS4e.html Für die Genehmigung einen großen Dank an die Autoren! Einführung Universität Göttingen - Informatik II - SS 2006 5-3 Einführung Universität Göttingen - Informatik II - SS 2006 5-4 5. Betriebssysteme 5. Betriebssysteme Architektur eines Pentiumsystems Potentielle Systemkomponenten Task Semantic Objects Example Operation GUI/shell window execute shell script Application a.out quit, kill, … File System directories, files open, close, read, Devices printer, display open, write, ... Communication ports send, receive, … Virtual Memory segments, pages write, fetch Secondary Store chunks, blocks allocate, free, Processes task queue exit, create… Threads ready queue wakeup, execute, Interrupts interrupt handler invoke, mask, ... Einführung Universität Göttingen - Informatik II - SS 2006 5-5 Einführung Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme Was ist ein Betriebssystem? Motivation Silberschatz: „An operating system is similar to a government... Like a government the operating system performs no useful function by its self.“ Wo gibt es Betriebssysteme? Beispiele DIN 44300: „Die Programme eines digitalen Rechensystems, die zusammen mit den Eigenschaften dieser Rechenanlage die Basis der möglichen Betriebsarten des digitalen Rechensystems bilden und die insbesondere die Abwicklung von Programmen steuern und überwachen.“ Arbeitsplatzrechner, Großrechner Netzwerkgeräte, wie Router, Bridges, Gateways, etc. Auto Flugzeug-Cockpit Waschmaschine Chipkarte Personal Digital Assistants (PDAs) Mobiles Telefon Spielekonsole (wie z.B. Playstation) etc. Einführung Universität Göttingen - Informatik II - SS 2006 5-6 5-7 Einführung Universität Göttingen - Informatik II - SS 2006 5-8 5. Betriebssysteme 5. Betriebssysteme Ziele und Randbedingungen Ziele eines Betriebssystems Definitionen eines Betriebssystems Anpassung der Benutzerwelt an die Maschinenwelt Organisation und Koordination des Betriebsablaufs Steuerung und Protokollierung des Betriebsablaufs Randbedingungen Definition Betriebssystem als virtuelle Maschine Effizienter Einsatz von Betriebsmitteln Geringer Rechenaufwand Robustheit Sicherheit Definition Betriebssystem als Ressourcenverwalter Ein Betriebssystem ist eine virtuelle Maschine, die dem Anwender eine einfache (dateiorientierte) Schnittstelle zur Hardware zur Verfügung stellt und einem die Programmierung dieser Hardware auf hohem logischen Niveau ermöglicht. Ein Betriebssystem bezeichnet alle Programme eines Rechensystems, die die Ausführung der Benutzerprogramme, die Verteilung der Ressourcen auf die Benutzerprogramme und die Aufrechterhaltung der Betriebsart steuern und überwachen. Definition Ressourcen (Betriebsmittel) Die Ressourcen (Betriebsmittel) eines Betriebssystems sind alle Hardund Softwarekomponenten, die für die Programmausführung relevant sind. Betriebsmittel: Prozessor, Hauptspeicher, I/O-Geräte, Hintergrundspeicher, etc. Einführung Universität Göttingen - Informatik II - SS 2006 5-9 5. Betriebssysteme Bank- Flugsystem Reservierung Editor Universität Göttingen - Informatik II - SS 2006 5-10 5. Betriebssysteme Schichten eines Rechnersystems Compiler Einführung Spiele Kommandointerpreter Zwei Sichten auf ein Betriebssystem Anwendungsprogramme Anwendersicht: • Top-Down-Sicht • Betriebssystem ist eine virtuelle Maschine Systemprogramme Betriebsystem BS-Entwicklersicht: • Bottom-Up-Sicht • Betriebssystem ist ein Maschinensprache Mikroprogrammierung Betriebsmittel(Ressourcen-) Verwalter Hardware Physikalische Geräte Einführung Universität Göttingen - Informatik II - SS 2006 5-11 Einführung Universität Göttingen - Informatik II - SS 2006 5-12 5. Betriebssysteme 5. Betriebssysteme Aufgaben eines Betriebssystems (1/5) Prozessverwaltung Aufgaben eines Betriebssystems (2/5) (Ein Prozess oder auch Task ist ein in Ausführung befindliches Programm) Erzeugen und Löschen von Prozessen Prozessorzuteilung (Scheduling) Prozesskommunikation Synchronisation nebenläufiger Prozesse, die gemeinsame Daten benutzen Logische Sicht auf Speichereinheiten (Dateien) Zuteilung des verfügbaren physikalischen Speichers an Prozesse Einbeziehen des Hintergrundspeichers (Platte) durch virtuelle Adressierung, demand Paging, Swapping (= Ein-/Auslagern von Prozessen), etc. Benutzer arbeitet mit Dateinamen. Wie und wo die Dateien gespeichert werden, ist ihm egal. Systemaufrufe für Dateioperationen Speicherverwaltung Verwaltung des Dateisystems Erzeugen, Löschen, Öffnen, Lesen, Schreiben, Kopieren, etc. Strukturierung mittels Verzeichnissen (Directory) Einführung Universität Göttingen - Informatik II - SS 2006 5-13 Einführung Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme Aufgaben eines Betriebssystems (3/5) Aufgaben eines Betriebssystems (4/5) Verwaltung des Dateisystems (cont.) 5-14 Schutz von Dateien und Verzeichnissen vor unberechtigtem Zugriff Geräteverwaltung Unix: 9-Bit für Zugriffsrechte (Read, Write, eXecute) Datei/Verzeichnis gehört einem Eigentümer (user) und einer Benutzergruppe (group, z.B. Mitarbeiter, Projekt, etc.) z.B. Monitoring, Accounting, Auditing user rwx group r-- Dateiname Uebung.txt Befehl: others r-- Dateiname Uebung.txt Aktuelle Auslastung Aktueller freier Speicher Netzverkehr Optionale Aufgaben > chmod g+w Uebung.txt führt zu: group rw- Erstellen & Verwalten von Systemstatistiken others r-- user rwx Auswahl und Bereitstellung von I/O-Geräten Anpassung an physikalische Eigenschaften der Geräte Überwachung der Datenübertragung Laufzeit von Prozessen mitprotokollieren Speicherbedarf von Prozessen mitprotokollieren Eingeloggte Benutzer mitprotokollieren etc. Einführung Einführung Universität Göttingen - Informatik II - SS 2006 5-15 Universität Göttingen - Informatik II - SS 2006 5-16 5. Betriebssysteme 5. Betriebssysteme Aufgaben eines Betriebssystems (5/5) Strukturen von Betriebssystemen Weitere wichtige Aspekte: Fehlertoleranz Graceful Degradation: Beim Ausfall einzelner Komponenten läuft das System mit vollem Funktionsumfang mit verminderter Leistung weiter. Fehlertoleranz wird durch Redundanz erkauft. Realzeitbetrieb Betriebssystem muss den Realzeit-kritischen Prozessen die Betriebsmittel so zuteilen, dass die angeforderten Zeitanforderungen eingehalten werden. Für zeitkritische Systeme: Meßsysteme, Anlagensteuerungen, etc. Modularisiert in Komponenten und Subsysteme Kern („kernel“) läuft ständig und parallel zu anderen System- und Anwendungsprozessen Systemprogramme werden nur bei Bedarf geladen Dämonen („daemons“) sind Hilfsprozesse, die ständig existieren, aber meist passiv sind. Warten auf ein Ereignis oder schauen selbst zeitgesteuert nach, ob Arbeit da ist. Benutzeroberflächen Betriebssystem muss eine ansprechende Benutzerschnittstelle für die eigene Bedienung enthalten. Betriebssystem muss Funktionen bereitstellen, mit denen aus Anwendungsprogrammen heraus auf die Benutzerschnittstelle zugegriffen werden kann. Einführung Universität Göttingen - Informatik II - SS 2006 5-17 Einführung Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme User und Kernel Mode Einstiegspunkte in ein Betriebssystem CPUs laufen in zwei Modi, kernel mode und user mode Benutzermodus (user mode) Systemaufrufe Prozessor bearbeitet ein Anwendungsprogramm Befehlssatz und verfügbare Register sind beschränkt Mögliche Beschränkung des Zugriffs auf die Hardware (hardware protection) Direkter Zugriff auf andere in Ausführung befindliche Programme ist verboten niedrigere Priorität synchron (z.B. Division durch 0) Fehler wird an Applikation weitergeleitet Hardware Interrupt (Unterbrechung) Prozessor bearbeitet Betriebssystem Alle Befehle und Register sind verfügbar Direkter, uneingeschränkter Zugriff auf die Hardware Manipulation interner Daten laufender Programme möglich höhere Priorität synchron Parameterübergabe über z.B. Register oder Stack Hardware Traps Betriebssystemmodus (kernel mode) asynchron (z.B. Modem) Software Interrupt (Unterbrechung) asynchron Einführung Universität Göttingen - Informatik II - SS 2006 5-18 5-19 Einführung Universität Göttingen - Informatik II - SS 2006 5-20 5. Betriebssysteme 5. Betriebssysteme Formen von Betriebssystemen Architekturen von Betriebssystemen (1/2) Stapelverarbeitung (batch processing) Dialogverarbeitung (time sharing) Echtzeitverarbeitung (real-time processing) Verteilte Verarbeitung (distributed processing) Eingebettete Betriebssysteme Smart-Card Betriebssysteme ... Monolithische Systeme Geschichtete Systeme (oder Hierarchische oder Schalen) Sammlung von Prozeduren und Funktionen ohne (oder nur mit minimaler) Struktur („The big mess.“, A. Tanenbaum) mehrere Schichten wobei Schicht n+1 auf Schicht n aufbaut und neue Funktionalität bereitstellt Vereinfachte Fehlersuche und Qualitätssicherung Funktionszuweisung zu einer Schicht schwierig Strikte Einhaltung der Schichten und strenge Parameterprüfung erhöht den Overhead an den Schichtübergängen Virtuelle Maschinen Abstraktion betrifft nicht nur die Hardware, sondern kann auch höhere Funktionen betreffen. Emulation der Hardware zu so genannten virtuellen Maschinen (VM) Gleichzeitig verschiedene Betriebssysteme auf den VMs z.B. Java Virtual Machine, VMware, VirtualPC, User Mode Linux (UML) Einführung Universität Göttingen - Informatik II - SS 2006 5-21 5. Betriebssysteme Universität Göttingen - Informatik II - SS 2006 5-22 5. Betriebssysteme Architekturen von Betriebssystemen (2/2) Einführung Allgemeine Schalenstruktur von UNIX bzw. Linux Minimale Kerne (engl. microkernel) Kern mit minimalen Betriebssystemfunktionen (Kommunikationsprimitive und elementares multi-programming) um einen großen Hardware-nahen Kern zu vermeiden Minimale Kerne folgen dem Client-Server-Modell in verteilten Systemen Server können im Benutzermodus laufen und in einem Netzwerk verteilt werden (zentralisierte und verteilte Realisierung möglich) Vermehrte Kommunikation führt zu mehr Overhead Trennung von Mechanismen und Strategien Einführung Universität Göttingen - Informatik II - SS 2006 5-23 Einführung Universität Göttingen - Informatik II - SS 2006 5-24 5. Betriebssysteme 5. Betriebssysteme Windows Architektur Standardisierung Einige relevante Standards AT&T: System V Interface Definition (SVID) 1985 OSF: OSF: Distributed Computing Environment (DCE) Motif 2.0 Graphical User Interface Toolkit 1995 1994 X/OPEN Portability Guide (XPG-1, ..., XPG-4) 1984 IEEE Portable Operating System Interface based on UNIX (POSIX) 1989 OpenGroup: Single UNIX Specification Version 2 OpenGroup: Common Desktop Environment (CDE) 1.0 1997 1996 ANSI/ISO: Programmiersprache C (X3.159, ISO/IEC 9899) ANSI/ISO: Programmiersprache C++ (X3J16) 1989 1998 Einführung Universität Göttingen - Informatik II - SS 2006 5-25 Einführung Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme POSIX Standards Ausblick Standardisierung von Betriebssystemfunktionen mit dem Ziel, die Portabilität von Programmen zu verbessern. POSIX-Standards werden durch eine Arbeitsgruppe des Institute of Electrical and Electronics Engineers (IEEE) ausgearbeitet und lehnen sich an UNIX an. Guide and overview Library functions Shell and utilities Test methods and conformance Real-time extensions Ada language binding to POSIX.1 Security extensions System administration Transparent file access Fortran 77 binding to POSIX.1 Supercomputing profile POSIX.11 POSIX.12 POSIX.13 POSIX.14 POSIX.15 POSIX.16 POSIX.17 POSIX.18 POSIX.19 POSIX.20 POSIX.21 Kurzer Blick auf Konzepte zur Realisierung der Aufgaben eines Betriebssystems Einfluss auf Programmierung von Anwenderprogrammen POSIX Standards (Stand 1994) POSIX.0 POSIX.1 POSIX.2 POSIX.3 POSIX.4 POSIX.5 POSIX.6 POSIX.7 POSIX.8 POSIX.9 POSIX.10 Transaction processing Protocol independent communication Real-time profiles Multiprocessor profile Batch/supercomputer extensions Language-independent POSIX.1 Directory/name services Basic POSIX system profile Fortran-90 binding to POSIX.4 Ada binding to POSIX.4 Distributed real-time Es werden weiterhin Konzepte der folgenden, grundlegenden Teilgebiete kurz betrachtet Die Prozessverwaltung wird daher genauer vorgestellt Speicherverwaltung Ein- und Ausgabe Dateisysteme Studenten des Studienganges „Angewandte Informatik“ wird der Besuch der Spezialvorlesung dringend empfohlen! Einführung Universität Göttingen - Informatik II - SS 2006 5-26 5-27 Einführung Universität Göttingen - Informatik II - SS 2006 5-28 5. Betriebssysteme 5. Betriebssysteme Prozessverwaltung Prozesse Prozesse und Threads Prozess-Scheduling Interprozesskommunikation Verklemmungen Ein Prozess ist der Ablauf eines sequentiellen Programms. Benötigt Betriebsmittel (CPU, Speicher, Dateien, etc.) und ist selbst ein Betriebsmittel. Wird vom Betriebssystem verwaltet (Erzeugung, Terminierung, Scheduling, etc.) Ein Prozessor führt in jeder Zeiteinheit maximal einen Prozess aus. Laufen mehrere Prozesse, dann finden Prozesswechsel statt. Das Betriebssystem entscheidet über die Prozesswechsel. Wir gehen von einem einfachen Prozessor aus. Prozessoren mit Hyperthreading, etc. können intern wiederum als mehrere, einfache Prozessoren angesehen werden. Prozesse sind gegeneinander abgeschottet, d.h. jeder besitzt (virtuell) seine eigene Betriebsmittel, wie etwa den Adressraum. Das Betriebssystem sorgt für die Abschottung. Wir gehen von voneinander unabhängigen Prozessen aus. Bei Kooperation ist eine explizite Synchronisation erforderlich. Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-29 Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme Eigenschaften von Prozessen 5-30 Prozesszustände Programmcode: Folge von Maschinenbefehlen (text section) Interner Zustand: Aktueller Zustand durch Programmzähler und Registerinhalte Stack: Inhalt des Stapelspeichers, wo temporäre Variablen und Parameter für Funktionsaufrufe verwaltet werden Daten: Inhalt des Speichers, in dem die globalen Daten gehalten werden Externer Zustand: Beziehung zu anderen Betriebsmitteln Typische definierte Prozesszustände und Zustandsübergänge New Admit Assign Ready Running Terminate Exit Release Block Unblock Blocked Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-31 Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-32 5. Betriebssysteme 5. Betriebssysteme Win-NT’s Prozesszustandsmodell (mit Sieben Zuständen) Unix Prozesszustandsmodell Lazy versus eager loading New Admit Ready Preselect Deblock Assign Standby Release Running Terminate Exit Block on event i Blocked Blocked Reinitialize Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-33 5. Betriebssysteme Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-34 5. Betriebssysteme Mögliche Attribute für einen Prozessleitblock (PCB) PCB Struktur Kontext Scheduling Familie Zeit Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-35 Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-36 5. Betriebssysteme 5. Betriebssysteme Prozessbäume Leichtgewichtsprozesse (Threads) Alle existierenden Prozesse sind in einer Prozesstabelle gespeichert Prozesse können neue Prozesse erzeugen, wodurch eine Hierarchie (Baum) von Prozessen entsteht Cascading termination möglich, falls erzeugte Prozesse nicht ohne erzeugenden Prozess existieren dürfen/sollen Mutterprozess und Kinderprozesse teilen keine/einige/alle Ressourcen Threads sind parallele Kontrollflüsse, die nicht gegeneinander abgeschottet sind laufen innerhalb eines Adressraumes, innerhalb eines „echten“ Prozesses teilen sich gemeinsame Ressourcen Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-37 5. Betriebssysteme Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme Threads besitzen eigenen Stack Thread Beispiel Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-38 5-39 Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-40 5. Betriebssysteme 5. Betriebssysteme Charakterisierung von Threads Pro Prozess Vorteile/Nachteile von Threads Pro Thread Kontextwechsel ist effizienter Adressraum Globale Variablen Offene Dateien Kinderprozesse Unerledigte Alarme Signal und Signalkontroller Informationen für Systemstatistiken Programmzähler Register Stack Zustand kein Wechsel des Adressraumes kein automatisches Scheduling (Kernelthread bei BS, Benutzerthread bei Anwendung) kein Retten und Restaurieren des kompletten Kontextes (nur Programmzähler und Register) Pro Zeiteinheit sind viel mehr Threadwechsel als Prozesswechsel möglich -> Leichtgewichtsprozesse Gleichzeitige Aktivitäten können besser modelliert werden, z.B. falls einige Aktivitäten von Zeit zu Zeit blockieren/warten Bessere Performance bei Erzeugung/Zerstörung und bei Mischung mit I/O intensiven Aufgaben (kein Vorteil bei reiner CPU-Nutzung) Nachteile Schutzfunktionen fallen weg (z.B. getrennte Adressräume) Synchronisation erforderlich Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-41 Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme Prozessverwaltung Prozesswechsel Prozesse und Threads Prozess-Scheduling Interprozesskommunikation Verklemmungen Mehrere Prozesse teilen sich einen Prozessor, weshalb Prozesswechsel notwendig sind Das Betriebssystem entscheidet über die Prozesswechsel Komponenten des Scheduling Prozesswechselkosten Warteschlangenmodelle Prozesswechsel sind relativ teuer wegen Sicherung des Kontextes Wartende Prozesse werden in internen Warteschlangen gehalten Auswahlstrategie der Warteschlangen haben wesentlichen Einfluss auf Systemverhalten Scheduling-Verfahren Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-42 5-43 Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-44 5. Betriebssysteme 5. Betriebssysteme Prozess-Scheduling (1/2) Anforderungen Prozess-Scheduling (2/2) Fairness Effizienz Antwortzeit Verweilzeit Durchsatz Maximierung des Durchsatzes (Jobs/Zeit) Maximierung der einzelnen Laufzeiten Maximierung der CPU-Nutzung Interaktive Systeme Realzeit-Systeme nicht-präemptiv: laufender Prozess wird nicht von außen unterbrochen präemptiv: laufende Prozesse können von außen unterbrochen werden Fairness Effizienz (Nutzung der Ressourcen) Umsetzung der gewünschten Policy Batch-Systeme Erzeugung eines neuen Prozesses Prozess terminiert oder blockiert I/O-Unterbrechungen (Interrupts) Zeitscheibe läuft ab Verfahren: Alle Systeme Entscheidungspunkte Deterministische und probabilistisches Scheduling Verfahren hängt von gewünschten Eigenschaften ab Minimierung der Antwortzeit Einhalten von Deadlines, Vermeidung von Datenverlusten Vermeidung von Qualitätsverlusten in Multimedia-Systemen Prozessverwaltung Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-45 Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme Scheduling-Verfahren First-Come First Served (FCFS) Shortest Job First (SJF) Shortest Remaining Time Next (SRTN) Prozesse und Threads Prozess-Scheduling Interprozesskommunikation Verklemmungen Interaktiv: Prozessverwaltung Batch: 5-46 Round-Robin Priority Scheduling Shortest Process Next Echtzeit: Earliest Deadline First (EDF) Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-47 Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-48 5. Betriebssysteme 5. Betriebssysteme Interprozesskommunikation (IPC) Kommunikationsformen Prozesse arbeiten oft nicht allein, sondern müssen Informationen austauschen, um eine gemeinsame Aufgabe zu erfüllen. Beim diesem Austausch müssen drei wichtige Fragen beantwortet werden: Gemeinsame Variablen: vor allem in Ein-Prozessor und Multiprozessor-Systemen mit gemeinsamem physikalischen Speicher Wie werden die Daten ausgetauscht? Nachrichtenaustausch: vor allem bei verteilten Systemen, also Kommunikation über Rechnergrenzen hinweg Prozess Über gemeinsame Variablen? Über Nachrichtenaustausch? Rechner Prozess Wie wird sicher gestellt, dass die Prozesse nicht gleichzeitig auf gemeinsame Information zugreifen? Wie wird die richtige Reihenfolge des Zugriffs sicher gestellt (ProducerConsumer-Problem)? Speicher Netz Prozess Die beiden letzten Fragen beschreiben das Synchronisationsproblem. Prozess Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 Universität Göttingen - Informatik II - SS 2006 5-49 Sychronisationsproblem Problemstellung: Zwei Prozesse besitzen einen gemeinsamen Puffer mit einer festen Länge (bounded buffer). Eine Prozess schreibt Informationen in den Puffer (producer), der andere liest Informationen aus dem Puffer (consumer). Der Erzeuger darf nicht in den vollen Puffer einfügen. Der Verbraucher darf nicht aus dem leeren Puffer lesen. while (true) { produce(&item); while (count == N) sleep(1); buffer[in] := item; in := (in + 1) % N; count := count + 1; } insert Puffer Die Anweisungen count := count + 1 und count := count - 1 werden typischerweise zu den folgenden Maschinenbefehlen: P1: register1 := count P2: register1 := register1+1 := register1 P3: count Eine fehlerhafte Lösung: Erzeuger 5-50 5. Betriebssysteme Erzeuger/Verbraucher-Problem Rechner Prozessverwaltung 5. Betriebssysteme Rechner while (true) { while (count == 0) sleep(1); item = buffer[out]; out := (out + 1) % N; count := count - 1; consume(item); } C1: register2 := count C2: register2 := register2-1 C3: count := register2 Nehmen wir an, der Wert von count sei 5. Was liefert die Ausführung der Befehle in der Reihenfolge (a) P1, P2, C1, C2, P3, C3 und die Ausführung in der Reihenfolge (b) P1, P2, C1, C2, C3, P3? remove Verbraucher Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-51 Universität Göttingen - Informatik II - SS 2006 5-52 5. Betriebssysteme 5. Betriebssysteme Race Conditions Kritischer Abschnitt (1/2) (a) liefert den falschen Wert 4, (b) liefert den falschen Wert 6. Diese Werte sind falsch, da ja ein Element eingefügt und eines entfernt wird, der Wert müsste also bei 5 bleiben. Die angegebene Lösung erzeugt falsche Ergebnisse, die von der Bearbeitungsreihenfolge der Prozesse abhängen. Jede Situation, in der mehrere Prozesse gemeinsame Daten manipulieren, kann zu derartigen Synchronisationsproblemen (race conditions) führen. Synchronisationsverfahren garantieren, dass immer nur ein Prozess zu einem bestimmten Zeitpunkt gemeinsam benutzte Daten manipulieren kann. Ein kritischer Abschnitt (critical section) eines Programms ist eine Menge von Instruktionen, in der das Ergebnis der Ausführung auf unvorhergesehene Weise variieren kann, wenn Variablen, die auch für andere parallel ablaufende Prozesse oder Threads zugreifbar sind, während der Ausführung verändert werden. Prinzipieller „Lebenszyklus“ eines Prozesses oder Threads: Prozess wartet auf Erlaubnis Eingangsabschnitt Kritischer Abschnitt Ausgangsabschnitt Prozess gibt bekannt, dass er den kritischen Abschnitt verlassen hat Unkritischer Abschnitt Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-53 Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme Kritischer Abschnitt (2/2) Lösungen für die Synchronisation Das Problem besteht darin, ein „Protokoll“ zu entwerfen, an das sich alle Prozesse oder Threads halten und das die Semantik des kritischen Abschnitts realisiert. Anforderungen an eine Lösung: 5-54 Zwei Prozesse dürfen nicht gleichzeitig in ihrem kritischen Abschnitt sein (safety). Es dürfen keine Annahmen über die Bearbeitungsgeschwindigkeit von Prozessen gemacht werden. Kein Prozess, der außerhalb eines kritischen Bereichs ist, darf andere Prozesse beim Eintritt in den kritischen Abschnitt behindern. Kein Prozess darf ewig auf den Eintritt in den kritischen Abschnitt warten müssen (fairness). Möglichst passives statt aktives Warten, da aktives Warten einerseits Rechenzeit verschwendet und andererseits Blockierungen auftreten können, wenn auf Prozesse/Threads mit niedriger Priorität gewartet werden muss. Es wurden eine Reihe von Lösungen für die Synchronisation von Prozessen entwickelt, von denen wir die wichtigsten besprechen: Semaphore Mutexe Monitore Dies sind Lösungen für die Synchronisation bei Nutzung gemeinsamer Variablen. Bei Nachrichtenkommunikation wird diese Form der Synchronisation nicht benötigt. Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-55 Universität Göttingen - Informatik II - SS 2006 5-56 5. Betriebssysteme 5. Betriebssysteme Semaphore Eigenschaften von Semaphoren & Mutexe Ein Semaphor ist eine geschützte Variable, auf die nur die unteilbaren (atomaren) Operationen up (signal, V) und down (wait, P) ausgeführt werden können: Semaphore down(s) { s := s - 1; if (s < 0) queue_this_process_and_block(); } up(s) { s := s + 1; if (s >= 0) wakeup_process_from_queue(); } Semaphore können zählen und damit z.B. die Nutzung gemeinsamer Betriebsmittel überwachen. Semaphore werden durch spezielle Systemaufrufe implementiert, die die geforderten atomaren Operationen up und down realisieren. Semaphore können in beliebigen Programmiersprachen benutzt werden, da sie letztlich einem Systemaufruf entsprechen. Semaphore realisieren ein passives Warten bis zum Eintritt in den kritischen Abschnitt. Mutexe Oft wird die Fähigkeit zu zählen bei Semaphoren nicht benötigt, d.h., es genügt eine einfache binäre Aussage, ob ein kritischer Abschnitt frei ist oder nicht. Dazu kann eine einfacher zu implementierende Variante, der sogenannte Mutex (von „mutual exclusion“), verwendet werden. Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-57 Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme Erzeuger/Verbraucher mit Semaphoren Implementierung von Semaphoren Das Erzeuger/Verbraucher Problem lässt sich elegant mit drei Semaphoren lösen: 1. Ein Semaphor zum Betreten der kritischen Abschnitte (mutex). 2. Ein Semaphor, das die freien Plätze im Puffer herunter zählt und den Prozess blockiert, der in einen vollen Puffer schreiben will (empty). 3. Ein Semaphor, das die belegten Plätze im Puffer herauf zählt und den Prozeß blockiert, der von einem leeren Puffer lesen will (full). while (true) { produce(&item); down(&empty); down(&mutex); add(&item); up(&mutex); up(&full); } 5-58 semaphore mutex = 1, empty = N, full = 0; Universität Göttingen - Informatik II - SS 2006 while (true) { down(&full); down(&mutex); remove(&item); up(&mutex); up(&empty); consume(item); } Prozessverwaltung 5-59 Semaphore lassen sich als Systemaufrufe implementieren, wobei kurzzeitig sämtliche Unterbrechungen unterbunden werden. Da zur Implementation nur wenige Maschinenbefehle benötigt werden, ist diese Möglichkeit akzeptabel. Auf Mehrprozessor-Systemen muss ein Semaphor mit einer unteilbaren Prozessor-Operation implementiert werden, die das Semaphor vor gleichzeitigen Änderungen in anderen Prozessoren schützt. Beispiel: Test-And-Set-Lock (TSL): beim Ausführen der Operation wird der Memory-Bus für alle anderen Operationen gesperrt Universität Göttingen - Informatik II - SS 2006 5-60 5. Betriebssysteme 5. Betriebssysteme Probleme bei Semaphoren Programmierfehler bei der Benutzung eines Semaphors können zu Verklemmungen oder inkorrekten Ergebnissen führen. Typische Fehler: Monitore Sprünge aus kritischen Bereichen, ohne das mutex-Semaphor freizugeben. Sprünge in kritische Bereiche, ohne das mutex Semaphor zu setzen. Vertauschungen von Semaphoren zum Schutz von kritischen Abschnitten und Semaphoren, die vorhandene Betriebsmittel zählen. Alles in allem sind Semaphore eine „low-level“-Lösung, die erhebliche Disziplin vom Programmierer verlangt. Eine komfortablere Lösung bieten Monitore. ... Universität Göttingen - Informatik II - SS 2006 5-61 5. Betriebssysteme monitor ProducerConsumer condition full, empty integer count; procedure enter if count = N then wait(full); enter_item() count := count + 1; if count = 1 then signal(empty); end; wait(c): Der aufrufende Prozess blockiert, bis ein signal() auf der Bedingungsvariablen c ausgeführt wird. Ein anderer Prozess darf den Monitor betreten. signal(c): Ein auf die Bedingungsvariable c wartender Prozeß wird aufgeweckt. Der aktuelle Prozess muss den Monitor sofort verlassen. Der durch signal() aufgeweckte Prozess wird zum aktiven Prozess im Monitor, während der Prozess, der signal() ausgeführt hat, blockiert. Bedingungsvariablen sind keine Zähler. Ein signal(c) auf einer Variablen c ohne ein wait(c) geht einfach verloren. procedure remove if count = 0 then wait(empty); remove_item(); count := count - 1; if count = N-1 then signal(full); end; count := 0; end monitor; Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-62 Erzeuger/Verbraucher-Problem mit einem Monitor Bedingungsvariablen (condition variables) eines Monitors mit den zugehörigen Operationen wait() und signal() erlauben es, im Monitor auf andere Prozesse zu warten: Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme Bedingungsvariablen eines Monitors Ein Monitor ist eine Sammlung von Schematischer Aufbau eines Monitors: Prozeduren, Variablen und Datenstrukturen, die in einem Modul gekapselt sind. Prozesse können die Prozeduren des Monitors aufrufen, aber keine EingangsGemeinsame internen Daten ändern. warteschlange Daten Monitore besitzen die Eigenschaft, dass immer nur genau ein Prozess im Monitor aktiv sein kann. Monitore sind Konstrukte einer Programmiersprache und erfordern daher spezielle Compiler. Es ist die Aufgabe des Compilers, Operationen Maschinenbefehle zu generieren, die den wechselseitigen Ausschluss Initialisierung im Monitor garantieren. 5-63 procedure producer while (true) do begin produce_item; ProducerConsumer.enter; end end; procedure consumer while (true) do begin ProducerConsumer.remove; consume_item; end end; Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-64 5. Betriebssysteme 5. Betriebssysteme Kritische Abschnitte mit Compilerunterstützung in Java In Java können kritische Abschnitte als Anweisungsfolge geschrieben werden, denen das Schlüsselwort synchronized voran gestellt wird. Die kritischen Abschnitte schließen sich bzgl. des Sperrobjekts gegenseitig aus. Synchronisation in Windows class Buffer { private const int size = 8; private int count = 0, out = 0, in = 0; private int[] pool = new int[size]; public synchronized void insert(int i) { pool[in] = i; in = (in + 1) % size; count++; } Verfügbare Mechanismen Semaphoren Mutexe Kritische Sektionen Ereignisse Synchronisation findet auf Thread-Ebene statt (andere Threads in einem Prozess sind nicht betroffen) public sychronized int remove() { int res = pool[out]; out = (out + 1) % size; count--; return res; } public synchronized int cardinal() { return count; } } Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-65 Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme Interprozesskommunikation in Windows Prozessverwaltung Es stehen verschiedene Mechanismen zur Verfügung: Pipes, Named Pipes (Kommunikation auf einem Rechner) Mailslots (ähnlich Pipes, mit leicht anderen Eigenschaften) Sockets (Kommunikation zwischen Rechnern) Remote Procedure Calls Shared Files Prozesse und Threads Prozess-Scheduling Interprozesskommunikation Verklemmungen Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-66 5-67 Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-68 5. Betriebssysteme 5. Betriebssysteme Verklemmungen/Deadlocks Prozesse benötigen Betriebsmittel, meist sogar mehrere Drucker Festplatte Speicher (z.B. in internen BS-Tabellen) Was passiert wenn sich zwei Prozesse jeweils ein Betriebsmittel reservieren, das der andere auch benötigt? Deadlock – Illustration/Beispiel (a) Ein potenzieller deadlock. (b) Ein tatsächlicher deadlock. Diese Situation wird als Deadlock bezeichnet Definition: Eine Menge von Prozessen befindet sich in einer Verklemmung (deadlock), wenn jeder Prozess der Menge auf ein Ereignis wartet, dass nur ein anderer Prozess aus der Menge auslösen kann. Thread 1 1. Aufruf von x 2. Aufruf von p Thread 2 class A synchronized void x( ) {... } synchronized void y( ) {... } 4.Aufruf von g durch x blockiert 3. Aufruf von y durch p blockiert class B synchronized void p( ) { ...} synchronized void g( ) { ...} Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-69 Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme Ressourcen und deren Nutzung Notwendige Bedingungen für eine Verklemmung 1. Zwei Typen von Ressourcen Wechselseitiger Ausschluss (mutual exclusion): preemptable: vorzeitige Rückgabe möglich (z.B. Speicher) non-preemptable: vorzeitige Rückgabe ist NICHT möglich (z.B. DVD, Drucker) 2. Zuweisung, Nutzen 3. Es gibt einen Prozess, der ein Betriebsmittel belegt und auf ein anderes Betriebsmittel wartet, das von einem anderen Prozess belegt wird. Keine Verdrängung (no preemption): 4. Ein Betriebsmittel ist entweder genau einem Prozess zugeordnet oder es ist verfügbar. Wartebedingung (hold and wait): von BS oder selbst verwaltet Beispiel für Selbstverwaltung: gemeinsame Variablen Bei der Selbstverwaltung sind Deadlocks am häufigsten Einem Prozess kann ein Betriebsmittel nicht entzogen werden. Zirkuläres Warten (circular wait): Es gibt eine Menge {P1, P2,..., Pn} von Prozessen, so dass P1 auf ein Betriebsmittel wartet das P2 belegt, P2 wartet auf ein Betriebsmittel das P3 belegt, ..., und Pn wartet auf ein Betriebsmittel das P1 belegt. Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-70 5-71 Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-72 5. Betriebssysteme 5. Betriebssysteme Betriebsmittel-Zuweisungsgraph Ein Betriebsmittel-Zuweisungsgraph ist ein gerichteter Graph, der zur Beschreibung von Verklemmungen verwendet wird: Beispiel R1 Der Graph besteht aus einer Menge von Prozessen P={P1, P2,..., Pn}, einer Menge von Betriebsmitteln R={R1, R2,..., Rm} und gerichteten Kanten. Eine gerichtete Kante von einem Prozess Pi zu einem Betriebsmittel Rj beschreibt, dass der Prozess Pi ein Exemplar der Betriebsmittels Rj angefordert hat (request edge). Eine gerichtete Kante von einem Betriebsmittel Rj zu einem Prozess Pi beschreibt, dass ein Exemplar des Betriebsmittels Rj dem Prozess Pi zugewiesen ist (assignement edge). R3 P1 R2 P2 P3 R4 Ein Zyklus im Graph bedeutet das Vorhandensein einer Verklemmung. Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-73 Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme Behandlung von Deadlocks Enthält ein Betriebsmittel-Zuweisungsgraph keine Zyklen, dann existiert auch keine Verklemmung. Besitzt ein Betriebsmittel-Zuweisungsgraph einen Zyklus und existiert von jedem beteiligten Betriebsmittel nur genau ein Exemplar, dann existiert eine Verklemmung. Besitzt ein Betriebsmittel-Zuweisungsgraph einen Zyklus und von den beteiligten Betriebsmitteln existieren mehrere Exemplare, so ist eine Verklemmung möglich, aber nicht unbedingt auch eingetreten. R1 P1 5-74 5. Betriebssysteme Eigenschaften von Zuweisungsgraphen P1 hat R1angefordert; R1 ist jedoch schon P2 zugeordnet. P2 wartet auf R3, die aber schon P3 zugewiesen ist. P3 wartet auf R2. R2 ist zweimal vorhanden, aber beide Instanzen sind bereits P1 bzw. P2 zugewiesen. Î Verklemmung P2 P3 P4 R2 Der Zyklus P1, R1, P3, R2, P1 beschreibt keine Verklemmung, da Prozess P4 beendet werden kann, womit ein Exemplar von R2 wieder verfügbar wird. Dem Deadlock-Problem kann mit einer von vier Strategien begegnet werden: 1. Ignorieren: meist keine gute Idee ... 2. Deadlock-Entdeckung und –Auflösung: lasse Deadlocks passieren und behandle sie dann 3. Deadlock-Vermeidung durch vorsichtige dynamische RessourcenAllokation 4. Strukturelle Deadlock-Verhinderung durch das Negieren einer der vier notwendigen Bedingungen Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-75 Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-76 5. Betriebssysteme 5. Betriebssysteme Verhinderung von Verklemmungen (1/4) 1. Verhinderung von Verklemmungen (2/4) Wird eine der vier notwendigen Bedingungen für das Entstehen von Verklemmungen negiert, so können keine Verklemmungen mehr entstehen. Verhinderung von wechselseitigem Ausschluss: 2. Verhinderung der Wartebedingung: Auf alle Betriebsmittel kann von mehreren Prozessen aus gleichzeitig zugegriffen werden. Beispiel: Drucker Anstatt einen Drucker Prozessen exklusiv zuzuordnen, werden Druckausgaben in Dateien abgelegt und in eine Warteschlange eingefügt. Ein spezieller Prozess (printer daemon) erhält exklusiven Zugriff auf den Drucker und arbeitet die Warteschlange ab. Dieser Prozess fordert selbst keine weiteren Betriebsmittel an. Problem: Nicht alle Betriebsmittel (z.B. Speicher, Einträge in der Prozesstabelle) können zwischen Prozessen geteilt werden. Im Beispiel kann der Plattenplatz zur Ablage von Druckausgaben selbst als Betriebsmittel betrachtet werden, das Auslöser für eine Verklemmung ist. Jeder Prozess darf nur dann Betriebsmittel anfordern, wenn er selbst keine anderen Betriebsmittel belegt. Alternative 1: Alternative 2: Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-77 Verhinderung von Verklemmungen (4/4) Entzug von zugewiesenen Betriebsmitteln: Beispielsweise können einem Prozess, der bereits auf ein Betriebsmittel wartet, seine bereits belegten Betriebsmittel entzogen werden, um Betriebsmittelanforderungen anderer Prozesse befriedigen zu können. Die entzogenen Betriebsmittel werden zu der Liste der Betriebsmittel hinzugefügt, auf die der Prozess wartet. Normalerweise besitzen die zugewiesenen Betriebsmittel einen Zustand, der beim Entzug gesichert und später wieder restauriert werden muss. Nicht jedes Betriebsmittel (z.B. Drucker) erlaubt es, den Zustand zu sichern und später wieder zu restaurieren. Verwendung: Verhinderung von zirkulärem Warten: Probleme: 4. Bereits belegte Betriebsmittel können einem Prozess entzogen werden. Beispiel: 5-78 5. Betriebssysteme Verhinderung von Verklemmungen (3/4) Ein Prozess muss alle Betriebsmittel abgeben, bevor er weitere anfordern kann. Problem: Es ist einem Prozess nicht immer möglich, alle Betriebsmittel freizugeben, bevor er weitere Betriebsmittel belegt (z.B. der Eintrag in der Prozesstabelle). Außerdem kann diese Methode dazu führen, dass die Bearbeitung eines Prozesses unendlich verzögert wird, da ein benötigtes Betriebsmittel immer von einem anderen Prozess belegt ist (starvatíon). Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 3. Jeder Prozess fordert sämtliche Betriebsmittel an, bevor seine Bearbeitung beginnt. Problem: Geringe Effizienz, da alle Betriebsmittel eines Prozesses während seiner Ausführung belegt sind. Die meisten Prozesse kennen ihre Betriebsmittelanforderungen nicht, bevor sie starten. Es wird eine totale Ordnung auf den vorhandenen Betriebsmitteln definiert. Ein neues Betriebsmittel darf nur dann angefordert werden, wenn das Betriebsmittel bezüglich der Ordnung größer ist als alle bereits belegten Betriebsmittel eines Prozesses. Mehrere Exemplare eines Betriebsmittels müssen in einer Anfrage angefordert werden. Probleme: Es ist schwierig, eine totale Ordnung für Betriebsmittel zu definieren, die allen Einsatzmöglichkeiten eines Betriebssystems gerecht wird. Benötigt ein Prozess ein Betriebsmittel mit geringerer Ordnung, so müssen zunächst sämtliche Betriebsmittel freigegeben werden. Das Verfahren findet häufig Anwendung bei Betriebsmitteln, deren Zustand leicht gesichert werden kann, wie z.B. CPU-Registerinhalte oder Hauptspeicherbereiche. Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-79 Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-80 5. Betriebssysteme 5. Betriebssysteme Vermeidung von Verklemmungen Ansatz: Anhand von zusätzlichen Informationen werden nur die Betriebsmittelanforderungen gewährt, die nicht zu einer Verklemmung führen können. Im Vergleich zur Verhinderung werden Betriebsmittel effizienter genutzt und der Systemdurchsatz erhöht. Annahme: Die maximale Anforderung von Betriebsmitteln ist a-priori bekannt. Erkennungsverfahren (detection algorithm): Unsichere Zustände: Es existiert die Möglichkeit einer Verklemmung. Im Fall einer Verklemmung ergreift das Betriebssystem Maßnahmen, um die Verklemmung aufzulösen. Notwendige Randbedingungen: Ein System ist in einem sicheren Zustand, wenn es jedem Prozess seine maximale Betriebsmittelanforderung gewähren kann, ohne dass das System in eine Verklemmung geraten kann. Das Betriebssystem überprüft periodisch, ob eine Verklemmung vorliegt. Behebungsverfahren (recovery algorithm): Sichere Zustände: Deadlock-Entdeckung und Beseitigung Die notwendigen Informationen über belegte und angeforderte Betriebsmittel muss einfach zugänglich sein. Der Aufwand zur Entdeckung von Verklemmungen muss vertretbar sein. (Man beachte, dass während der Ausführung des Erkennungsverfahrens keine Betriebsmittel angefordert oder freigegeben werden dürfen.) Die Kosten zur Behebung von Verklemmungen müssen vertretbar sein. Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-81 Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme Erkennung von Verklemmungen (1/2) 5-82 Erkennung von Verklemmungen (2/2) Es existiert nicht mehr als ein Exemplar von jedem Betriebsmittel: Aus dem Betriebsmittel-Zuweisungsgraphen wird ein Wartegraph (wait-for graph) konstruiert, wobei alle Knoten, die Betriebsmittel repräsentieren, entfernt werden. Eine Kante vom Prozess Pi zum Prozess Pj existiert im Wartegraph genau dann, wenn der Betriebsmittel-Zuweisungsgraph zwei Kanten Pi Rq und Rq Pj besitzt. Eine Verklemmung existiert genau dann, wenn ein Zyklus im Wartegraph existiert. Es existieren mehrere Exemplare von jedem Betriebsmittel: Verklemmungen lassen sich erkennen, indem man versucht, eine Abarbeitungsfolge der Prozesse P1,..., Pn zu finden, so dass alle bekannten Betriebsmittelanforderungen erfüllt werden können. Dafür kann z.B. der Bankers-Algorithmus verwendet werden. P5 R1 R3 R4 P1 P2 P3 R2 P4 R5 P5 P1 P2 P3 P4 Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-83 Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-84 5. Betriebssysteme 5. Betriebssysteme Beseitigung von Verklemmungen Speicherverwaltung Zwangsweise Beendigung von Prozessen (process termination): Einfach zu implementieren und sehr effektiv. Auswahl der zu beendenden Prozesse schwierig. Zwangsweise Beendigung von Prozessen kann Inkonsistenzen erzeugen. Bereits verbrauchte Rechenzeit ist normalerweise verloren. Zwangsweiser Entzug von Betriebsmitteln (resource preemption): Einführung Swapping Virtual Memory Seitenersetzungsstrategien Segmentierung Betriebsmittel werden zwangsweise einem Prozess entzogen, um damit die Verklemmung aufzuheben. Auswahl des Prozesses, dem Betriebsmittel entzogen werden, ist schwierig. Nicht jedes Betriebsmittel (z.B. Prozesstabelleneintrag) kann entzogen werden. Rücksetzen von Prozessen (rollback of processes): In speziellen Fällen können Prozesse auf einen vorher gesicherten Zustand (checkpoint) zurückgesetzt werden. Insbesondere Datenbank-Prozesse verwalten häufig ein Logbuch über durchgeführte Transaktionen, so dass ein Prozess ohne Datenverlust gerade soweit zurückgesetzt werden kann, wie zur Behebung der Verklemmung notwendig. Prozessverwaltung Universität Göttingen - Informatik II - SS 2006 5-85 Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme Einführung Speicher und dessen Verwaltung Verschiedene Arten von Speichern, hierarchisch organisiert: Cache-Speicher Hauptspeicher Sekundärspeicher Archiv-Speicher Betriebssystemteil verantwortlich für Speichermanagement: Memory Manager Aufgaben Eigenschaften des Hauptspeichers: 5-86 Buchhaltung: welche Speicherbereiche werden benutzt, welche sind frei Speichervergabe und -rücknahme an/von Prozessen Datenverschiebung zwischen den Speicherhierarchien Der Hauptspeicher besteht aus einer Menge von Wörtern oder Bytes, die jeweils über eine eigene Adresse verfügen. Sowohl die CPU als auch E/A-Geräte greifen auf den Hauptspeicher zu. Ausführbare Programme befinden sich zumindest teilweise im Hauptspeicher. Die CPU kann normalerweise nur auf Daten im Hauptspeicher direkt zugreifen Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-87 Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-88 5. Betriebssysteme 5. Betriebssysteme Grundlegende Speicherverwaltung Speichermanagement: grundsätzlich zwei Klassen: Abbildungen von Speicheradressen Verschieben von Prozessen vom Hauptspeicher auf Festplatte und zurück (Swapping, Paging) Oder nicht (einfache Variante) Ein Compiler/Assembler übersetzt symbolische Adressen (Namen von Variablen und Funktionen) in absolute oder relative Speicheradressen. Quelltext Bei Verzicht auf Swapping und Paging: Monoprogramming: symbolische Namen immer nur ein Prozess sowie das OS im Speicher Einsatzgebiet: frühe Batchsysteme, eingebettete Systeme Multiprogramming mit festen Partitionen Compiler Speicher wird in feste Blöcke eingeteilt, Programme bekommen einen Speicherbereich zugewiesen Einsatz im OS/360 von IBM Oft wurde die Größe der Partitionen einmal am Tag festgesetzt Objektmodul absolute/relative Adressen Ein Linker bindet mehrere Objektmodule mit relativen Adressen und die benötigten Bibliotheken zu einem ausführbaren Programm (executable). Objektmodule Linker relative Adressen Executable statisch/dynamisch gebunden Bibliotheken statisch/dynamisch Speicherverwaltung Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-89 Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme Präzisierung der Aufgaben Moderne Speicherverwaltung Bereitstellung und Zuweisung des Speicherplatzes an die Prozesse (allocation). Einrichtung und Koordination von Speicherbereichen, die von mehreren Prozessen gemeinsam benutzt werden können (shared memory). Schutz der Informationen im Hauptspeicher vor fehlerhaften oder unbefugten Zugriffen. Abbildung von logischen Adressen auf physikalische Adressen (address translation). Heutige Computer haben andere Anforderungen an die Verwaltung des Speichers Insbesondere 346 Swapping: Verschieben von Prozessen zwischen Hauptspeicher und Platte Virtual Memory: Prozesse sind nur zum Teil im Hauptspeicher Hauptspeicher relocation register logische Adresse Laufen meist viele Prozesse Haben die Prozesse oft mehr Speicherbedarf als physikalischer Speicher vorhanden ist Zwei wichtige Lösungen: Prozessor 5-90 Speicheradresse 14000 MMU 14346 (memory management unit) Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-91 Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-92 5. Betriebssysteme 5. Betriebssysteme Speicherverwaltung Prinzip des Swapping Einführung Swapping Virtual Memory Seitenersetzungsstrategien Segmentierung Der komplette Adressraum eines Prozesses wird beim Prozesswechsel auf den Hintergrundspeicher ausgelagert und ein anderer Adressraum eingelagert. Ist im Betriebssystem ohne weitere Hardware-Unterstützung zu realisieren. Extrem aufwändige Prozesswechsel, da die Zugriffszeiten auf den Hintergrundspeicher im allgemeinen um Größenordnungen langsamer sind als Zugriffe auf den Hauptspeicher. Betriebssystem Wurde von MS Windows 3.* benutzt, um Prozesse auszulagern. Wird bei UNIX-Systemen benutzt, swap out P1 um bei einer Überbelegung des BenutzerP2 programmswap in Hauptspeichers einigen Prozessen bereich das Betriebsmittel Hauptspeicher Hintergrundspeicher zwangsweise zu entziehen. Hauptspeicher Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-93 Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme Speichersegmente und Fragmentierung 5-94 Kompaktifizierung Der Hauptspeicher wird vom Betriebssystem in Segmente variabler Länge eingeteilt, die den Prozessen zugewiesen werden. Zur Verwaltung dienen Segmenttabellen. Segmente können verschiedene Zugriffsrechte besitzen, zwischen Prozessen geteilt werden, oder bei Bedarf wachsen. Durch das Entfernen und Einfügen von Segmenten entstehen langristig kleine unbenutzte Speicherbereiche (externe Fragmentierung). Beispiel: Durch das Verschieben von Segmenten im Speicher können viele kleine Löcher zu einem großen Stück freien Speichers zusammengefügt werden (Kompaktifizierung, compaction). Kompaktifizierung setzt voraus, dass die Adressen dynamisch abgebildet werden. 0K 0K 0K 0K Die Suche BetriebsBetriebsBetriebsBetriebssystem system system system nach einer 300K 300K 300K 300K optimalen P1 P1 P1 P1 500K 500K 500K Kompaktifizie- 500K P2 P2 P2 P2 600K 600K 600K 600K rungsstrategie P3 400K 800K ist schwierig. P4 Kompaktif. 1000K 1000K 1000K P4 900K P3 P3 benötigt viel 1200K 1200K 1200K CPU-Zeit. 300K 1500K 1500K P4 900K P4 900K 1900K 1900K 200K 2100K Ausgangssituation Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-95 2100K 600K verschoben 2100K 400K verschoben 2100K P3 200K verschoben Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-96 5. Betriebssysteme 5. Betriebssysteme Speicherbuchhaltung Positionierungsstrategien Wie merkt sich der Memory Manager, welche Speicherbereiche frei bzw. belegt sind? Zwei Lösungen: Bitmaps oder verkettete Listen Beispiel: Jedes Bit identifiziert einen kleinen Speicherbereich, daher feste Größe. Listen vereinfachen die dynamische Verwaltung. Wichtige Frage: Wie finde ich das passende Segment, wenn ein neuer Prozess Speicher anfordert? best fit: Auswahl des kleinsten Loches, das das Segment aufnehmen kann. Diese Strategie lässt einerseits große Löcher lange bestehen, während sie andererseits eine Vielzahl kleiner und nutzloser Überreste erzeugt. worst fit: Auswahl des jeweils größten Loches. Dieses Verfahren tendiert dazu, alle Löcher auf etwa die gleiche Länge zu bringen, die dann aber eventuell zu klein zur Aufnahme eines bestimmten Segments sein kann. first fit: Auswahl des ersten hinreichend großen Loches. Dieses Verfahren liegt in seinem Verhalten zwischen den beiden anderen und ist sehr effizient. next fit: Dieses Verfahren ist eine Variation von first fit. Um zu verhindern, dass sich Löcher einer bestimmten Größe an einer Stelle des Speichers häufen, beginnt jede Suche am Ende der vorherigen Suche. Der Speicher wird also ringförmig durchsucht. buddy system: Die Löcher werden in k Listen so einsortiert, dass die i-te Liste jeweils Löcher der Länge größer gleich 2i für i=1,...,k enthält. Dabei können zwei benachbarte Löcher der i-ten Liste effizient zu einem Loch der i+1-ten Liste zusammengefügt werden. Umgekehrt kann ein Loch der i-ten Liste einfach in zwei Löcher der i-1-ten Liste aufgeteilt werden. Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-97 Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme Speicherverwaltung 5-98 Virtual Memory Einführung Swapping Virtual Memory Seitenersetzungsstrategien Segmentierung Idee (Fotheringham, 1961): ist ein Programm größer als der zur Verfügung stehende Hauptspeicher, dann halte immer nur die aktuell notwendigen Teile im Speicher; lade andere Teile bei Bedarf nach Wichtige Fragen: Welche Teile sind notwendig? Welche Teile behalte ich tunlichst im Speicher? Æ Lade- und Ersetzungsstrategien Zweistufiges Adressensystem: virtuelle Adressen, die die Programme benutzen, werden von der Memory Management Unit in physikalische Adressen umgewandelt und dann erst an den Speicher gegeben Wichtigste Technik: Paging Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-99 Universität Göttingen - Informatik II - SS 2006 5-100 5. Betriebssysteme 5. Betriebssysteme Paging Page Tables Der physikalische Speicher wird in Kacheln (frames) fester Größe eingeteilt. Der logische Adressraum wird in Seiten (pages) gleicher Größe eingeteilt. Logische Adressen werden in eine Seitennummer (page number) und eine seitenrelative Adresse (page offset) aufgeteilt. Eine Umsetzungstabelle (page table) bildet die Seiten auf die verfügbaren Kacheln ab. Die Seiten eines Adressraums können beliebig auf die verfügbaren Kacheln verteilt sein. In der Seitentabelle gibt der Index die Nummer der virtuellen Seite an; der Tabelleneintrag gibt dann die zugehörige physikalische Seite an. Beispiel: 16 mögliche virtuelle Seiten werden auf 8 vorhandene physikalische Kacheln abgebildet. Ein spezielles Bit gibt an, ob die virtuelle Seite vorhanden ist. Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-101 5. Betriebssysteme 5-102 Behandlung von Seitenfehlern Keine externe Fragmentierung. Allerdings wird die letzte Seite eines logischen Adressraums normalerweise nicht vollständig genutzt (interne Fragmentierung). Gemeinsamer Speicher lässt sich mit Hilfe von gemeinsamen Seiten realisieren. Speicherschutz wird durch Schutzbits realisiert. Weitere Bits geben an, ob eine Kachel gültig ist (valid) oder ob eine Kachel modifiziert wurde (modified). Es muss nicht der gesamte Adressraum eines Prozesses im Speicher sein, um ihn auszuführen. Zugriffe auf gerade nicht geladene Seiten lösen einen Seitenfehler (page fault) aus. Das Betriebssystem behandelt Seitenfehler, indem es die benötigte Seite in eine freie Kachel einlagert und den Befehl, der den Seitenfehler auslöste, neu startet. Realisierungsprobleme: Die Adressabbildung muss sehr schnell sein. (In manchen Fällen sind mehrere Umsetzungen für einen Maschinenbefehl notwendig.) Die Umsetzungstabelle kann extrem groß werden. (32-Bit Adressen erfordern bei einer Seitengröße von 4096 Bytes eine Tabelle mit ca. 1 Million Einträgen.) Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme Eigenschaften des Paging Speicherverwaltung 5-103 1. Die Hardware erkennt den Seitenfehler und erzeugt eine Unterbrechung. 2. Das Betriebssystem sichert die Register des Prozesses. 3. Die Prozedur zur Behandlung von Seitenfehlern ermittelt die Adresse der fehlenden Seite. 4. Das Betriebssystem prüft, ob auf die Adresse überhaupt zugegriffen werden darf. 5. Das Betriebssystem wählt eine freie Kachel aus. Falls keine freie Kachel existiert, wird eine belegte Kachel ausgewählt. 6. Falls die ausgewählte Kachel belegt ist und modifiziert wurde, wird sie auf dem Hintergrundspeicher gesichert. Ein Prozesswechsel findet statt, sofern rechenbereite Prozesse existieren. 7. Sobald eine freie Kachel da ist, wird eine E/A-Operation gestartet, um die benötigte Kachel vom Hintergrundspeicher zu laden. Ein Prozesswechsel findet statt, sofern rechenbereite Prozesse existieren. 8. Sobald die Kachel geladen ist, wird die Umsetzungstabelle aktualisiert. 9. Der Befehlszähler wird auf den Befehl zurückgesetzt, der den Seitenfehler auslöste. 10. Der Prozess wird in den Zustand ready gesetzt und in die CPUWarteschlange eingereiht. Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-104 5. Betriebssysteme 5. Betriebssysteme Speicherverwaltung Ladestrategien Die Ladestrategie bestimmt, wann Seiten in den Hauptspeicher geladen werden: Einführung Swapping Virtual Memory Seitenersetzungsstrategien Segmentierung Swapping: Übertragung eines ganzen Adressraums mit einem einzigen Zugriff auf den Hintergrundspeicher. Demand-Paging: Die benötigten Seiten werden genau dann in den Speicher geladen, wenn auf sie zugegriffen wird. Pre-Paging: Es werden Seiten geladen, auf die in der Zukunft ein Zugriff erwartet wird. Erfordert Kenntnisse über typische Zugriffsmuster. Page-Clustering: Gemeinsame Übertragung von mehreren zusammengehörigen Seiten. Ermöglicht die Nutzung großer Seiten auf Hardware, die nur geringe Seitengrößen unterstützt. In der Praxis dominiert Demand-Paging, obwohl dies bei Transportkosten, die nicht monoton mit der Anzahl der transportierten Seiten wachsen, nicht unbedingt optimal ist. Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-105 Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme Ersetzungsstrategien Lokalitätsprinzip Die Ersetzungsstrategie (replacement algorithm) bestimmt, welche der belegten Kacheln ausgelagert werden, damit wieder freie Kacheln zur Einlagerung von benötigten Seiten vorhanden sind. Lokale Strategien weisen jedem Prozess eine konstante Anzahl von Seiten zu. Seitenfehler wirken sich daher nur auf den verursachenden Prozess negativ aus. Bei globalen Strategien wird der gesamte Speicher dynamisch auf alle Prozesse verteilt, um eine effiziente Nutzung des Hauptspeichers zu erreichen. Lokalität bezeichnet das Verhalten eines Programms, innerhalb einer bestimmten Zeit seine Speicherzugriffe auf einen kleinen Teil seines Adressraums zu beschränken. Das Lokalitätsprinzip gilt für Seitenzugriffsverhalten mit folgenden Eigenschaften: Zu jeder Zeit verteilt ein Programm seine Speicherzugriffe in nicht gleichförmiger Weise über seine Seiten. Die Korrelation zwischen den Zugriffsmustern für unmittelbare Vergangenheit und unmittelbare Zukunft ist im Mittel hoch, und die Korrelation zwischen sich nicht überlappenden Referenzstrings geht mit wachsendem Abstand zwischen ihnen gegen 0. Die Referenzdichten der einzelnen Seiten, d.h. die Wahrscheinlichkeit mit der eine Seite zum Zeitpunkt t zum Referenzstring gehört, ändern sich nur langsam, d.h. sie sind quasi stationär. Praktische Gründe für die Gültigkeit des Lokalitätsprinzips sind Schleifen und Modulbereiche von Programmen. Allerdings ist Lokalität bei manchen Programmen oder Algorithmen nicht unbedingt gegeben (z.B. Datenbanken oder einige Verfahren zur Manipulation sehr großer Matrizen). Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-106 5-107 Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-108 5. Betriebssysteme 5. Betriebssysteme Ersetzungsstrategien Beladys Optimalalgorithmus (BO) Es wird die Seite ersetzt, auf die in der Zukunft am längsten nicht zugegriffen wird (Realisierbarkeit??). Least Recently Used (LRU) Least Frequently Used (LFU) First In First Out (FIFO) Second Chance (SC) ; Beladys Anomalie Es wird die Seite ersetzt, auf die am längsten nicht mehr zugegriffen wurde. Intuitiv erwartet man, dass sich Seitenfehler reduzieren, wenn man den verfügbaren Hauptspeicher vergrößert. ABER: folgendes Beispiel: Referenzstring w = 1 2 3 4 1 2 5 1 2 3 4 5 und FIFO Ersetzungsstrategie: Es wird die Seite ersetzt, auf die am wenigsten zugegriffen wurde. Es wird die Seite ersetzt, die bereits am längsten im Speicher steht. Es wird wie beim FIFO ersetzt. Allerdings werden Seiten übersprungen, auf die seit dem letzten Seitenfehler zugegriffen wurde, sofern es Seiten gibt, auf die nicht zugegriffen wurde. Zusätzlich wird oftmals betrachtet, ob die Seite modifiziert wurde oder nicht, da eine unmodifizierte Seite nicht auf dem Hintergrundspeicher gesichert werden muss. Jüngste Seite Älteste Seite 1 2 3 4 1 2 5 5 5 3 4 4 1 2 3 4 1 2 2 2 5 3 3 1 2 3 4 1 1 1 2 5 5 Speichergröße m=3 (9 Seitenfehler) Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-109 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 4 3 2 1 5 4 3 2 Speichergröße m=4 (10 Seitenfehler) Universität Göttingen - Informatik II - SS 2006 5-110 5. Betriebssysteme Speicherverwaltung 4 3 2 1 Speicherverwaltung 5. Betriebssysteme 1 2 3 4 1 2 3 1 2 1 Segmentierung Einführung Swapping Virtual Memory Seitenersetzungsstrategien Segmentierung Bisher: eindimensionaler Adressraum, in dem alle Tabellen, Programmtext etc. in ein- und demselben Adressraum abgelegt werden. Problem: was passiert, wenn die Tabellen nach dem Anlegen und der fortschreitenden Übersetzung eines Programms zu groß werden und in einen anderen Bereich „hineinwachsen? Alle „Lösungen“ mit einem Adressraum erfordern Modifikationen am Compiler, die man vermeiden möchte. Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-111 Universität Göttingen - Informatik II - SS 2006 5-112 5. Betriebssysteme 5. Betriebssysteme Segmentierung Vergleich Paging - Segmentierung Andere Idee: stelle jedem Programm mehrere virtuelle Adressräume zur Verfügung, die es für die jeweiligen Daten verwenden kann Æ Segmentierung des virtuellen Adressraums Eine Adresse besteht dann aus Segment-Nummer und Adresse. Vorteile der Segmentierung Segmente können wachsen, Management durch das BS Linken wird wegen der jeweiligen Startadresse 0 stark vereinfacht Shared Libraries können leicht realisiert werden (Schutz!) Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-113 5. Betriebssysteme Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme Kombination von Segmentierung und Paging Shared Libraries Segmentierung und Paging kann gleichzeitig eingesetzt werden, um die Vorteile beider Ansätze zu kombinieren. Zum Beispiel wird es sinnvoll sein, Segmente aufzuteilen, wenn sie nicht komplett in den Hauptspeicher passen. Moderne Prozessorfamilien unterstützen meist beide Modelle, um für beliebige Betriebssysteme offen zu sein. Ein Pentium besitzt insgesamt 16 K Segmente, wobei jedes bis zu 109 32-Bit-Worte speichern kann. Diese Segmentgröße ist relativ groß. Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-114 5-115 Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-116 5. Betriebssysteme 5. Betriebssysteme Speicherverwaltung in Windows Ein- und Ausgabe Windows besitzt ein sehr anspruchsvolles virtuelles Speichersystem. Jeder Benutzerprozess hat 4 GB virtuellen Speicher verfügbar (32Bit-Adressen). Seitengröße für Paging: 4 KB Shared files (shared libraries) können verwendet werden Grundlagen von Ein-/Ausgabe-Hardware und –Software I/O-Software-Schichten Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-117 Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme I/O-Hardware – Grundlagen Device Controller Wir betrachten I/O-Hardware wie Hard Disks, Bildschirme, Drucker etc. hier eigentlich als Blackbox, die wir irgendwie programmieren müssen. Trotzdem: kurzer Überblick über den Aufbau solcher Geräte Hauptthema: wie bekomme ich Daten von und zu den Geräten Device Controller Memory Mapped I/O Interrupts I/O–Geräte haben zwei Komponenten: mechanisch elektronisch Die elektronische Komponente ist der Device Controller (Gerätesteuerung) Aufgaben Konvertiere seriellen Bitstrom in Datenblöcke Führe Fehlerkorrektur durch wenn notwendig Mache die Daten dem Hauptspeicher verfügbar Ein- und Ausgabe Universität Göttingen - Informatik II - SS 2006 5-118 5-119 Ein- und Ausgabe Universität Göttingen - Informatik II - SS 2006 5-120 5. Betriebssysteme 5. Betriebssysteme Memory-Mapped I/O Wie kommuniziert die CPU/das OS mit dem Device Controller? Direct Memory Access (DMA) Jeder Controller hat einige Steuerungsregister, in die die CPU Befehle schreiben kann Zusätzlich haben viele Geräte einen Datenpuffer, der vom OS geschrieben/gelesen werden kann (Beispiel: Videospeicher für Bildschirmpixel) I/O kann mittels DMA deutlich beschleunigt werden, da die CPU weniger belastet ist Prinzip: vergib einen Auftrag an DMA-Controller, erledige bis zum Ende der Bearbeitung andere Dinge Ablauf eines DMA-Transfers: Ansätze: Spezieller Speicher, spezielle Instruktionen zum Zugriff (I/O-Ports) Memory-Mapped: ein Teil des Hauptspeichers wird für die Kommunikation mit dem Gerät reserviert Ein- und Ausgabe Universität Göttingen - Informatik II - SS 2006 5-121 Ein- und Ausgabe Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme Interrupts I/O-Software – Grundlagen Interrupts werden von Geräten verwendet, um das Ende eines Vorgangs anzuzeigen. Ablauf: I/O-Software soll vor allem die Komplexität der Hardware vor dem OS bzw. dem Anwendungsprogrammierer verbergen. Wichtige Prinzipien daher: 5-122 Geräteunabhängigkeit: ein „write“ funktioniert auf Disk genauso wie auf das Netzwerk Einheitliche Namensverwendung (alle Geräte sind bspw. über Pfade im Dateisystem erreichbar) Fehlerbehandlung so nah wie möglich an der Quelle (Hardware) Die CPU wird unterbrochen und beginnt etwas Neues – abhängig vom auslösenden Gerät wird ein bestimmter Interrupt-Handler aufgerufen und ausgeführt. Später macht die CPU an der „alten“ Stelle weiter. Ein- und Ausgabe Universität Göttingen - Informatik II - SS 2006 5-123 Ein- und Ausgabe Universität Göttingen - Informatik II - SS 2006 5-124 5. Betriebssysteme 5. Betriebssysteme Schichten der I/O-Software Interrupt Handler Typische Organisation: 4 Schichten Interrupts sind kompliziert und sollten deshalb möglichst weit unten verborgen werden. Beste Variante: der Device Driver startet einen Auftrag und blockiert dann, bis er vom Interrupt Handler wieder „geweckt“ wird. Handling von Interrupts benötigt meist auch größere Beteiligung der CPU, vor allem wenn Virtual Memory eingesetzt wird (Modifikation von Seitentabellen) Jede Schicht führt eine wohldefinierte Funktion aus und besitzt genauso ein wohldefiniertes Interface Ein- und Ausgabe Universität Göttingen - Informatik II - SS 2006 5-125 Ein- und Ausgabe Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme Device Driver Geräteunabhängige I/O-Software Aufgabe: Verbergen der Komplexität der Registerbelegungen des Controllers Jedes Gerät benötigt üblicherweise seinen eigenen Device Driver Driver sind praktisch immer Teil des Kernels API für die darüber liegende Schicht: read- und writeAnfragen Wichtige Aufgaben: Bereitstellen einheitlicher Schnittstellen für Gerätetreiber erleichtert den Einsatz neuer Geräte Puffern von verfügbaren Daten erhöht die Performance (kein Interrupt pro ankommendes Datum, sondern pro Block); Problem: zu langes Liegen von Daten im Puffer, zu viele Kopien zwischen Speicherbereichen (Kernel, User Space, Gerät) Æ schlechte Performance Geräteunabhängige Fehlerbehandlung Spezielle Behandlung dedizierter Geräte (CD-ROM) z.B. durch explizites „open“ Bereitstellung einer einheitlichen Blockgröße Ein- und Ausgabe Universität Göttingen - Informatik II - SS 2006 5-126 5-127 Ein- und Ausgabe Universität Göttingen - Informatik II - SS 2006 5-128 5. Betriebssysteme 5. Betriebssysteme Beispiel: einheitliche Schnittstellen Buffering als Performance-Fresser Muss für jedes neue Gerät wieder neu programmiert werden Häufiges Kopieren kostet Zeit! Ein- und Ausgabe Universität Göttingen - Informatik II - SS 2006 5-129 Ein- und Ausgabe Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme I/O-Software im User Space Dateisysteme Im wesentlichen Bibliotheken, die mit den Anwendungsprogrammen gelinkt werden Beispiele: 5-130 Einführung Verzeichnisse Unix-Dateisystem write, read, open, close printf() Zum Teil einfach nur Abbildung auf die entsprechenden Systemaufrufe, zum Teil aber auch Aufgaben wie Formatierung der Daten (printf) Ein- und Ausgabe Universität Göttingen - Informatik II - SS 2006 5-131 Universität Göttingen - Informatik II - SS 2006 5-132 5. Betriebssysteme 5. Betriebssysteme Einführung Einführung: Dateiformate Dateien sind Behälter für dauerhaft gespeicherte Informationen (Daten und Programme). Im einfachsten Fall enthalten Dateien eine nicht weiter strukturierte Folge von Bytes. Applikationen interpretieren in der Regel den Inhalt von unstrukturierten Dateien als ein bestimmtes Dateiformat (oftmals über Namenskonventionen identifiziert): Unterschiedliche Dateiformen besitzen unterschiedliche Formate Beispiel: Textdateien (.txt), Quelltexte (.c, .h, .cc, .java, ...), Objektdateien (.o, .obj, ...) (a) Executable (b) Archiv Dateisysteme Universität Göttingen - Informatik II - SS 2006 5-133 Dateisysteme Universität Göttingen - Informatik II - SS 2006 5. Betriebssysteme 5. Betriebssysteme Dateiattribute Operationen auf Dateien (POSIX) Neben einem Namen und den Daten besitzt eine Datei zusätzlich Attribute. Attribute geben wichtige Informationen über die Datei: Grundlegende Dateioperationen: Öffnen einer Datei: int open(const char *filename, int flags, mode_t mode) int creat(const char *path, mode_t mode) Schließen einer geöffneten Datei: int close(int fd) Lesen/Schreiben von Daten aus/in eine geöffnete Datei: ssize_t read(int fd, void *buffer, size_t len) ssize_t write(int fd, const void *buffer, size_t len) Länge Erstellungsdatum Besitzer Schutz ... Positionieren in einer göffneten Datei: off_t lseek(int fd, off_t offset, int whence) Verkürzen einer geöffneten Datei: int ftruncate(int fd, off_t size) Dateideskriptoren (file descriptors) identifizieren innerhalb eines Benutzerprozesses eine geöffnete Datei. Dateisysteme Universität Göttingen - Informatik II - SS 2006 5-134 5-135 Dateisysteme Universität Göttingen - Informatik II - SS 2006 5-136 5. Betriebssysteme 5. Betriebssysteme Verzeichnisse Beispiel: das Unix V7 Dateisystem Hierarchische Strukturierung des externen Speichers Verzeichnisse erzeugen einen hierarchischen Namensraum. Daten befinden sich in den Dateien an den „Blättern“ der Hierarchie. Namen von Dateien und Verzeichnissen auf einer Hierarchiestufe eindeutig. Absolute Namen durch Aneinanderreihung der Verzeichnisnamen und des Dateinamen. Beispiel: UNIX Dateibaum bin ls cp etc mv dev tty fd hda1 home lib bin usr etc Das System ist in Baumform angeordnet, mit einem rootVerzeichnis. Datei- und Verzeichnisnamen können jeden ASCII-Buchstaben enthalten außer „/“ und NUL. Ein Verzeichniseintrag enthält einen Eintrag für jede Datei in diesem Verzeichnis. Verwendet wird das iNode-Schema. Ein iNode enthält für jede Datei die Attribute sowie die Adressen der Datei auf der Platte. var lib Dateisysteme Universität Göttingen - Informatik II - SS 2006 5-137 5. Betriebssysteme Universität Göttingen - Informatik II - SS 2006 5-138 5. Betriebssysteme Ausblick iNodes in UNIX V7 Dateisysteme Compilerbau (Kapitel 7) Automaten und Sprachen (Kapitel 6) Für kleine Dateien reicht ein iNode. Wenn die Dateien größer werden, müssen Indirektionen auf weitere iNodes verwendet werden Maschinenorientierte Programmierung (Kapitel 4) Single indirect block Double indirect block Triple indirect block von-Neumann-Rechner (Kapitel 3) Betriebssysteme (Kapitel 5) Speicher Zahlen und Logik (Kapitel 2) Kommunikation (Kapitel 8) von-Neumann-Rechner Dateisysteme Universität Göttingen - Informatik II - SS 2006 5-139 Universität Göttingen - Informatik II - SS 2006 5-140 5. Betriebssysteme 5. Betriebssysteme Arbeitsfolien Universität Göttingen - Informatik II - SS 2006 5-141 5. Betriebssysteme Universität Göttingen - Informatik II - SS 2006 5-142 5. Betriebssysteme 0K 0K Betriebssystem 300K 300K P2 Betriebssystem 300K P1 500K 600K 0K 0K Betriebssystem P1 500K 600K P2 Betriebssystem 300K P1 500K 600K P2 P1 500K 600K P2 P3 400K 1000K P4 800K P4 1000K P3 1200K 1200K 1000K 900K P3 1200K 300K 1500K 1500K P4 900K P4 900K 1900K 1900K P3 200K 2100K Ausgangssituation Universität Göttingen - Informatik II - SS 2006 5-143 2100K 600K verschoben Universität Göttingen - Informatik II - SS 2006 2100K 400K verschoben 2100K 200K verschoben 5-144 5. Betriebssysteme Speicherverwaltung Universität Göttingen - Informatik II - SS 2006 5-145 6. Automaten und Sprachen Überblick Wiederholung von Informatik I Informatik II Regulär (Typ 3) SS 2006 Reguläre Sprachen und Ausdrücke Endlicher Automat Kontextfrei (Typ 2) Kapitel 6: Automaten und Sprachen Begriffe/Einordnung Kontextfreie Sprachen und Grammatiken Kellerautomat Dr. Michael Ebner Dr. René Soltwisch Lehrstuhl für Telematik Institut für Informatik Universität Göttingen - Informatik II - SS 2006 6. Automaten und Sprachen 6. Automaten und Sprachen Wiederholung von Informatik I Überblick Bedeutung und Zusammenhang Wort und Alphabet Sprache Ausdruck Grammatik Automat Wiederholung von Informatik I Begriffe/Einordnung Regulär (Typ 3) Chomsky-Hierarchie Syntax Æ Semantik Æ Pragmatik Erweiterte Backus-Naur-Form (EBNF) 6-2 Reguläre Sprachen und Ausdrücke Endlicher Automat Kontextfrei (Typ 2) Kontextfreie Sprachen und Grammatiken Kellerautomat Sie ist eine formale Metasyntax (Metasprache), die benutzt wird, um kontextfreie Grammatiken darzustellen. Die EBNF ist von der ISO standardisiert unter der Nummer ISO/IEC 14977:1996(E). Universität Göttingen - Informatik II - SS 2006 6-3 Universität Göttingen - Informatik II - SS 2006 6-4 6. Automaten und Sprachen 6. Automaten und Sprachen Reguläre Ausdrücke (1/2) Werden mit folgenden Ausdrücken rekursiv ausgedrückt: Reguläre Ausdrücke (2/2) Ein Zeichen c aus dem Alphabet Σ, oder der leeren Zeichenfolge ε, oder der Verkettung zweier regulärer Ausdrücke, r1 . r2, oder der Alternative zweier regulärer Ausdrücke, r1 | r2, oder der Kleenesche Hülle * (ode einfach Hülle oder Stern), r1*. 6-5 6. Automaten und Sprachen r=[c1-cn] ist äquivalent zu r=c1|c2|c3|...|cn für die aufeinander folgende Reihe von n Zeichen beginnend mit c1 und endend mit cn z.B. r=[a-d] ist äquivalent zu r=a|b|c|d Kleenesche Hülle + r=‘c1c2c3...cn‘ ist äquivalent zu r=c1.c2.c3.....cn Erzeugt… ‘if’|’then’|’else’ Die Zeichenketten if, then, or else. a.(a|b|c)*.a Alle Zeichenketten mit a’s, b’s und c’s, welche mit einem a beginnen und enden. a.(a|b|c)*.(b|c).a Alle Zeichenketten mit a’s, b’s, und c’s, welche mit einem a beginnen und einem einzelnen a enden. (a|b|c)*.a.b.a.(a|b|c)* Alle Zeichenketten mit a’s, b’s und c’s, welche die Teilzeichenkette aba enthalten. (b|c)*.a.(b|c)*.a.(b|c)*.a.(b|c)* Alle Zeichenketten mit a’s, b’s und c’s, welche exakt drei a’s beinhalten. r+ ist ein oder mehrere Vorkommen des Wertes von r Formal definiert als r+ = r.r* Das Symbol . steht für jeden Charakter außer „newline“ Runde Klammern können zum Gruppieren von regulären Ausdrücken verwendet werden, um Zweideutigkeiten bei Kombinationen auszuschließen z.B. bedeutet r1.r2|r3 nun (r1.r2)|r3 oder r1.(r2|r3)??? Universität Göttingen - Informatik II - SS 2006 6-6 Reguläre Ausdrücke Zeichenbereiche Universität Göttingen - Informatik II - SS 2006 Beispiele für Reguläre Ausdrücke (1/2) Zeichenfolgen r=[c1-cn] = c1|c2|c3|...|cn Kleenesche Hülle + r+ = r.r* 6. Automaten und Sprachen Abkürzungen von regulären Ausdrücken r=‘c1c2c3...cn‘ = c1.c2.c3.....cn Zeichenbereiche Ein regulärer Ausdruck ist gedacht um Zeichenketten aus Zeichen aus einem Alphabet Σ zu erzeugen Die Menge aller durch einen regulären Ausdruck R erzeugte Zeichenketten wird die Sprache von R genannt und wird symbolisiert durch L(R) Universität Göttingen - Informatik II - SS 2006 Zeichenfolgen 6-7 Universität Göttingen - Informatik II - SS 2006 6-8 6. Automaten und Sprachen 6. Automaten und Sprachen Beispiele für Reguläre Ausdrücke (2/2) Textmuster mit regulären Ausdrücken erkennen In UNIX sind u.a. folgende RAs gebräuchlich: . (Punkt) [0-9] [a-z] [A-Za-z] ? + (Road|Rd\.) ein beliebiges Zeichen die Menge Ziffern die Menge der Kleinbuchstaben die Menge aller Klein- und Großbuchstaben "null oder ein Vorkommen von " "ein oder mehr Vorkommen von " findet "Road" oder "Rd.„ Universität Göttingen - Informatik II - SS 2006 6-9 Universität Göttingen - Informatik II - SS 2006 Begriffe/Einordnung Regulär (Typ 3) Reguläre Sprachen und Ausdrücke Endlicher Automat Kontextfreie Sprachen und Grammatiken Kellerautomat Universität Göttingen - Informatik II - SS 2006 Formal, ein endlicher Automat M ist ein Quintupel M=(Q,Σ,q0,F,δ), wobei Kontextfrei (Typ 2) 6-10 Definition: Endlicher Automat Wiederholung von Informatik I \+[1-9]([0-9][0-9]?)? -\(0\)[1-9][0-9][0-9]?[1-9]? -[1-9][0-9][0-9][0-9]?[0-9]?[0-9]? 6. Automaten und Sprachen Überblick findet amerikanische Adressen nach dem Muster "123Z Arlington Road" Welcher reguläre Ausdruck findet internationale Telefonnummern (in der Form "+LK-(0)Ort-Nr") in einem Text? 6. Automaten und Sprachen [0-9]+[A-Z]? [A-Z][a-z]*( [A-Z][a-z]*)* (Street|St\.|Road|Rd\.) 6-11 Q ist eine endliche Menge von Symbolen genannt Zustände (states) Σ ist eine endliche Menge von Eingabesymbolen genannt Alphabet q0 ist der Startzustand F ist eine endliche Menge von finalen oder akzeptierenden Zuständen. F ist eine, möglicherweise leere, Teilmenge von Q. δ ist eine Übergangsfunktion Ein endlicher Automat ist geeignet um Zeichenketten aus Zeichen aus dem Alphabet Σ zu akzeptieren L(M), oder die Sprache von M, ist die Menge von endlichen Zeichenketten von Symbolen aus dem Alphabet Σ welche vom Automaten M akzeptiert werden Universität Göttingen - Informatik II - SS 2006 6-12 6. Automaten und Sprachen 6. Automaten und Sprachen Zwei Arten von endlichen Automaten: Deterministisch und Nichtdeterministisch Deterministische endliche Automaten (DEA/DFA) Übergänge sind deterministisch und die Übergangsfunktion ist formal definiert als δ:Q x Σ -> Q Ein Eingabesymbol und ein Zustand ergeben den einzigen nächsten Zustand Übergangsfunktionen können als eine Tabelle oder Zustandsübergangsdiagramm geschrieben werden Übergänge sind nichtdeterministisch und die Übergangsfunktion ist formal definiert als δ:Q x Σ -> φQ (Potenzmenge von Q) 6-13 q4 b a,b q5 a q3 Universität Göttingen - Informatik II - SS 2006 6-14 6. Automaten und Sprachen Beispiel: Nichtdeterministischer Endlicher Automaten a,b a b 6. Automaten und Sprachen q2 q1 Abgesehen von den Übergangsfunktionen sind DEAs und NEAs gleich b q3 q2 q5 q5 q5 b a Zustandsübergangsdiagramm a q2 q4 q4 q5 q5 q1 q2 q3 q4 q5 {((q1,a),q2),((q1,b),q3), ((q2,a),q4),((q2,b),q2), ((q3,a),q4),((q3,b),q5), ((q4,a),q5),((q4,b),q5), ((q5,a),q5),((q5,b),q5)} Ein Eingabesymbol und ein Zustand ergeben eine Menge von möglichen nächsten Zuständen. Die Menge kann auch leer sein. Das Alphabet ist erweitert um Übergänge der leeren Zeichenkette є zu erlauben Universität Göttingen - Informatik II - SS 2006 Tabelle Beispiel DFA Q={q1,q2,q3,q4,q5} Σ={a,b} q0=q1 F={q4} δ= Nichtdeterministische endliche Automaten (NEA/NFA) Beispiel: Deterministischer Endlicher Automate Beispiel NFA Q={q1,q2,q3,q4,q5} Σ={a,b,є} q0=q1 F={q4} δ= Ein Beispiel eines deterministischen Automaten (DEA) Tabelle { ((q1,є),{q2,q3}), ((q2,a),{q5}),((q2,b),{q2,q4}), ((q3,a),{q4}),((q3,b),{q5}), ((q4,a),{q5}),((q4,b),{q5}), ((q5,a),{q5}),((q5,b),{q5}) } q1 q2 q3 q4 q5 є q2 q4 q3 Q={q1,q2,q3,q4,q5} Σ={a,b} q=q1 F={q4} δ= {((q1,a),q2),((q1,b),q3), ((q2,a),q4),((q2,b),q2), ((q3,a),q4),((q3,b),q5), ((q4,a),q5),((q4,b),q5), ((q5,a),q5),((q5,b),q5)} b a q2 q1 q4 b Eingabe: a,b a q3 a,b q5 a b abba a Nicht akzeptiert! a,b b q1 є b {q5} {q2,q4} {q5} {q5} {q5} a b Zustandsübergangsdiagramm Universität Göttingen - Informatik II - SS 2006 a {q5} {q5} {q4} {q5} {q5} є {q2,q3} {q5} {q5} {q5} {q5} a,b Welche Sprache akzeptiert M? q5 (ab*a)|ba a b 6-15 Universität Göttingen - Informatik II - SS 2006 6-16 6. Automaten und Sprachen 6. Automaten und Sprachen Ein Beispiel eines nichtdeterministischen Automaten (NFA) Q={q1,q2,q3,q4,q5} Σ={a,b} q=q1 F={q4} δ= {((q1,a),{q2,q3}),((q1,b),{q3}), ((q2,a),{q4}),((q2,b),{q2}), ((q3,a),{q4}),((q3,b),{q5}), ((q4,a),{q5}),((q4,b),{q5}), ((q5,a),{q5}),((q5,b),{q5})} Eine interessante Sache über endliche Automaten b a q2 q1 a,b Eingabe: a,b a q4 q3 a,b Auch wenn es so aussieht als ob Nichtdeterminismus einem endlichen Automaten mehr Ausdruckskraft verleiht, sind NFAs und DFAs formal äquivalent Jeder NFA kann in einen DFA umgewandelt werden und ungekehrt q5 a Warum machen wir dann aber die Unterscheidung? b abba a Nicht akzeptiert! Es ist einfacher reguläre Ausdrücke in NFAs umzuwandeln Es ist einfacher DFAs zu simulieren (bzw. zu implementieren) Welche Sprache akzeptiert M? (ab*a)|ba Gleiche wie zuvor beim DFA… Universität Göttingen - Informatik II - SS 2006 6-17 Universität Göttingen - Informatik II - SS 2006 6. Automaten und Sprachen 6. Automaten und Sprachen Automaten mit Ausgabefunktionen Eine Nebenbemerkung zu endlichen Automaten Neu Ausgabefunktion Ausgabealphabet Endliche Automaten sind auch für andere Dinge als lexikalische Analyse nützlich Moore-Automaten Die Ausgabefunktion ist formal definiert als φ:Q -> ΣA Zu einem Zustand wird ein Zeichen ausgegeben Die meisten Systeme, welche Transaktionen zwischen einer endlichen Anzahl von Zuständen vornehmen, können mit endlichen Automaten modelliert werden Beispiele Mealy-Automaten Die Ausgabefunktion ist formal definiert als φ:Q x ΣE Æ ΣA Zu einem Ausgangszustand und einer Eingabe wird ein Zeichen ausgegeben Universität Göttingen - Informatik II - SS 2006 6-18 6-19 Beschreibung, Simulation, Überprüfung und Implementierung von Protokollen (Mealy-Automaten) Bauen von schnellen, zustandsbasierten Schaltungen (Moore-Automaten),siehe Kapitel 2 Universität Göttingen - Informatik II - SS 2006 MESI cache coherence protocol (Courtesy: John Morris, University of Western Australia) Vending machine automata 25¢ 25 ¢ 0¢ 75¢ 25 ¢ 50 ¢ 25 ¢ 50 ¢ 25 ¢ vend 25 ¢ 50¢ 50 ¢ 50 ¢ 6-20 6. Automaten und Sprachen 6. Automaten und Sprachen Reguläre Ausdrücke nach NFA Beispiel: Reguläre Ausdrücke nach NFA Regulärer Ausdruck Charakter: c c є Alternative: r1|r2 є r1 Verkettung: r1.r2 є r1 r2 є a r=(‘ab’|’cd’)* Faktor: є r1: r1=a.b r2=c.d r3=r1|r2 r=r3* є Leere Zeichenkette: є Kleenesche Hülle: r* NFA є c r2: r r3: r2 є r: 6-21 NFAs nach DFAs (1/2) NFAs nach DFAs (2/2) b NFA q2 є a,b b q4 є QD=P(Q), z.B., QD ist die Menge aller Untermengen von Q FD = {S:∀S ∈QD wobei S∩F ≠ {} } qD= є-FZ (q) δD({q1,q2,…,qk},a) = є-FZ(δ(q1,a)∪ δ(q2,a)∪… ∪(δ(qk,a)) q3 a,b q5 є d a є b c є d a є b c є d є є є DFA {q4,q5} a,b є δD({q1,q2,q3},a) = b Universität Göttingen - Informatik II - SS 2006 δD({q1,q2,q3},b) = Schritt 3: Zustand {q4,q5} b {q2,q4,q5} qD= є-FZ({q1}) = {q1,q2,q3} є-FZ(δ(q1,b)∪δ(q2,b)∪δ(q3,b)) = є-FZ({q2,q4}∪{q2,q4}∪ {q5}) = {q2,q4,q5} {q5} a {q1,q2,q3} є є-FZ(δ(q1,a)∪δ(q2,a)∪δ(q3,a)) = є-FZ({q5}∪{q5}∪ {q4}) = {q4,q5} a a,b 6-23 c Schritt 2: Zustand {q1,q2,q3} b a Universität Göttingen - Informatik II - SS 2006 b Schritt 1: Der Startzustand a q1 Gegeben NFA M=(Q,Σ,q,F,δ) und DFA MD=(QD,Σ,qD,FD,δD) є 6-22 Definition: є-FZ(s) ist die Menge aller Zustände, welche in s beinhaltet sind, plus aller von den Zuständen in s erreichbaren Zustände unter ausschließlicher Verwendung des є Überganges a Universität Göttingen - Informatik II - SS 2006 6. Automaten und Sprachen є є 6. Automaten und Sprachen є є є Universität Göttingen - Informatik II - SS 2006 d є є є b … Schritt 4: Zustand {q2,q4,q5} … 6-24 6. Automaten und Sprachen 6. Automaten und Sprachen NFA nach DFA Zusammenfassung Regulärer Ausdruck Einige Bemerkungen zu DFAs Konvertiere NFA nach DFA є unter Verwendung der є q3 Konstruktion von є q1 q2 Untermengen є q7 Beschrifte jeden DFA Zustand als die vom vorherigen Zustand in einem Schritt erreichbare DFA Menge von Zuständen a Wenn irgendein NFA {q1,q2,q3, Zustand in der Menge der erreichbaren Zustände ein q7,q12} Endzustand ist, dann ist der c ganze DFA Zustand ein Endzustand Universität Göttingen - Informatik II - SS 2006 NFA r=(‘ab’|’cd’)* a c q4 q8 є є q5 q9 b d q6 q10 є q11 є {q8,q9} q12 є b {q2,q3,q6, q7,q11,q12} c 6-25 6-26 6. Automaten und Sprachen Minimierung von DEAs Pumping Lemma für reguläre Sprachen (1/2) siehe Tafelanschrieb Universität Göttingen - Informatik II - SS 2006 Das Finden eines DFAs zu einem NFA ist ein sehr hartes Problem (auch NP-vollständig bezeichnet) Universität Göttingen - Informatik II - SS 2006 6. Automaten und Sprachen Weniger Zustände benötigen weniger Speicher und führen generell zu schnelleren Simulationen Die meisten automatischen Werkzeuge zum Konvertieren von NFAs nach DFAs führen einen Optimierungsprozess aus um die Anzahl der DFA Zustände zu reduzieren a {q2,q3,q7, d q10,q11,q12} c Mit anderen Worten, es könnte einen Automaten M‘ geben wobei L(M)=L(M‘) und M‘ hat weniger Zustände als M Minimale DFAs sind besser geeignet für Implementierungszwecke a {q4,q5} Ein DFA M gebaut unter Verwendung der Konstruktion von Untermengen ist möglicherweise nicht minimal 6-27 Das Pumping Lemma ist eine Methode, um heraus zu finden, ob eine Sprache nicht regulär. Universität Göttingen - Informatik II - SS 2006 6-28 6. Automaten und Sprachen 6. Automaten und Sprachen Pumping Lemma für reguläre Sprachen (2) Satz: Sei L eine reguläre Sprache. Dann gibt es eine Zahl (Konstante) n, derart dass alle Wörter (Zeichenreihen) w in L mit |w | ≥ n gilt, dass wir w in drei Wörter w = xyz zerlegen können, für die gilt: Beweis Jede Zeichenreihe, deren Länge nicht kleiner ist als die Anzahl der Zustände, muss bewirken, dass ein Zustand zweimal durchlaufen wird (Schubfachschluss). |y | ≥ 1 (oder y ≠ ε) |xy | ≤ n, Für alle k ≥ 0 gilt, dass die Zeichenreihe xy kz auch in L enthalten ist. Anhand des Pumping Lemmas kann bewiesen werden, ob eine Sprache NICHT regulär ist. D.h., trifft das Pumping Lemma nicht zu, dann ist die Sprache auch nicht regulär. Der Umkehrschluss gilt aber nicht! Es gibt Sprachen die das Pumping Lemma zwar erfüllen, aber trotzdem nicht regulär sind. Æ Das Pumping-Lemma liefert lediglich eine notwendige Bedingung dafür, dass eine Sprache regulär ist. Universität Göttingen - Informatik II - SS 2006 6-29 Universität Göttingen - Informatik II - SS 2006 6. Automaten und Sprachen 6. Automaten und Sprachen Beispiele Pumping Lemma für reguläre Sprachen Sind diese Sprachen (nicht) regulär? w= anbn w= ab|c Wenn ein genügend langes Wort einer regulären Sprache "gepumpt" wird, erhält man immer wieder ein Wort dieser Sprache. Zum "Pumpen" wird ein Teilwort y aus w durch yy ersetzt. Die Anwendung des Pumping Lemmas ist ein kreativer Vorgang, da es kein „mechanisches“ Vorgehen für den Einsatz gibt. 6-30 w w' w '' = xyz = xyyz = xyyyz Ursprungswort einmal "gepumpt" zweimal "gepumpt" vergleiche Ableitungsregeln aus der Mathematik (Analysís) Universität Göttingen - Informatik II - SS 2006 6-31 Universität Göttingen - Informatik II - SS 2006 6-32 6. Automaten und Sprachen 6. Automaten und Sprachen Theoretische Ergebnisse (1/3) Beispiel: Palindrome Eine Sprache L bestehe aus allen Palindromen über das Alphabet {a ,b } Wenn Palindrome ∈ L, dann muss w = anban ebenfalls ∈ L sein. w = anban = xyz mit y ≠ ε und |xy | ≤ n ⇒ xy bestehen nur aus a's ⇒ y besteht aus mindestens einem a "gepumpt": w = xy2z = amban mit m > n ⇒ amban ∉ L, da amban kein Palindrom ist! Universität Göttingen - Informatik II - SS 2006 6-33 Theoretische Ergebnisse (3/3) LR ist eine Untermenge von LN Nichtdeterministische endliche Automaten akzeptieren alle von regulären Ausdrücken erzeugten Sprachen Warum? Wir haben gezeigt wie beliebige reguläre Ausdrücke zu einem NFA konvertiert werden können Introduction to Automata Theory, Languages, and Computation by Hopcroft and Ullman Introduction to the Theory of Computation by Michael Sipser 6-35 Deterministische endliche Automaten akzeptieren alle Sprachen die auch von nichtdeterministischen endlichen Automaten akzeptiert werden Neben Transitivität, akzeptieren DFAs auch alle durch reguläre Ausdrücke generierte Sprachen Warum? Wir haben gezeigt wie jeder NFA zu einem DFA und jeder reguläre Ausdruck zu einem NFA konvertiert werden kann Beschreiben LN und LD die gleichen Mengen? Universität Göttingen - Informatik II - SS 2006 Erinnerung, LN ist die Menge { L(n):alle nichtdeterministische endliche Automaten n } LD ist die Menge { L(d): alle deterministischen endlichen Automaten d } LN ist eine Untermenge von LD und LR ist eine Untermenge von LD Es stellt sich heraus, dass die Antwort ja ist Beweis durch zeigen das LN eine Untermenge von LR ist oder das jeder nichtdeterministische endliche Automat in einen regulären Ausdruck umgewandelt werden kann Siehe jedes gute theoretische Informatik Buch für Details: Definitionen Beschreiben LR und LN die gleichen Mengen? 6-34 6. Automaten und Sprachen Theoretische Ergebnisse (2/3) Endliche Automaten akzeptieren oder erkennen Sprachen Reguläre Ausdrücke erzeugen Sprachen L(M) ist die akzeptierte Sprache vom endlichen Automaten M L(R) ist die erzeugte Sprache vom regulären Ausdruck R L(R) and L(M) sind Mengen von endlichen Zeichenketten von Symbolen der Alphabete ΣR und ΣM LR ist die Menge { L(r):alle reguläre Ausdrücke r } LN ist die Menge { L(n):alle nichtdeterministische endliche Automaten n } Universität Göttingen - Informatik II - SS 2006 6. Automaten und Sprachen Definitionen Es stellt sich heraus, dass die Antwort ja ist Beweis durch zeigen das LD eine Untermenge von LN ist oder das jeder DFA in einen NFA umgewandelt werden kann Noch mal, siehe jedes gute theoretische Informatik Buch für Details Universität Göttingen - Informatik II - SS 2006 6-36 6. Automaten und Sprachen 6. Automaten und Sprachen Reguläre Sprachen: Zusammenfassung Eine Sprache L(X) ist Regulär wenn: Reguläre Sprachen Reguläre Ausdrücke Deterministische und nichtdeterministische endliche Automaten Wichtige Algorithmen Es gibt einen regulären Ausdruck R so dass gilt L(R) = L(X), oder Es gibt einen DFA MD so dass gilt L(MD) = L(X), oder Es gibt einen NFA MN so dass gilt L(MN) = L(X) Die Sprachen der regulären Ausdrücke, DFA Sprachen und NFA Sprachen sind alle regulär Gegeben ist ein beliebiger regulärer Ausdruck R und ein NFA MN, mit L(R)=L(MN) Rückblick Wir können jeden regulären Ausdruck in einen NFA konvertieren und umgekehrt Gegeben ist ein beliebiger NFA MN und DFA MD, mit L(MN) = L(MD) Wir können jeden NFA in einen DFA konvertieren und umgekehrt Universität Göttingen - Informatik II - SS 2006 6-37 Kontextfreie Grammatiken (1/5) Wiederholung von Informatik I Begriffe/Einordnung Eine kontextfreie Grammatik (KFG/CFG) ist eine rekursive Definition einer Sprache mit: Einem Alphabet Σ von Symbolen Eine Menge von Produktionen (oder Regeln) der Form Regulär (Typ 3) 6-38 6. Automaten und Sprachen Überblick Pumping Lemma für reguläre Sprachen Universität Göttingen - Informatik II - SS 2006 6. Automaten und Sprachen Konvertierung von regulären Ausdrücken zu nichtdeterministischen endlichen Automaten (NEA) (inklusive Beweise) Konvertierung von nichtdeterministischen endlichen Automaten zu deterministischen endlichen Automaten (DEA) Minimalisierung von endlichen Automaten (DEA) Reguläre Sprachen und Ausdrücke Endlicher Automat Kontextfrei (Typ 2) Kontextfreie Sprachen und Grammatiken Kellerautomat Universität Göttingen - Informatik II - SS 2006 6-39 symbol -> symbol symbol … symbol Ein Startsymbol Eine Menge von nicht-terminalen Symbolen aus dem Alphabet Σ, welche auf der linken oder rechten Seite einer Produktionsregel erscheinen darf (convention: written in all capital letters) Eine Menge von terminalen Symbolen aus dem Alphabet Σ, welche nur auf der rechten Seite einer Produktionsregel erscheinen darf. (convention: written in all lower case letters) Die Menge aller von einer CFG G erzeugten Strings wird die Sprache von G genannt und wird symbolisiert durch L(G) Universität Göttingen - Informatik II - SS 2006 6-40 6. Automaten und Sprachen 6. Automaten und Sprachen Kontextfreie Grammatiken (2/5) Kontextfreie Grammatiken (3/5) Kurzschreibweisen: Alternativen s->a1..an|b1..bn|…|z1..zn = s->a1..an s->b1..bn … s->z1..zn Universität Göttingen - Informatik II - SS 2006 Terminale: {PLUS,LPAREN,RPAREN,INT} Nichtterminale: {sum,expr} Startsymbol: {expr} Σ = Terminale ∪ Nichtterminale 6-41 Universität Göttingen - Informatik II - SS 2006 Kontextfreie Grammatiken (5/5) Eine KFG G erzeugt Zeichenketten durch: Beginne mit dem Startsymbol s ⇒ s1 s2 … sn Ersetze ein nichtterminales Symbol sk auf der rechten Seite mit der rechten Seite dieses Nichtterminals Gegeben: sk ⇒ k1…km Dann: s ⇒ s1…sk…sn ⇒ s1…k1…km…sn Wiederhole obigen Schritt bis nur noch Terminale auf der linken Seite vorhanden sind Jeder Schritt in diesem Prozess wird Ableitung (derivation) genannt und jede Zeichenkette von Symbolen entlang dieses Weges wird Satzform genannt. Die abschließende Satzform, welche nur Terminalsymbole enthält, wird ein Satz (sentence) der Grammatik oder auch das Ergebnis (yield) des Ableitungsprozesses genannt Universität Göttingen - Informatik II - SS 2006 6-42 6. Automaten und Sprachen Kontextfreie Grammatiken (4/5) Beispiel: expr -> LPAREN sum RPAREN expr -> INT sum -> expr PLUS expr 6. Automaten und Sprachen L(G) ist die Menge von gültigen Quellprogrammen, und die terminalen Symbole sind die Tokens, welche vom Scanner zurückgeliefert werden Klammergrammatik Kleenesche * Hülle s->s1*= s->s1’ s1’->s1 s1’ s1’->є Wenn eine KFG G zum Parsen von Programmiersprachen verwendet wird, dann gilt 6-43 Normalformen Chomsky-Normalform Greibach-Normalform Nur Regeln der Art: A ⇒ BC und A ⇒ a (A,B,C Variablen, a Terminal) Nur Regeln der Art: A ⇒ aα (A Variable, a Terminal, α Zeichenreihe) Es gibt auch ein Pumping Lemma für kontextfreie Sprachen Anhand des Pumping Lemmas kann bewiesen werden, ob eine Sprache NICHT kontextfrei ist. D.h., trifft das Pumping Lemma nicht zu, dann ist die Sprache auch nicht kontextfrei. Der Umkehrschluss gilt aber nicht! Æ Das Pumping-Lemma liefert lediglich eine notwendige Bedingung dafür, dass eine Sprache kontextfrei ist. Universität Göttingen - Informatik II - SS 2006 6-44 6. Automaten und Sprachen 6. Automaten und Sprachen Pumping Lemma für kontextfreie Sprachen Ableitungen (1/4) Satz: Sei L eine kontextfreie Sprache. Dann gibt es eine Zahl (Konstante) n, für die gilt: Wenn z eine Zeichenreihe (Wort) aus L mit einer Länge |z| von mindestens n ist, dann können wir eine Zerlegung von z angeben mit z = uvwxy, für die folgende Bedingungen erfüllt sind: |vx| ≥ 1 (oder vx ≠ ε). Da v und x die Teile sind, die aufgepumpt werden, besagt diese Bedingung, dass wenigstens eine der zu wiederholenden Zeichenreihen nicht leer sein darf. |vwx| ≤ n, d.h. der mittlere Teil ist nicht zu lang. Für alle i ≥ 0 ist die Zeichenreihe uviwxiy in L enthalten. D.h., auch wenn die beiden Zeichenreihen v und x beliebig oft wiederholt werden, einschließlich nullmal, ist die sich ergebende Zeichenreihe ein Element von L. Universität Göttingen - Informatik II - SS 2006 6-45 Nichtterminale: expr, sum; Terminale: INT expr -> ( sum ) expr -> INT sum -> expr + expr Universität Göttingen - Informatik II - SS 2006 Eine Ableitung (oder Herleitung) ist eine Operationenfolge von Ersetzungen, welche zeigen wie eine Zeichenkette von Terminalen (Tokens), ausgehend vom Startsymbol einer Grammatik, abgeleitet werden kann Unter der Annahme es gibt eine Produktion X ⇒ y, eine einzelne Ersatzoperation oder ein Ableitungsschritt, dann können diese beschrieben werden durch αXβ⇒αγβ, für beliebige Zeichenketten von Grammatiksymbolen α, β und γ Kurzschreibweisen: Ersetze jeweils das äußerste rechte Nichtterminalsymbol in jedem Ableitungsschritt Wird manchmal auch die kanonische Ableitung genannt Linksseitige Ableitungen (leftmost derivations) Ableitungen (3/4) Rechtsseitige Ableitungen (rightmost derivations) 6-46 6. Automaten und Sprachen Ableitungen (2/4) Mögliche Ableitungen: expr ⇒ ( sum ) ⇒ ( expr + expr ) ⇒ ( INT + expr ) ⇒ (INT + ( sum ) ) ⇒ (INT + ( expr + expr ) ) ⇒ (INT + ( INT + expr ) ) ⇒ (INT + (INT + INT ) ) 6. Automaten und Sprachen Grammatik Ersetze jeweils das äußerste linke Nichtterminalsymbol in jedem Ableitungsschritt Siehe vorherige Folie Andere Ableitungsreihenfolgen sind möglich α ⇒* β bedeutet β kann abgeleitet werden von α in 0 oder mehr Schritten α ⇒+ β bedeutet β kann abgeleitet werden von α in 1 oder mehr Schritten α ⇒n β bedeutet β kann abgeleitet werden von α in genau n Schritten Die meisten Parser suchen entweder nach einer rechtsseitigen oder linksseitigen Ableitung Universität Göttingen - Informatik II - SS 2006 6-47 L(G) = { w in Σ* | S G⇒ * w }, Universität Göttingen - Informatik II - SS 2006 (w = Wort, Σ = Alphabet Terminale, S = Startsymbol) 6-48 6. Automaten und Sprachen 6. Automaten und Sprachen Ableitungen (4/4) Beispiel Ableitungen Linksseitige Ableitungen (leftmost derivations): Grammatik: expr -> ( sum ) | INT sum -> expr + expr Für jeden Ableitungsschritt αXβ ⇒ αγβ, muss X das äußerte linke Nichtterminal im String von Symbolen αXβ sein Wird verwendet in LL(k) bzw. top-down parsen Linksseitige Ableitung: Für jeden Ableitungsschritt αXβ ⇒ αγβ, muss X das äußerte rechte Nichtterminal im String von Symbolen αXβ sein Wird verwendet in LR(k) bzw. bottom-up parsen Wird manchmal auch die kanonische Ableitung genannt Universität Göttingen - Informatik II - SS 2006 6-49 expr ⇒ ( sum ) ⇒ ( expr + expr ) ⇒ ( expr + ( sum ) ) ⇒ (expr + ( expr + expr) ) ⇒ (expr + ( expr + INT ) ) ⇒ (expr + ( INT + INT ) ) ⇒ (INT + (INT + INT ) ) 6-50 6. Automaten und Sprachen Ableitungen und Ableitungsbäume (1/2) Rechtsseitige Ableitung: Universität Göttingen - Informatik II - SS 2006 6. Automaten und Sprachen Eingabe: (INT + (INT + INT)) expr ⇒ ( sum ) ⇒ ( expr + expr ) ⇒ ( INT + expr ) ⇒ (INT + ( sum ) ) ⇒ (INT + ( expr + expr ) ) ⇒ (INT + ( INT + expr ) ) ⇒ (INT + (INT + INT ) ) Rechtsseitige Ableitungen (rightmost derivations): Ableitungen und Ableitungsbäume (2/2) Ein Ableitungsbaum (auch Parsebaum genannt) ist eine graphische Repräsentation des Ableitungsprozesses expr expr ⇒ ( sum) ⇒ ( expr + expr ) expr Innere Knoten von Ableitungsbäumen entsprechen den Nichtterminalsymbolen der Grammatik (Produktionen auf der linken Seite) ⇒ ( INT + expr ) INT ⇒ (INT + ( sum ) ) Die meisten Parser konstruieren einen Ableitungsbaum während des Ableitungsprozesses für eine spätere Analyse ⇒ (INT + ( expr + expr ) ) expr ⇒ (INT + ( INT + expr ) ) INT ⇒ (INT + (INT + INT ) ) Blätter eines Ableitungsbaumes entsprechen den Terminalsymbolen (Token) der Grammatik Universität Göttingen - Informatik II - SS 2006 6-51 Universität Göttingen - Informatik II - SS 2006 ( sum ) + expr ( sum ) + expr INT 6-52 6. Automaten und Sprachen 6. Automaten und Sprachen Mehrdeutigkeiten (1/2) Mehrdeutigkeiten (2/2) Eine Grammatik gilt als Mehrdeutig, wenn ein Satz mit (mind.) zwei verschiedenen Ableitungsbäumen abgeleitet werden kann Beispiel – linksseitige versus rechtsseitige Ableitung: Berühmteres Beispiel – “dangling else” Grammatik: Eingabe: slope * x + intercept 6-53 Auswertereihenfolge festlegen (bei versch. Terminalen) Æ Prioritäten Gruppierung festlegen (bei gleichartigen Terminalen) Wiederholung von Informatik I Begriffe/Einordnung Regulär (Typ 3) Reguläre Sprachen und Ausdrücke Endlicher Automat Kontextfrei (Typ 2) 6-54 Überblick Es gibt keinen allgemeingültigen Algorithmus zur Entdeckung von Mehrdeutigkeiten und deren Auflösung Es gibt Grammatiken die nur Mehrdeutig sind. Diese werden inhärent Mehrdeutig genannt. Vermeidung von Mehrdeutigkeiten Generell ist Mehrdeutigkeit jedoch ein Zeichen dafür, dass die Grammatik „schlecht“ spezifiziert wurde und umgeschrieben werden sollte um Mehrdeutigkeiten zu beseitigen 6. Automaten und Sprachen Mehrdeutigkeiten: Anmerkungen Zum Beispiel, obige Interpretation #1 wird von den meisten Parsern für Sprachen die die „dangling else“ Mehrdeutigkeit haben ausgewählt Universität Göttingen - Informatik II - SS 2006 6. Automaten und Sprachen 1) if a then { if b then s1 else s2} 2) if a then { if b then s1 } else s2 Mehrdeutigkeit kann manchmal durch die Auswahl eines akzeptierenden Ableitungsbaumes aus mehreren gehandhabt werden Universität Göttingen - Informatik II - SS 2006 Programmfragment: if a then if b then s1 else s2 Kann interpretiert werden als: expression -> identifier | number | - expression | ( expression ) | expression operator expression operator -> + | - | * | / Kontextfreie Sprachen und Grammatiken Kellerautomat Eindeutige Grammatiken Eine eindeutige Grammatik kann nicht eindeutige Ableitungen haben, aber die Ableitung ist eindeutig, wenn nur links- oder rechtsseitige Ableitungen verwendet werden Universität Göttingen - Informatik II - SS 2006 6-55 Universität Göttingen - Informatik II - SS 2006 6-56 6. Automaten und Sprachen 6. Automaten und Sprachen Kellerautomat (1/4) Kellerautomat (2/4) Kontextfreie Grammatiken können von Kellerautomaten (Push Down Automata, PDA) erkannt werden PDAs sind eine Erweiterung der endlichen Automaten um ein „einfaches“ Gedächtnis (Hilfsband) Eigenschaften eines Kellerautomaten: Universität Göttingen - Informatik II - SS 2006 6-57 Universität Göttingen - Informatik II - SS 2006 6. Automaten und Sprachen Kellerautomat (4/4) Das Hilfsband heißt auch Kellerstapel oder einfach Stapel (engl. stack ). Ein Element kann immer nur oben auf den Stapel gelegt (bzw. an das Ende des Bandes geschrieben) werden (= push ). Immer nur das oberste (letzte) Element kann wieder vom Stapel entfernt werden (= pop ). Die erste Zelle des Hilfsbandes enthält eine spezielle Kennzeichnung, um anzuzeigen, wann der Stapel leer ist. Ein Kellerautomat kann bei leerem Stapel nicht weiterarbeiten. Kellerautomaten arbeiten nichtdeterministisch ε-Bewegungen sind erlaubt Die Menge der deterministischen Kellerautomaten ist eine echte Untermenge der nichtdeterministischen Kellerautomaten. Universität Göttingen - Informatik II - SS 2006 6-58 6. Automaten und Sprachen Kellerautomat (3/4) Das Eingabeband kann sich nur in eine Richtung bewegen. Es existiert ein "Hilfsband", welches sich in beide Richtungen bewegen kann. Der Automat liest im ersten Schritt die jeweils erste Zelle beider Bänder. Als Reaktion des Automaten kann entweder das Hilfsband vorwärts bewegt und ein Zeichen in die nächste Zelle geschrieben werden oder das Symbol gelöscht und das Hilfsband eine Zelle zurück bewegt werden. 6-59 Ein Kellerautomat (=pushdown automaton, PDA) ist ein Septupel P = {Q, Σ, Γ, δ, q0, Z0, F } mit: Q Zustandsmenge, |Q | < ∞ Σ Eingabealphabet, |Σ| < ∞ Γ Stackalphabet, |Γ| < ∞ δ Übergangsfunktion (ZustandsÜF) δ(q,a,X) mit q ∈ Q, a ∈ {Σ, ε}, X ∈ Γ q0 Anfangszustand Z0 Startsymbol (für Stack) F Endzustände, F ⊆ Q Universität Göttingen - Informatik II - SS 2006 6-60 6. Automaten und Sprachen 6. Automaten und Sprachen PDA-Übergangsfunktionen Beispiel PDA: Palindrome Die Ausgabe von δ besteht aus einer endlichen Menge von Paaren (p, γ), wobei p für den neuen Zustand und γ für die Zeichenreihe der Stacksymbole steht, die X auf dem oberen Ende des Stacks ersetzt. Wenn γ = ε, dann wird das oberste Stacksymbol wird gelöscht. (pop-Operation) Wenn γ = X, dann bleibt der Stack unverändert. Wenn γ = YZ, dann wird X durch Z ersetzt und Y zuoberst auf dem Stack abgelegt. (push-Operation) Da PDAs nicht-deterministisch arbeiten, kann die Ausgabe von δ eine Menge an Paaren ergeben, z.B. δ(q, a, X) = { (p, YZ), (r, ε) } Die Paare müssen dabei als Einheit betrachtet und behandelt werden. Wenn sich der PDA im Zustand q befindet, X das oberste Stacksymbol ist und die Eingabe a gelesen wird, kann in den Zustand p gewechselt und X durch YZ ersetzt werden, oder in den Zustand r gewechselt und X vom Stack entfernt werden. Universität Göttingen - Informatik II - SS 2006 6-61 Æ lesen und push Æ Wechsel nach q1, ohne Stack zu verändern Æ lesen, vergleichen, pop Æ Z0 erreicht, akzeptiert 6-62 Beschreibung der Konfiguration eines PDA (1/2) a, b, ... ∈ Σ p, q, ... ∈ Q w, z, ... = Zeichenreihen aus Σ (Terminale) X, Y, ... = Γ α, β, γ, ... = Zeichenreihen aus Γ (Nichtterminale) Im Gegensatz zum endlichen Automaten, bei denen lediglich der Zustand (neben dem Eingabesymbol) für einen Übergang von Bedeutung ist, umfasst die Konfiguration eines PDA sowohl den Zustand als auch den Inhalt des Stacks. Die Konfiguration wird daher durch das Tripel (q, w, γ) dargestellt, wobei Universität Göttingen - Informatik II - SS 2006 Æ lesen und push 6. Automaten und Sprachen Schreibkonventionen für PDAs δ(q0, 0, Z0) = {(q0,0 Z0)} δ(q0, 1, Z0) = {(q0,1 Z0)} δ(q0, 0, 0) = {(q0,00)} δ(q0, 0, 1) = {(q0,01)} δ(q0, 1, 0) = {(q0,10)} δ(q0, 1, 1) = {(q0,11)} δ(q0, ε, Z0)= {(q1, Z0)} δ(q0, ε, 0) = {(q1, 0)} δ(q0, ε, 1) = {(q1, 1)} δ(q1, 0, 0) = {(q1, ε)} δ(q1, 1, 1) = {(q1, ε)} δ(q1, ε, Z0)= {(q2, Z0)} Universität Göttingen - Informatik II - SS 2006 6. Automaten und Sprachen Formelle Beschreibung: P = ({q0,q1,q2},{0,1},{0,1,Z0}, δ, q0, Z0, {q2}) 6-63 q w γ für den Zustand, für die verbleibende Eingabe, für den Inhalt des Stacks steht. (Das obere Ende des Stacks steht am linken Ende von γ.) Universität Göttingen - Informatik II - SS 2006 6-64 6. Automaten und Sprachen 6. Automaten und Sprachen Beschreibung der Konfiguration eines PDA (2/2) Akzeptanzzustände von PDAs Sei P = {Q, Σ, Γ, δ, q0, Z0, F } ein PDA. Es gibt zwei Ansätze, wann ein PDA eine Eingabe akzeptiert: Angenommen, δ(q, a, X) enthält (p, α). Dann gilt für alle Zeichenreihen w aus Σ* und β aus Γ*: (q, aw, X β) ⊢ (p, w, αβ) D.h., der Automat kann vom Zustand q in den Zustand p übergehen, indem er das Symbol a (das ε sein kann) aus der Eingabe einliest und X auf dem Stack durch α ersetzt. (Die restliche Eingabe w und der restliche Inhalt des Stacks β beeinflussen die Aktion des PDA nicht!) Zwar unterscheiden sich die Sprachen, die die jeweiligen PDAs akzeptieren, aber sie sind jeweils ineinander überführbar. Akzeptanz durch Endzustand 6-65 Rückblick Zu jeder kontextfreien Grammatik G (mit ε nicht in L(G)) gibt es zwei Grammatiken G‘ und G‘‘ mit L(G) = L(G‘) = L(G‘‘) Kontextfreie Sprachen/Grammatiken in Chomsky Normalform (G‘) und in Greibach Normalform (G‘‘). Pumping Lemma für kontextfreie Sprachen Normalformen Ableitungen und Ableitungsbäume Mehrdeutigkeiten Pumping Lemma für kontextfreie Grammatiken. 6-66 6. Automaten und Sprachen Theoretische Ergebnisse Sei P = {Q, Σ, Γ, δ, q0, Z0, F } ein PDA. Dann ist die Sprache N(P ), die von P durch Endzustand akzeptiert wird, * (q, ε, ε) für einen beliebigen Zustand q. {w | (q0, w, Z0) ⊢ N(P) ist die Menge der Eingabezeichenreihen w, die P einlesen kann und bei der er gleichzeitig den Stack leeren kann. Universität Göttingen - Informatik II - SS 2006 6. Automaten und Sprachen Sei P = {Q, Σ, Γ, δ, q0, Z0, F } ein PDA. Dann ist die Sprache L(P ), die von P durch Endzustand akzeptiert wird, * (q, ε, β) für einen Zustand q in F und eine {w | (q0, w, Z0) ⊢ p Stackzeichenreihe α. Akzeptanz durch leeren Stack Universität Göttingen - Informatik II - SS 2006 Akzeptanz durch Endzustand Akzeptanz durch leeren Stack Kellerautomaten Eine Sprache L ist kontextfrei genau dann, wenn L von einem nichtdeterministischen Kellerautomaten erkannt wird. Konfiguration Akzeptanz Die Menge der deterministischen Kellerautomaten (DPDA) ist eine echte Untermenge der nichtdeterministischen Kellerautomaten. Universität Göttingen - Informatik II - SS 2006 6-67 Universität Göttingen - Informatik II - SS 2006 6-68 6. Automaten und Sprachen 6. Automaten und Sprachen Tabellarischer Überblick Beschreibungsmittel Determinismus und Nichtdeterminismus Abschlusseigenschaften unter bestimmten Operationen Entscheidbarkeit Beschreibungsmittel Wortproblem (Liegt Wort in Sprache?) Leerheitsproblem (Ist Sprache leer?) Äquivalenzproblem (Sind zwei Sprachen äquivalent?) Schnittproblem (Was ist der Schnitt zweier Sprachen?) Typ 3 (Regulär) Reguläre Grammatik DFA NFA Regulärer Ausdruck Deterministisch Kontextfrei LR(k)-Grammatik Deterministischer Kellerautomat (DPDA) Typ 2 (Kontextfrei) Kontextfreie Grammatik Kellerautomat (PDA) Typ 1 (Kontextsensitiv) Kontextsensitive Grammatik Linear beschränkter Automat (LBA) Typ 0 Typ 0 – Grammatik Turingmaschine (TM) Wortproblem (Komplexität) Anmerkung: Durch diesen Überblick bekommen Sie einen Überblick bzw. ein Gefühl für die Mächtigkeit der einzelnen Sprachklassen. Machen Sie sich damit vertraut um später Probleme schnell und richtig einschätzen zu können. Universität Göttingen - Informatik II - SS 2006 6-69 6. Automaten und Sprachen Abschlusseigenschaften Nichtdeterministischer Automat Deterministischer Automat Äquivalent? NFA DFA ja LBA TM Universität Göttingen - Informatik II - SS 2006 6-70 6. Automaten und Sprachen Determinismus und Nichtdeterminismus PDA Universität Göttingen - Informatik II - SS 2006 DPDA DLBA DTM Schnitt Vereinigung Komplement Produkt Stern Typ 3 Ja Ja Ja Ja Ja Det. Kf. Nein Nein Ja Nein Nein Typ 2 Nein Ja Nein Ja Ja Typ 1 Ja Ja Ja Ja Ja Typ 0 Ja Ja Nein Ja Ja nein ??? (Als LBA-Problem bekannt) ja 6-71 Universität Göttingen - Informatik II - SS 2006 6-72 6. Automaten und Sprachen 6. Automaten und Sprachen Entscheidbarkeit Komplexitäten des Wortproblems Wortproblem Leerheitsproblem Äquivalenzproblem Schnittproblem Typ 3 Ja Ja Ja Ja Typ 3 (DFA gegeben) Lineare Komplexität Det. Kf. Ja Ja Ja Nein Det. Kf. Lineare Komplexität Typ 2 Ja Ja Nein Nein Typ 2 (CNF gegeben) O(n3) Typ 1 Ja Nein nein Nein Typ 1 Exponentielle Komplexität (NP-hart) Typ 0 Nein Nein Nein Nein Typ 0 Unlösbar Universität Göttingen - Informatik II - SS 2006 6-73 6. Automaten und Sprachen Ausblick Compilerbau (Kapitel 7) Automaten und Sprachen (Kapitel 6) Betriebssysteme (Kapitel 5) Maschinenorientierte Programmierung (Kapitel 4) von-Neumann-Rechner (Kapitel 3) Speicher Zahlen und Logik (Kapitel 2) Kommunikation (Kapitel 8) von-Neumann-Rechner Universität Göttingen - Informatik II - SS 2006 6-75 Wortproblem Universität Göttingen - Informatik II - SS 2006 6-74 7. Compilerbau Inhalte Informatik II Organisation von Compilern für moderne Programmiersprachen (Teil 7.1) SS 2006 Einführung Lexer Parser Zusammenführung (Bau eines ausführbaren Programms) Kapitel 7: Compilerbau Teil 1: Lexer und Parser Grundlegende Konzepte von Programmiersprachen (Teil 7.2) Dr. Michael Ebner Dr. René Soltwisch Einführung Programmiersprachen Namen, Bindungen und Gültigkeitsbereiche Speichermanagement und Implementierung Kontrollfluss Lehrstuhl für Telematik Institut für Informatik Universität Göttingen - Informatik II - SS 2006 7. Compilerbau 7. Compilerbau Hinweise Literatur (1/2) Als Grundlage dient das Buch “Programming Language Pragmatics” von Michael L. Smith, sowie das vorherige Kapitel „Automaten und Sprachen“. Bücher Michael L. Scott : „Programming Language Pragmatics”, MKP 2000, ISBN 1-55860-578-9 http://www.cs.rochester.edu/u/scott/pragmatics/ Klassiker der Automatentheorie von Hopcroft/Ullman/Motwani Vertiefung in weiterführender Vorlesung „Konzepte der Programmiersprachen und des Compilerbaus“ von Prof. Dr. Tiziana Margaria-Steffen 7.1-3 Hopcroft, Motwani, Ullman : „Introduction to Automata Theory, Languages, and Computation“, http://www-db.stanford.edu/~ullman/ialc.html Hopcroft, Motwani, Ullman: „Einführung in die Automatentheorie, Formale Sprachen und Komplexitätstheorie“, Pearson Studium, ISBN 3827370205 Drachenbuch Universität Göttingen - Informatik II - SS 2006 7.1-2 Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman: „Compilers - Principles, Techniques and Tools“. Addison-Wesley 1988, ISBN 0-201-10088-6 Alfred V. Aho, Ravi Sethi, Jeffrey D. Ullman: „Compilerbau.“ Oldenbourg Verlag 1999, Teil 1: ISBN 3-486-25294-1, Teil 2: ISBN 3-48625266-6 Universität Göttingen - Informatik II - SS 2006 7.1-4 7. Compilerbau 7. Compilerbau Literatur (2/2) Skripte Informatik II - SS2003 Folien dienen als Grundlage und wurden übersetzt und ev. teilweise ergänzt. Es wird aber auch komplett neue Teile geben!!! http://user.informatik.uni-goettingen.de/~info2/SS2003/ Übersetzerbau I – Prof. Dr. Goos, Universität Karlsruhe http://www.info.uni-karlsruhe.de/lehre/2003WS/uebau1/ ACM Transactions on Programming Languages and Systems ACM SIGPLAN Conference on Programming Language Design and Implementation ACM SIGPLAN Conference on Programming Language Principles Erfahrungsberichte von Studentenseite sind erwünscht 7.1-5 Universität Göttingen - Informatik II - SS 2006 Warum Programmiersprachen und Compiler studieren? Einführung Lexer Parser Zusammenführung (Bau eines ausführbaren Programms) Nach Aussage von Michael Scott (siehe Literaturangabe) Verstehe schwer verständliche Spracheigenschaften Wähle zwischen alternativen Wegen um etwas auszudrücken Mache guten Gebrauch von Debuggern, Assemblern, Linkern und andere verwandte Werkzeuge Simuliere nützliche Eigenschaften (features) welche in einer Sprache fehlen Nach Aussage von Kevin Scott (vorheriger Dozent) Compiler sind große und komplexe Programme: studieren dieser Programme hilft dir „große Software“ besser zu verstehen Viele Programme enthalten „kleine Programmiersprachen“ Universität Göttingen - Informatik II - SS 2006 7.1-6 7. Compilerbau Überblick Konferenzen und Journale 7. Compilerbau ANTLR, ANother Tool for Language Recognition: http:/www.antlr.org Populärste Compilergeneratoren: JavaCC, ANTLR, Eli, Byacc und Coco/R http://en.wikipedia.org/wiki/Compilers:_Principles,_Techniques_and_Tools http://de.wikipedia.org/wiki/Compiler Universität Göttingen - Informatik II - SS 2006 Katalog von Konstruktionswerkzeugen für Compiler http://wwwold.first.gmd.de/cogent/catalog/ WWW: Wikipedia Compilerbau-Skript von Prof. Dr. Goltz, Universität Braunschweig http://www.cs.tu-bs.de/ips/ss04/cb/skript_cp.ps.gz Informatik-Skripte von Prof. Dr. Waack, Universität Göttingen http://www.num.math.uni-goettingen.de/waack/lehrmaterial/ Folien Weitere Quellen 7.1-7 Unix shells, Microsoft Office Anwendungen, etc. Es ist nützlich etwas über Sprachdesign und –implementierung zu wissen, so dass Sie kleine Sprachen in die eigene Software einbauen können Universität Göttingen - Informatik II - SS 2006 7.1-8 7. Compilerbau 7. Compilerbau Weitere Fragen zum Nachdenken Entwurf eines Compilers Was macht eine Programmiersprache erfolgreicher als andere? Werden Programmiersprachen mit der Zeit besser? An welchen Eigenschaften (features) mangelt es deiner bevorzugten Sprache um Sie mächtiger, zuverlässiger, einfacher in der Verwendung zu machen? Universität Göttingen - Informatik II - SS 2006 7.1-9 Die Komplexität wird durch die Aufteilung der Compilerarbeiten in unabhängige Abschnitte oder Phasen bewältigt Typischerweise analysiert eine Phase eine Repräsentation von einem Programm und übersetzt diese Repräsentation in eine andere, welche für die nächste Phase besser geeignet ist Das Design dieser Zwischenrepräsentationen eines Programms sind kritisch für die erfolgreiche Implementierung eines Compilers 7.1-10 7. Compilerbau Der Kompilationsprozess (-phasen) Lexikalische Analyse Scanner (lexikalische Analyse) Lese Programm und konvertiere Zeichenstrom in Marken (tokens). Parser (syntaktische Analyse) Lese Tokenstrom und generiere Parserbaum (parse tree). Traversiere Parserbaum, überprüfe nicht-syntaktische Regeln. Zwischencodegenerierung Traversiere Parserbaum noch mal, gebe Zwischencode aus. Optimierung Untersuche Zwischencode, versuche ihn zu verbessern. Zielcodegenerierung Übersetze Zwischencode in Assembler-/Maschinencode Optimierung Maschinenebene Untersuche Maschinencode, versuche ihn zu verbessern. Universität Göttingen - Informatik II - SS 2006 Daher sollte man nicht davon ausgehen, dass Compiler immer fehlerfrei arbeiten!!! Universität Göttingen - Informatik II - SS 2006 7. Compilerbau Semantische Analyse Compiler sind gut untersuchte, aber auch sehr komplexe Programme 7.1-11 Eine Programmdatei ist nur eine Sequenz von Zeichen Falsche Detailebene für eine Syntaxanalyse Die lexikalische Analyse gruppiert Zeichensequenzen in Tokens Tokens sind die kleinste „Bedeutungseinheit“ (units of meaning) im Kompilationsprozess und sind die Grundlage (foundation) fürs Parsen (Syntaxanalyse) Die Compilerkomponente zum Ausführen der lexikalischen Analyse ist der Scanner, welcher oftmals ausgehend von höheren Spezifikationen automatisch generiert wird Mehr über Scanner in der nächsten Vorlesung Universität Göttingen - Informatik II - SS 2006 7.1-12 7. Compilerbau 7. Compilerbau Beispiel für lexikalische Analyse Syntaktische Analyse Ein GGT Programm in C Token int int int { i ) ( j = j j – } “%d\n” ) int gcd (int i, int j) { while (i != j) { if (i > j) i = i – j; else j = j – i; } printf(“%d\n”,i); } gcd i j while != { i ) i ; = i printf , ; ( , ) ( j if > i – else j ; ( I } 7.1-14 7. Compilerbau Beispiel Syntaxanalyse Semantische Analyse conditional Token i ) i ; = i Mehr über kontextfreie Grammatiken und Parser später Universität Göttingen - Informatik II - SS 2006 7.1-13 7. Compilerbau ( j = j j – } conditional -> if ( expr ) block else block Parserbäume repräsentieren die Phrasenstruktur eines Programmes und sind die Grundlage für die semantische Analyse und Codegenerierung Die Compilerkomponente zum Ausführen der syntaktischen Analyse ist der Parser, welcher oftmals ausgehend von höheren Spezifikationen automatisch generiert wird Universität Göttingen - Informatik II - SS 2006 if > i – else j ; Die lexikalische Analyse erzeugt einen Strom von Tokens Falsche Detailebene für die semantische Analyse und Codegenerierung Die Syntaxanalyse gruppiert eine Zeichenfolge von Tokens in Parserbäume, was durch die kontextfreie Grammatik gelenkt wird, die die Syntax der zu kompilierenden Sprache spezifiziert ( expr id comp id i > j if Universität Göttingen - Informatik II - SS 2006 block ) block else statement id = j statement id = expr i id op id i - j Bestimmt die Bedeutung eines Programms basierend auf der Repräsentation des Parserbaumes Setzt Regeln durch, welche nicht durch die Syntax der Programmiersprache verwaltet werden Konsistente Verwendung von Typen, z.B. Jeder Bezeichner (identifier) muss vor der ersten Verwendung deklariert sein Unterprogrammaufrufe müssen die richtige Argumentanzahl und Argumenttyp haben etc. expr id op id j - i 7.1-15 int a; char s[10]; s = s + a; illegal! Bringt die Symboltabelle auf den aktuellen Stand, welche neben anderen Dingen den Typ von Variablen, deren Größe und den Gültigkeitsbereich in welchen die Variablen erklärt wurden notiert Universität Göttingen - Informatik II - SS 2006 7.1-16 7. Compilerbau 7. Compilerbau Zwischencodegenerierung Parserbäume sind die falsche Detailebene für die Optimierung und Zwischencodegenerierung Zwischencodegenerierung verwandelt den Parsebaum in eine Sequenz von Anweisungen (statements) der Zwischensprache welche die Semantik des Quellprogramms verkörpert Die Zwischensprache ist genauso Mächtig, aber einfacher, wie die höhere Sprache Zielcodegenerierung Das Endziel eines Compilerprozesses ist die Generierung eines Programms welches der Computer ausführen kann Schritt 1: durchlaufe (traverse) die Symboltabelle, weise Variablen einen Platz im Speicher zu Schritt 2: durchlaufe (traverse) den Parsebaum oder Programm in der Zwischensprache um arithmetische Operationen, Vergleiche, Sprünge und Unterprogrammaufrufe auszugeben, sowie Lasten und Vorräte von Variablenreferenzen z.B. die Zwischensprache könnte nur einen Schleifentyp (goto) haben, wogegen die Quellsprache mehrere haben könnte (for, while, do, etc.) Eine einfache Zwischensprache macht es einfacher nachfolgende Compilerphasen zu implementieren Universität Göttingen - Informatik II - SS 2006 7.1-17 Universität Göttingen - Informatik II - SS 2006 7. Compilerbau Überblick Zwischencode und Zielcode ist typischerweise nicht so effizient wie er sein könnte 7.1-18 7. Compilerbau Optimierung Dies ist die Aufgabe der Zielcodegenerierung Einschränkungen erlauben es dem Codegenerator sich auf die Codeerzeugung zu konzentrieren und nicht auf die Optimierung Ein Optimierer kann aufgerufen werden um die Qualität des Zwischencodes und/oder Zielcodes nach jeder dieser Phasen zu verbessern Die Compilerkomponente zur Verbesserung der Qualität des generierten Codes wird Optimierer (optimizer) genannt. Optimierer sind die kompliziertesten Teile eines Compilers Optimierungsalgorithmen sind oftmals sehr ausgefeilt, benötigen erheblich viel Speicher und Zeit für die Ausführung und erzeugen nur kleine Verbesserungen der Programmgröße und/oder Leistung der Laufzeit Zwei wichtige Optimierungen Einführung Lexer Parser Zusammenführung (Bau eines ausführbaren Programms) Registerzuteilung – entscheide welche Programmvariablen zu einem bestimmten Zeitpunkt der Programmausführung in Registern gehalten werden können Unbenutzten Code eliminieren – entferne Funktionen, Blöcke, etc., welche niemals vom Programm ausgeführt würden Universität Göttingen - Informatik II - SS 2006 7.1-19 Universität Göttingen - Informatik II - SS 2006 7.1-20 7. Compilerbau 7. Compilerbau Der Kompilationsprozess (-phasen) Lexikalische Analyse Scanner (lexikalische Analyse) Lese Programm und konvertiere Zeichenstrom in Marken (tokens). Parser (syntaktische Analyse) Lese Tokenstrom und generiere Parserbaum (parse tree). Semantische Analyse Traversiere Parserbaum, überprüfe nicht-syntaktische Regeln. Zwischencodegenerierung Traversiere Parserbaum noch mal, gebe Zwischencode aus. Optimierung Untersuche Zwischencode, versuche ihn zu verbessern. Zielcodegenerierung Übersetze Zwischencode in Assembler-/Maschinencode Optimierung Maschinenebene Untersuche Maschinencode, versuche ihn zu verbessern. Universität Göttingen - Informatik II - SS 2006 7.1-21 Universität Göttingen - Informatik II - SS 2006 7. Compilerbau 2 Fragen Ein GGT Programm in C Universität Göttingen - Informatik II - SS 2006 7.1-22 7. Compilerbau Beispiel für lexikalische Analyse int gcd (int i, int j) { while (i != j) { if (i > j) i = i – j; else j = j – i; } printf(“%d\n”,i); } Die lexikalische Analyse gruppiert Zeichensequenzen in Tokens (Marken) bzw. Symbole Tokens sind die kleinste „Bedeutungseinheit“ (units of meaning) im Kompilationsprozess und sind die Grundlage (foundation) fürs Parsen (Syntaxanalyse) Die Compilerkomponente zum Ausführen der lexikalischen Analyse ist der Scanner, welcher oftmals ausgehend von höheren Spezifikationen automatisch generiert wird Token int int int { i ) ( j = j j – } “%d\n” ) gcd i j while != { i ) i ; = i printf , ; ( , ) ( j if > i – else j ; ( I } Wie beschreiben wir die lexikalische Struktur einer Programmiersprache? 7.1-23 Mit anderen Worten, was sind die Tokens (Symbole) Wie implementieren wir den Scanner nachdem wir wissen was die Tokens sind? Universität Göttingen - Informatik II - SS 2006 7.1-24 7. Compilerbau 7. Compilerbau Wie beschreiben wir die lexikalische Struktur? (1/2) Wie beschreiben wir die lexikalische Struktur? (2/2) 1. Versuch: Liste aller Tokens 2. Versuch: Reguläre Ausdrücke if else long int short char ; , : ( ) { } … Aber was ist mit den Konstanten (Ganzzahlen, Fliesskommazahlen, Zeichenketten)? Es können nicht alle aufgelistet werden, es gibt ~8 Milliarden 32-bit integer und floating-point Konstanten und eine unendliche Anzahl von Zeichenfolgenkonstanten Das gleiche Problem gilt für Bezeichner (Variablen, Funktionen und benutzerdefinierte Typnamen) Lösung: Wir brauchen einen Weg um kurz und prägnant Klassen von Tokens zu beschreiben, welche eine große Anzahl von verschiedenen Werten abdecken können Muster (patterns) welche zum Auffinden von passendem Text verwendet werden können Werden mit folgenden Ausdrücken rekursiv ausgedrückt Ein Zeichen Der leeren Zeichenfolge ε Der Verkettung zweier regulärer Ausdrücke Der Alternative zweier regulärer Ausdrücke 7.1-25 7.1-26 7. Compilerbau Lexikalische Analyse: Reguläre Ausdrücke bei der Arbeit int gcd (int i, int j) { while (i != j) { if (i > j) i = i – j; else j = j – i; } printf(“%d\n”,i); } z.B. bedeutet r1.r2|r3 nun (r1.r2)|r3 oder r1.(r2|r3)??? Universität Göttingen - Informatik II - SS 2006 7. Compilerbau Ein GGT Programm in C r* ist kein oder mehrere Vorkommen des Wertes von r1 Runde Klammern können zum Gruppieren von regulären Ausdrücken verwendet werden, um Zweideutigkeiten bei Kombinationen auszuschließen Universität Göttingen - Informatik II - SS 2006 r1|r2 ist der Wert von r1 oder der Wert von r2 Der Kleenesche Hülle * (ode einfach Hülle oder Stern) r1.r2 ist der Wert von r1 gefolgt vom Wert von r2 Reguläre Ausdrücke digit=[0-9] letter=[a-z]|[A-Z] punct=\|% INT=‘int’ WHILE=‘while’ IF=‘if’ ID=letter.(letter|digit)* LPAREN=( RPAREN=) COMMA=, SEMI=; LBRACE={ RBRACE=} EQ== MINUS=GT=> SC=“.(letter|digit|punct)*.” Universität Göttingen - Informatik II - SS 2006 Ein genauerer Blick auf die lexikalische Analyse Tokens INT INT INT LBRACE ID:i RPAREN LPAREN ID:j EQ ID:j ID:j MINUS RBRACE SC:“%d\n” RPAREN ID:gcd ID:i ID:j WHILE NEQ LBRACE ID:i RPAREN ID:i SEMI EQ ID:i ID:printf COMMA SEMI LPAREN COMMA RPAREN LPAREN ID:j IF GT ID:i MINUS ELSE ID:j SEMI LPAREN ID:i RBRACE 7.1-27 Wie behandelt der lexikalische Analysator Leerzeichen, Kommentare und Konflikte zwischen regulären Ausdrücken? Leerzeichen Kommentare einer Programmiersprache gcd (int i, int j) { /* gcd */ int gcd (int i, int j) { Konflikte zwischen regulären Ausdrücken Gegeben: int WHILE=‘while’ ID=letter.(letter|digit)* Beide reguläre Ausdrücke decken die Zeichenfolge „while“ ab. Welcher Ausdruck soll aber nun gewählt werden? Universität Göttingen - Informatik II - SS 2006 7.1-28 7. Compilerbau 7. Compilerbau Handhabung von Leerzeichen Leerzeichen können als Token durch folgende Regel erkannt werden \n ist ein „escape“ Zeichen für „newline“ (neue Zeile) \r ist ein „escape“ Zeichen für „carriage return“ (Wagenrücklauf) \t ist ein „escape“ Zeichen für „tab“ (Tabulator) \s ist ein „escape“ Zeichen für „space“ (Leerzeichen) Das Leerzeichentoken WS ist normalerweise unwichtig für die Syntax einer Programmiersprache, weshalb es einfach vom Tokenstrom gelöscht werden kann Universität Göttingen - Informatik II - SS 2006 7.1-29 Universität Göttingen - Informatik II - SS 2006 In Abhängigkeit von der Komplexität von Kommentaren ist eine Beschreibung via regulärer Ausdrücke vielleicht möglich Alternative 1: Längster Fund SLC=‘//’.*.$ $ ist ein spezielles Symbol, welches das Ende einer Zeile bedeutet // Dies ist ein Kommentar Einige Kommentare sind zu kompliziert um durch reguläre Ausdrücke gefunden zu werden Willkürlich verschachtelte Kommentare /* level 1 /* level 2 */ back to level 1 */ Wird Normalerweise vom Präprozessor behandelt 7.1-31 r1=‘while’ r2=letter.(letter|digit)* Eingabe int while48; … Wenn p=‘while’, beide, r1 und r2 passen Wenn p=‘while48;’ weder r1 noch r2 passen Wenn p=‘while48’ nur r2 passt, wähle r2 aus Alternative 2: Regelpriorität Universität Göttingen - Informatik II - SS 2006 Nehme solange Eingabezeichen hinzu bis weder r1 noch r2 passen. Entferne ein Zeichen und entweder r1 oder r2 muss passen. Die Teileingabe p ist der längste Fund und wenn nur einer von r1 oder r2 passt, dann wähle ihn. Beispiel: Findet Texte wie Gegeben sind zwei reguläre Ausdrücke r1 und r2, welche eine Teileingabe p=‘c1..ck‘ finden. Welche soll nun ausgewählt werden? Zeilenkommentare (single line comments) können mit regulären Ausdrücken gefunden werden 7.1-30 Handhabung von Konflikten Alternative 2: Kommentartoken z.B. #include und #define 7. Compilerbau Handhabung von Kommentaren (2/2) Spezielles Programm welches eine Datei einliest, Kommentare entfernt, andere Operationen wie Makro-Expansion ausführt und eine Ausgabedatei schreibt, welche vom lexikalischen Analysator gelesen wird. Quellprogramme können auch Steueranweisungen enthalten, die nicht zur Sprache gehören, z.B. Makro-Anweisungen. Der lexikalische Analysator behandelt die Steueranweisungen und entfernt sie aus dem Tokenstrom. Präprozessor-Anweisungen in C und C++ 7. Compilerbau Alternative 1: Präprozessoren WS=(\n|\r|\t|\s)* Handhabung von Kommentaren (1/2) Wenn der längste Fund immer noch in einem Konflikt endet, dann wähle den erste regulären Ausdruck aus der lexikalischen Definition der Sprache Universität Göttingen - Informatik II - SS 2006 7.1-32 7. Compilerbau 7. Compilerbau Weitere spezielle Probleme Implementierung eines lexikalischen Analysators Reservierte Schlüsselwörter Wie übertragen wir reguläre Ausdrücke in einen lexikalischen Analysator? Schlüsselwörter dürfen nicht in Bezeichnern (Namen) verwendet werden Groß-/Kleinschreibung Textende Konvertiere reguläre Ausdrücke zu einem deterministischen endlichen (finite) Automaten (DFA) intern nur eine Repräsentation verwenden, weshalb eine Anpassung notwendig ist Das Textende muss dem Syntaxanalysator mitgeteilt werden, weshalb ein eind-of-text Symbol (eot) eingefügt werden muss Die Verletzung der Syntax (z.B. falscher Wertebereich) wird gemeldet und trotzdem an den Syntaxanalysator weitergegeben Universität Göttingen - Informatik II - SS 2006 7.1-33 High-level language compiler Lexical analyzer 7.1-34 Bau des lexikalischen Analysators: Letzter Schritt a DFAs können effizient simuliert werden indem ein tabellenbasierter Algorithmus verwendet wird Universität Göttingen - Informatik II - SS 2006 Die Konvertierung von regulären Ausdrücken zu DFAs und das Schreiben eines Programms zum Simulieren des DFA kann entweder von Hand vorgenommen werden oder von einem anderen Programm, welches lexikalischer Analysegenerator genannt wird. Lexical analyzer source code 7. Compilerbau Bau des lexikalischen Analysators: DFA zu Code void dfa (char *in) { s = in; state = start_state; while(1) { c = *s++; state = table[state][c]; if (final[state)]) { printf(“Accepted %s\n”,in); break; } } } z.B. überprüfe, ob der Wert einer Ganzzahlkonstante in eine 32-bit integer passt Lexical Analyzer Generator Universität Göttingen - Informatik II - SS 2006 7. Compilerbau Der DFA erkennt die Tokens im Eingabetext und wird der lexikalische Analysator Wenn ein Token erkannt wurde, dann kann eine benutzerdefinierte Aktion ausgeführt werden gelesene aber nicht verwendete Zeichen müssen für nächsten Test berücksichtigt werden Lexikalische Fehler Warum??? DFAs sind einfacher zu simulieren als reguläre Ausdrücke Schreibe ein Programm zum Simulieren eines DFAs Vorgriff (lookahead) um mehrere Zeichen Regular Expressions + Actions b q2 a q3 c q1 DFA Simulatorcode wird der Kern des lexikalischen Analysators Wenn der DFA in einem Endzustand ist a c d q4 q5 c Tabelle a b c d q1 q2 q6 q4 q6 q2 q6 q3 q6 q6 q3 q2 q6 q4 q6 q4 q6 q6 q6 q5 q5 q2 q6 q4 q6 q6 q6 q6 q6 q6 7.1-35 Führe mit dem letzten, passenden regulären Ausdruck, entsprechend dem längsten Fund und/oder der Regelpriorität, die verbundene, benutzerdefinierte Aktion aus Merke aktuelle Stelle im Eingabestrom und gebe Token an Tokenkonsument (parser) weiter Universität Göttingen - Informatik II - SS 2006 7.1-36 7. Compilerbau 7. Compilerbau Eine reale JLex lexikalische Spezifikation für einen Kalkulatorsprache 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 import java.io.IOException; %% %public %class Scanner %type void %eofval{ return; %eofval} %{ public static void main (String args []) { Scanner scanner = new Scanner(System.in); try { scanner.yylex(); } catch (IOException e) { System.err.println(e); } } %} comment space digit integer real IF THEN ELSE = = = = = = = = ("#".*) [\ \t\b\015]+ [0-9] {digit}+ ({digit}+"."{digit}*|{digit}*"."{digit}+) ("if") "then" else %% {space} break; } {comment} break; } {integer} break; { System.out.println("space"); { System.out.println("comment"); { System.out.println("Integer CONSTANT\t" + yytext()); 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 break; } {real} { System.out.println("REAL CONSTANT\t" + yytext()); { System.out.println("IF Token\t" + yytext()); { System.out.println("THEN Token\t" + yytext()); { System.out.println("ELSE Token\t" + yytext()); } {IF} break; } {THEN} break; } \n { System.out.println("NL"); break; } "+" { System.out.println("ADD"); break; } "-" { System.out.println("SUB"); } "*" { System.out.println("MUL"); break; } "/" { System.out.println("DIV"); break; } "%" { System.out.println("MOD"); break; } "(" { System.out.println("LPAR"); break; Konvertierung von regulären Ausdrücken zu nichtdeterministischen endlichen Automaten (NFA) (inklusive Beweise) Konvertierung von nichtdeterministischen endlichen Automaten zu deterministischen endlichen Automaten (DFA) Tabellenbasierte Simulation von DFAs Lexikalische Analyse und Scanner break; Verwenden reguläre Ausdrücke zur Definition der lexikalischen Struktur (Symbole/Token) einer Sprache Verwenden die Theorie der regulären Sprachen zur Erzeugung eines Scanners ausgehend von der Beschreibung der lexikalischen Struktur einer Programmiersprache anhand von regulären Ausdrücken } ")" { System.out.println("RPAR"); break; } . { System.out.println("error" + "+" + yytext() + "+"); break; } 7.1-37 Zu reguläre Sprachen, reguläre Ausdrücke, und (deterministische und nichtdeterministische) endliche Automaten siehe vorheriges Kapitel Universität Göttingen - Informatik II - SS 2006 Der Kompilationsprozess (-phasen) Einführung Lexer Parser Zusammenführung (Bau eines ausführbaren Programms) Scanner (lexikalische Analyse) Lese Programm und konvertiere Zeichenstrom in Marken (tokens). Parser (syntaktische Analyse) Lese Tokenstrom und generiere Ableitungsbaum (parse tree). Semantische Analyse Universität Göttingen - Informatik II - SS 2006 7.1-38 7. Compilerbau Überblick break; } {ELSE} 7. Compilerbau Wichtige Algorithmen break; Universität Göttingen - Informatik II - SS 2006 Rückblick 7.1-39 Traversiere Parserbaum, überprüfe nicht-syntaktische Regeln. Zwischencodegenerierung Traversiere Parserbaum noch mal, gebe Zwischencode aus. Optimierung Untersuche Zwischencode, versuche ihn zu verbessern. Zielcodegenerierung Übersetze Zwischencode in Assembler-/Maschinencode Optimierung Maschinenebene Untersuche Maschinencode, versuche ihn zu verbessern. Universität Göttingen - Informatik II - SS 2006 7.1-40 7. Compilerbau 7. Compilerbau Syntaktische Analyse Die lexikalische Analyse erzeugt einen Strom von Symbolen (Tokens) Falsche Detailebene für die semantische Analyse und Codegenerierung Die Syntaxanalyse gruppiert eine Zeichenfolge von Tokens in Ableitungsbäume (Struktur-/Parser-/Syntaxbäume), was durch die kontextfreie Grammatik gelenkt wird, die die Syntax der zu kompilierenden Sprache spezifiziert Beispiel Syntaxanalyse conditional -> if ( expr ) block else block Ableitungsbäume repräsentieren die Phrasenstruktur eines Programms und sind die Grundlage für die semantische Analyse und Codegenerierung Die Compilerkomponente zum Ausführen der syntaktischen Analyse ist der Parser, welcher oftmals ausgehend von höheren Spezifikationen automatisch generiert wird Universität Göttingen - Informatik II - SS 2006 7.1-41 if > i – else j ; Warum können wir nicht reguläre Ausdrücke zum Beschreiben der Syntax einer Programmiersprache verwenden? Betrachte die folgenden Beschreibungen: digit=[0-9] letter=[a-z] id=letter.(letter|digit)* Kann Identitäten von id durch Substitution entfernen: id=[0-9].([a-z]|[0-9])* id ist ein regulärer Ausdruck Universität Göttingen - Informatik II - SS 2006 expr id comp id i > j block ) block else statement statement id = j id op id j - i id = expr i id op id i - j expr 7.1-42 Kontextfreie Grammatiken erzeugen durch den Ableitungsprozess Strings (oder Sätze) Die kontextfreien Sprachen sind definiert durch Identitäten: ( if Grammatiken und Parser i ) i ; = i 7. Compilerbau Syntaxbeschreibung ( j = j j – } Universität Göttingen - Informatik II - SS 2006 7. Compilerbau conditional Token Identitäten: digits=[0-9]+ sum=expr.’+’.expr expr=(‘(‘.sum.’)’) | digits Kann nicht Identitäten von expr durch Substitution entfernen: expr ist durch Rekursion definiert expr ist kein regulärer Ausdruck 7.1-43 LCF={L(G): Alle kontextfreien Grammatiken G} Mit anderen Worten: Die Menge aller Sprachen von allen kontextfreien Grammatiken Ein Parser für eine kontextfreie Grammatik erkennt Strings in der Grammatiksprache Parser können automatisch aus einer kontextfreien Grammatik generiert werden Parser zum Erkennen von allgemeinen kontextfreien Sprachen können langsam sein Parser, die nur eine Untermenge von kontextfreien Sprachen erkennen können, können so gestaltet werden, dass sie schneller sind (deterministische Kellerautomaten) Universität Göttingen - Informatik II - SS 2006 7.1-44 7. Compilerbau 7. Compilerbau Klassen von Grammatiken und Parsern Top-down versus Bottom-up Syntaxanalyse (1/2) LL(k) Parser Eingabe wird von links-nach-rechts (1. L) abgearbeitet linksseitige Ableitung (2. L) “top down” oder “prädiktive” (voraussagende) Parser genannt Top-down oder LL-Syntaxanalyse LR(k) parsers Eingabe wird von links-nach-rechts (1. L) abgearbeitet rechtsseitige Ableitung (2. R) “bottom up” oder “schiebe-reduziere“ (shift-reduce) Parser genannt “k” steht für die Anzahl von Symbolen (token) für die in der Eingabe vorausgeschaut werden muss um eine Entscheidung treffen zu können Bottom-up oder LR-Syntaxanalyse LL(k) – welche nächste Produktion auf der rechten Seite ist bei einer linksseitigen Ableitung zu wählen LR(k) – ob zu schieben oder reduzieren Universität Göttingen - Informatik II - SS 2006 7.1-45 Syntaxanalyse durch rekursiven Abstieg (1/4) Grammatik: id_list -> id id_list_tail id_list_tail -> , id id_list_tail id_list_tail -> ; Rekursiver Abstieg ist ein Weg um LL (top-down) Parser zu implementieren Es ist einfach von Hand zu schreiben Beispiel Strings: A; A, B, C; 7.1-47 Es wird kein Parsergenerator benötigt Jedes nichtterminale Symbol in der Grammatik hat einen Prozeduraufruf Es muss im Stande sein die nächste, anzuwendende, linksseitige Ableitung zu bestimmen (predict), indem nur die nächsten k Symbole angeschaut werden Universität Göttingen - Informatik II - SS 2006 7.1-46 7. Compilerbau Top-down versus Bottom-up Syntaxanalyse (2/2) Baue den Ableitungsbaum von den Blättern aus bis hinauf zu der Wurzel auf Ermittle in jedem Schritt, ob eine Kollektion von Ableitungsbaumknoten zu einem einzelnen Vorgängerknoten zusammengefasst werden kann oder nicht Universität Göttingen - Informatik II - SS 2006 7. Compilerbau Baue den Ableitungsbaum von der Wurzel aus bis hinunter zu den Blättern auf Berechne in jedem Schritt voraus welche Produktion zu verwenden ist um den aktuellen nichtterminalen Knoten des Ableitungsbaumes aufzuweiten (expand), indem die nächsten k Eingabesymbole betrachtet werden k ist üblicherweise 1 Universität Göttingen - Informatik II - SS 2006 7.1-48 7. Compilerbau 7. Compilerbau Syntaxanalyse durch rekursiven Abstieg (2/4) Rekursiver Abstieg ist ein Weg um LL(1)-Parser zu implementieren: Syntaxanalyse durch rekursiven Abstieg (3/4) Erinnerung: LL(1)-Parser machen linksseitige Ableitungen, unter Verwendung von höchstens 1 Symbol in der Vorausschau, um zu entscheiden welche rechte Seite einer Produktion verwendet wird, um ein linksseitiges Nichtterminal in einer Satzform zu ersetzen. Grammatik für eine Kalkulatorsprache LL(1)-Parser Beispiel: Grammatikfragment: factor -> ( expr ) | [ sexpr ] Wenn die Satzform “n1 … nk factor sm … sn” lautet, dann sollte die nächste Satzform folgende sein: Beispieleingabe: read A read B sum := A + B write sum write sum / 2 “n1 … nk ( expr ) sm … sn” oder “n1 … nk [ sexpr ] sm … sn” Universität Göttingen - Informatik II - SS 2006 7.1-49 Universität Göttingen - Informatik II - SS 2006 7. Compilerbau 7.1-50 7. Compilerbau Syntaxanalyse durch rekursiven Abstieg (4/4) LL-Syntaxanalyse Ableitungsbaum für Beispieleingabe: Finde zu einer Eingabe von Terminalsymbolen (tokens) passende Produktionen in einer Grammatik durch Herstellung von linksseitigen Ableitungen read A read B sum := A + B write sum write sum / 2 Für eine gegebene Menge von Produktionen für ein Nichtterminal, X->y1|…|γn, und einen gegebenen, linksseitigen Ableitungsschritt αXβ ⇒ αγiβ, müssen wir im Stande sein zu bestimmen welches γi zu wählen ist indem nur die nächsten k Eingabesymbole angeschaut werden Anmerkung: Universität Göttingen - Informatik II - SS 2006 7.1-51 Für eine gegebene Menge von linksseitigen Ableitungsschritten, ausgehend vom Startsymbol S ⇒ αXβ, wird der String von Symbolen α nur aus Terminalen bestehen und repräsentiert den passenden Eingabeabschnitt zu den bisherigen Grammatikproduktionen Universität Göttingen - Informatik II - SS 2006 7.1-52 7. Compilerbau 7. Compilerbau Probleme mit der LL-Syntaxanalyse (1/4) Probleme mit der LL-Syntaxanalyse (2/4) Linksrekursion Produktionen von der Form: Linksrekursion: Nicht formale Rechtfertigung A -> Aα A -> β LL Parser würden in eine Endlosschleife eintreten, wenn versucht wird eine linksseitige Ableitung in solch einer Grammatik vorzunehmen A -> βA’ A’ -> αA’ | є 7.1-53 A -> bα A -> bβ LL(1) Parser kann nicht entscheiden welche Regel auszuwählen ist, wenn A in einem linksseitigen Ableitungsschritt zu ersetzen ist, weil beide rechten Seiten mit dem gleichen Terminalsymbol anfangen 7.1-54 stmt -> id stmt_list_tail stmt_list_tail -> expr | ( argument_list ) Der Ausschluss von Linksrekursion und gemeinsame Präfixe garantiert nicht das eine Grammatik LL wird Wenn wir keinen LL Parser für eine Grammatik finden können, dann müssen wir einen mächtigere Technik verwenden 7.1-55 stmt -> id := expr stmt -> id ( argument_list ) Gemeinsame Präfixe können durch das Umschreiben der Grammatik ausgeschlossen werden A -> bA’ A’ -> α | β Universität Göttingen - Informatik II - SS 2006 id_list -> id id_list_tail id_list_tail -> , id id_list_tail | ; Beispiel: Kann durch Faktorisierung ausgeschlossen werden: id_list -> id_list_prefix ; id_list_prefix -> id_list_prefix , id | id Gemeinsame Präfixe Produktionen der Form: Tritt auf wenn zwei verschiedene Produktionen mit der gleichen linken Seite mit den gleichen Symbolen anfangen A ⇒ βA’ ⇒ βαA’ ⇒ βααA’ ⇒* βααα… Probleme mit der LL-Syntaxanalyse (4/4) Gemeinsame Präfixe Ableitungen: 7. Compilerbau Probleme mit der LL-Syntaxanalyse (3/4) A -> βA’ A’ -> αA’ | є Universität Göttingen - Informatik II - SS 2006 7. Compilerbau Linksrekursion kann durch das Umschreiben der Grammatik ausgeschlossen werden Universität Göttingen - Informatik II - SS 2006 Grammatik: Linksrekursion kann durch das Umschreiben der Grammatik ausgeschlossen werden Ableitungen: Umgeschriebene Grammatik: Linksrekursion: Beispiel A -> Aα A -> β A ⇒ Aα ⇒ Aαα ⇒ Aααα ⇒* βααα… Wenn eine Grammatik linksrekursive Produktionen enthält, dann kann es dafür keinen LL Parser geben Originalgrammatik: z.B. LALR(1) – Grammatiken Universität Göttingen - Informatik II - SS 2006 7.1-56 7. Compilerbau 7. Compilerbau Bau eines Top-Down Parsers mit rekursivem Abstieg (1/2) Für jedes Nichtterminal in einer Grammatik wird ein Unterprogramm erzeugt, welches einem einzelnen linksseitigen Ableitungsschritt entspricht, wenn es aufgerufen wird Beispiel: factor -> ( expr ) factor -> [ sexpr ] Bau eines Top-Down Parsers mit rekursivem Abstieg (2/2) PREDICT-Mengen (Vorhersagemengen) void factor (void) { switch(next_token()) { case ‘(‘: PREDICT Mengen teilen uns mit, welche rechte Seite einer Produktion bei einer linken Ableitung auszuwählen ist, wenn mehrere zur Auswahl stehen PREDICT-Mengen dienen somit als Grundlage für Ableitungstabellen (Parse-Tabellen) bzw. sind eine andere Teildarstellungsform für die Tabellen Wird in Form von FIRST-, FOLLOW- und NULLABLE-Mengen definiert : expr(); match(‘)’); break; case ‘[‘: Sei A ein Nichtterminal und α beliebig, dann gilt PREDICT(A->α) = FIRST(α) ∪ FOLLOW(A) wenn NULLABLE(α) PREDICT(A->α) = FIRST(α) wenn nicht NULLABLE(α) sexpr(); match(‘]’); break; } Schwieriger Teil: } Herausbekommen welches Token den ‚case‘ Arm vom switch Befehl benennt Universität Göttingen - Informatik II - SS 2006 Sei X ein Nichtterminal NULLABLE(X) ist wahr wenn gilt X ⇒* є (X kann den leeren String ableiten) Universität Göttingen - Informatik II - SS 2006 7.1-57 7. Compilerbau 7.1-58 7. Compilerbau FIRST-Mengen Berechnung von FIRST-Mengen (1/2) Sei α eine beliebige Folge von Grammatiksymbolen (Terminale und Nichtterminale) NULLABLE-Mengen Für alle Grammatiksymbole X wird FIRST(X) berechnet, indem die folgenden Regeln solange angewandt werden, bis zu keiner FIRSTMenge mehr ein neues Terminal oder є hinzukommt: FIRST(α) ist die Menge aller Terminalsymbolen a mit denen ein aus α abgeleiteter String beginnen kann: 1. Wenn X ein Terminal ist, dann ist FIRST(X)={X} FIRST(α) ist { a: α ⇒* aβ} 2. Wenn X → ε eine Produktion ist, dann füge ε zu FIRST(X) hinzu Gilt α ⇒* є, dann ist auch є in FIRST(α) 3. Wenn X Nichtterminal und X → Y1Y2Y3 KYk nehme a zu FIRST(X) hinzu, falls eine Produktion ist, dann (a) a für irgendein i in FIRST(Yi) und (b) ein ε in allen FIRST(Y1), ..., FIRST(Yi-1) enthalten ist (Y1...Yi-1 sind alle NULLABLE) Universität Göttingen - Informatik II - SS 2006 7.1-59 Universität Göttingen - Informatik II - SS 2006 7.1-60 7. Compilerbau 7. Compilerbau Berechnung von FIRST-Mengen (2/2) FOLLOW-Mengen Folglich gilt: Elemente aus FIRST(Y1) gehören immer auch zu FIRST(X) Ist є nicht aus Y1 ableitbar (NICHT NULLABLE), dann brauch nichts mehr hinzugefügt werden Ist є aus Y1 ableitbar (NULLABLE), dann muss auch FIRST(Y2) zu FIRST(X) hinzugefügt werden Ist є aus Y2 ableitbar (NULLABLE), dann muss auch FIRST(Y3) zu FIRST(X) hinzugefügt werden usw. Sei A ein Nichtterminal FOLLOW(A) ist die Menge aller Terminalsymbole a, die in einer Satzform direkt rechts neben A stehen können ( sei S Startregel; α, β beliebig): FOLLOW(A) ist { a:S ⇒* αAaβ } Achtung: Zwischen A und a können während der Ableitung Symbole gestanden haben, die aber verschwunden sind, weil aus Ihnen є abgeleitet wurde! Gibt es eine Satzform, in der A das am weitesten rechts stehende Symbol ist, dann gehört auch $ (die Endemarkierung) zu FOLLOW(A) є wird nur zu FIRST(X) hinzugefügt, wenn es in allen Mengen FIRST(Y1), ... ,FIRST(Yk) enthalten ist Universität Göttingen - Informatik II - SS 2006 7.1-61 Universität Göttingen - Informatik II - SS 2006 7. Compilerbau 7. Compilerbau Berechnung von FOLLOW-Mengen 7.1-62 Beispiel für NULLABLE-, FIRST- und FOLLOW-Mengen Follow(A) wird für alle Nichtterminale A berechnet, indem die folgenden Regeln solange angewandt werden, bis keine FollowMenge mehr vergrößert werden kann: S -> s$ B -> є A -> B S -> A B S B -> b A -> a Schritt 1: i=0 1. 2. 3. Sei S das Startsymbol und $ die Endemarkierung, dann nehme $ in FOLLOW(S) auf Wenn es eine Produktion A → αBβ gibt, dann wird jedes Element von FIRST(β ) mit Ausnahme von ε auch in FOLLOW(B) aufgenommen. FIRST FOLLOW A False {a} {} B True {b, є} {} S False {s} {$} NULLABLE FIRST FOLLOW True {a,b,є} {b} B True {b, є} {s} S False {s,a} {$} A Schritt 3: i=2 Wenn es Produktionen A → αB oder A → αBβ gibt und FIRST(β ) enthält (d.h. β ⇒*ε ), dann gehört jedes Element von FOLLOW(A) auch zu FOLLOW(B) Universität Göttingen - Informatik II - SS 2006 Schritt 2: i=1 NULLABLE ε 7.1-63 Schritt 4: i=3 NULLABLE FIRST FOLLOW A True {a,b,є} {b,s} B True {b, є} S False {s,a,b} Universität Göttingen - Informatik II - SS 2006 NULLABLE FIRST FOLLOW A True {a,b,є} {b,s,a} {s,a} B True {b, є} {s,a,b} {$} S False {s,a,b} {$} 7.1-64 7. Compilerbau 7. Compilerbau Beispiel für PREDICT-Mengen LL(k) Eigenschaften NULLABLE FIRST FOLLOW B -> є A -> B A True {a,b,є} {b,s,a} S -> A B S B -> b A -> a B True {b, є} {s,a,b} S False {s,a,b} {$} S -> s$ Satz: Jede kontextfreie Grammatik G ist genau dann LL(1), wenn für alle Alternativen A ⇒ α1| α2 | ... | αn gilt 1. 2. PREDICT A->B {a,b,є,s} A->a {a} B->є {a,b,s} B->b {b, є} S->s$ {s} S->ABS {a,b,s} PREDICT-Mengen zeigen uns welche Menge von look-ahead Symbolen die rechte Seite einer Produktion selektiert Diese Grammatik ist NICHT LL(1), da es duplizierte Symbole in den PREDICT-Mengen für alle drei Nichtterminale gibt Siehe Hervorhebungen (dick, rot) Universität Göttingen - Informatik II - SS 2006 7.1-65 Satz: Sei G kontextfreie Grammatik, k ≥ 0. G ist genau dann LL(k), wenn gilt: Sind A ⇒ β, A ⇒ ζ verschiedene Produktionen, dann Firstk(βα) ∩ FIRSTk(ζα) = Ø für alle α, σ mit S ⇒* σ A α 7.1-66 7. Compilerbau Ableitungsbäume und Parser mit rekursivem Abstieg (1/2) Die Beispielparser auf die wir bisher geschaut haben sind nur Erkenner Aus α1, α2 , ... und αn sind jeweils keine Strings ableitbar, wo zwei mit dem gleichen Nichtterminal anfangen Der leere String є kann nicht sowohl aus αi und αj für i ≠ j abgeleitet werden Falls αi ⇒* є gilt, dann beginnt kein aus αi ableitbarer String mit einem Terminal aus FOLLOW(A) Universität Göttingen - Informatik II - SS 2006 7. Compilerbau FIRST(α1), ..., First(αn) paarweise disjunkt, falls αi ⇒* є gilt, dann FIRST1(αj) ∩ FOLLOW1(A) = Ø für 1 ≤ j ≤ n, j ≠ i In Worten: Ableitungsbäume und Parser mit rekursivem Abstieg (2/2) Beispiel: Jedes nichtterminale Unterprogramm konstruiert einen Ableitungsbaumknoten node *factor (void) { Sie bestimmen, ob eine Eingabe syntaktisch korrekt ist, aber bauen keinen Ableitungsbaum factor -> ( expr ) factor -> [ sexpr ] switch(next_token()) { case ‘(‘: node = factor_node(expr()); Wie konstruieren wir dann einen Ableitungsbaum? match(‘)’); break; In Parser mit rekursivem Abstieg machen wir für jede nichtterminale Funktion: case ‘[‘: Konstruktion eines korrekten Ableitungsbaumknoten für sich selbst und Verbindungen zu seinen Kindern Geben den konstruierten Ableitungsbaumknoten an den Aufrufer zurück node = factor_node(sexpr()); Nicht alle Symbole werden zu einem Ableitungsbaumknoten Universität Göttingen - Informatik II - SS 2006 7.1-67 Beispiele: ‘(‘, ‘)’, ‘[‘, ‘]’ Diese Art von Ableitungsbaum } wird „Abstrakter Syntaxbaum“ (abstract syntax tree, AST) genannt Universität Göttingen - Informatik II - SS 2006 match(‘]’); break; } return node; 7.1-68 7. Compilerbau 7. Compilerbau Parsergeneratoren und Syntaxanalyse Parsergeneratoren erzeugen ausgehend von der kontextfreien Grammatik einen Parser An Produktionen dürfen semantische Aktionen angehängt sein ANTLR als Beispiel eines Parsergenerators ANTLR Grammatikspezifikation (parser.g) Wenn ein Parser eine Produktion erkannt hat, dann wird die semantische Aktion aufgerufen Wird hauptsächlich dazu verwendet einen Ableitungsbaum explizit zu konstruieren Die Ausgabe eines Parsergenerators ist ein Programm in einer Hochsprache (z.B. C, C++, oder Java) welches einen Symbolstrom (token stream) von einem Lexer (für die lexikalische Analyse) entgegen nimmt und welches einen Ableitungsbaum für die nachfolgenden Compilerphasen produziert ANTLR lexikalischer Analysator (scanner.class) Eingabe 10+(27-5); (44-2)-(1-10); java parser.class (java antlr.Tool parser.g) symbols.java parser.java Ausgabe =32 =51 javac parser.java Universität Göttingen - Informatik II - SS 2006 7.1-69 Universität Göttingen - Informatik II - SS 2006 7. Compilerbau 7. Compilerbau Rückblick Auflösung von Linksrekursion und gemeinsame Präfixe Syntaktische Analyse und Parser Überblick Wichtige Algorithmen: 7.1-70 Die Syntax einer Programmiersprache wird mit KFGs spezifiziert Konstruktion eines Parsers mit rekursivem Abstieg anhand von KFGs Automatische Generierung von Parsern anhand von KFGs Parser erzeugen Ableitungsbäume für die Analyse und weitere Verarbeitung in den nachfolgenden Compilerphasen Einführung Lexer Parser Zusammenführung (Bau eines ausführbaren Programms) Unwichtig für Klausur, da nur für Satz über LL(k) notwendig FIRST, FOLLOW, NULLABLE und PREDICT Mengen für kontextfreie Grammatiken Zu kontextfreie Grammatiken (KFG), Sprachen (KFS) und Kellerautomat siehe vorheriges Kapitel Universität Göttingen - Informatik II - SS 2006 7.1-71 Universität Göttingen - Informatik II - SS 2006 7.1-72 7. Compilerbau 7. Compilerbau Der Kompilationsprozess (-phasen) Die Organisation eines typischen Compilers Scanner (lexikalische Analyse) Lese Programm und konvertiere Zeichenstrom in Marken (tokens). Theorie: Reguläre Ausdrücke, endlicher Automat Parser (syntaktische Analyse) Lese Tokenstrom und generiere Ableitungsbaum (parse tree). Theorie: Kontextfreie Grammatiken, Kellerautomat Traversiere Parserbaum, überprüfe nicht-syntaktische Regeln. Semantische Analyse Zwischencodegenerierung Traversiere Parserbaum noch mal, gebe Zwischencode aus. Optimierung Untersuche Zwischencode, versuche ihn zu verbessern. Zielcodegenerierung Übersetze Zwischencode in Assembler-/Maschinencode Optimierung Maschinenebene Untersuche Maschinencode, versuche ihn zu verbessern. Universität Göttingen - Informatik II - SS 2006 7.1-73 7. Compilerbau Ein kleines Programm, geschrieben in Pascal, welches den größten gemeinsamen Teiler (ggT) von zwei Ganzzahlen berechnet Führt Operationen aus welche von der zu kompilierenden Sprache abhängen und nicht von der Zielmaschine Backend Führt Operationen aus welche etwas Wissen über die Zielmaschine haben müssen Universität Göttingen - Informatik II - SS 2006 7.1-74 7. Compilerbau Schreiben des Programms Frontend Vom Text des Quellcodes zu den Tokens program gcd (input, output); var i, j : integer; begin read(i,j); while i <> j do if i > j then i := i – j else j :- j – i; writeln(i) end. Programmquelltext program gcd (input, output); var i, j : integer; begin read(i,j); while i <> j do if i > j then i := i – j else j :- j – i; writeln(i) end. Tokens program gcd ( input , output ) ; var i , j : integer ; begin read ( i , j ) ; while i <> j do if i … Universität Göttingen - Informatik II - SS 2006 7.1-75 Universität Göttingen - Informatik II - SS 2006 7.1-76 7. Compilerbau 7. Compilerbau Von den Tokens zum Ableitungsbaum Zwischencode Programmquelltext Ableitungsbaum und Symboltabelle program gcd (input, output); var i, j : integer; begin read(i,j); while i <> j do if i > j then i := i – j else j :- j – i; writeln(i) end. Universität Göttingen - Informatik II - SS 2006 7.1-77 Universität Göttingen - Informatik II - SS 2006 7. Compilerbau Zielcode Der Kontrollflussgraph wird zum Zielcode der Zielmaschine konvertiert Der Zielcode ist eine andere pseudo-Assemblersprache Der Kontrollfluss wird ausführlich gemacht durch: 7.1-78 7. Compilerbau Nicht optimierende Compiler Der Ableitungsbaum wird zu einem Kontrollflussgraphen konvertiert Die Knoten des Kontrollflussgraphen sind grundlegende Blöcke und enthalten eine pseudoAssemblersprache Die Kontrolle kann einen grundlegenden Block nur vom Anfang betreten und kann in nur am Ende wieder verlassen Der Zielcode ist beinahe Assemblercode Bezeichnen der Anfänge der grundlegenden Blöcke Konvertieren der Kontrollflusskanten zu Sprung- (branch), Aufruf(call) und Rückkehrinstruktionen Der Kontrollfluss ist ausführlich Der Code referenziert nur reale Registernamen Anweisungen zum Speicherreservieren sind vorhanden Zielcode ist einfach zu Assemblercode zu übersetzen Virtuelle Register werden durch reale Register ersetzt Universität Göttingen - Informatik II - SS 2006 7.1-79 Universität Göttingen - Informatik II - SS 2006 7.1-80 7. Compilerbau 7. Compilerbau Vom Zielcode zum Assemblercode Normalerweise einfach: Binden (linking) r10 := r8 + r9 -> add $10, $8, $9 r10 := r8 + 0x12 -> addi $10, $8, 0x12 Manchmal auch zu einer Folge von Instruktionen erweitert: r14 := 0x12345abc -> lui $14, 0x1234 ori $14, 0x5abc Universität Göttingen - Informatik II - SS 2006 7.1-81 Beim Binden werden mehrere durch den Assembler erzeugte Objektdateien zu einer einzelnen, ausführbaren Datei kombiniert, welche durch ein Betriebssystem lauffähig ist Universität Göttingen - Informatik II - SS 2006 7. Compilerbau 7. Compilerbau Optimierende Compiler Peephole-Optimierung Optimierung ist ein komplexer Prozess Verbessert die Qualität des generierten Codes auf Kosten von zusätzlicher Compilezeit Optimierer sind schwierig zu schreiben und einige Optimierungen verbessern das fertige Programm vielleicht nicht Sehe dir den Zielcode an, wenige Instruktionen gleichzeitig, und versuche einfache Verbesserungen zu machen Versucht kurze, sub-optimale Folgen von Instruktionen zu finden und ersetzt diese Sequenzen mit einer „besseren“ Sequenz Sub-Optimale Sequenzen werden durch Muster (patterns) spezifiziert Praxistip: Die jeweilige Einstellung der Optimierungstiefe eines Compilers genau auf korrekte Funktion kontrollieren, da diese öfters fehleranfällig sind (lieber erstmal auf Optimierung verzichten und erst am Ende austesten!) Universität Göttingen - Informatik II - SS 2006 7.1-82 7.1-83 Meistens heuristische Methoden — Es gibt keinen Weg um zu überprüfen ob das Ersetzen eines sub-optimalen Musters tatsächlich das endgültige Programm verbessern wird Einfach und ziemlich wirksam Universität Göttingen - Informatik II - SS 2006 7.1-84 7. Compilerbau 7. Compilerbau Peephole-Optimierungstypen (1/3) Peephole-Optimierungstypen (2/3) Redundante load/store Instruktionen beseitigen r2 i r3 r4 := := := := r1 + 5 r2 i r3 x 3 wird zu r2 := 4 r3 := r1 + r2 r2 := … r2 := r1 + 5 i := r2 r4 := r2 x 3 wird zu r2 := 3 x 2 r2 := 6 Entfernung gemeinsamer Teilausdrücke (common subexpression elimination) r2 := r1 x r5 r2 := r2 + r3 r3 := r1 x r5 wird zu 7.1-85 Algebraische Vereinfachung (strength reduction) r2 := r1 r3 := r1 + r1 wird zu r2 := 5 und r3 := r1 + r1 r2 := 5 7.1-86 Es ist für den Optimierer erforderlich den Datenfluss zwischen Registern und Speicher zu „verstehen“ wird zu r1 := r2 + r2 r1 := r2 >> 1 Beseitigung von unnötigen Instruktionen wird zu Universität Göttingen - Informatik II - SS 2006 Wird durch Datenflussanalyse (data flow analysis) bestimmt oder r1 := r2 << 1 r1 := r1 + 0 r1 := r1 - 0 r1 := r1 * 1 r3 := *(r1+4) Komplexe Optimierungen und r3 := *r3 7. Compilerbau Peephole-Optimierungstypen (3/3) r1 := r2 x 2 r1 := r2 / 2 wird zu r3 := r1 + 4 r3 := r1 + 4 r2 := … Universität Göttingen - Informatik II - SS 2006 7. Compilerbau und Fortpflanzung von Zuweisungen (copy propagation) r2 := r1 r3 := r1 + r2 r2 := 5 r4 := r1 x r5 r2 := r4 + r3 r3 := r4 Universität Göttingen - Informatik II - SS 2006 r2 := 4 wird zu r3 := r1 + 4 r2 := … und auch r2 := 4 r3 := r1 + r2 r3 := *r3 Konstantenfaltung (constant folding) Fortpflanzung von Konstanten (constant propagation) (wird komplett beseitigt) Ist wichtig für Optimierungen welche datenverändernde Instruktionen einfügen, löschen oder bewegen Der ursprüngliche Programmdatenfluss kann nicht geändert werden! Es ist für den Optimierer erforderlich die Struktur des Kontrollflussgraphen (control flow graph) zu „verstehen“ 7.1-87 Beispiel: Finde die Variablenmenge welche einen grundlegenden Block auf dem Weg zu einem anderen Block „durchfliesst“ und von diesem anderen Block verwendet wird (lebendige Variablen) Wird durch Kontrollflussanalyse bestimmt Ist wichtig für die Leistungsoptimierung von Schleifen oder schleifenähnlichen Strukturen in dem Kontrollflussgraphen Universität Göttingen - Informatik II - SS 2006 7.1-88 7. Compilerbau 7. Compilerbau Beispiel für komplexe Optimierung Schleifeninvarianter Code (Loop Invariant Code Motion) Bewege Berechnungen, dessen Werte während allen Schleifeniterationen gleich bleiben (invariant sind), aus der Schleife raus Rückblick L1: r1 := *(sp + 100) r2 := *r1 … r3 := r2 < 100 if r3 goto L1 L0: r1 := *(sp + 100) Compiler sind komplexe Programme welche eine höhere Programmiersprache in eine Assemblersprache umwandeln um danach ausgeführt zu werden Compilerprogrammierer handhaben die Komplexität des Kompilationsprozesses durch: aufteilen des Compilers in unterschiedliche Phasen verwenden, ausgehend von der Spezifikation, eine Theorie für den Bau von Compilerkomponenten L1: r2 := *r1 … r3 := r2 < 100 if r3 goto L1 Universität Göttingen - Informatik II - SS 2006 7.1-89 Universität Göttingen - Informatik II - SS 2006 7.1-90 7. Compilerbau Überblick Einführung Programmiersprachen Namen, Bindungen und Gültigkeitsbereiche Speichermanagement und Implementierung Kontrollfluss Informatik II SS 2006 Kapitel 7: Compilerbau Teil 2: Konzepte von Programmiersprachen Als Grundlage dient das Buch “Programming Language Pragmatics” von Michael L. Smith Dr. Michael Ebner Dr. René Soltwisch Siehe u.a. Kapitel 3, 6 und 9 Lehrstuhl für Telematik Institut für Informatik Universität Göttingen - Informatik II - SS 2006 7. Compilerbau 7. Compilerbau Abstraktionen... Sprachen als Abstraktion Die menschliche Sprache ist ein Werkzeug für die Abstraktion von Gedanken Eliminiere Details welche unnötig zum Lösen eines speziellen Problems sind „Wenn es mir warm ist, dann schalte ich den Ventilator ein.“ Komplexität wird versteckt Eine einfache Absicht wird mitgeteilt, wobei aber die kognitiven und neurologischen Bedingungen, durch welche die Absicht aufkam, höchst wahrscheinlich für jeden zu komplex sind um sie zu Verstehen Die Bedeutung dieser Aussage ist dem Verständnis des Individuums welches es äußert und den Individuen die es hören überlassen Baue oft auf anderen auf Erlaubt das Lösen von zunehmend komplexeren Problemen (teile und herrsche, divide and conquer) Komplexität moderner Software ist ohne Beispiel (Präzedenzfall) Programmiersprachen sind ein Werkzeug zum Abstrahieren von Berechnungen Abstraktion ist ein grundlegender Bestandteil zum Handhaben von diesen komplexen Problemen if (temperatur() > 30.0) { schalte_ventilator_ein(); } Abstraktion Abstraktum Digitale Logik Computerarchitektur Assemblersprache Betriebssystem Computerkommunikation Transistoren Digitale Logik Maschinensprache Allokation von Ressourcen (Zeit, Speicher, etc.) (Physikalische) Netzwerke, Protokolle Universität Göttingen - Informatik II - SS 2006 7.2-2 Beinhaltet eine komplexe aber konkrete Sequenz von Aktionen: 7.2-3 lese Thermostat; konvertiere den Ablesewert zu einer IEEE Fliesskomazahl nach der Celsiusskala; Vergleiche den Wert mit 30.0; wenn größer dann sende ein Signal an eine PCI Karte, welche ein Signal an ein Relais sendet, welches den Ventilator einschaltet Die Bedeutung dieses Ausdrucks ist festgelegt durch die formale Semantik der Programmiersprache und der Implementierung der Funktionen temperatur() und schalte_ventilator_ein(). Universität Göttingen - Informatik II - SS 2006 7.2-4 7. Compilerbau 7. Compilerbau Wie abstrahieren Programmiersprachen Berechnungen? (1/4) Biete eine Notation für den Ausdruck von Algorithmen welche 2. Befehlsnamen der Assemblersprache, Registernamen, Argumentordnung, etc. Abbildung von Sprachelementen auf die Assemblersprache Arithmetische Ausdrücke, Bedingungen, Konventionen für Prozeduraufrufe, etc. wie der Algorithmus in einer Maschinensprache implementiert wird, wie Hilfsalgorithmen, z.B. Hash-Tabellen, Listen, implementiert werden, es dem Programmierer erlaubt seine eigene Abstraktion (Unterprogramme, Module, Bibliotheken, Klassen, etc.) zu bauen um die Weiterführung des Konzepts „Komplexitätsmanagement durch Schichtenbildung“ zu ermöglichen. Universität Göttingen - Informatik II - SS 2006 7.2-5 7. Compilerbau Biete Grundbefehle (primitives), Unterprogramme und Laufzeitunterstützung für übliche (lästige) Programmierpflichten RC SPA MI P .L1: .L2: %l1,10,%l2 %l0,%l2 .L1; nop do_1; nop .L2; nop do_2; nop L1: L2: addi bge call b call … $t2,$t1,10 $t0,$t2,L1 do_1 L2 do_2 S Universität Göttingen - Informatik II - SS 2006 7.2-6 Wie abstrahieren Programmiersprachen Berechnungen? (4/4) Biete Merkmale welche eine besondere Art von Algorithmus oder Softwareentwicklung unterstützen (encourage) oder durchsetzen (enforce) Lesen und schreiben von Dateien Handhabung von Zeichenfolgen (Vergleiche, Erkennung von Teilzeichenfolge, etc.) Dynamische Allokation von Speicher (new, malloc, etc.) Rückgewinnung von unbenutztem Speicher (garbage collection) Sortieren etc. Universität Göttingen - Informatik II - SS 2006 if (a < b + 10) { do_1(); } else { do_2(); } add cmp bge call ba call … 7. Compilerbau Wie abstrahieren Programmiersprachen Berechnungen? (3/4) 3. Verberge unterliegende (systemnahe) Details der Zielarchitektur SPARC (meistens) unabhängig von der Maschine ist auf welcher der Algorithmus ausgeführt wird, Fähigkeiten (features) auf höchster Ebene bietet und die Aufmerksamkeit des Programmierers mehr auf den Algorithmus fokussiert und weniger auf MIPS 1. Wie abstrahieren Programmiersprachen Berechnungen? (2/4) Strukturiertes Programmieren Unterprogramme Verschachtelte (Nested) Variablenbereiche (scopes) Schleifen Beschränkte Formen des „goto“ Befehls (statement??) 7.2-7 Universität Göttingen - Informatik II - SS 2006 Objekt-Orientierte Programmierung Klassen Vererbung Polymorphismus 7.2-8 7. Compilerbau 7. Compilerbau Kategorien von Programmiersprachen Imperative Sprachen (1/2) Alle Sprachen fallen in eine der beiden folgenden Kategorien: Die von Neumann Sprachen Imperative Sprachen erfordern die schrittweise Beschreibung durch Programmierer wie ein Algorithmus seine Aufgabe erledigen soll. Analogie aus der realen Welt: „Ein Rezept ist eine Art von imperativem Programm, welches einem Koch sagt wie ein Gericht zuzubereiten ist.“ schließen Fortran, Pascal, Basic und C ein stellen eine Reflektion der von Neumann Computerarchitektur dar, auf welcher die Programme laufen Führen Befehle aus welche den Zustand des Programms (Variablen/Speicher) ändern Manchmal auch Berechnung durch Seiteneffekte genannt Beispiel: Aufsummieren der ersten n Ganzzahlen in C Deklarative Sprachen erlauben die Beschreibung durch Programmierer was ein Algorithmus erledigen soll ohne exakt zu beschreiben wie es getan werden soll. for(sum=0,i=1;i<=n;i++) { sum += i; } Analogie aus der realen Welt: „Das Pfandgesetz ist ein deklaratives Programm welches Einzelhändlern mitteilt das sie ein Recyclingprogramm für Einwegflaschen und Dosen des eigenen Sortiments aufstellen müssen, ohne exakt mitzuteilen wie dies zu erfolgen hat. Universität Göttingen - Informatik II - SS 2006 7.2-9 7. Compilerbau 7.2-10 7. Compilerbau Imperative Sprachen (2/2) Deklarative Sprachen (1/2) Die objekt-orientierten Sprachen Die funktionalen Sprachen schließen Smalltalk, Eiffel, C++, Java und Sather ein Sind ähnlich der von Neumann Sprachen mit der Erweiterung von Objekten Objekte enthalten ihren eigenen internen Zustand (Klassenvariablen, member variables) und Funktionen welche auf diesem Zustand operieren (Methoden) Berechnung ist organisiert als Interaktion zwischen Objekten (ein Objekt ruft die Methoden eines anderen Objektes auf) Die meisten objekt-orientierten Sprachen bieten Konstrukte (facilities) basierend auf Objekten welche objekt-orientierte Programmierung fördern Kapselung (encapsulation), Vererbung (inheritance) und Polymorphismus (polymorphism) Wir werden uns darüber später genauer unterhalten Universität Göttingen - Informatik II - SS 2006 Universität Göttingen - Informatik II - SS 2006 7.2-11 schließen Lisp/Scheme, ML, Haskell (Gofer) ein Sind eine Reflektion von Church‘s Theorie der rekursiven Funktionen (lambda calculus) Berechnung werden ausgeführt als Rückgabewerte von Funktionen basierend auf der (möglicherweise rekursiven) evaluation von anderen Funktionen Mechanismus ist als Reduktion bekannt Keine Seiteneffekte Erlaubt gleichungsbasiertes Problemlösen (equational reasoning), einfachere formale Beweise von Programmkorrektheit, etc. Beispiel: Aufsummieren der ersten n Ganzzahlen in SML fun sum (n) = if n <= 1 then n else n + sum(n-1) Universität Göttingen - Informatik II - SS 2006 7.2-12 7. Compilerbau 7. Compilerbau Deklarative Sprachen (2/2) Die logischen Sprachen schließen Prolog, SQL und Microsoft Excel/OpenOffice OpenCalc ein Sind eine Reflektion von der Theorie der Aussagenlogik (propositional logic) Berechnung ist ein Versuch einen Wert zu finden welcher eine Menge von logischen Beziehungen erfüllt Der meist verwendete Mechanismus um diesen Wert zu finden ist bekannt als Resolution (resolution) und Vereinheitlichung (unification) Beispiel: Aufsummieren der ersten n Ganzzahlen in Prolog sum(1,1). sum(N,S) :- N1 is N-1, sum(N1,S1), S is S1+N. Universität Göttingen - Informatik II - SS 2006 7.2-13 7. Compilerbau Name Seit Bemerkungen Verbreitung FORTRAN 1957 Für mathematische und naturwissenschaftliche Anwendungen Sehr groß COBOL 1960 Für betriebswirtschaftliche Anwendungen Sehr groß ALGOL-60 1960 Für mathematische Berechnungen Klein LISP 1962 Wichtigste Sprache der Künstlichen Intelligenz (KI) Mittel BASIC 1963 Einfache Anfängersprache Groß PL/1 1965 Für technische und betriebswirtschaftliche Anwendungen, sehr umfangreich Mittel ALGOL-68 1968 Für mathematische und allgemeine Anwendungen; Einsatz fast nur im Hochschulbereich Klein PASCAL 1971 Sprache der strukturierten Programmierung; Grundlage für viele andere Sprachen Mittel C 1973 Für Systemprogrammierung und allgemeine Anwendungen; enger Bezug zu Unix Sehr groß SMALLTALK 1974 Erste objektorientierte Sprache Klein PROLOG 1977 KI-Sprache, logisches Schließen Klein MODULA 1978 Weiterentwicklung von PASCAL Klein ADA 1980 Sehr umfangreich; für allgemeine Anwendungen; basiert auf PASCAL und PL/1 Klein C++ 1982 Ergänzung von C um objektorientierte Sprachelemente, sog. Hybridsprache Groß Eiffel 1982 Rein objektorientierte Sprache; Einsatz fast nur im Hochschulbereich Klein Java 1994 Objektorientiert, plattformunabhängig, Internet-Programmierung Klein Universität Göttingen - Informatik II - SS 2006 7.2-14 7. Compilerbau Eine historische Perspektive: Maschinensprachen Eine historische Perspektive: Assemblersprachen (1/2) Die ersten Maschinen wurden direkt in einer Maschinensprache oder Maschinencode programmiert Langweilig, aber Maschinenzeit war teurer als Programmiererzeit Programme wurden immer Komplexer zu schwierig, zeitintensiv und teuer um Programme in Maschinencode zu schreiben Assemblersprachen wurden entwickelt Für den Menschen lesbar ☺ Ursprünglich wurde eine eins-zu-eins Beziehung zwischen Instruktionen der Maschinensprache und Instruktionen der Assemblersprache bereitgestellt Schließlich wurden „makro“ Einrichtungen hinzugefügt um Softwareentwicklung durch anbieten von primitiven Formen von CodeWiederverwendung weiter zu beschleunigen Der Assembler war das Programm welches ein Assemblerprogramm in Maschinencode übersetzte mit welchem die Maschine laufen konnte MIPS Maschinencode für ein Programm zum Berechnen des GGT von zwei Ganzzahlen Universität Göttingen - Informatik II - SS 2006 7.2-15 Universität Göttingen - Informatik II - SS 2006 7.2-16 7. Compilerbau 7. Compilerbau Eine historische Perspektive: Assemblersprachen (2/2) Eine historische Perspektive: höhere Sprachen (1/2) Programme wurden immer Komplexer Beispiel: es war zu schwierig, zeitintensiv und teuer um Programme in Assemblersprache zu schreiben es war zu schwierig von einer Maschine zu einer anderen zu wechseln, welche eine andere Assemblersprache hatte Es wurden höhere Programmiersprachen entwickelt Mitte der 1950er wurde Fortran entworfen und implementiert Assembler es erlaubte numerische Berechnungen in einer Form ähnlich von mathematischen Formeln auszudrücken Der Compiler war das Programm welches ein höheres Quellprogramm in ein Assemblerprogramm oder Maschinenprogramm übersetzte. Ursprünglich konnten gute Programmierer schnellere Assemblerprogramme schreiben als der Compiler Andere höhere Programmiersprachen folgen Fortran in den späten 50er und frühen 60er Lisp: erste funktionale Sprache, basierte auf der Theorie der rekursiven Funktionen Algol: erste block-strukturierte Sprache Universität Göttingen - Informatik II - SS 2006 7.2-17 7. Compilerbau 7.2-18 7. Compilerbau Eine historische Perspektive: höhere Sprachen (2/2) Ausführung von Programmen höherer Sprachen Beispiel: Kompilation Programm wird in Assemblersprache oder direkt in Maschinensprache übersetzt Kompilierte Programme können so erstellt werden, dass sie relativ schnell in der Ausführung sind Fortran, C, C++ int gcd (int i, int j) { while (i != j) { if (i > j) i = i – j; else Compiler j = j – i; } printf(“%d\n”,i); } Universität Göttingen - Informatik II - SS 2006 Universität Göttingen - Informatik II - SS 2006 Interpretation Programm wird von einem anderem Programm gelesen und Elemente der Quellsprache werden einzeln ausgeführt Ist langsamer als kompilierte Programme Interpreter sind (normalerweise) einfacher zu implementieren als Compiler, sind flexibler und können exzellent Fehlersuche (debugging) und Diagnose unterstützen Java, Pyhton, Perl, etc. 7.2-19 Universität Göttingen - Informatik II - SS 2006 7.2-20 7. Compilerbau 7. Compilerbau Überblick Namen, Bindungen und Gültigkeitsbereiche (1/3) Einführung Programmiersprachen Namen, Bindungen und Gültigkeitsbereiche Speichermanagement und Implementierung Kontrollfluss Namen Ein mnemonischer Zeichenname wird verwendet um irgendetwas anderes zu repräsentieren oder zu benennen (Mnemonic ist die Bezeichnung für Ausdrücke deren Bedeutung vorwiegend durch die verwendete Buchstabenfolge leicht behalten werden kann.) Normalerweise Bezeichner (identifier) Ist essentiell für Abstraktion Erlaubt es Programmierern Werte zu bezeichnen damit die Notwendigkeit zur direkten Manipulation von Adressen, Registernamen, etc. vermieden wird Beispiel: Es ist nicht notwendig zu wissen ob die Variable foo im Register $t0 oder an der Speicherstelle 10000 gespeichert wird Erlaubt es Programmierern einen einfachen Namen für ein potenziell komplexes Programmstück stehen zu lassen Beispiel: foo = a*a + b*b + c*c + d*d; Beide Fälle verringern die konzeptuelle Komplexität Universität Göttingen - Informatik II - SS 2006 7.2-21 7. Compilerbau Universität Göttingen - Informatik II - SS 2006 7.2-22 7. Compilerbau Namen, Bindungen und Gültigkeitsbereiche (2/3) Namen, Bindungen und Gültigkeitsbereiche (3/3) Gültigkeitsbereiche (Scope) Bindungen Ist eine Assoziation zwischen zwei Dingen Ein Variablenname zu einem Wert Ein Variablenname zu einer spezifischen Speicherstelle Ein Typ und seine Repräsentation oder Layout im Speicher Die Bindezeit ist die Zeit zu der eine solche Assoziation gemacht wird Ist der Textbereich eines Programms in welchem eine Bindung aktiv ist Java Beispiel: public void foo (int a) { Global Scope int b; while(a < n) { int c; Method Scope c = a + a; b = a * c; Block Scope a++; } } Verbessert die Abstraktion durch die Kontrolle über die Sichtbarkeit von Bindungen Universität Göttingen - Informatik II - SS 2006 7.2-23 Universität Göttingen - Informatik II - SS 2006 7.2-24 7. Compilerbau 7. Compilerbau Bindezeitpunkte (1/8) Bindezeitpunkte (2/8) Wir unterscheiden 7 Zeitpunkte für die Entscheidung über eine Bindung Zeitpunkt des Sprachentwurfs Entscheidungen welche vom Designer der Programmiersprache gemacht wurden Sprache Entwurf Implementierung (mit Compilern) Typische Beispiele: Binden von Kontrollstrukturen (Bedingungen, Schleifen, etc.) zu Ihrer abstrakten Bedeutung Programm Programmierung (Schreiben des Programms) Kompilation Linken Laden Ausführen Universität Göttingen - Informatik II - SS 2006 „Befehle in einem while Schleifenblock werden ausgeführt bis die Bedingung nicht mehr länger wahr ist“ Binden von primitiven Datentypnamen (int, float, char, etc.) zu Ihrer geforderten Repräsentation „Variablen vom Typ int beinhalten vorzeichenbehaftete Ganzzahlen“ „Variablen vom Typ int beinhalten vorzeichenbehaftete 32-bit Werte“ 7.2-25 7. Compilerbau 7.2-26 7. Compilerbau Bindezeitpunkte (3/8) Bindezeitpunkte (4/8) Zeitpunkt des Programmierens Zeitpunkt der Sprachimplementierung Entscheidungen des Programmierers Typische Beispiele: Entscheidungen welche vom Compiler bzw. vom Compilerprogrammierer gemacht wurden Mit anderen Worten, Angelegenheiten der Sprachimplementierung die nicht spezifisch während des Sprachentwurfs definiert wurden Typische Beispiele: Binden eines Algorithmus zu den Befehlen der Programmiersprache mit denen der Algorithmus implementiert ist Binden von Namen zu Variablen, welche für einen Algorithmus erforderlich sind Binden von Datenstrukturen zu Sprachdatentypen Zeitpunkt der Kompilation Binden von primitiven Datentypen zu deren Repräsentationsgenauigkeit (Anzahl der Bits) Entscheidungen des Compilers Typische Beispiele: „bytes sind 8-bits, shorts sind 16-bits, ints sind 32-bits, longs sind 64-bits“ Binden von höheren Konstrukten zu Maschinencode (Optimierung eingeschlossen) Binden von statisch definierten Datenstrukturen zu einem spezifischen Speicherlayout Binden von benutzerdefinierten Datentypen zu einem spezifischen Speicherlayout Binden von Dateioperationen zur betriebssystemspezifischen Implementierung dieser Operationen open() ist mit einem SYS_open Systemaufruf implementiert Universität Göttingen - Informatik II - SS 2006 Universität Göttingen - Informatik II - SS 2006 7.2-27 Universität Göttingen - Informatik II - SS 2006 7.2-28 7. Compilerbau 7. Compilerbau Bindezeitpunkte (5/8) Bindezeitpunkte (6/8) Zeitpunkt des Verbindens (linken) Zeitpunkt der Programmausführung Entscheidungen des Linkers Linker binden Programmmodule zusammen Typische Beispiele: Binden von Objekten (Unterprogramme und Daten) zu einem spezifischen Platz in einer ausführbaren Datei Binden von Namen, welche Objekte in anderen Modulen referenzieren, zu deren tatsächlichen Ortsreferenz Entscheidungen welche während der Programmausführung gemacht werden Typische Beispiele: Binden von konkreten Werten zu Programmvariablen „a = a + 1;“ Zeitpunkt des Ladens Binden von Referenzen von dynamisch zugeteilten Objekten zu Speicheradressen Binden von Namen zu Objekten in Sprachen mit dynamischen Gültigkeitsbereichen Entscheidungen des Laders Lader holen ausführbare Dateien in den Speicher Typische Beispiele: Binden von virtuellen Adressen in der ausführbaren Datei zu den physikalischen Speicheradressen In modernen Betriebssystemen nicht mehr wirklich notwendig, da das Betriebssystem virtuelle Adresse zu physikalischen Adressen bindet in dem es virtuellen Speicher (einschließlich der notwendiger Hardware) verwendet Universität Göttingen - Informatik II - SS 2006 7.2-29 7. Compilerbau 7.2-30 7. Compilerbau Bindezeitpunkte (7/8) Bindezeitpunkte (8/8) Ähnliche Bindeentscheidungen können zu mehreren Bindezeitpunkten durchgeführt werden Statisches Binden (static binding) Bezieht sich auf alle Bindeentscheidungen die vor der Laufzeit gemacht werden Linkentscheidungen können zur Linkzeit, Ladezeit (ein Typ des dynamischen Linken) oder Laufzeit (ein anderer Typ des dynamischen Linkens) auftreten Optimierungsentscheidungen können zur Compilezeit, Linkzeit, Ladezeit und sogar zur Laufzeit (dynamische Optimierung) auftreten Bindeentscheidungen können zu verschiedenen Bindezeitpunkten in verschiedenen Sprachen getroffen werden C bindet Variablennamen an die referenzierten Objekte zur Compilezeit Wenn wir in C sagen „foo=bar;“, dann wissen wir genau ob foo und bar global oder lokal sind oder nicht, von welchem Typ sie sind, ob ihre Typen für Zuweisungen kompatibel sind oder nicht, etc. Dynamisches Binden (dynamic binding) Bezieht sich auf alle Bindeentscheidungen die zur Laufzeit gemacht werden Frühe Bindezeitpunkte Verbunden mit größerer Effizienz Kompilierte Sprachen laufen typischerweise viel schneller, weil die meisten Bindeentscheidungen zur Compilezeit getroffen wurden Ist eine Bindeentscheidung aber erst einmal getroffen worden, dann verlieren wir auch einiges an Flexibilität Späte Bindezeitpunkte Verbunden mit größerer Flexibilität Interpretierte Sprachen erlauben es die meisten Bindeentscheidungen zur Laufzeit zu treffen, was eine größere Flexibilität erlaubt Perl (und gilt eigentlich für alle interpretierten Sprachen) bindet Variablennamen an die referenzierten Objekte zur Laufzeit Wir können in Perl sagen „$foo=$bar;“, und wenn der Name $bar nicht schon an ein Objekt gebunden ist, dann wird eines erzeugt, und dann zu $foo zugewiesen Universität Göttingen - Informatik II - SS 2006 Universität Göttingen - Informatik II - SS 2006 7.2-31 Zum Beispiel, die meisten interpretierten Sprachen erlauben es einem Programm Fragmente eines anderen Programms dynamisch zu generieren und auszuführen Da Bindeentscheidungen zur Laufzeit getroffen werden, können interpretierte Sprachen langsam sein Universität Göttingen - Informatik II - SS 2006 7.2-32 7. Compilerbau 7. Compilerbau Zusammenfassung Namen und Bindungen Gültigkeitsbereiche Namen Textueller Bereich eines Programms in welchem eine Bindung aktiv ist Es gibt grundsätzlich zwei Varianten: Ein mnemonischer Zeichenname wird verwendet um irgendetwas anderes zu repräsentieren oder zu benennen Beispiel: Variable foo kann die Speicherstelle 10000 referenzieren Statische Gültigkeitsbereiche (static scopes) Es kann zur Compilezeit genau festgestellt werden welcher Name welches Objekt an welchen Punkten im Programm referenziert Bindungen Dynamische Gültigkeitsbereiche (dynamic scopes) Ist eine Assoziation zwischen zwei Dingen Bindungen zwischen Namen und Objekten hängen vom Programmfluss zur Laufzeit ab Ein Name und das was er referenziert Nähere Ausführung Bindezeit Der Prozess durch den eine Menge von Bindungen aktiv wird, wenn die Kontrolle in einen Gültigkeitsbereich eintritt Die Bindezeit ist die Zeit zu der die Entscheidung über eine solche Assoziation gemacht wird Zum Beispiel die Allokation von Speicher um Objekte darin zu halten Beispiel: Ist der Wert von foo in einem Register oder im Speicher? (Entscheidung wird zur Compilezeit gemacht) Universität Göttingen - Informatik II - SS 2006 7.2-33 7. Compilerbau Universität Göttingen - Informatik II - SS 2006 7.2-34 7. Compilerbau Gültigkeitsbereiche Static scope: Verschachtelte Unterprogramme Referenzierende Umgebung (referencing environment) Frage: Die Menge von aktiven Bindungen zu einem gegebenen Zeitpunkt in der Programmausführung Wird durch die Regeln für Gültigkeitsbereiche einer Programmiersprache festgelegt Statische Gültigkeitsbereiche Bindungen zwischen Namen und Objekten könne zur Compilezeit festgestellt werden Einfache Varianten Welches Objekt wird von X im Funktionsblock von F1 referenziert? Regel über den nächsten Gültigkeitsbereich (closest nested scope ) Referenzen von Variablen referenzieren das Objekt im naheliegendsten Gültigkeitsbereich Frühe Versionen von BASIC hatten einen, globalen Gültigkeitsbereich Komplexe Varianten Moderne Programmiersprachen erlauben verschachtelte Unterprogramme und Module weshalb kompliziertere Regeln für Gültigkeitsbereiche erforderlich sind Universität Göttingen - Informatik II - SS 2006 7.2-35 Universität Göttingen - Informatik II - SS 2006 7.2-36 7. Compilerbau 7. Compilerbau Ein Problem welches nicht von verschachtelten Unterprogrammen behandelt wird (1/2) Ein Problem welches nicht von verschachtelten Unterprogrammen behandelt wird (2/2) Geheimnisprinzip (information hiding) für komplexe abstrakte Datentypen (ADT) Für einfache ADTs könnten Funktionen mit statischen lokalen Variablen funktionieren Siehe Beispiel auf nächster Folie: Die Variable name_nums behält seinen Wert über Aufrufe von gen_new_name bei Dies ist zu einfach für ADTs mit mehreren Funktionen die sich einen globalen Zustand teilen müssen Universität Göttingen - Informatik II - SS 2006 7.2-37 7. Compilerbau Universität Göttingen - Informatik II - SS 2006 7.2-38 7. Compilerbau Module Ein Modul Beispiel Ein Modul erlaubt es eine Sammlung von Objekten zu kapseln, so dass Objekte innerhalb eines Moduls sich gegenseitig sehen können Objekte innerhalb des Moduls nach außen nicht sichtbar sind, es sei denn sie werden explizit exportiert Objekte von außerhalb nach innen nicht sichtbar sind, es sei denn sie werden explizit importiert Abstraktion eines Stacks in Modula Wir exportieren die push und pop Funktionen Außerhalb des Moduls nicht sichtbar Top des Stackzeigers „top“ Stack array „s“ Module mit geschlossenem Gültigkeitsbereich Betrifft Module in welche Namen explizit importiert werden müssen um innerhalb des Moduls sichtbar zu sein Module mit offenem Gültigkeitsbereich Betrifft Module für die es nicht explizit erforderlich ist Namen von außerhalb zu importieren um sichtbar zu sein Universität Göttingen - Informatik II - SS 2006 7.2-39 Universität Göttingen - Informatik II - SS 2006 7.2-40 7. Compilerbau 7. Compilerbau Dynamische Gültigkeitsbereiche Statische vs. dynamische Gültigkeitsbereiche Bindungen zwischen Namen und Objekten hängen vom Programmfluss zur Laufzeit ab Statischer Gültigkeitsbereich Programm gibt 1 aus Reihenfolge in welcher Unterprogramme aufgerufen werden ist wichtig Die Regeln für dynamische Gültigkeitsbereiche sind normalerweise einfach Die aktuelle Bindung zwischen Name und Objekt ist diejenige die während der Ausführung als letzte angetroffen wurde (sprich diejenige die am kürzlichsten gesetzt wurde) Universität Göttingen - Informatik II - SS 2006 7.2-41 7. Compilerbau Dynamischer Gültigkeitsbereich Programm gibt 1 oder 2 aus in Abhängigkeit des gelesenen Wertes in Zeile 8 Warum? Ist die Zuweisung zu „a“ in Zeile 3 eine Zuweisung zu dem globalen „a“ von Zeile 1 oder dem Lokalen „a“ von Zeile 5? Universität Göttingen - Informatik II - SS 2006 7.2-42 7. Compilerbau Vorteile von dynamischen Gültigkeitsbereichen Ein Problem von dynamischen Gültigkeitsbereichen Problem: unvorhersagbare referenzierende Umgebungen Was sind die Vorteile von dynamischen Gültigkeitsbereichen? Es erleichtert die Anpassung von Unterprogrammen Beispiel: begin --nested block print_base: integer := 16 print_integer(n) Die Variable print_base kontrolliert die Basis welche print_integer für die Ausgabe von Zahlen verwendet print_integer kann früh in einem globalen Gültigkeitsbereich mit einem Standardwert belegt werden und kann temporär in einem globalen Gültigkeitsbereich auf eine andere Basis überschrieben werden Universität Göttingen - Informatik II - SS 2006 7.2-43 Globale Variable max_score wird verwendet von scaled_score() max_score wird umdefiniert in foo() scaled_score() wird von foo() aufgerufen Ahhhhh Universität Göttingen - Informatik II - SS 2006 7.2-44 7. Compilerbau 7. Compilerbau Vermischte Gültigkeitsbereiche (mixed scoping) Zusammenfassung für Gültigkeitsbereiche Perl unterstützt beide Arten, dynamische wie statische Gültigkeitsbereiche Dynamic Scoping Statische Gültigkeitsbereiche Wird von den meisten, kompilierten Hochsprachen verwendet C, C++, Java, Modula, etc. Static Scoping $i = 1; $i = 1; sub f { sub f { local($i) = 2; my($i) = 2; return g(); return g(); Bindungen von Namen zu Variablen können zur Compilezeit festgestellt werden Effizient Dynamische Gültigkeitsbereiche Wird von vielen interpretierten Sprachen verwendet } } sub g { return $i; } sub g { return $i; } print g(), f(); print g(), f(); Ausgabe: 1 2 Ausgabe: 1 1 Universität Göttingen - Informatik II - SS 2006 Ursprüngliches LISP, APL, Snobol und Perl Bindungen von Namen zu Variablen können eine Feststellung zur Laufzeit benötigen Flexibel 7.2-45 7. Compilerbau 7.2-46 7. Compilerbau Überblick Speichermanagement und Implementierung Einführung Programmiersprachen Namen, Gültigkeitsbereiche und Bindungen Speichermanagement und Implementierung Kontrollfluss Universität Göttingen - Informatik II - SS 2006 Universität Göttingen - Informatik II - SS 2006 Lebensdauer von Objekten Speichermanagement Weiterführende Spracheigenschaften und Bindungen Implementierung von statischen Gültigkeitsbereichen für verschachtelte Unterprogramme Implementierung von Unterprogrammreferenzen 7.2-47 Universität Göttingen - Informatik II - SS 2006 7.2-48 7. Compilerbau 7. Compilerbau Objektlebensdauer (1/3) Objektlebensdauer (2/3) Beispiel: Schlüsselereignisse während der Lebensdauer eines Objektes Objekt wird erzeugt Bindungen zum Objekt werden erzeugt Referenzen zu den Variablen, Unterprogrammen und Typen werden durch Bindungen gemacht Deaktivierung und Reaktivierung von temporär nicht verwendbaren Bindungen Vernichtung von Bindungen Vernichtung des Objekts public void foo (void) { Lebensdauer des Objekts Bar } Reaktiviere Bindung von b zu Bar } Beispiel: Zeit während der eine Java Referenz ein Objekt im Speicher referenziert Lebensdauer von Objekten: Zeit zwischen Erzeugung und Vernichtung eines Objekts Beispiel: Zeit während der ein Objekt im Speicher „lebt“ 7.2-49 7. Compilerbau Anmerkung: Das durch foo() erzeugte Objekt Bar ist nicht unbedingt nach der Rückkehr aus dem Unterprogramm zerstört. Es kann nach der Rückkehr von foo() nicht länger referenziert werden, aber es wird wahrscheinlich erst bei der „garbage collection“ zu einem späteren Zeitpunkt in der Programmausführung zerstört werden. Universität Göttingen - Informatik II - SS 2006 7.2-50 7. Compilerbau Objektlebensdauer (3/3) Statische Allokation Die Lebenszeit eines Objekts korrespondiert mit einem von drei Hauptmechanismen der Speicherallokation Was wird statisch allokiert? Globale Variablen Statische Allokation Beispiel: Statische Klassenvariablen Objekte werden zur Compilezeit oder Laufzeit zu festen Speicherplätzen allokiert Stack Allokation Konstante Variablen welche während der Programmausführung sich nicht ändern sollten Beispiel: “i=%d\n” ist konstant in printf(“i=%d\n”,i); Objekte werden zur Laufzeit wie benötigt allokiert, wobei eine last-in, first-out Ordnung gilt Beispiel: locales, wie z.B. lokale Variablen Heap Allokation Objekte werden zur Laufzeit in einer beliebigen Reihenfolge allokiert und freigegeben Beispiel: dynamisch allokierte Objekte Universität Göttingen - Informatik II - SS 2006 int b; b = b + 1; ... Deaktiviere Bindung von b zu Bar Lebensdauer von Bindungen: Zeit zwischen Erzeugung und Vernichtung einer Bindung Universität Göttingen - Informatik II - SS 2006 Bar b = new Bar(); while(1) { Binde Namen b an Objekt Bar 7.2-51 Der Programmcode (Unterprogramme, etc.) Ausnahme: dynamisch verbundene Unterprogramme Vom Compiler produzierte Informationen zum Debuggen Falls eine Sprache rekursive Unterprogrammaufrufe nicht untersützt, dann auch lokale Variablen, Unterprogrammargumente, Rückgabewerte, vom Compiler generierte temporäre Daten, etc. Universität Göttingen - Informatik II - SS 2006 7.2-52 7. Compilerbau 7. Compilerbau Beispiel: Statische Allokation von Lokalem Allokation über einen Stack (1/2) Keine Rekursion bedeutet das es zu einer Zeit nur eine aktive Instanz bzw. Aktivierung einer Instanz von jedem gegebenen Unterprogramm geben kann Falls eine Sprache Rekursion erlaubt, dann kann jedes Unterprogramm mehrere simultane Aktivierungen haben Beispiel: public int foo (int n) { int a, b, c; a = random(); b = random(); if (n > 0) { c = foo(n-1); } c = c * (a + b); } Daher können wir für eine einzelne, mögliche Aktivierung für jedes Unterprogramm eines Programms den Speicher statisch reservieren Universität Göttingen - Informatik II - SS 2006 Wir können n Aktivierungen von foo() haben und jede benötigt Speicherplatz um die eigenen Kopien von a, b, c, Übergabeargument n und jeden temporären, vom Compiler generierten Wert zu speichern 7.2-53 7. Compilerbau Universität Göttingen - Informatik II - SS 2006 7.2-54 7. Compilerbau Allokation über einen Stack (2/2) Allokation über einen Heap Wir wissen wie Code für Globales, Lokales, Konstanten, Temporäres, etc. allokiert wird Was bleibt übrig: Die Lösung für das Rekursionsproblem ist die Allokation über einen Stack (stack allocation) Dynamisch allokierte Objekte Warum können diese nicht statisch allokiert werden? Weil sie dynamisch erzeugt werden „Push“ Stack um Platz für Lokales (locals) für Unterprogrammaufrufe zu reservieren Warum können diese nicht auf einem Stack allokiert werden? Ein Objekt, welches dynamisch von einem Unterprogramm erzeugt wurde, könnte die Aktivierung des Unterprogramms überleben Beispiel: Objekt wird einem Globalen zugewiesen oder von dem Unterprogramm zurückgegeben „Pop“ Stack um Platz für Lokales (locals) bei der Rückkehr von einem Unterprogramm wieder freizugeben Heaps lösen dieses Problem Ein Heap ist eine Speicherregion in welcher Speicherblöcke jederzeit willkürlich allokiert und wieder freigegeben werden können Wie sind Heaps implementiert? Wie handhaben wir Anfragen zur Allokation und Freigabe? Universität Göttingen - Informatik II - SS 2006 7.2-55 Universität Göttingen - Informatik II - SS 2006 7.2-56 7. Compilerbau 7. Compilerbau Heap-Management (1/4) Heap-Management (2/4) Heap Heap Allokationsanforderung Allokationsanforderung Wir bekommen eine Allokationsanforderung für n Bytes vom Speicher Der Heap hat verwendete (dunkle) und freie (helle) Bereiche Wie wählen wir einen freien Bereich um eine Allokationsanforderung zu befriedigen? Einfache Antwort: Finde den ersten freien Bereich welcher groß genug ist der Allokation zu entsprechen (wird first fit genannt) Problem: interne Fragmentierung Wenn wir n Bytes anfordern und der erste, verfügbare freie bereich hat n+k Bytes, dann verschwenden wir k Bytes durch die Allokation im ersten Bereich Universität Göttingen - Informatik II - SS 2006 7.2-57 7. Compilerbau Eine bessere Antwort (vielleicht): Finde den ersten Bereich, welcher von der Größe am nächsten zur Allokationsanforderung ist (wird best fit genannt) Problem: Zeitaufwendiger Muss alle freie Blöcke finden um den Besten zu finden Es kann immer noch interne Fragmentierung geben, aber hoffentlich weniger als bei first fit Universität Göttingen - Informatik II - SS 2006 7. Compilerbau Heap-Management (3/4) Heap-Management (4/4) Heap Heap Allokationsanforderung Allokationsanforderung Ein anderes Problem: externe Fragmentierung Wir bekommen eine Allokationsanforderung für n Bytes und der Heap hat mehr als n Bytes frei, aber Wie handhaben wir die Freigabe? Explizit: Der Programmierer muss dem Heap-Manager mitteilen dass ein Bereich nicht länger vom Programm verwendet wird kein einzelner freier Bereich ist n Bytes groß oder größer Wir haben genügend freien Speicher, aber wir können die Allokationsanforderung nicht befriedigen Beispiel: verwende in C free(p) um den Bereich freizugeben auf den p zeigt Automatisch: Mögliche Lösungen: Vereinigung von Bereichen: wenn zwei benachbarte Bereiche mit j und k Bytes frei sind, dann vereinige diese zu einem einzelnen, freien Bereich mit j+k Bytes Ist eine Verbesserung, aber kann nicht alle externen Fragmentierungen eliminieren Universität Göttingen - Informatik II - SS 2006 7.2-58 7.2-59 Das Laufzeitsystem bestimmt welche Objekte auf dem Heap lebendig (sprich immer noch an Namen gebunden sind) oder tot (sprich nicht länger zu irgendeinem Namen gebunden sind) sind und gibt die toten Objekte automatisch frei Wird Garbage Collection (Speicherbereinigung) genannt Universität Göttingen - Informatik II - SS 2006 7.2-60 7. Compilerbau 7. Compilerbau Speicherbereinigung (Garbage Collection) (1/2) Speicherbereinigung (Garbage Collection) (2/2) Warum verwenden wir Speicherbereinigung? Warum Speicherbereinigung nicht verwenden? Verhindert: Speicherlöcher (memory leak): Programmierer können die Freigabe von dynamisch allokiertem Speicher vergessen Dangling pointers: Programmierer können ein Objekt freigeben bevor alle Referenzen darauf zerstört sind Reduzieren den Programmieraufwand und resultiert in zuverlässigeren Programmen Teuer: Festzustellen welche Objekte lebendig und welche tot sind kostet Zeit Schlecht für Echtzeitsysteme: Können normalerweise nicht garantieren wann die Speicherbereinigung laufen wird und wie lange es dauern wird Schwierig zu implementieren: Das Schreiben einer Speicherbereinigung ist schwierig und macht den Compiler und die Laufzeit einer Sprache komplizierter Sprachdesign: Einige Sprachen wurden nicht mit dem Gedanken an eine Speicherbereinigung entworfen, was es schwierig machte eine Speicherbereinigung zuzufügen Universität Göttingen - Informatik II - SS 2006 7.2-61 7. Compilerbau Universität Göttingen - Informatik II - SS 2006 7.2-62 7. Compilerbau Weiterführende Spracheigenschaften und Bindungen Implementierung von statischen Gültigkeitsbereichen (1/2) Wie implementieren wir statische Gültigkeitsbereiche in Sprachen die verschachtelte Unterprogramme erlauben? Wie implementieren wir Referenzen auf Unterprogramme? Problem: Von c(), wie referenzieren wir nichtlokale Variablen in a() und b()? void a (void) { int foo1; void b (void) { int foo2; void c (void) { int foo3 = foo1 + foo2; } void d (void) { } } void e (void) { } } Universität Göttingen - Informatik II - SS 2006 7.2-63 Universität Göttingen - Informatik II - SS 2006 7.2-64 7. Compilerbau 7. Compilerbau Implementierung von statischen Gültigkeitsbereichen (2/2) Lösung: statische Links Große Frage: Jede Aktivierung eines Unterprogramms speichert einen Zeiger zum nächsten, umgebenden Gültigkeitsbereich in seinem Stackrahmen c() bekommt seine eigenen Lokalen von seinem eigenen Stackrahmen c() bekommt die Nichtlokalen in b() durch die einmalige Dereferenzierung seines statischen Links c() bekommt die Nichtlokalen in a() durch die Dereferenzierung seines statischen Links zu b() und dann b()‘s statischen Link zu a() Universität Göttingen - Informatik II - SS 2006 Wie wenden wir Gültigkeitsbereichsregeln in Sprachen an wo Unterprogramme als Wert übergeben werden können? Zwei Antworten: Flache Bindung (shallow binding): Referenzierende Umgebung wird sofort festgestellt bevor das referenzierte Unterprogramm aufgerufen wird Ist normalerweise der Standard in Sprachen mit dynamischen Gültigkeitsbereichen Tiefe Bindung (deep binding): Referenzierende Umgebung wird festgestellt wenn die Referenz auf das Unterprogramm erzeugt wird 7.2-65 7. Compilerbau Universität Göttingen - Informatik II - SS 2006 7.2-66 7. Compilerbau Tiefe vs. flache Bindung Implementierung von Referenzen auf Unterprogramme - 2 Flache Bindung (shallow) Zum Abschluss Nötig für die line_length Zuweisung in print_selected_records um das print_person Unterprogramm zu erreichen Ein Zeiger auf den Code des Unterprogramms und ein Zeiger auf die referenzierende Umgebung des Unterprogramms Warum benötigen wir einen Zeiger auf die referenzierende Umgebung? Wir müssen einen Weg für das Unterprogramm haben mit welcher es Zugriff auf seine nichtlokalen, nichtglobalen Variablen hat Tiefe Bindung (deep) Nötig für die threshold Zuweisung im Hauptprogramm um das older_than Unterpogramm zu erreichen Universität Göttingen - Informatik II - SS 2006 Implementierung von Referenzen auf Unterprogramme - 1 Für Sprachen mit dynamischen Gültigkeitsbereichen schließt dies Variablen in den umschließenden, dynamisch verschachtelten Unterprogrammen ein (Unterprogramme die andere aufrufen) Für Sprachen mit statischen Gültigkeitsbereichen schließt dies Variablen in den umschließenden, statisch verschachtelten Unterprogrammen ein 7.2-67 Universität Göttingen - Informatik II - SS 2006 7.2-68 7. Compilerbau 7. Compilerbau Zusammenfassung Überblick Lebensdauer von Objekten Einführung Programmiersprachen Namen, Bindungen und Gültigkeitsbereiche Speichermanagement und Implementierung Kontrollfluss Die Zeitperiode während der ein Name an ein Objekt (Variable, Unterprogramm, etc.) gebunden ist Speichermanagement Statische Allokation, Stacks und Heaps Weiterführende Spracheigenschaften und Bindungen Implementierung von statischen Gültigkeitsbereichen für verschachtelte Unterprogramme Links auf Stackrahmen ablegen Implementierung von Unterprogrammreferenzen Ein Zeiger auf den Code des Unterprogramms und ein Zeiger auf die referenzierende Umgebung des Unterprogramms (flache und tiefe Bindung) Universität Göttingen - Informatik II - SS 2006 7.2-69 7. Compilerbau 7.2-70 7. Compilerbau Was fehlt uns noch? Kontrollfluss (control flow) Kontrollfluss Das Offensichtliche: Programme machen ihre Arbeit durch ausführen von Berechnungen Spezifikation der Reihenfolge in welcher Elemente einer höheren Programmiersprache ausgeführt werden Kontrollfluss (control flow) spezifiziert die Reihenfolge in welcher Berechnungen ausgeführt werden Kontrollflussmechanismen Anweisungen (statements), Schleifen, Unterprogrammaufrufe, Rekursion, etc. Übersetzung zu ausführbarem Code Universität Göttingen - Informatik II - SS 2006 Universität Göttingen - Informatik II - SS 2006 Sprachen stellen eine große Vielfalt von Kontrollflussmechanismen (control flow mechanism) bereit welche es dem Programmierer erlauben den Kontrollfluss zu spezifizieren 7.2-71 Universität Göttingen - Informatik II - SS 2006 7.2-72 7. Compilerbau 7. Compilerbau Kontrollfluss und Kontrollflussmechanismen Wichtige Fragen Iterationen (Wiederholungen) Führt eine Gruppe von Berechnungen mehrmals aus (repeatedly) Eine von sieben Kategorien von Kontrollflussmechanismen Wie implementieren Sprachen Iterationen? Schleifen: C, C++, Java for(i=0;i<N;i++) { do_something(i); Einige Sprachen verwenden andere Mechanismen um das gleiche Ziel zu erreichen Wie lauten die Kategorien von Kontrollflussmechanismen Welche Eigenschaften stellen Sprachen zur Verfügung um die Kontrollflussmechanismen einer gegebenen Kategorie zu implementieren? Wie übersetzen Compiler Kontrollflussmechanismen in ausführbaren Code? Rekursion: ML fun foo i N = } if i < N then do_something i Iteratoren: Icon, CLU foo i + 1 N every do_something(0 to N-1) foo 0 N Universität Göttingen - Informatik II - SS 2006 7.2-73 7. Compilerbau 7.2-74 7. Compilerbau Kategorien von Kontrollflussmechanismen Sequentialität (sequencing) Sequentialität (sequencing) Bestimmt für ein gegebenes Paar von Berechnungen welches zuerst ausgeführt wird Auswahl (selection) Wähle, basierend auf einer Laufzeitbedingung, welche von mehreren Berechnungen ausgeführt werden soll Bestimmt für ein gegebenes Paar von Berechnungen welches zuerst ausgeführt wird Zwei Typen von Berechnungen für welche wir die Reihenfolge betrachten wollen Ausdrücke (expressions) Iteration (iteration) Berechnungen die einen Wert erzeugen Beispiel: Führt eine Gruppe von Berechnungen mehrmals aus Rekursion (recursion) Erlaubt es Berechnungen durch sich selbst zu definieren (Allows computations to be defined in terms of themselves) Prozedurale Abstraktion (procedural abstraction) zweistellige Ausdrücke: foo + bar Evaluieren wir zuerst die Unterausdrücke foo oder bar bevor wir die Addition ausführen? Zuweisungen (assignments) Erlaubt es einer Gruppe von Berechnungen zu bennen, möglicherweise zu parametrisieren und auszuführen wann immer der Name referenziert wird Berechnungen welche die Werte von Variablen ändern Beispiel: Nebenläufigkeit (concurrency) foo = bar + 1; bar = foo + 1; Erlaubt es Berechnungen „zur gleichen Zeit“ auszuführen Keine Festlegung (Nondeterminancy) Welche von diesen beiden Zuweisungen evaluieren wir zuerst? Reihenfolge zwischen Berechnungen wird unspezifiziert gelassen Universität Göttingen - Informatik II - SS 2006 Universität Göttingen - Informatik II - SS 2006 7.2-75 Universität Göttingen - Informatik II - SS 2006 7.2-76 7. Compilerbau 7. Compilerbau Was genau ist eine Ausdruck (expression)? Evaluation von Ausdrücken und Seiteneffekte Berechnungen welche einen Wert erzeugen Evaluation von Ausdrücken kann zusätzlich zu den Werten auch Seiteneffekte erzeugen Beispiele: Variablenreferenzen Holt den Wert der Variablen aus dem Speicher Konstantenreferenzen int foo (void) { a = 10; return a; } … foo() + 20 … Evaluation von „foo()+20“ ergibt den Wert 30 UND als einen Seiteneffekt die Zuweisung des Wertes 10 an die Globale a 1, 2, 3, ‘a’, ‘b’, ‘c’, … Operatoren oder Funktionen angewandt auf eine Sammlung von Unterausdrücken Funktionsaufrufe Ausdrücke ohne Seiteneffekte werden „referentially transparent” genannt foo(a,b+10) Arithmetische Operationen Solche Ausdrücke können als mathematische Objekte behandelt werden und entsprechend durchdacht foo + bar Universität Göttingen - Informatik II - SS 2006 7.2-77 7. Compilerbau Universität Göttingen - Informatik II - SS 2006 7.2-78 7. Compilerbau Priorität und Assoziativität Beispiel zur Motivation (1/3) // kleines Bsp. für die #include <iostream> using namespace std; Zwei Wege um die Reihenfolge zu spezifizieren in welcher Unterausdrücke von komplexen Ausdrücken evaluiert werden Prioritätsregel Spezifiziert wie Operationen gruppieren wenn Klammern abwesend sind Assoziativität Ähnlich dem mathematischen Konzept mit dem gleichen Namen Spezifiziert ob Operatoren von der gleichen Prioritätsgruppe zur Linken oder Rechten zuerst evaluieren Verwendung von *= und ++ int main() { int x=3, y=2; cout << "x=3, y=2“ << endl; x *= ( (x++) - (++y) + x ); cout << "x*=((x++)-(++y)+x): " <<x<<endl; return 0; } Universität Göttingen - Informatik II - SS 2006 7.2-79 Universität Göttingen - Informatik II - SS 2006 7.2-80 7. Compilerbau 7. Compilerbau Beispiel zur Motivation (2/3) Beispiel zur Motivation (3/3) // kleines Bsp. für die von *= und ++ #include <iostream> using namespace std; Das Programm liefert auf folgenden Plattformen und Compilern unterschiedliche Ergebnisse, z.B.: Linux Intel g++ 3.3.3; Ergebnis = 10 Linux Intel g++ 2.95.4; Ergebnis = 10 Solaris SPARC g++ 2.95.3; Ergebnis = 4 Solaris SPARC Sun WorkShop 6 update 1 C++ 5.2; Ergebnis =16 Verwendung int main() { int x=3, y=2; cout << "x=3, y=2“ << endl; x *= ( (x++) - (++y) + x ); Das Problem liegt nicht an der Priorität der Operatoren oder der Assoziativität, da alles geklammert ist. cout << "x*=((x++)-(++y)+x): " <<x<<endl; Das Problem liegt an der fehlenden Spezifikation im C Standard über den Zeitpunkt der tatsächlichen Ausführung der Addition um 1 beim ++-Operator. return 0; } 7.2-81 7. Compilerbau 2. Ergebnis x=4 ergibt sich durch ((x++)-(++y) + x) = ( 3 -(2+1) + 3) = 3 *= x++ für altes x=3 für altes x=3 => x=9 => x=4 x++ wird erst nach der Zuweisung *= ausgeführt (mit Bezug auf das Alte)!!! 3. Ergebnis x=10 ergibt sich durch ((x++)-(++y) + x) = (3 -(2+1) + 3) = 3 für altes x=3 für neues x=9 => x=9 => x=10 x++ wird erst nach der Zuweisung *= ausgeführt (mit Bezug auf das Neue)!!! Universität Göttingen - Informatik II - SS 2006 7.2-82 7. Compilerbau Priorität (Precedence) Assoziativität Beispiel: Die Assoziativität ist in Sprachen einheitlicher Elementare arithmetische Operatoren assoziieren von links nach rechts -a * c Wie ist die Reihenfolge der Evaluierung? (-a) * c oder –(a * c)??? Operatoren werden von links nach rechts gruppiert und evaluiert Beispiel (Subtraktion): In C, -, unäre Negierung (unary negation), hat höhere Priorität als * (Multiplikation), weshalb die erste Klammerung korrekt ist 9 – 3 – 2 evaluiert eher zu (9 – 3) -2 als 9 - (3 - 2) Prioritätsregeln variieren stark von Sprache zu Sprache Einige arithmetische Operatoren assoziieren aber von rechts nach links Beispiel (Potenzieren): Frage: Wie wird in C int i = 0; int *ip = &i; ++*ip++; ausgewertet? ++( ) auf den Wert von *ip++. Der Wert ist der Inhalt der Variablen, auf die ip verweist. Wenn ip abgerufen wurde, wird ip im nachhinein um eins erhöht (Zeigerarithmetik). Daher ist am Ende i = 1 und der Zeiger ip wurde auch um eins erhöht (und zeigt somit höchstwahrscheinlich ins Nirvana, da kein Bezug zu dieser Speicherstelle besteht) Universität Göttingen - Informatik II - SS 2006 x++ und y++ werden vor der Zuweisung *= ausgeführt *= x++ Unterschiedliche Interpretation der Operatoren durch C(++) Compiler Universität Göttingen - Informatik II - SS 2006 1. Ergebnis x=16 ergibt sich durch ((x++)-(++y) + x) = ((3+1)-(2+1) + 3) = 4 => x=16 7.2-83 4**3**2 evaluiert eher zu 4**(3**2) als (4**3)**2 In Sprachen die Zuweisungen in Ausdrücken erlauben, assoziieren Zuweisungen von rechts nach links Beispiel: a = b = a + c evaluiert zu a = (b = a + c) a + c wird berechnet und b zugewiesen, danach wird b zu a zugewiesen Universität Göttingen - Informatik II - SS 2006 7.2-84 Priorität/Assoziativität von Operatoren in C 7. Compilerbau Priorität Arbeiten mit Prioritäten und Assoziativität 15 Regeln für Prioritäten und Assoziativität variieren stark von Sprache zu Sprache 12 () [] -> ! ∼ ++ -+ * & (typ) sizeof * / % + - 11 10 9 8 7 << >> < <= > == != & ^ 6 5 4 3 2 | && || ?: = += -= *= /= %= &= ^= |= <<= >>= , 14 In Pascal: „if A < B und C < D then ...“ Könnte zu „if A < (B and C) < D then...“ evaluiert werden Upps! 13 Leitfaden/Richtlinie: Im Zweifelsfall lieber Klammern verwenden, speziell wenn jemand oft zwischen verschiedenen Sprachen wechselt! Universität Göttingen - Informatik II - SS 2006 7.2-85 7. Compilerbau Assoziativität von links nach rechts Multiplikatiom, Division Modulo Addition, Subtraktion von links nach rechts bitweises Schieben Vergleich gößer/kleiner gleich/ungleich bitweises und bitweises exklusiv-oder von links nach rechts von links nach rechts von links nach rechts von links nach rechts von links nach rechts bitweises oder logisches und logisches oder bedingte Auswertung Wertzuweisung kombinierte Zuweisung von links nach rechts von links nach rechts von links nach rechts von rechts nach links von rechts nach links Kommaoperator von links nach rechts von rechts nach links von links nach rechts 7. Compilerbau Mehr zur Evaluierungsordnung von Ausdrücken (1/2) Mehr zur Evaluierungsordnung von Ausdrücken (2/2) Prioritäten und Assoziativität können nicht immer eine Evaluierungsreihenfolge festlegen Boolesche Ausdrücke Beispiel: a – f(b) – c * d Mit Prioritäten ergibt sich a – f(b) – (c * d) und weiter mit Assoziativität (a – f(b)) - (c * d) Aber welches wird zuerst ausgeführt: a-f(b) oder (c*d)? Warum kümmert uns das? Seiteneffekte Ausdrücke die eine logische Operation ausführen und entweder zu wahr (true) oder falsch (false) evaluieren Beispiele: a<b a && b || c oder a & b | c Die Evaluation von booleschen Ausdrücken kann durch die „short circuiting“ Technik optimiert werden Beispiel: Wenn f(b) die Variablen c oder d modifiziert, dann hängt der Wert des ganzen Ausdruckes davon ab, ob f(b) zuerst ausgeführt wird oder nicht Verbesserung des Codes Wir wollen (c*d) zu erst berechnen, so dass wir das berechnete Ergebnis nicht speichern und wiederherstellen müssen bevor und nachdem f(b) aufgerufen wird (a < b) && (c < d) Wenn (a < b) zu falsch evaluiert wird dann gibt es keinen Bedarf mehr (c <d ) auszuwerten Siehe Regel R1 aus Kapitel 2, Boolesche Algebra und Gatter Dies wird wichtig bei Code nach folgendem Muster: if (unwahrscheinliche Bedingung && teure Funktion() ) ... Wir wollen die Auswertung einer teuren Funktion() verhindern, wenn eine unwahrscheinliche Bedingung zu falsch ausgewertet wird Nochmals: Im Zweifelsfall Klammern setzen! Universität Göttingen - Informatik II - SS 2006 1 >= Operator Funktionsaufruf Arrayindex Memberzugriff Negation (logisch, bitweise) Inkrement, Dekrement Vorzeichen Dereferenzierung, Adresse Typecast 7.2-87 Universität Göttingen - Informatik II - SS 2006 7.2-88 7. Compilerbau 7. Compilerbau Zuweisungen Was genau ist eine Variable? (1/2) Berechnungen welche den Wert einer Variablen beeinflussen Die Interpretation eines Variablennamens hängt von dem Kontext ab in welchem er auftritt Beispiel: c = a + b Weisst den Wert, der durch den Ausdruck „ a +b“ berechnet wird, der Variablen c zu d=a Zuweisungen sind der fundamentale Mechanismus um Seiteneffekte zu erzeugen Die Referenz zu der Variablen „a“ auf der „rechten Seite“ einer Zuweisung benötigt einen Wert Werte die Variablen zugewiesen werden können zukünftige Berechnungen beeinflussen Wird ein r-value-context genannt und das „a“ wird r-value genannt Zuweisungen sind unerlässlich für das imperative Programmiermodel a=b+c Die Referenz zu der Variablen „a“ auf der „linken Seite“ einer Zuweisung bezieht sich auf a‘s Speicherort Wird ein l-value-context genannt und das „a“ wird l-value genannt Universität Göttingen - Informatik II - SS 2006 7.2-89 7. Compilerbau Zuweisungsfolgen Zwei Wege um eine Variable zu behandeln Zuweisungsfolgen (assignment sequencing) sind in den meisten Sprachen einfach Wertemodell Variablen sind benannte Container für Werte Beide Interpretationen als l-value und r-value von Variablen sind möglich Modell wird verwendet von Pascal, Ada, C, etc. Zuweisungen werden in der Reihenfolge ausgeführt in der sie im Programmtext auftreten Beispiel: a = 10; b = a; b zugewiesen Referenzmodell Variablen sind benannte Referenzen für Werte Nur die Interpretation als l-value ist möglich Es wird zuerst die 10 dem a zugewiesen und danach wird a dem Ausnahmen Variablen in einem r-value-context müssen „dereferenziert“ werden um einen Wert zu erzeugen Modell wird verwendet von Clu Universität Göttingen - Informatik II - SS 2006 7.2-90 7. Compilerbau Was genau ist eine Variable? (2/2) Wertemodell Universität Göttingen - Informatik II - SS 2006 Zuweisungsausdrücke Beispiel: a = b = a * c Erinnere dich an die Auswertereihenfolge bei Ausdrücken: In den meisten Programmiersprachen gilt die Assoziation von rechts nach links Initialisierung Kombinationen mit dem Zuweisungsoperator Referenzmodell 7.2-91 Universität Göttingen - Informatik II - SS 2006 7.2-92 7. Compilerbau 7. Compilerbau Zuweisungsfolgen: Initialisierung (1/2) Zuweisungsfolgen: Initialisierung (2/2) Wie initialisieren oder wie weisen wir initiale Werte Variablen zu? Verwende den Zuweisungsoperator um initiale Werte zur Laufzeit zuzuweisen Verwende den Zuweisungsoperator um initiale Werte zur Laufzeit zuzuweisen Lösungen: Statische Initialisierung: Beispiel für C: static char s[] = “foo” Der Compiler kann den Elementen des Arrays s die Werte zur Compilezeit zuweisen, was uns 4 Zuweisungen zur Laufzeit erspart (eine für jedes Zeichen plus dem NULL (String-)Terminator) siehe auch C++ Konstruktorinitialisierung Probleme: Ineffizienz: Wenn wir den initialen Wert einer Variablen zur Compilezeit kennen, dann kann der Compiler diesen Wert dem Speicher zuweisen ohne eine Initialisierung zur Laufzeit zu benötigen Programmierfehler: Wenn Variablen kein initialer Wert bei der Deklaration zugewiesen wird, dann könnte ein Programm eine Variable verwenden bevor sie irgendeinen (sinnvollen) Wert enthält Defaultwerte (Standardwerte/Ausgangswerte/...) Sprachen können einen Defaultwert für jede Deklaration eines eingebauten (built-in) Typs spezifizieren Dynamische Wertkontrollen Mache es zu einem Laufzeitfehler, wenn eine Variable verwendet wird bevor ihr ein Wert zugewiesen wurde Statische Wertkontrollen Mache es zu einem Compilerfehler wenn eine Variable verwendet werden könnte bevor ihr ein Wert zugewiesen wurde Universität Göttingen - Informatik II - SS 2006 7.2-93 7. Compilerbau Universität Göttingen - Informatik II - SS 2006 7.2-94 7. Compilerbau Zuweisungsfolgen: Kombinationen Sequentialität: Zusammenfassung Gibt es einen effizienteren Weg um komplexe Zuweisungen zu handhaben? Ausdrücke Prioritäten und Assoziativität kontrollieren die Reihenfolge Es müssen Seiteneffekte bei Unterausdrücken beachtet werden Logische Ausdrücke können von der short-circuit Auswertung profitieren Beispiele: a = a + 1; b.c[3].d = b.c[3].d * e; Zuweisungen Probleme: Ist fehleranfällig und schwierig zu schreiben, da Text wiederholt wird Kann zu ineffizientem kompilierten Code führen Lösungen: Kombinationen mit dem Zuweisungsoperator Beispiele: a += 1; b.c[3].d *= e; Die Folge des Auftretens im Programmtext bestimmt die Reihenfolge Zuweisungen zur Compilezeit erlauben die Vermeidung von Zuweisungen zur Laufzeit Zusammengesetzte Zuweisungsoperatoren kombinieren Ausdrucksauswertung und Zuweisung um effizienter sein zu können Zuweisungen werden mit Operatoren für Ausdrücke kombiniert Vermeidet sich wiederholenden Code Erlaubt es dem Compiler auf einfacherem Wege effizienteren Code zu generieren Universität Göttingen - Informatik II - SS 2006 7.2-95 Universität Göttingen - Informatik II - SS 2006 7.2-96 7. Compilerbau 7. Compilerbau Auswahl (selection) (1/4) Auswahl (selection) (2/4) Wähle, basierend auf einer Laufzeitbedingung, welche von mehreren Berechnungen ausgeführt werden soll Am häufigsten Ausgeführt vom if..then..else Sprachkonstrukt Beispiel: if ((a < b) && (c < d)) { do_something(); } Wenn beide bedingte Anweisungen „a<b“ und „c<d“ zu wahr ausgewertet werden, dann führe die Berechnung, welche durch das Unterprogramm do_something() referenziert wird, aus Universität Göttingen - Informatik II - SS 2006 7.2-97 7. Compilerbau Short circuiting Zur Erinnerung: Kann verwendet werden um unnötige Ausdrucksauswertungen zu verhinden Beispiel: if ( (a < b) && (c < d) ) { do_something(); } Wenn (a < b) falsch ist, dann kann do_something() nicht ausgeführt werden, egal was (c < d) ergibt Siehe Regel R1 aus Kapitel 2, Boolesche Algebra und Gatter Short circuiting wird Code generieren der die Auswertung von (c < d) genauso ausläßt (skipped) wie die Ausführung von do_something(), wenn (a < b) falsch ist Universität Göttingen - Informatik II - SS 2006 7.2-98 7. Compilerbau Auswahl (selection) (3/4) Auswahl (selection) (4/4) Angenommen wir haben Code der ähnlich wie dieser aussieht: Lösung: case/switch Befehle j := … (* something complicated *) IF j = 1 THEN clause_A ELSIF j IN 2, 7 THEN clause_B ELSIF j in 3..5 THEN clause_C ELSE clause_D END Beispiel: CASE … 1: | 2,7: | 3..5: ELSE END clause_A clause_B clause_C clause_D Ist einfacher zu schreiben und zu verstehen Problem: Ist kompliziert zu schreiben Universität Göttingen - Informatik II - SS 2006 7.2-99 Universität Göttingen - Informatik II - SS 2006 7.2-100 7. Compilerbau 7. Compilerbau Iteration Aufzählungsgesteuerte Schleifen: Probleme (1/3) Beispiel von FORTRAN I, II und IV Führt eine Gruppe von Berechnungen mehrmals aus Sprachen bieten für Iterationen Schleifenkonstrukte an do 10 i = 1, 10, 2 ... 10: continue Aufzählungsgesteuerte Schleifen Die Schleife wird für jeden Wert aus einer endlichen Menge (Aufzählung) ausgeführt Logikgesteuerte Schleifen Die Schleife wird solange ausgeführt bis sich eine boolesche Bedingung ändert Probleme: Anmerkung: Der imperative Stil der Programmierung favorisiert Schleifen gegenüber Rekursion Iteration und Rekursion können beide verwendet werden um eine Gruppe von Berechnungen wiederholt auszuführen Alle Arten von Schleifen können auf die beiden Konstrukte Selektion (if..then..end) und Sprung (goto) zurückgeführt werden. Wird oft in Zwischensprachen zur Codegenerierung verwendet. Universität Göttingen - Informatik II - SS 2006 7.2-101 7. Compilerbau Goto-Sprünge in die Schleife hinein, wobei i nicht vernünftig initialisiert wird, werden wahrscheinlich in einem Laufzeitfehler enden Die Schleife wird beendet wenn der Wert von i die obere Grenze überschreitet. Dies könnte einen (unnötigen) arithmetischen Überlauf veranlassen, wenn die obere Grenze in der Nähe des größten, zulässigen Wertes von i liegt Universität Göttingen - Informatik II - SS 2006 7.2-102 Aufzählungsgesteuerte Schleifen: Antworten (3/3) Können der Schleifenindex oder die Grenzen verändert werden? Allgemeine Form von Schleifen: Ist bei den meisten Sprachen verboten FOR j := first TO last BY step DO … END Algol 68, Pascal, Ada, Fortran 77 und 90, Modula-3 Was passiert wenn first größer als last ist? Die meisten Sprachen werten first und last aus bevor die Schleife ausgeführt wird Falls first größer als last ist, dann wird der Schleifenrumpf niemals ausgeführt Fragen die zu dieser Schleifenart zu stellen sind: 3. Kann j, first und/oder last im Schleifenrumpf verändert werden? Wenn ja, welchen Einfluss hat dies auf die Steuerung? Was passiert wenn first größer als last ist? Welchen Wert hat j wenn die Schleife beendet wurde? 4. Kann die Kontrolle von außerhalb in die Schleife hineinspringen? 2. Der Schleifenrumpf wird immer mindestens einmal ausgeführt Statements im Schleifenrumpf könnten i ändern und somit würde auch das Verhalten der Schleife verändert werden Goto Statements können in oder aus der Schleife springen 7. Compilerbau Aufzählungsgesteuerte Schleifen: Fragen (2/3) 1. Die Variable i wird die Indexvariable genannt und nimmt hier die Werte 1, 3, 5, 7, 9 an Die Statements zwischen der ersten und letzte Zeile werden der Schleifenrumpf (loop body) genannt und wird hier für jeden der fünf Werte von i einmal ausgeführt Welchen Wert hat der Schleifenindex j am Ende der Schleife? Ist in einigen Sprachen nicht definiert, z.B. Fortran IV oder Pascal In den meisten Sprachen gilt der zuletzt definierte Wert Einige Sprachen machen die Indexvariable zu einer lokalen Variablen der Schleife, weswegen die Variable außerhalb des Gültigkeitsbereiches der Schleife nicht sichtbar ist Kann die Kontrolle von außerhalb in die Schleife hineinspringen? Nein, für die meisten Sprachen Viele Sprachen erlauben aber den Sprung von innen nach außen Viele Sprachen bieten Anweisungen (break; exit; last, etc,) an, die einen frühzeitige Abbruch der Schleife ohne expliziten Sprung erlauben Universität Göttingen - Informatik II - SS 2006 7.2-103 Universität Göttingen - Informatik II - SS 2006 7.2-104 7. Compilerbau 7. Compilerbau Iteratoren Logikgesteuerte Schleifen Alle bisher betrachteten Schleifen iterieren über eine arithmetische Folge (1,3,5,7) Aber wie iterieren wir über eine frei wählbare Menge von Objekten? Antwort: Iteratoren Die “FOR j := first TO last BY step DO … END” Schleife kann auch geschrieben werden als “every j := first to last by step do { … }” in ICON Beispiel: Beispiele: Vorprüfende Schleife „while Bedingung do Anweisung“ Die C for-Schleife ist eine vorprüfende, logikgesteuerte Schleife und nicht eine aufzählungsgesteuerte Schleife! for(Vor-Anweisung; Bedingung; Nach-Anweisung ) Block Nachprüfende Schleife “every write (1 + upto(‘ ‘, s))” in ICON schreibt jede Position in den String s welcher ein Leerzeichen folgt upto(‘ ‘,s) erzeugt jede Position in s gefolgt von einem Leerzeichen Iteratoren sind Ausdrücke die mehrere Werte generieren und welche Ihre enthaltende Ausdrücke und Statements bestimmen können um diese mehrmals auszuwerten oder auszuführen Ein anderes Beispiel: “write(10 + 1 to 20)” schreibt 10 + j für jedes j zwischen 1 und 20 1 bis 20 erzeugt die Folge 1 bis einschließlich 20 „repeat Anweisung until Bedingung“ „do Anweisung while Bedingung“ Diese Art von Schleife werden oft falsch verwendet und sollten daher vermieden werden (da mindest ein Durchlauf erfolgt!) Prüfung in der Mitte einer Schleife „loop Anweisung when Bedingung exit Anweisung end“ Siehe auch Standard Template Library (STL) von C++ Universität Göttingen - Informatik II - SS 2006 7.2-105 7. Compilerbau Universität Göttingen - Informatik II - SS 2006 7.2-106 7. Compilerbau Rekursion Rekursion und Iteration Erlaubt es Berechnungen durch sich selbst zu definieren Mit anderen Worten, komplexe Berechnungen werden mit Begriffen von einfacheren Berechnungen ausgedrückt Ähnlich dem Prinzip der mathematischen Induktion Ist die bevorzugte Methode der wiederholenden Programmausführung in funktionalen Sprachen Eigentlich ist es die meiste Zeit der einzigste Weg um Berechnungen in funktionalen Sprachen wiederholt auszuführen Warum? Weil für die Alternative, nämlich Iteration (Schleifen), die Ausführung von Anweisungen mit Seiteneffekten (wie Zuweisungen) verbunden ist, was in rein funktionalen Sprachen verboten ist Informell gesprochen, die Schleife “FOR j := first TO last BY step DO … END” wird durch Rekursion zu: fun loop j step last = if j <= last then … loop j + step step last Es gibt mit der rekursiven Emulation von Iteration aber ein Problem: sie ist langsam! Dies ist nicht wirklich eine Einschränkung da Rekursion streng genommen genauso Mächtig ist wie Iteration und umgekehrt Universität Göttingen - Informatik II - SS 2006 7.2-107 Universität Göttingen - Informatik II - SS 2006 7.2-108 7. Compilerbau 7. Compilerbau Verbesserte Durchführung von Rekursion Evaluationskonzepte von Funktionsargumenten Gegebene Schleife Wie werden Argumente für Funktionen ausgewertet? fun loop j step last = if j <= last then … loop j + step step last Die Argumente einer Funktion werden ausgewertet bevor die Funktion die Steuerung erhält? Wird Applicative-Order Evaluation (eager evaluation, call-by-value) bezeichnet Ist der Standard in den meisten Sprachen Der rekursive Aufruf der Schleife „loop“ ist die letzte ausgeführte Berechnung der Funktion „loop“ Die Argumente einer Funktion werden nur dann ausgewertet, wenn sie auch benötigt werden? Wird Endrekursion (tail recursion) genannt Wird Normal-Order Evaluation (lazy evaluation‚ call by need, delayed evaluation) bezeichnet Kann zu einer besseren Leistung führen wenn an eine Funktion übergebene Argumente manchmal nicht gebraucht werden Beispiel: Geschickte Compiler werden Endrekursionen durch eine Schleife ersetzen Argumente für den Aufruf der Endrekursion werden ausgewertet und in den entsprechenden Lokalen platziert und ein Sprung zurück zum Anfang der Funktion wird gemacht anstatt einen rekursiven Aufruf zu machen Dies kann zu einer signifikanten Steigerung der Leistung führen Universität Göttingen - Informatik II - SS 2006 7.2-109 7. Compilerbau void foo (int a, int b, int c) { if (a + b < N) { return c; } else { return a + b; } foo(a,b,expensive_function()) In einigen Fällen wird „c“ nicht benötigt, und der Wert von c könnte von einerteuer zu berechnenden Funktion bestimmt werden Universität Göttingen - Informatik II - SS 2006 7.2-110 7. Compilerbau Ausblick Was haben Sie in diesem Kapitel gelernt? Compilerbau (Kapitel 7) Automaten und Sprachen (Kapitel 6) Programmiersprachen sind Abstraktionsmechanismen, welche: ein Rahmenwerk zum Lösen von Problemen und erzeugen neuer Abstraktionen bieten Schirmen den Programmierer von niederen Detailebenen (low-level details) der Zielmaschine (Assemblersprache, Verbinden (linken), etc.) ab Compiler sind komplexe Programme welche eine höhere Programmiersprache in eine Assemblersprache umwandeln um danach ausgeführt zu werden Compilerprogrammierer handhaben die Komplexität des Kompilationsprozesses durch: Betriebssysteme (Kapitel 5) Maschinenorientierte Programmierung (Kapitel 4) von-Neumann-Rechner (Kapitel 3) aufteilen des Compilers in unterschiedliche Phasen verwenden, ausgehend von der Spezifikation, eine Theorie für den Bau von Compilerkomponenten Speicher Zahlen und Logik (Kapitel 2) Kommunikation (Kapitel 8) von-Neumann-Rechner Universität Göttingen - Informatik II - SS 2006 7.2-111 Universität Göttingen - Informatik II - SS 2006 7.2-112 8. Computernetzwerke Überblick Grundlagen von Netzen Grundlegende Protokollmechanismen Lokale Netze und Zwischensysteme (Schicht 2 und 3) Internet-Technologien (Schicht 3 und 4) Informatik II SS 2006 Kapitel 8: Computernetzwerke (Telematik) Dr. Michael Ebner Dr. René Soltwisch Lehrstuhl für Telematik Institut für Informatik Universität Göttingen - Informatik II - SS 2006 8. Computernetzwerke 8. Computernetzwerke Literatur (1/5) Literatur (2/5) Foliensätze (aus denen ev. teilweise Folien übernommen wurden): Bitte achten Sie immer auf die neusten Ausgaben der Bücher!!! Grundlagen/Allgemeines Prof. Dr. S. Fischer, Universität Lübeck (ehemals Universität Braunschweig): http://www.ibr.cs.tu-bs.de/lehre/ss04/bsn/ (Foliensatz dient als Grundlage dieses Kapitels) J. F. Kurose & K. W. Ross: „Computernetze: Ein Top-Down-Ansatz mit Schwerpunkt Internet“, Pearson Studium (Addison-Wesley), ISBN 38273-7017-5, 2002 (Top-Down Ansatz nach Schichtenmodell) Stallings: „Data & Computer Communications“, Prentice Hall, ISBN 013-086388-2: http://williamstallings.com/DCC6e.html Universität Göttingen - Informatik II - SS 2006 8-2 8-3 J. F. Kurose & K. W. Ross: „Computernetze: Ein Top-Down-Ansatz mit Schwerpunkt Internet“, Pearson Studium (Addison-Wesley), ISBN 38273-7017-5, 2002 (Top-Down Ansatz nach Schichtenmodell) G. Krüger & D. Reschke: „Lehr- und Übungsbuch Telematik --- Netze – Dienste – Protokolle“, Fachbuchverlag Leipzig (Carl-Hanser), 2. Auflage, ISBN 3-446-22073-9, 2002 (Gutes Lehrbuch, wegen kompakter Darstellung) A. S. Tanenbaum: „Computernetzwerke“, Pearson Studium (PrenticeHall), 4. überarb. Auflage, ISBN 3.8273-7046-9, 2003 (Bottom-Up Ansatz nach Schichtenmodell) Douglas E. Comer: „Computernetzwerke und Internets mit InternetAnwendungen“, Pearson Studium (Prentice-Hall), 3. überarb. Auflage, ISBN 3-8273-7023-X, 2002 (Sehr auf Internet-Technologien fixiert) Rechenberg & Pomberger: „Informatik-Handbuch“, Hanser Verlag, ISBN 3-446-21842-4 Universität Göttingen - Informatik II - SS 2006 8-4 8. Computernetzwerke 8. Computernetzwerke Literatur (3/5) Literatur (4/5) Details zu TCP/IP Programmierung W. Richard Stevens: „TCP/IP Illustrated Volume 1-3“, Pearson Education (Addison-Wesley), W. Richard Stevens: „UNIX Network Programming“, Prentice-Hall, 2. Auflage W. Richard Stevens: „TCP/IP Illustrated, The Protocols“, Pearson Education, Volume 1, ISBN 0-201-63346-9 W. Richard Stevens: „TCP/IP Illustrated, The Implementation“, Pearson Education, Volume 2, ISBN 0-201-63354-X W. Richard Stevens: „TCP/IP Illustrated, TCP for Transactions, HTTP, NNTP, and the UNIX Domain Protocols“, Pearson Education, Volume 3, ISBN 0-201-63495-3 W. R. Stevens: „UNIX Network Programming --- Networking APIs: Sockets and XTI“, Prentice-Hall, Volume 1, 2. Auflage, ISBN 0-13-490012-x W. R. Stevens: „UNIX Network Programming --- Interprocess Communication“, Prentice-Hall, Volume 2, 2. Auflage, ISBN 0-13-081081-9 Douglas Comer: „Internetworking with TCP/IP“ Volume 1: „Principles, Protocols and Architecture“, ISBN 0130183806 Volume 2: „ANSI C Version: Design, Implementation, and Internals“, ISBN 0139738436 Volume 3: „Client-Server Programming and Applications, Linux/Posix Sockets Version“, ISBN 0130320714 Universität Göttingen - Informatik II - SS 2006 8-5 8. Computernetzwerke Universität Göttingen - Informatik II - SS 2006 8. Computernetzwerke Literatur (5/5) Überblick Weiterführende Themen Grundlagen von Netzen Mobilkommunikation 1. Jochen Schiller: „Mobilkommunikation“ Pearson Studium (Addison-Wesley), 2. überarb. Auflage, ISBN 3-8273-7060-4, 2003 Verteilte Systeme G. Coulouris: „Verteilte Systeme – Konzepte und Design“, Pearson Studium (Addison-Wesley), 3. überarb. Auflage, ISBN 3-8273-7022-1, 2002 2. 3. 4. 5. 6. A. Tanenbaum: „Verteilte Systeme - Grundlagen und Paradigmen“, Pearsin Studium (Prentice-Hall), ISBN 3-8273-7057-4, 2003 Kombination Kommunikation und Kooperation (Kommunikation und Datenbanken) 7. Grundlagen Übertragungsmedien Übertragungssysteme Netztopologien und Medienzuteilung Dienste und Protokolle ISO/OSI Referenzmodell Internet-Schichtenmodell Grundlegende Protokollmechanismen Lokale Netze und Zwischensysteme (Schicht 2 und 3) Internet-Technologien (Schicht 3 und 4) s. Abeck, P.C. Lockemann, J. Schiller, J. Seitz: „Verteilte Informationssysteme – Integration von Datenübertragungstechnik und Datenbanktechnik“, dpunkt Verlag, ISBN 3-89864-188-0, 2003 Universität Göttingen - Informatik II - SS 2006 8-6 8-7 Universität Göttingen - Informatik II - SS 2006 8-8 8. Computernetzwerke 8. Computernetzwerke Grundlagen Begriffe Kommunikationsnetze stellen eine allgegenwärtige Schlüsseltechnologie dar und bilden die Grundlage der kommenden Informationsgesellschaft. Telematik = TELEkommunikation und InforMATIK (Simon Nora und Alain Minc in Ihrem Bericht an den französischen Präsidenten, 1978) Geschichte der Kommunikation Historisch: Verflechtung von Rechnern und Telekommunikationsmitteln Fackeltelegraphie (5. Jhdt. v. Chr. Griechenland) drahtgebundene Telegraphie: Morse (ca. 1840) Unterseekabel London - New York (1866) Telefon Edison (1877) öffentliche Telefonnetze (ab 1880) ARPANET (Vorläufer des heutigen Internets) (ab 1969) lokale Netze (z.B. Ethernet ab 1976) World-Wide-Web (ca. 1990) Andere Begriffe Computernetze Computernetzwerke Rechnernetze Kommunikationsnetze Aufgabengebiete Praktische und Angewandet Informatik (Teilweise auch technische Informatik) Technische Infrastruktur verteilter Systeme (Netze) Netz-Dienste und darauf aufbauende Anwendungen Regeln für Nachrichtenaustausch (Protokolle) Werkzeuge zum Entwickeln verteilter Anwendungen Datenkommunikation: Austausch von Daten zwischen datenverarbeitenden Geräten. Telekommunikation: Austausch von Informationen (z.B. Sprache, Video) zwischen Menschen. Derzeit Integration von Datenkommunikation und Telekommunikation. Universität Göttingen - Informatik II - SS 2006 8-9 8. Computernetzwerke Universität Göttingen - Informatik II - SS 2006 8-10 8. Computernetzwerke Struktur eines Datennetzes Zusammenhang mit Betriebssystemen Netzwerkbetriebssystem: Betriebssystem, das um Kommunikationskomponenten erweitert wurde Endsystem Zwischensystem Verteiltes Betriebssystem: Betriebssystem, das intern auf Kommunikationskomponenten aufgebaut ist und die Struktur und Komplexität des Kommunikationssystems verbirgt (Transparenz). Netz Basiskomponenten: Endsysteme Zwischensysteme Kommunikationsverbindungen zwischen direkt benachbarten Systemen Universität Göttingen - Informatik II - SS 2006 8-11 Universität Göttingen - Informatik II - SS 2006 8-12 8. Computernetzwerke 8. Computernetzwerke Ziele der Netznutzung (1/2) Ziele der Netznutzung (2/2) Lastverbund: Wartungsverbund: Ziel: Gleichmäßige Auslastung verschiedener Ressourcen. Methode: Aufteilung anfallender Spitzenlasten auf mehrere Rechner. Ziel: Schnellere und billigere Wartung verschiedener Rechner. Methode: Zentrale Störungserkennung und -behebung. Leistungsverbund: Funktionsverbund: Ziel: Verringerte Antwortzeiten. Methode: Aufteilung einer komplexen Aufgabe in kleinere Teilaufgaben. Kapazitätsverbund: Kommunikationsverbund: Ziel: Effiziente Nutzung der verfügbaren Ressourcen. Methode: Versendung von Aufgaben an verschiedene Rechner und gemeinsame Nutzung spezieller Hard- und Software. Ziel: Übertragung von Informationen an verschiedene räumlich getrennte Orte. Methode: Einsatz von Briefdiensten oder verteilten Informationssystemen. Die Rechnernetztypen sind nicht alle scharf voneinander abzugrenzen. Normalerweise werden mit einem Rechnernetz mehrere Verbünde gleichzeitig realisiert. Datenverbund: Ziel: Austausch logisch zusammenhängender Daten zwischen örtlich getrennten Systemen. Methode: Zugriff auf entfernte Dateien oder verteilte Datenbanken. Universität Göttingen - Informatik II - SS 2006 8-13 8. Computernetzwerke 8-14 Übertragungsmedien (2/3) Verdrillte Kupferkabel (twisted pair): Lichtwellenleiter (fibre optics): Preiswerte Technologie für niedrige Frequenzen. Anfällig gegen Störungen (elektromagnetische Einstrahlungen) Technologie für hohe bis sehr hohe Frequenzen. Besteht aus einem zentralen Leiter, der von einem peripheren Leiter ummantelt ist. Geringe Anfälligkeit gegen elektromagnetische Einstrahlungen. Bei hohen Frequenzen aufgrund der Bauform kaum Energieverluste (geringe Dämpfung) Universität Göttingen - Informatik II - SS 2006 8. Computernetzwerke Übertragungsmedien (1/3) Koaxialkabel (coaxial cable): Ziel: Bereitstellung spezieller Funktionen an verschiedenen Orten. Methode: Einsatz von Spezialrechnern (Transputer, Superrechner). Übertragung höchster Frequenzen. Monomodefaser können Licht über nahezu 100 km ohne Verstärkung übertragen. Leistungsfähiger und billiger als Koaxialkabel, obwohl die Anschlusstechnologie etwas komplizierter ist. STP: STP:Shielded ShieldedTwisted Twisted Pair Pair Multimode graded index Coaxial Coaxial Single mode Universität Göttingen - Informatik II - SS 2006 8-15 Universität Göttingen - Informatik II - SS 2006 8-16 8. Computernetzwerke 8. Computernetzwerke Übertragungsmedien (3/3) Vermittlungstechniken (1/2) Richtfunk (line-of-sight): Moduliert das Signal auf eine elektromagnetische Welle (Träger). Einsatz in Gebieten, in denen eine Verkabelung nicht praktikabel ist. Zwischen Sender und Empfänger muss eine Sichtverbindung bestehen. Fehlerhäufigkeit hängt von den Sichtbedingungen (Wetter) ab. Radiowellen (radio): Ausstrahlung von elektromagnetischen Wellen in einem festgelegten Gebiet (Zelle). Mobilität der Empfänger und Sender möglich. Geringe Bandbreite und hohe Fehleranfälligkeit. Frage: Wie werden die Daten an einen Netzknoten weitergeleitet? Es sind zwei Techniken bekannt: Leitungsvermittlung und Speichervermittlung Leitungsvermittlung (circuit switched network): Vom Sender zum Empfänger wird eine durchgängige physikalische Leitung etabliert. Eine Kommunikation findet in folgenden Phasen statt: 1. 2. 3. Satelliten (satellites): Lange Übertragungszeiten (ca. 200 ms) zwischen Sender und Empfänger. Sehr hohe Frequenzen und Bandbreiten durch Mikrowellen und Multiplexing. Übertragung über geostationäre Satelliten, die sich mit der Erde drehen. Universität Göttingen - Informatik II - SS 2006 8-17 8. Computernetzwerke Verbindungsaufbau Datenaustausch Verbindungsabbau Nach dem Verbindungsaufbau steht die Bandbreite dem Sender vollständig zur Verfügung (reservierte Bandbreite). Beispiel: Telefonverbindungen, DATEX-L Universität Göttingen - Informatik II - SS 2006 8-18 8. Computernetzwerke Vermittlungstechniken (2/2) Kommunikationsformen (1/2) Frage: Welche Kommunikationsformen gibt es? Paket- bzw. Speichervermittlung (packet switched network): Nachrichten werden in kleine Einheiten, so genannte Pakete (packets), zerlegt. Vom Sender existiert lediglich eine durchgängige Leitung zur nächsten Relais-Station. Relais-Stationen nehmen Pakete entgegen und leiten sie in Richtung des Ziels weiter. Relais-Stationen müssen die Wege zu den einzelnen Zielen kennen (Wegewahl). Die Bandbreite zwischen Relais kann besser genutzt, aber auch überverplant werden. Beispiel: DATEX-P, Internet Es können u.a. folgende Formen unterschieden werden: Verbindungsorientiert und verbindungslos Expliziter Verbindungsaufbau oder nicht Unidirektional und bidirektional Kommunikation nur in eine oder beide Richtungen möglich Blockierend und nicht blockierend Sender wird blockiert und muss auf Antwort warten oder wird nicht blockiert etc. Universität Göttingen - Informatik II - SS 2006 8-19 Universität Göttingen - Informatik II - SS 2006 8-20 8. Computernetzwerke 8. Computernetzwerke Kommunikationsformen (2/2) Matrix von 2 Kommunikationsformen Verbindungsorientierte Kommunikation (connection oriented, CO): Jede Kommunikation erfordert zunächst den Aufbau einer Verbindung zum Kommunikationspartner (Signalisierung). Leitungsvermittlung Paketvermittlung Verbindungs -los IP über feste ATM-Strecken UDP über IP im Internet; NFS-Anwendung Verbindungs -orientiert Telefon TCP über IP im Internet; Email; FTP Verbindungsorientierte Kommunikation kann auf Leitungs- und Speichervermittlungssystemen realisiert werden. Die Adresse des Empfängers wird nur beim Verbindungsaufbau angegeben. Ausfälle von Netzkomponenten führen zum (bemerkbaren) Verbindungsabbruch. Verbindungslose Kommunikation (connectionless, CL): Datenaustausch kann jederzeit ohne speziellen Verbindungsaufbau beginnen. Verbindungslose Kommunikation kann auf Leitungs- und Speichervermittlungssystemen realisiert werden. Jede versendete Nachricht muss vollständige Adressinformationen besitzen. Ausfälle und Störungen können zu unbemerkten Verlusten von Nachrichten führen. Universität Göttingen - Informatik II - SS 2006 8-21 8. Computernetzwerke Universität Göttingen - Informatik II - SS 2006 8-22 8. Computernetzwerke Übertragungssysteme Primäres Signal y(t) Umformer Signal x´(t) Rückformer Signal y´(t) Physikalisches PhysikalischesMedium Medium Störquelle z´(t) z.B. Rundfunk, analoges Telefon nachrichtentechnischer Kanal wertkontinuierliche und zeitdiskrete Signale z.B. Steuerung von technischen Prozessen Medium Das Medium überbrückt die räumliche Distanz zwischen Quelle und Senke. Zahlreiche Störeinflüsse auf das Medium sind möglich. Signal y´(t) ist vom zeitlichen Verlauf von x´(t) und der Störgröße z´(t) bestimmt. Nachrichtentechnischer Kanal Besteht aus Umformer, Rückformer, physikalischem Medium und Störquelle. Vom inneren Aufbau wird abstrahiert; interessant ist, welche Formen von Primärsignalen mit welcher Leitung übertragen werden können. Universität Göttingen - Informatik II - SS 2006 8-23 wertdiskrete Signale (Grundlage der digitalen Übertragung) diskret kontinuierlich Primäres Signal x(t) Wert- Ein nachrichtentechnischer Kanal kann nach der zeitKlasse der unterstützten primären Signale kontinuierlich klassifiziert werden. s wertkontinuierliche und zeitkontinuierliche Signale Senke diskret Quelle Signalklassen t s t bei zeitkontinuierlichen Digitalsignalen können die Signalwerte zu beliebigen Zeitpunkten wechseln, unter Beachtung eines Mindestzeitintervalls zwischen Signaländerungen bei zeitdiskreten Digitalsignalen ist in der Regel ein isochrones Zeitraster für die Signaländerung vorgesehen Universität Göttingen - Informatik II - SS 2006 8-24 8. Computernetzwerke 8. Computernetzwerke Serielle und parallele Übertragung Ein digitales Signal x(t) wird durch eine zeitliche Folge von Signalschritten gebildet. Aufeinanderfolgende Schritte eines Signals werden zu Gruppen zusammengefasst Wörter: kleinere Gruppen (z.B. 7,8) einer festen Anzahl von Schritten Blöcke: größere Gruppen einer eventuell variablen Anzahl von Schritten Signal Serielle Übertragung 0 1 0 0 0 0 0 1 10000010 Zeit Parallele Übertragung 0 1 0 0 0 0 0 1 Zeichen Signalschritte Seriellübertragung Bitstellen werden in festgelegter Reihenfolge seriell übertragen. Bei vorhandener Wortstruktur reihen sich die Worte seriell aneinander. Typisch bei Übertragungen über größere Distanzen. Parallelübertragung Signalschritt Schrittgruppe z.B. Wort/Zeichen Zwischen Quelle und Senke werden mehrere Verbindungen parallel geschaltet. Bei einer Wortlänge von 8 Bit und 8 Verbindungen kann ein ganzes Wort in einem Schritt übertragen werden. Wird bei kürzeren Entfernungen (z.B. Anschluss von Druckern) eingesetzt. Taktraster Block Universität Göttingen - Informatik II - SS 2006 8-25 8. Computernetzwerke Netztopologien und Medienzuteilung Bandbreite (bandwidth) Stern Übertragbare Datenmenge pro Zeiteinheit Ethernet 10 Mbit/s, Fast Ethernet 100 Mbit/s einfache Wegwahl geringe Ausfallsicherheit Bitbreite (bitwidth) Ring Zeit, die zur Übertragung eines Bits benötigt wird (ca. 1 Mikrosekunde bei 1 Mbit/s) einfache Wegwahl geringe Ausfallsicherheit hoher Aufwand für die Steuerung Bus Stationen teilen sich ein Medium gute Ausfallsicherheit Verzögerung (delay) Zeit, um eine Nachricht von der Quelle zur Senke zu übertragen 1. Bit letztes Bit Liniennetz konzeptionell einfach mittlere Ausfallsicherheit Position im Netz beeinflusst Übertragungszeiten B A Transferzeit 8-26 8. Computernetzwerke Parameter eines Kanals Übertragungszeit Universität Göttingen - Informatik II - SS 2006 Signallaufzeit Universität Göttingen - Informatik II - SS 2006 Round-TripZeit Zeit 8-27 Universität Göttingen - Informatik II - SS 2006 8-28 8. Computernetzwerke 8. Computernetzwerke Netztopologien Netzwerkkategorien Vermaschtes Netz PAN = Personal Area Network LAN = Local Area Network WLAN = Wireless Local Area Network MAN = Metropolitan Area Network WAN = Wide Area Network GAN = Global Area Network keine Vermittlung notwendig gute Ausfallsicherheit n (n-1) / 2 Verbindungen bei n Knoten Backbone-Netze Kopplung von Netzen zu größeren Einheiten meist hierarchische Struktur Ausfallsicherheit direkt abhängig von der Zuverlässigkeit der Verbindungselemente passt sich gut in bestehende hierarchische Organisationsformen ein Die logische Struktur eines Netzes kann sich von der physikalischen Struktur unterscheiden (z.B. logischer Ring auf einem physikalischen Bus). Universität Göttingen - Informatik II - SS 2006 8-29 8. Computernetzwerke Universität Göttingen - Informatik II - SS 2006 8-30 8. Computernetzwerke Formen der Medienzuteilung Frequenzmultiplex Benutzen mehrere Systeme ein physikalisches Medium gemeinsam, dann muss das Medium nach einem wohldefinierten Verfahren den Systemen zur Datenübertragung zugeteilt werden. Breitbandige Übergangswege ermöglichen die Unterbringung vieler Übertragungskanäle in unterschiedlichen Frequenzbereichen (Frequenzbändern). Verfügbare Bandbreite wird in eine Reihe - nicht notwendigerweise gleichbreite - Frequenzbänder eingeteilt. Jedem Frequenzband wird ein Übertragungskanal zugeordnet. Medienzuteilung Zeitmultiplex Frequenzmultiplex Beispiel: Kabelnetze zur Übertragung von Fernseh- und Radioprogrammen vorgegebenes Raster ... Multiplexed link nach Bedarf dezentral Medium bandwidth 6 5 4 3 2 1 zentral ... konkurrierend Universität Göttingen - Informatik II - SS 2006 geordnet 8-31 Universität Göttingen - Informatik II - SS 2006 Time 8-32 8. Computernetzwerke 8. Computernetzwerke Zeitmultiplex Dienste und Protokolle Beim Zeitmultiplex wird kurzzeitig die gesamte Übertragungskapazität einem Sender zur Verfügung gestellt. Ein starres Zeitmultiplex wird als time division multiplexing (TDM) bezeichnet. Beim bedarfsgesteuerten Zeitmultiplex werden die Zeitscheiben je nach Bedarf vergeben. Bedarfsgesteuertes Zeitmultiplex wird auch als statistisches Zeitmultiplex (statistical time multiplexing, STDM) bezeichnet. Medium bandwidth 123456 123456 123456 123456 123456 8-33 8. Computernetzwerke Diskussion über den Existentialismus Chinesischer Philosoph Techniker TechnikerAA erkennt erkennteinzelne einzelneBuchBuchstaben stabenund und„morst“ „morst“diese diese Universität Göttingen - Informatik II - SS 2006 8-34 8. Computernetzwerke Kommunikation in Schichten Dolmetscher A Chinesisch Englisch Request: Anforderung eines Dienstes Indication: Anzeige, daß ein Dienst angefordert wurde Response: Reaktion des Dienstes auf eine Dienstanzeige Confirmation: Bestätigung, daß ein angeforderter Dienst erbracht wurde Die Schnittstellen, über die die Dienstprimitive in Anspruch genommen werden können, werden als Dienstzugangspunkte (service access point, SAP) bezeichnet. Die Dienste werden von sogenannten Instanzen (entities) erbracht. Die Regeln, nach denen sich Instanzen verhalten und mit anderen Instanzen interagieren, werden als Protokoll bezeichnet. Time Universität Göttingen - Informatik II - SS 2006 Die von einem Netz bereitgestellten Funktionen werden abstrakt als Dienst bezeichnet. Die einzelnen elementaren Funktionen werden als Dienstprimitive bezeichnet. Typische ISO/OSI Dienste sind: Uninterpretierte Sätze ohne Kenntnis des Existentialismus Uninterpretierte Zeichen in korrekter Reihenfolge Darstellung und Schichtung von Diensten Dienstnutzer Spanischer Philosoph Dienstzugangpunkt N N-Instanz 1 Dolmetscher DolmetscherBB Spanisch Spanisch Englisch Englisch N-Instanz 2 Dienstschnittstelle N-1 (N-1)-Instanz 1 Schicht N Dienstzugangpunkt N-1 (N-1)-Instanz 2 Schicht N-1 Techniker TechnikerBB Die Bildung von Schichten ist ein grundlegendes Prinzip zur Strukturierung von Kommunikationssystemen. Dienste einer Schicht dürfen immer nur Dienstprimitive von Diensten in direkt benachbarten Schichten in Anspruch nehmen. Netz Universität Göttingen - Informatik II - SS 2006 Dienstnutzer Dienstschnittstelle N 8-35 Universität Göttingen - Informatik II - SS 2006 8-36 8. Computernetzwerke 8. Computernetzwerke Protokolldateneinheit (1/2) Protokolldateneinheit (2/2) Eine Protokolldateneinheit (PDU, Protokol Data Unit) ist eine Informationseinheit, die zwischen Partnerinstanzen in verschiedenen Stationen als Teil des Protokolls ausgetauscht wird. Als Dienstdateneinheit (SDU, Service Data Unit) werden Schnittstellendaten bezeichnet, die von einer Schicht an die nächst niedrige oder umgekehrt übertragen werden. Folgenummer Adressen N-PDU SAP SAP SCHNITTSTELLE (N-1)-SDU (N-1)-SDU PCI PCI (N-1)- Benutzerdaten (N-1)-Trailer Nachricht der N-Schicht Fehlerprüfung (N-1)-PDU 8-37 8. Computernetzwerke PCI (N-1)-PDU PDU = Protokolldateneinheit PCI = Protokollkontrollinformation Universität Göttingen - Informatik II - SS 2006 FRAGMENTIERUNG N-PDU PKI (N-1)-Protokoll(N-1)-Header dateneinheit (N-1)-PDU SDU = Dienstdateneinheit SAP = Dienstzugangspunkt Universität Göttingen - Informatik II - SS 2006 8-38 8. Computernetzwerke Weg-Zeit-Diagramme Dienstnutzer N-Schicht (N-1)-Schicht N-BenutzerN-Header daten N-Trailer PKI Beispiele: KEINE FRAGMENTIERUNG PKI PKI N-Protokolldateneinheit 1-35 Weg-Zeit-Diagramme: Beispiel Diensterbringer Dienstnutzer Benutzer A Diensterbringer request indication response confirmation request Verbindungsaufbauphase indication Verbindungsanforderung Verbindungsbestätigung (Verbindung hergestellt) Daten Bestätigter Dienst Datentransferphase Unbestätigter Dienst Daten Daten Weg-Zeit-Diagramme verdeutlichen den zeitlichen und räumlichen Zusammenhang zwischen Dienstprimitiven. Die vertikale Achse ist die Zeitachse, die horizontale Achse gibt den räumlichen Abstand an zwischen Dienstnutzer und Diensterbringer an. Werden Dienstaufrufe (requests) grundsätzlich (positiv oder negativ) bestätigt, so handelt es sich um einem bestätigten Dienst (confirmed service). Werden Dienstaufrufe (requests) nicht bestätigt, so handelt es sich um einen unbestätigten Dienst (unconfirmed service). Universität Göttingen - Informatik II - SS 2006 Auslösungsanforderungen Schicht Benutzer B Verbindungsanzeige (ankommender Ruf) Antwort auf Verbindungswunsch (Annahme des Anrufes) Daten Daten Daten Auslösungsanzeige Verbindungsabbauphase Auslösungsbestätigung 8-39 Universität Göttingen - Informatik II - SS 2006 8-40 8. Computernetzwerke 8. Computernetzwerke Darstellung und Spezifikation von Protokollen Das ISO/OSI-Referenzmodell Anwendungsprozeß Darstellung von Protokollen mit endlichen Automaten: XReq XConf XRes XReq; YReq Warten Endsystem XInd YInd; XInd Warten Ruhe YConf; XConf Application Process Endsystem Anwendung Application Darstellung Presentation Steuerung Session XRes; YRes Transport YReq YConf YRes YInd Spezifikationsmöglichkeiten für Protokolle: natürliche Sprache Formale Modelle (erweiterte endliche Automaten, attributierte Grammatiken, Petrinetze, Prozessalgebra, temporale Logik) Spezifikationssprachen (LOTOS, Estelle, SDL) Universität Göttingen - Informatik II - SS 2006 Vermittlung Network Network Sicherung Data Link Data Link Bitübertragung Physical Physical Medium 8-41 8. Computernetzwerke Transport Transitsystem Media Universität Göttingen - Informatik II - SS 2006 8-42 8. Computernetzwerke ISO/OSI-Transportsystem (1/2) ISO/OSI-Transportsystem (2/2) Bitübertragungsschicht (physical layer): Vermittlungsschicht (network layer): Übertragung einer Folge von Bits über ein Medium Festlegung von Eigenschaften des benutzten Mediums Darstellung der Werte 0 und 1 (z.B. Spannungswerte) Synchronisation zwischen Sender und Empfänger Festlegungen von Steckernormen Bestimmung eines Weges durch das Netz Multiplexen von Endsystemverbindungen über eine Zwischenverbindung Fehlererkennung und -behebung zwischen Endsystemen Flusssteuerung zwischen Endsystemen Aufteilung eines Pakets in Rahmen Sicherungsschicht (data link layer): Übertragung einer Bitfolge in Rahmen (frames) Datenübertragung zwischen Systemen, die ein gemeinsames Medium besitzen Erkennung und Behebung von Übertragungsfehlern Flusssteuerung zur Behandlung von Überlastsituationen Realisierung meist in Hardware auf Adapterkarten Universität Göttingen - Informatik II - SS 2006 8-43 Transportschicht (transport layer): Ende-zu-Ende Kommunikationskanäle zwischen Applikationen Virtuelle Verbindungen über verbindungslose Datagrammdienste Fehlererkennung und -behebung zwischen Applikationen Flusssteuerung zwischen Applikationen Verschiedene Dienstgüten möglich Universität Göttingen - Informatik II - SS 2006 8-44 8. Computernetzwerke 8. Computernetzwerke ISO/OSI-Anwendersystem ISO/OSI-Standardisierung Sitzungsschicht (session layer): Die International Organization for Standardization (ISO) ist eine freiwillige, nicht per Staatsvertrag geregelte Organisation zur internationalen Normung. Die Mitglieder der ISO setzen sich aus den Normungsinstituten der einzelnen Mitgliedsländer zusammen (ANSI für die USA und DIN für Deutschland). Die Standards der ISO werden in ca. 200 technischen Komitees (TCs) durch deren Unterkomitees (SCs) und Arbeitsgruppen (WGs) erstellt. ISO-Standardisierungsmodell: Synchronisation und Koordination von kommunizierenden Prozessen Dialogsteuerung (Sicherungspunkte) Darstellungsschicht (presentation layer): Transformation und Anpassung von Datendarstellungen Serialisierung von Datenstrukturen zum Zweck der Übertragung Datenkompression Entwurfsvorschlag (draft proposal, DP) Entwurf (draft international standard, DIS) Standard (internation standard, IS). Anwendungsschicht (application layer): Bereitstellung von grundlegenden Diensten, die direkt von beliebigen Anwendungen benutzt werden können: Dateitransfer, virtuelle Terminals, Namensraumverwaltung, Datenbankzugriff, Netzwerkmanagement, elektronische Nachrichtensysteme, Prozess- und Maschinensteuerung, ... Universität Göttingen - Informatik II - SS 2006 Die jeweiligen Übergänge bedürfen Mehrheiten (Abstimmungen) und können sich mehrmals zyklisch wiederholen. Die Open Sytems Interconnection (OSI) beschreibt den Teil der Standards, der sich mit der Kommunikation in offenen (Kommunikations-) Systemen befasst. 8-45 8. Computernetzwerke Anwendungsprozeß Internet-Standardisierung Application Process Endsystem Endsystem Applikation Applikation Application Application Transport Router Internet (IP) Internet (IP) Internet (IP) Subnetzwerk Subnetzwerk Subnetwork Subnetwork Subnetwork Subnetwork Medium Universität Göttingen - Informatik II - SS 2006 8-46 8. Computernetzwerke Das Internet-Schichtenmodell Transport Universität Göttingen - Informatik II - SS 2006 Die Standardisierung der Internet-Protokolle wird durch die Internet Engineering Task Force (IETF) durchgeführt. Kontrolliert wird die IETF durch die Internet Engineerung Steering Group (IESG). Die IETF ist eine offene Organisation, bei der prinzipiell jeder mitarbeiten kann. (Es gibt keine Mitgliedschaftspflicht bzw. -gebühren oder dergleichen.) Internet-Standards werden in Arbeitsgruppen (working groups, WGs) ausgearbeitet, die wiederum in verschiedenen Bereichen (areas) organisiert sind. IETF-Standardisierungsmodell: Vorgeschlagener Standard (proposed standard) Vorläufiger Standard (draft standard) Internet Standard (full standard) Die jeweiligen Übergänge erfordern "rough consensus" und Implementationen. Zyklische Wiederholungen sind begrenzt möglich. Die IETF befasst sich ausschließlich mit Standards rund um das Internet. Media 8-47 Universität Göttingen - Informatik II - SS 2006 8-48 8. Computernetzwerke 8. Computernetzwerke Eigenschaften der Modelle (1/2) Eigenschaften der Modelle (2/2) Das Internet-Protokoll (IP) stellt sehr geringe Anforderungen an ein Subnetzprotokoll (Übertragung eines Pakets an eine Zieladresse). Die Internet-Architektur stammt aus der Computerwelt und hat entsprechend geeignete Programmierschnittstellen. Fast alle Netzwerktechnologien (nicht nur der Schicht 2) können als Subnetzwerk benutzt werden. Die ISO/OSI-Architektur stammt aus der Telekommunikationswelt und ist mehr auf die Bedürfnisse der klassischen Telekommunikation zugeschnitten. Das Internet-Protokoll (IP) schafft eine gemeinsame Basis, die leicht an neue Netzwerktechnologien angepasst werden kann. Andererseits ist der Adressraum der derzeitigen IP Version 4 (IPv4) zu klein, um dem Bedarf nach Adressen zu befriedigen, weshalb eine Umstellung zur Version 6 (IPv6) erfolgen muss. Universität Göttingen - Informatik II - SS 2006 8-49 8. Computernetzwerke UN TokenRing 8-50 TokenBus Universität Göttingen - Informatik II - SS 2006 Grundlagen von Netzen Grundlegende Protokollmechanismen Lokale Netze und Zwischensysteme (Schicht 2 und 3) Internet-Technologien (Schicht 3 und 4) ITU SNV (Schweiz) ITU-T IEEE Ethernet Universität Göttingen - Informatik II - SS 2006 Überblick ISO ANSI (USA) ISO/OSI-Protokolle werden von formalen Standardisierungsgremien entworfen, was sehr zeitaufwändig ist und oftmals zu komplexen Resultaten führt. 8. Computernetzwerke Standardisierung: Zusammenfassung DIN Implementationen von Internet-Protokollen sind meist frei zugänglich, was deren Verbreitung und Verbesserung in kurzen Zeitintervallen ermöglicht. WLAN ITU-R ETSI DoD IETF GSM/UMTS TCP/IP (Internet) 8-51 Universität Göttingen - Informatik II - SS 2006 8-52 8. Computernetzwerke 8. Computernetzwerke Protokollmechanismen die alle Schichten betreffen Namensgebung/Naming (1/2) Namensgebung (Naming): Identifikation von Objekten/Ressourcen Segmentieren und Blocken Verbindungen und Multiplexen Synchronisation: Kontrolle in einer Umgebung mit unvorhersehbarer Verzögerung und Fehlverhalten Fehlerüberwachung: Fehlererkennung und -behebung Flusskontrolle/Staukontrolle Prioritäten Identifizieren (Bezeichnen) ist das Herzstück eines Rechensystementwurfs, sowohl verteilt als auch zentralisiert Der Name einer Ressource zeigt an, was wir suchen, eine Adresse zeigt an, wo wir es finden, und eine Route sagt uns, wie man dort hingelangt. Bezeichner werden in allen Schichten benötigt, für z.B. Schutz Fehlerüberwachung Ressourcenverwaltung Lokalisieren und gemeinsames Nutzen von Ressourcen Bezeichner können sehr unterschiedlich sein: von Namen hoher Ebenen bis Adressen niedriger Ebenen von benutzerorientierten Namen bis zu maschinenorientierten Adressen Universität Göttingen - Informatik II - SS 2006 8-53 8. Computernetzwerke Universität Göttingen - Informatik II - SS 2006 8-54 8. Computernetzwerke Namensgebung/Naming (2/2) Segmentieren und Reassemblieren Manche Benutzerdaten sind zu umfangreich, um als eine einzige Nachricht übertragen zu werden. Einteilung in kleinere Pakete. Namen werden auf Adressen abgebildet (Binding) statisch: zur Übersetzungszeit eines Programms dynamisch: zur Ausführungszeit (Dynamisches Binding wird oft mit Nameservern gemacht) Eine logische Sichtweise (System ist Raum von benannten Objekten) gilt gegenüber einer physikalischen Sichtweise (System ist Raum von Hoststationen, die Objekte enthalten) als Ideal. Interne Puffer in den verschiedenen Schichten haben endliche Größe extrem lange Nachrichten monopolisieren gemeinsam genutzte Übertragungswege und andere Ressourcen Aufbrechen einer langen Nachricht in kleinere Pakete erlaubt parallele Benutzung von Mehrfachverbindungen (load sharing) bei hoher Fehlerrate kann bessere Nutzleistung mit kürzeren Nachrichten erreicht werden. Die meisten Netze unterstützen nur Nachrichten bis zu einer bestimmten maximalen Länge (siehe Maximum Transmission Unit, MTU) Lange Benutzernachricht Kommunikationsnachrichten Universität Göttingen - Informatik II - SS 2006 8-55 Universität Göttingen - Informatik II - SS 2006 8-56 8. Computernetzwerke 8. Computernetzwerke Blocken und Entblocken Verbindungen Kommunikationsverbindungen werden benötigt, um mehrere Nachrichten von Quelle zu Ziel zu transferieren. Verbindungen bewahren Zustandsinformation zwecks: Auch zu kleine Nachrichten sind ungünstig. Der Verwaltungsaufwand muss in vernünftigem Verhältnis zu den Nutzdaten stehen. Wiederaufsetzen nach Fehlern Übergabe in der richtigen Reihenfolge Segmentieren/Reassemblieren und Blocken/Entblocken Eine Verbindung ist ein Nachrichtenstrom zwischen zwei kommunizierenden Instanzen. Benutzernachrichten Kommunikationsnachricht Universität Göttingen - Informatik II - SS 2006 8-57 8. Computernetzwerke 8-58 8. Computernetzwerke Multiplexen und Demultiplexen Fehlerüberwachung (2/2) Multiplexing (bündeln) verschiedener logischer Verbindungen auf eine physikalische. Aufwärts-Multiplexen (Multiplexen/Demultiplexen): Verbindungen einer höheren Schicht auf eine Verbindung einer niedrigeren Schicht. Abwärts-Multiplexen (Teilen/Vereinigen): Eine Verbindung einer höheren Schicht auf mehrere Verbindungen einer niedrigeren Schicht. (N+1)-Schicht Universität Göttingen - Informatik II - SS 2006 (N)-Verbindungen (N)-Verbindungen Hauptaufgabe der Protokolle: zuverlässige Kommunikation Drei Aspekte: Erkennung von Fehlern Korrektur von Fehlern Wiederaufsetzen nach Fehlern (Recovery) Typische Probleme: Informationsverfälschung (Bitfehler) Verlust von Nachrichten Verdopplung von Nachrichten Nachrichten in falscher Reihenfolge Typische Lösungen: Die meisten Protokolle beheben Fehler durch automatische Wiederholung der Übertragung. Fehler in der Nachricht: Einfügen redundanter Information Reihenfolgefehler: Vergabe einer Folgenummer N-Schicht (N-1)-Schicht (N-1)-Verbindungen (N-1)-Verbindungen Universität Göttingen - Informatik II - SS 2006 8-59 Universität Göttingen - Informatik II - SS 2006 8-60 8. Computernetzwerke 8. Computernetzwerke Fehlerüberwachung (2/2) Flusskontrolle Es gibt auch nichtbehebbare Fehler. Dann müssen ev. mehrere Schichten reinitialisiert werden. Überwachung des Informationsflusses zwischen Sender und Empfänger, um zu verhindern, dass der Sender den Empfänger überflutet. z.B. Fensterflusskontrolle Beispiele: Fehlererkennung und –korrektur in Schicht 2 Fehlererkennung durch redundante Information, an der der Empfänger eine Verfälschung erkennt. Parity Check: Es werden Bitfolgen betrachtet (zumeist Bytes). Ist die Quersumme gerade, wird an die Bitfolge eine 0 angefügt (gerade Parität) andernfalls eine 1 (ungerade Parität) Block Check: Eine Folge von Bytes wird als Block aufgefaßt. Es werden Zeilen- und Spaltenquersummen gebildet und zum Block hinzugefügt. Cyclic Redundancy Checksum (CRC): Am häufigsten verwendete Methode (z.B. HDLC, SDLC). Fenster = 5 7 Fenster = 4 0 6 7 Folgenummer = 1 1 5 2 4 Bestätigungsnummer = 5 Letzte empfangene Bestätigung Sender Universität Göttingen - Informatik II - SS 2006 8-61 8. Computernetzwerke 5 2 3 Letzte quittierte Nachricht Empfänger Universität Göttingen - Informatik II - SS 2006 8-62 8. Computernetzwerke Synchronisation (1/3) Synchronisation (2/3) Für die Kommunikation zwischen zwei Prozessen über ein Netzwerk muss Synchronisation auf verschiedenen Ebenen sichergestellt sein: Bit-Synchronisation: Empfänger muss Anfang und Dauer eines Signalelements bestimmen. Abtasten der Leitung in bestimmten Abständen Byte-Synchronisation: Austausch von Zeichen meist in 8-Bit-Einheiten (1 Byte) Empfänger muss Anfang und Ende eines Byte bestimmen können Beispiel für Blocksynchronisation: Syn.-Zeichen Start Kopf Benutzerdaten Blockprüfung Ende SYN.-ZEICHEN START KOPF BENUTZERDATEN BLOCKPRÜFUNG ENDE - Das Bitmuster, um Bytessynchronisation zu erreichen - Kennung für den Beginn einer Nachricht - Protokollkontrollinformation - Information der nächsthöheren Ebene - Fehlererkennung bzw. Korrekturinformation - Kennung für das Ende einer Nachricht In High Level Data Link Control (HDLC) sieht der Synchronisationsblock folgendermaßen aus: 01111110 Block-Synchronisation: Daten werden in Blöcken zu mehreren Bytes zusammengefasst (z.B. eine Nachricht) Die Bedeutung eines Bytes hängt von der Position im Block ab Universität Göttingen - Informatik II - SS 2006 1 4 3 0 6 HDLC (bzw. eine Abwandlungen davon) ist z.B. das Schicht2-Protokoll von ISDN (Integrated Services Digital Network), X.25 und PPP (Point to Point Protocol) 8-63 Universität Göttingen - Informatik II - SS 2006 8-64 8. Computernetzwerke 8. Computernetzwerke Synchronisation (3/3) Prioritäten Zugang zum Übertragungsmedium: Nachrichten eine Priorität zuweisen, um sie im Wettbewerb mit anderen zu bevorzugen Eine Prioritätszuweisung kann bei gemeinsamer Nutzung ein Benutzer darf nur zu einer bestimmten Zeit Zugriff haben der Zugriff muss fair sein statisch sein und vom Nachrichteninhalt abhängig sein Protokollsynchronisation: Die meisten Protokolle kennen zwei Prioritätsebenen kommunizierende Partnerinstanzen haben Zustandsinformation (z.B. Sequenznummer) nach Fehlern und Neustart muss Zustandsinformation konsistent gemacht werden normaler Datentransfer beschleunigter Datentransfer Eigenschaften beschleunigten Datentransfers Prozesssynchronisation: kurze Nachrichten, niedrige Verzögerung, können andere Überholen geht an Flusskontrollmechanismen vorbei Synchronisation bei Zugriff auf gemeinsam genutzte Ressource (z.B. Daten) typische Anwendungen Multimedia, Unterbrechung anzeigen, Protokollsteuerung, Alarm in Prozesssteuerungsanwendungen Universität Göttingen - Informatik II - SS 2006 8-65 8. Computernetzwerke 8-66 8. Computernetzwerke Inhalte Überblick Grundlagen von Netzen Grundlegende Protokollmechanismen Lokale Netze und Zwischensysteme (Schicht 2 und 3) Internet-Technologien (Schicht 3 und 4) Universität Göttingen - Informatik II - SS 2006 Universität Göttingen - Informatik II - SS 2006 LANs (Direktverbindungsnetze) Eigenschaften und Standards Zwischensysteme Hub/Repeater Switch/Brücke Router Gateway 8-67 Universität Göttingen - Informatik II - SS 2006 8-68 8. Computernetzwerke 8. Computernetzwerke Eigenschaften lokaler Netze LAN-Entwicklung Kennzeichen lokaler Netze (Local Area Networks, LANs): Netze zur bitseriellen Übertragung von Daten zwischen unabhängigen, miteinander verbundenen Komponenten. Unter rechtlicher Kontrolle des Benutzers/Betreibers und meist auf den Bereich innerhalb eines Grundstücks beschränkt. Maximaler Durchmesser des Netzes im Bereich von wenigen Kilometern. Relativ hohe Geschwindigkeit (10 Mbps - 1 Gbps). Leichter, kostengünstiger Anschluss für Geräte unterschiedlichster Art (z.B. PCs, Workstation, Drucker, Messgeräte, ...) Direktverbindungsnetze Universität Göttingen - Informatik II - SS 2006 8-69 8. Computernetzwerke IEEE Standards für lokale Netze Die gebräuchlichsten Standards für lokale Netze (local area networks, LAN) stammen von der IEEE (Institute of Electrical and Electronics Engineers). IEEE-Standards für lokale Netze werden in den IEEE 802-Dokumenten veröffentlicht. Einige der IEEE-Standards wurden von der ISO übernommen und als ISO-Standards mit gleichem Inhalt veröffentlicht. Universität Göttingen - Informatik II - SS 2006 8-70 LANs im ISO/OSI-Referenzmodell High Level Interface Logical Link Control CSMA/CD LANs (Produktbezeichnung Ethernet) Token-Bus LANs Token-Ring LANs DQDB MANs Broadband LANs Fibre Optics Isochronous LANs Security Wireless LANs Demand Priority Access Cable Modems Wireless Personal Area Network Broadband Wireless Access Resilient Packet Ring Universität Göttingen - Informatik II - SS 2006 siehe auch Vorlesungen Mobilkommunikation I und II 8. Computernetzwerke IEEE-Standards IEEE 802.1 IEEE 802.2 IEEE 802.3 IEEE 802.4 IEEE 802.5 IEEE 802.6 IEEE 802.7 IEEE 802.8 IEEE 802.9 IEEE 802.10 IEEE 802.11 IEEE 802.12 IEEE 802.14 IEEE 802.15 IEEE 802.16 IEEE 802.17 Entwicklung der LANs seit Mitte der 70er Jahre. Weite Verbreitung von Ethernet und Token Ring LANs in den 80er Jahren. Derzeit Entwicklung von Hochgeschwindigkeit-LANs (Fast Ethernet, Gigabit Ethernet) Stark zunehmende Verbreitung von Wireless LANs, Bluetooth Die LAN-Protokolle sind in der zweiten Schicht des ISO/OSI- Referenzmodells (Sicherungsschicht, data link layer) angesiedelt. Die Sicherungsschicht wird nach IEEE in zwei Teilschichten aufgeteilt: Die logical link control (LLC) Schicht realisiert die normalerweise in der Schicht 2 vorhandenen Sicherungsfunktionen. Logical Link Control Anwendung Darstellung Steuerung Transport Vermittlung Sicherung Media Access Control Bitübertragung Die media access control (MAC) Schicht regelt den Zugang zum Übertragungsmedium. 8-71 Universität Göttingen - Informatik II - SS 2006 8-72 8. Computernetzwerke 8. Computernetzwerke Zwischensysteme: Aufteilung der Netzwerkkomponenten Verbindung von Netzen Verkabelung (Passive Komponenten) Klassifikation von Verbindungen: Im Gebäude (oder außerhalb) verlegte Kabel (Twisted Pair, Koaxial, Glasfaser etc.) Patchfelder meist eingebaut in 19“-Schränken Anschlussdosen in Räumen Patchkabel zur Anbindung der Aktiven Komponenten und Clients Verbindung von homogenen Netzen über Brücken Verbindung von heterogenen Netzen über Brücken oder Gateways Zwischensysteme Repeater und Hubs (bis Schicht 1) Brücken (bridges) und Switches (bis Schicht 2) Router (bis Schicht 3) Gateways (bis Schicht 4 oder höher) Aktive Netzwerkkomponenten (meist mit Stromaufnahme) Hubs 10 bzw. 100 MBit, Repeater Switches (auch Kopplung von 10 MBit auf 100 MBit bzw. GBit) Router (ISDN, ADSL, Interne LAN-LAN-Kopplung, WAN-Kopplung) Firewalls, Application Level Gateways, Level 7 Switches etc. Diese Zwischensysteme gibt es oft nicht in Reinform, da verschiedene Funktionalitäten angeboten werden z.B. Router haben oft Funktionalitäten eines Gateways, wie z.B. Port-Filter (für Firewalls) Server und Clients (Hosts/ Stationen) Die Bezeichnungen von Zwischensystemen werden auch desöfteren falsch verwendet! PC‘s, Server, Workstations, Drucker, NAS, Scanner, etc. Universität Göttingen - Informatik II - SS 2006 8-73 8. Computernetzwerke 8-74 8. Computernetzwerke Repeater und Hub Brücke Eine Brücke (bridge) verbindet zwei oder mehr Netze auf Schicht 2. Ein Repeater ist eine aktive Netzwerkkomponente, die eine Regenerierungsfunktion übernimmt. Ein Repeater empfängt Signale, verstärkt sie und gibt sie an alle Anschlüsse weiter. Brücken dienen somit der Kopplung gleicher oder verschiedener Netze z.B. Ethernet-Ethernet oder Ethernet-Token-Ring Ein Repeater arbeitet auf OSI-Ebene 1 Kann auch zur Kopplung unterschiedlicher Medien eingesetzt werden Repeater besitzen keine Protokollfunktionen und verarbeitet keine Daten Der Datenstrom wird gefiltert, weshalb nur Pakete für angeschlossene Endsysteme weitergeleitet werden (einfache Wegewahl entgegen der eigentlichen Schichtenfunktionalität) Formatumwandlung der Datenpakete bei heterogenen Netzen Netze werden partitioniert Ein Hub (oder auch Sternkoppler) hat die gleichen Aufgaben wie ein Repeater Er bildet den Konzentrationspunkt für eine sternförmige Verkabelung zur Bildung logischer LANs. Somit werden mehrere abgehende Signale erzeugt. Kaskadierung ist möglich, erhöht aber nicht den Gesamtdurchsatz (im Gegensatz zu einem Switch) Universität Göttingen - Informatik II - SS 2006 Universität Göttingen - Informatik II - SS 2006 8-75 Brücken können somit als Mini-Firewall zur Abschottung eingesetzt werden Verkehrsunterscheidung Intranetz-Verkehr: Datenstrom zwischen Endsystemen eines LANs Internetz-Verkehr: Datenstrom zwischen Endsystemen in verschiedenen LANs, welche über eine oder mehrere Brücken miteinander verbunden sind. Universität Göttingen - Informatik II - SS 2006 8-76 8. Computernetzwerke 8. Computernetzwerke Switch Router Mischform einer Brücke und Hubs Mit der Verwendung eines Switches als Alternative zum Hub ist es möglich, jedem Anschluss die volle Übertragungsbandbreite eines LAN bereitzustellen. Datenpakete werden dabei nicht mehr auf allen, sondern nur noch auf dem richtigen (Ziel-) Anschluss ausgegeben. Es können mehrere Datenpakete, im Gegensatz zur Brücke, gleichzeitig vermittelt werden Kollisionen (siehe CSMA/ CD - Kollisionserkennung) können somit beim Medienzugriff nur selten auftreten und jede Station kann (theoretisch) die volle Bandbreite des Mediums in Anspruch nehmen. (erfordert Vollduplex-Übertragung, sprich für jede Richtung ein Übertragungsmedium) Ein Switch setzt verschiedene Geschwindigkeiten untereinander um (z.B. 10 MBit auf 100 MBit) Ein Switch arbeitet auf OSI-Ebene 2 Universität Göttingen - Informatik II - SS 2006 8-77 8. Computernetzwerke Ein Router ist ein Gerät, das Netzwerke koppeln und große Netzwerke in Subnetze aufteilen kann. Diese Kopplung kann eine Verbindung zwischen zwei oder mehr lokalen Netzen oder die Verbindung zwischen LAN und WAN bzw. WAN und WAN sein. Ein Router arbeitet auf OSI-Ebene 3 und erfüllt auch alle Aufgaben einer Brücke Führen die Wegewahl anhand weltweit eindeutiger Adressen durch und sind somit die Vermittlungseinrichtungen des Internets und wesentliche Komponente in WANs Tabellen für die Wegewahl können leicht über 50000 Einträge haben Segmentieren und Reassemblieren Pakete entsprechend den Paketgrössen auf Schicht 2. Haben erweitere Fähigkeiten der Paketfilterung Gehören zu den leistungsfähigsten Netzkomponenten (Datendurchsätze im Multi-Gigabit-Bereich) Universität Göttingen - Informatik II - SS 2006 8. Computernetzwerke Gateway / Layer 7 Switch Zwischensysteme: Zusammenfassung Ein Gateway (Anwendungs-Gateway oder Layer7 Switch/ Router) verbindet Netzwerke mit völlig unterschiedlichen Protokollen und Adressierungen. Es kann also eigentlich inkompatible Netze miteinander verbinden. Möglich wird dies dadurch, dass ein Gateway auf allen 7 Schichten des OSI-Modells tätig werden kann und somit im Extremfall eine ankommende Nachricht bis auf Schicht 7 entpackt, um sie dann für andere Netze passend wieder bis auf Schicht 1 zu verpacken. Es setzt also real ein Protokoll in ein anderes um und hat daher auch vollen Zugriff auf die Inhalte. Isolation des Verkehrs Plug & Play Optimale Wegewahl Ein Gateway ist ein Übergangsrechner zwischen verschiedenen Netzwerken. Universität Göttingen - Informatik II - SS 2006 8-78 Durchleiten ohne Zwischenspeicherung 8-79 Hub Brücke Switch Router Nein Ja Ja Ja Ja Ja Ja Nein Nein Nein Nein Ja Ja Nein Ja Nein Universität Göttingen - Informatik II - SS 2006 8-80 8. Computernetzwerke 8. Computernetzwerke Überblick Internet-Entwicklung (1/2) Grundlagen von Netzen Grundlegende Protokollmechanismen Lokale Netze und Zwischensysteme (Schicht 2 und 3) Internet-Technologien (Schicht 3 und 4) Die Defense Advanced Research Project Agency (DARPA) der USA startet Ende der 60er Jahre ein Projekte zur Entwicklung von Internetworking-Technologie. Es entsteht das ARPANET, ein auf gemieteten Leitungen realisiertes Datagramm-Netz. Internet Protokoll Version 4 (IPv4) Transportprotokolle UDP and TCP Domain Name System (DNS) Das ARPANET wird zum Backbone-Netzwerk zwischen den Universitäten der USA. Anfang der 80er Jahre wird eine Implementierung der InternetProtokolle als Teil des BSD UNIX-Betriebssystems allgemein verfügbar. Das BSD UNIX erhält eine Socket-Programmierschnittstelle, mit der sich relativ einfach netzwerkfähige Applikationen entwickeln lassen. Universität Göttingen - Informatik II - SS 2006 8-81 8. Computernetzwerke Universität Göttingen - Informatik II - SS 2006 8-82 8. Computernetzwerke Internet-Entwicklung (2/2) Entwicklung des Internet (Hosts im DNS) 1983 wird das ARPANET in das Forschungsnetz ARPANET und das militärisch genutzte MILNET aufgeteilt. 1986 wird von der National Science Foundation der USA das NSFNET realisiert. 1990 geht das NSFNET in das ANSNET über, das von MERIT, MCI und IBM betrieben wird und eine kommerzielle Nutzung des Internets möglich macht. Anfang der 90er Jahre wird am CERN das World-Wide Web geboren. Derzeit läuft in den USA eine Internet-2 Initiative, mit der ein GigabitBackbone zwischen den Universitäten realisiert werden soll. Technologisch ist der Übergang von der IP-Version 4 zur IP-Version 6 zu erwarten. Universität Göttingen - Informatik II - SS 2006 8-83 Universität Göttingen - Informatik II - SS 2006 8-84 8. Computernetzwerke 8. Computernetzwerke Die Internet-Protokollfamilie Das Modell von IP Datagramme Web browser, e-mail, ... Applications Other user applications Einzelne, unabhängig voneinander weitergeleitete Pakete, die sich ihren Weg zum Ziel suchen User space Application protocols: HTTP, SMTP, FTP, ... Routing-Tabellen R2 geben den Ausgang zu einem Ziel an Application Programming Interface (API) R3 R1 UDP TCP IGMP ICMP RIP IP RARP „Best effort“-Dienst Transport OSPF OS kernel Network ARP Praktisch keine Echtzeit LAN DL technology WAN DL technology Universität Göttingen - Informatik II - SS 2006 8-85 Universität Göttingen - Informatik II - SS 2006 8. Computernetzwerke Wie funktioniert eigentlich das ganze Internet? IP Operationen Beispiel: FTP über das Internet unter Verwendung von TCP/IP und Ethernet 1 App 2 3 4 OS “A” Stanford Ethernet 5 R1 R1 6 8 7 9 R2 R2 10 R4 R4 Universität Göttingen - Informatik II - SS 2006 “B” (MIT) 14 R5 R5 11 15 16 R3 R3 12 13 x yx yx DA,SA data Routing tables Router R1 DA y ... Data Link 20 App 19 18 17 OS Ethernet 8-87 yx R6 yx R4 Keine Garantie für Auslieferung eines Pakets Korrekte Reihenfolge R5 Next hop R3, R4 ... y yx Router R3 DA y ... Next hop R6 ... yx Router R6 DA y ... Next hop ... 8-86 8. Computernetzwerke 8. Computernetzwerke IPv4-Adressen IPv4-Adressen: Uni Göttingen 32 bits Bildung von Netzhierarchien: Binäre und dezimale Darstellung 32 Binär: 23 15 7 0 GWDG/Uni Göttingen: 134.76.x.x Institut für Informatik: 134.76.81.x Beispiel für ein geplantes Subnetz für 16 (bzw. 14) Rechner: 11010100 01111110 11010000 10000111 212 Dezimal . 126 . 208 . 135 Ausgabe von Unix-Befehl: ipcalc 134.76.81.224/28 Hierarchische Adressierung Netzwerk-Nummer + Netzmaske (Classless Interdomain Routing (CIDR), RFC 1519). Bemerkung: IP-Adressklassen werden praktisch nicht mehr verwendet (wg. Adressknappheit) Netzangabe: 134.76.0.0/255.255.0.0 oder alternativ 134.76.0.0/16 (16 = Länge der Netzmaske) Universität Göttingen - Informatik II - SS 2006 134.76.81.225/28 = 134.76.81.(224-239) 134.76.81.239 ist die Broadcast-Adresse (letzten 4 Bits = 1111) 8-89 8. Computernetzwerke Address: 134.76.81.224 Netmask: 255.255.255.240 = 28 Wildcard: 0.0.0.15 => Network: 134.76.81.224/28 (Class B) Broadcast: 134.76.81.239 HostMin: 134.76.81.225 HostMax: 134.76.81.238 Hosts/Net: 14 10000110.01001100.01010001.1110 0000 11111111.11111111.11111111.1111 0000 00000000.00000000.00000000.0000 1111 10000110.01001100.01010001.1110 0000 10000110.01001100.01010001.1110 1111 10000110.01001100.01010001.1110 0001 10000110.01001100.01010001.1110 1110 Universität Göttingen - Informatik II - SS 2006 8-90 8. Computernetzwerke IPv4 - Subnetze IPv4-Paketformat Subnetz-Adressen: Bits: 0 Endsystemadressen können mit Hilfe von Netzmasken weiter unterteilt werden. Eine IPv4-Adresse wird mit der negierten Subnetz-Maske bitweise logisch und verknüpft, um die Adresse des Endsystems zu erhalten. Beispiel: 134.169.9.10 Netz-Maske 255.255.0.0 134.169.246.34 4 8 16 19 31 Version HdrLng Type of service Total length Identification Flags Fragment offset 20 Time to live Protocol Header checksum octets Source address Destination address Options + padding Data (≤ 65536 octets) 134.169.34.12 134.169.34.1 Type of Service field (8 bits) 0 1 2 Precedence Subnetz-Maske 255.255.255.0 Besondere Adressen: Alle Adressen mit dem Format 127.*.*.* gehören zum lokalen System (loopback). Alle Adressen mit dem Format 10.*.*.* werden niemals weitergeleitet. Universität Göttingen - Informatik II - SS 2006 8-91 3 4 5 ToS 6 7 0 Flags field (3 bits) 0 1 2 D M - D = Don’t fragment M = More fragments Precedence (priority): High: 7 - Network control .... Low: 0 - Routine. ToS (Type of Service): 8 - Min. delay. 4 - Max. throughput. 2 - Max. reliability. 1 - Min. cost ($). 0 - Normal service. Options: Security. Source routing. Route recording. Time stamping. Universität Göttingen - Informatik II - SS 2006 8-92 8. Computernetzwerke 8. Computernetzwerke IP Next Generation: IPv6 Struktur für IPv6 Substantielles Re-Design von IP Basierend auf den erfolgreichen Eigenschaften von IPv4 Erweiterte und verbesserte Funktionalität Entwickelt zwischen 1992 und 1997 Jetzt stabil, wird in neue Produkte (Router, Betriebssysteme) eingebaut. Neue Eigenschaften Erweiterte Adressen (128-bit). Neue Adressierungsschemata. Neue flexiblere und effizientere Paketformate Auto-Konfiguration („plug-and-play“) Adressenauflösung und Gruppenmanagement jetzt Teil von ICMPv6 (ARP, IGMP wurden entfernt) Sicherheitsmechanismen direkt im Protokoll (Authentifizierung und Verschlüsselung) Dienstgüteunterstützung Universität Göttingen - Informatik II - SS 2006 8-93 8. Computernetzwerke Universität Göttingen - Informatik II - SS 2006 8-94 8. Computernetzwerke IP v6 Header Transportschicht: TCP und UDP Aufgabe der Transportschicht: Datentransport von einem Prozess auf einem Rechner zu einem (oder mehreren) anderen Prozessen auf anderen Rechnern im Internet Zwei Möglichkeiten Der grundlegende unzuverlässige Internetdienst genügt, dann verwende UDP. Er genügt nicht, dann verwende TCP. End-To-End-Signifikanz: IP-Adressen identifizieren IP-Hosts und keine Applikationen. IP besitzt daher eine Host-To-Host-Signifikanz. Ein Transportendpunkt wird durch eine IP-Adresse und eine lokale eindeutige Portnummer identifiziert. TCP und UDP besitzen End-To-End-Signifikanz. Für Standard-Dienste sind Portnummern fest definiert (well-known ports). Universität Göttingen - Informatik II - SS 2006 8-95 Universität Göttingen - Informatik II - SS 2006 8-96 8. Computernetzwerke 8. Computernetzwerke Well-known Ports für UDP Port 7 9 Protocol Echo Discard 11 Users 13 Daytime 17 Well-known Ports für TCP Quote Description Port Protocol Echoes a received datagram back to the sender 7 Echo Discards any datagram that is received 9 Discard 11 Users 13 Daytime 17 Quote 19 Chargen 20 FTP, Data 21 FTP, Control 23 TELNET 25 SMTP Active users Returns the date and the time Returns a quote of the day Returns a string of characters Description Echoes a received datagram back to the sender Discards any datagram that is received Active users Returns the date and the time Returns a quote of the day Returns a string of characters 19 Chargen 53 Nameserver 67 Bootps Server port to download bootstrap information 68 Bootpc Client port to download bootstrap information 69 TFTP Trivial File Transfer Protocol 53 DNS 111 RPC Remote Procedure Call 67 BOOTP 123 NTP Network Time Protocol 79 Finger Finger 161 SNMP Simple Network Management Protocol 80 HTTP Hypertext Transfer Protocol 162 SNMP Simple Network Management Protocol (trap) 111 RPC Remote Procedure Call Domain Name Service Universität Göttingen - Informatik II - SS 2006 8-97 8. Computernetzwerke Terminal Network Simple Mail Transfer Protocol Domain Name Server Bootstrap Protocol Universität Göttingen - Informatik II - SS 2006 8-98 Transmission Control Protocol (TCP) Eigenschaften: Unzuverlässiger, verbindungsloser Datagrammdienst. Einfache Erweiterung von IP um Portnummern (RFC 768). Zusätzliche Prüfsumme über den UDP-Protokollkopf. UDP-Protokollkopf: 8 File Transfer Protocol (control connection) 8. Computernetzwerke User Datagram Protocol (UDP) 0 File Transfer Protocol (data connection) 16 UDP Source Port 24 31 (Bitposition) UDP Destination Port UDP Message Length UDP Checksum Zuverlässiger, verbindungsorientierter Dienst über einem unzuverlässigen, verbindungslosen Netzwerkprotokoll (RFC 793). Endsysteme tauschen einen unstrukturierten Bytestrom aus (stream orientation). Duplex und Halbduplex-Betrieb und die Zustellung von out-of-bandDaten. Ende-zu-Ende-Flusskontrolle durch Fenstertechnik mit adaptiven Timeouts und automatische Anpassung an Stausituationen (slow start, multiplicative decrease). Data Universität Göttingen - Informatik II - SS 2006 8-99 Universität Göttingen - Informatik II - SS 2006 8-100 8. Computernetzwerke 8. Computernetzwerke TCP Pakete („Segmente“) Pseudoheader 0 TCP Verbindungszustandsdiagramm Source IP address Destinati on IP address Protocol (6) TCP segment length 0 IP header (20 bytes +opt.) TCP header (20 bytes +opt.) TCP data 4 10 16 Source TCP port Destinati on TCP port Sequence number Acknowledgement number Hdr.len. Fl ags Window size Checksum Urgent poi nter Opti ons (if any) 31 Data (if any) Fl ags: URG ACK PSH RST SYN FIN Universität Göttingen - Informatik II - SS 2006 8-101 Universität Göttingen - Informatik II - SS 2006 8. Computernetzwerke TCP Verbindungsaufbau Universität Göttingen - Informatik II - SS 2006 Drei-Wege-Handshake: TCP Zustandsdiagramm 8-103 8-102 8. Computernetzwerke TCP Verbindungsmanagement Drei-Wege-Handshake: Beispiel TCP server Lebenszyklus TCP client Lebenszyklus Universität Göttingen - Informatik II - SS 2006 8. Computernetzwerke 8. Computernetzwerke TCP Protokollablauf Erinnerung: Flusskontrolle TCPAA TCP UserAA User (client) (client) CLOSED Open-Active Open-Active TCPBB TCP SYN,...... SYN, LISTEN SYN+ACK,...... SYN+ACK, Open-Success Open-Success UserBB User (server) (server) CLOSED Open-Passive Open-Passive SYN-SENT ESTABLISHED Send(dt[100]) Send(dt[100]) 8-106 SYN-RCVD Open-Success Open-Success ACK,...... ACK, ESTABLISHED Deliver(dt[100]) Deliver(dt[100]) ...,dt[100] dt[100] ..., Fenstertechnik: Sender und Empfänger einigen sich auf ein Fenster innerhalb des Wertebereichs der Sequenznummern (Flusskontrollfenster, flow control window). Nach dem Verbindungsaufbau besitzt der Sender implizit Kredite für so viele Datenblöcke wie durch die Fenstergröße angegeben ist. Durch positive Quittungen wird das Fenster beim Sender verschoben. Zusätzlich kann die Größe des Fensters dynamisch angepasst werden. ACK,...... ACK, Close Close FIN-WAIT-1 Fenster = 5 FIN,...... FIN, ACK,...... ACK, FIN-WAIT-2 Terminate Terminate TIME-WAIT FIN,...... FIN, ACK,...... ACK, CLOSED Universität Göttingen - Informatik II - SS 2006 Closing Closing CLOSE-WAIT Close Close 7 0 6 Sender Terminate Terminate CLOSED Folgenummer = 1 1 5 2 4 LAST-ACK 7 Bestätigungsnummer = 5 3 Letzte empfangene Bestätigung 8-107 Universität Göttingen - Informatik II - SS 2006 Fenster = 4 0 6 1 5 2 4 Empfänger 3 Letzte quittierte Nachricht 8-108 8. Computernetzwerke 8. Computernetzwerke TCP Flusskontrolle: Fenstertechnik UserAA User Programmierschnittstelle: Die Socket-Schnittstelle TCPAA TCP TCPBB TCP ESTABLISHED Send(data[500]) Send(data[500]) Send(data[300]) Send(data[300]) Send(data[400]) Send(data[400]) ACK,ack=s1, ack=s1,win=1000 win=1000 ACK, seq=s1,data[500] data[500] seq=s1, UserBB User ESTABLISHED Receiver buffer 1000 1000 seq=s1+500,data[300] data[300] seq=s1+500, 500 500 500 500 seq=s1+800,data[200] data[200] seq=s1+800, 500 500 300 200 200 300 500 500 300 200 200 300 Waiting for credit ACK,ack=s1+500, ack=s1+500,win=500 win=500 ACK, ACK,ack=s1+800, ack=s1+800,win=200 win=200 ACK, ACK,ack=s1+1000, ack=s1+1000,win=0 win=0 ACK, Stop Retrans Timer Start Persist Timer ACK,ack=s1+1000, ack=s1+1000,win=800 win=800 ACK, Deliver(data[800]) Deliver(data[800]) 200 200 800 800 Stop Persist Timer seq=s1+1000,data[200] data[200] seq=s1+1000, ACK,ack=s1+1200, ack=s1+1200,win=600 win=600 ACK, 200200 200 200 600 600 Universität Göttingen - Informatik II - SS 2006 8-109 8. Computernetzwerke Funktion Aufgabe socket(domain, type, protocol) Kreiert einen Kommunikationsendpunkt bind(socket, address, length) Bindet eine Adresse an einen lokalen Endpunkt. connect(socket, address, length) Stellt Verbindung zu zweitem Socket her listen(socket, backlog) Zeigt an, wie viele eingehende Verbindungswünsche akzeptiert werden accept(socket, address, length) Annahme einer Verbindung write(...), send(...), sendto(...) Übertragung von Daten über einen Socket read(...), recv(...), recvfrom(...) Empfang von Daten shutdown(socket, how) (Teilweise) Beendigung einer Verbindung close(socket) Schließen eines Sockets getsockname(), getpeername() Erfragen von lokaler/entfernter Adresse Weitere Hilfsfunktionen Bytekonvertierung ins/vom Netzwerkformat Universität Göttingen - Informatik II - SS 2006 8-110 8. Computernetzwerke Verbindungsorientierte Kommunikation Verbindungslose Kommunikation socket() Beim verbindungsorientierten Protokoll wird zunächst von einer Seite ein Socket geöffnet, über den Verbindungswünsche entgegen genommen werden. Der accept()-Aufruf blockiert den Prozess, bis eine Verbindung etabliert ist und liefert einen neuen Socket für diese Verbindung. Die read() und write() Aufrufe sind blockierend. Nach der Auflösung der Verbindung kann mit einem erneuten Aufruf von accept() eine weitere Verbindung entgegen genommen werden. Universität Göttingen - Informatik II - SS 2006 bind() listen() socket() accept() connection setup connect() read() data write() write() data read() close() connection release close() 8-111 Beim verbindungslosen Protokoll werden auf beiden Seiten Sockets geöffnet und an eine Adresse gebunden. Der recvfrom()-Aufruf blockiert den Prozess, bis eine Nachricht eingetroffen ist. Die Adresse des sendenden Prozesses wird dem empfangenden Prozess mitgeteilt. Der sendto()-Aufruf sendet die Daten an die angegebene Adresse, ohne zu blockieren. Beim Schließen eines Endpunkts ist keine Interaktion erforderlich. Universität Göttingen - Informatik II - SS 2006 socket() bind() socket() bind() recvfrom() data sendto() data sendto() recvfrom() close() 8-112 8. Computernetzwerke 8. Computernetzwerke Domain Name Service DNS Namenshierarchie Unnamed root Aufgabe von DNS Übersetze Namen in Adressen und lasse Anwendungen so Netzdienste nutzen: www.cs.tu-bs.de ↔ 134.169.34.18. Top level domains com org edu 2nd level domains cisco ietf univ i-u co ac in-addr dept iustud01 bbc univ 209 de ... uk ... arpa Internet Name Service DNS: Domain Name System. Frühe 80er Jahre. Grundlegende Definition: RFC 1034 und 1035, 1987 Zahllose weitere RFCs für die Nutzung von DNS, Updates etc. Hierarchisches Namensschema Verteilte Namensdatenbank DNS-Protokoll: query-response protocol. Top: Top:Generic Genericdomains domains com com--Commercial Commercial edu edu--Educational Educational org org--Non-profit Non-profitOrganizations Organizations net Network net - NetworkProviders Providers mil mil--US USMilitary Military gov gov--US USGovernment Government int int--International InternationalOrganizations Organizations host host.dept.univ.edu. host.dept.univ.edu. Universität Göttingen - Informatik II - SS 2006 8-113 8. Computernetzwerke Eine Zweig des Namensraums, der getrennt verwaltet wird Der Namensraum ist rekursiv in kleinere Zonen aufgeteilt. 1 IP: IP: 209.12.17.1 209.12.17.1 Universität Göttingen - Informatik II - SS 2006 8-114 Iterative Abfragen Rekursive Abfragen root name servers root NS ... 2(Q) other top level zones 5(R) 4(R) root NS Q = Query R = Response Rfr = Referral 3(Q) 3(Q) 4(Rfr) sam.edu NS (local) 1(Q) Delegation der Verantwortung bob.com NS (authoritative) 6(R) sam.edu NS (local) 1(Q) bob.com NS (authoritative) 2(Rfr) 5(Q) ... 6(Rfr) vega.sam.edu cs.univ.edu ee.univ.edu name name server(s) server(s) Eine Gruppe von „root name servers“ stellen Name-Syerver-Adressen für die Top-Level-Domains zur Verfügung. Alle anderen Server kennen die Adresse der Root-Server und einiger Name Server der oberen Ebenen. Universität Göttingen - Informatik II - SS 2006 Top: Top:arpa arpadomain domain Address-to-name Address-to-nametranslation. translation. in-addr IP address. in-addr - IP address. 17 DNS-Abfragen (1/2) univ.edu name server(s) Der Administrator einer Zone verwaltet den/die Name Server (Primär-, Sekundär-) Jeder Name Server verwaltet die Namensinformation für seine Zone und kennt die Name Server der Unterzonen. 12 8. Computernetzwerke Server-Hierarchie „Zone of authority“ Top: Top:Country Countrydomains domains de de--Germany Germany frfr--France France uk uk--United UnitedKingdom Kingdom nl nl--Netherlands Netherlands...... 8-115 sun.bob.com Query: “Address of sun.bob.com” 6(R) 6(R) sun.bob.com Query: “Address of sun.bob.com” Vega sam.edu bob.comNS NS sam.eduNS NS root rootNS NS bob.com Vega 1(Q) 1(Q) 2(Q) 2(Q) 3(Q) 3(Q) 5(R) 5(R) vega.sam.edu 4(R) 4(R) Universität Göttingen - Informatik II - SS 2006 Vega sam.edu bob.comNS NS sam.eduNS NS root rootNS NS bob.com Vega 1(Q) 1(Q) 2(Rfr) 2(Rfr) 3(Q) 3(Q) 4(Rfr) 4(Rfr) 5(Q) 5(Q) 6(R) 6(R) 8-116 8. Computernetzwerke 8. Computernetzwerke Geschafft DNS-Abfragen (2/2) Compilerbau (Kapitel 7) Automaten und Sprachen (Kapitel 6) Iterativ und rekursiv können kombiniert werden Client startet rekursive Abfrage. Ein Zwischen-Server startet eine iterative Abfrage an Root, gefolgt von einer rekursiven Query an den ersten Server in der Ziel-Domain. root NS Betriebssysteme (Kapitel 5) 3(Q) bob.com NS (intermediate) Maschinenorientierte Programmierung (Kapitel 4) 5(Q) sam.edu NS (intermediate) DNS caching Name Server speichern erhaltene Antworten (für begrenzte Zeit). Eine Anfrage wird nur weitergeleitet, wenn die Antwort nicht im Cache liegt. Ziel? Q = Query R = Response Rfr = Referral 8(R) 2(Q) cs.sam.edu (local) NS 1(Q) 6(Q) 9(R) 7(R) von-Neumann-Rechner (Kapitel 3) it.bob.com NS (authoritative) Speicher Zahlen und Logik (Kapitel 2) 10(R) Kommunikation (Kapitel 8) moon.cs.tom.edu von-Neumann-Rechner mars.it.bob.com Query: “Address of mars.it.bob.com” Universität Göttingen - Informatik II - SS 2006 8-117 8. Computernetzwerke Universität Göttingen - Informatik II - SS 2006 8-118 8. Computernetzwerke Klausur Informatik II Lehrstuhl für Telematik Termin: Mittwoch, 26. Juli, 9:00-11:00Uhr Ort: ZHG 011 Dauer: 120 Minuten Identifizierung Vorlesungen Informatik II (SS) Telematik (WS) Mobilkommunikation I (SS) und II (WS) Seminare Personalausweis und Immatrikulationsbescheinigung oder Studentenausweis mit Lichtbild Netzwerksicherheit (WS) Mobilkommunikation/Mobiles Internet (SS) Advanced Topics in Computer Networking (SS) Hilfsmittel: keine (aber bitte Kugelschreiber mitbringen ☺) Klausureinsicht: Freitag, 28. Juli, 10:00-12:00Uhr, Raum MN68 Praktika Praktikum Telematik Wiederholungsklausur: BSc und MSc Arbeiten Termin: N.N. Ort: N.N. Anmeldung: N.N. (Munopag/Wopag/Anmeldeschein) siehe http://www.tmg.informatik.uni-goettingen.de/theses Hiwis auf Anfrage Universität Göttingen - Informatik II - SS 2006 8-119 Universität Göttingen - Informatik II - SS 2006 8-120 8. Computernetzwerke 8. Computernetzwerke Forschungsgebiete des Lehrstuhls für Telematik Aktuelle und zukünftige Projekte des Lehrstuhls für Telematik Demnächst: Modellierung und Testen von Kommunikationsprotokollen (Dr. Ebner, Dipl.-Inf. C. Werner) Internet-Signalisierungsprotokolle (Dr. Fu) Testen von IPv6 (Dr. Fu) Netzwerksicherheit (Dipl-Inf. Soltwisch) Mobiles Internet (MobileIPv6) etc. Communication Systems Engineering with UML2 VIDIOS - VIdeo DIstribution Over MPLS networks iMob - Emerging Internet Mobility Architectures and Paradigms TAROT - Training And Research On Testing On-demand End-to-end QoS Provisioning IPT - Internet Protocol Testing SIGNET - New, Extensible Internet Signaling Protocols MobiAuth - QoS and Authentication Issues in IP Mobility ELAN - E-Learning Academic Network Use of Formal Description Techniques for Testing Economy of the broadband wireless internet access Quality of Service und Authentifizierung in Mobil IP Voice over IP (Dipl.-Inf. C. Werner, Dipl.-Inf. Zibull) E-Learning (Dipl.-Math. Riedel, Dipl.-Inf. Zibull) Ökonomie von WLAN Internetzugängen (Dipl.-Math. Riedel) usw. Weitere Informationen: http://www.tmg.informatik.uni-goettingen.de/research Universität Göttingen - Informatik II - SS 2006 8-121 8. Computernetzwerke Bachelor/Master-Arbeiten Modellieren, Simulieren und Testen von Protokollen Entwicklung von (Internet-) Protokollen Handhabung der Komplexität durch Entwicklungswerkzeuge wie in der Industrie (z.B. bei Nokia, Ericsson, Audi, Airbus, etc.) Michael Ebner, email: [email protected] Sicherheit Protokolle für Schlüsselaustausch, Kryptografie, Authentifikation, etc. Rene Soltwisch, email: [email protected] Universität Göttingen - Informatik II - SS 2006 8-123 Universität Göttingen - Informatik II - SS 2006 8-122