Informatik II. Informatik II SS Webseiten. Verantwortliche Personen

1. Organisation und Überblick Informatik II „ Vorlesung: 4 Semesterwochenstunden … … Informatik II „ SS 2005 Übung zur Vorlesung: 2 Semesterwoche...
3 downloads 0 Views 4MB Size
1. Organisation und Überblick

Informatik II „

Vorlesung: 4 Semesterwochenstunden … …

Informatik II „

SS 2005

Ü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 Dipl.-Inf. René Soltwisch Lehrstuhl für Telematik Institut für Informatik Universität Göttingen - Informatik II - SS 2005

1. Organisation und Überblick

1. Organisation und Überblick

Verantwortliche Personen „

Webseiten

Dr. Michael Ebner (Vorlesung)

„

Vorlesungsseite: http://user.informatik.uni-goettingen.de/~info2/SS2005/

„

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

Email: [email protected] Telefon: (05 51) 39-1 44 09 „

Dipl.-Inf. René Soltwisch Email: [email protected] Telefon: (05 51) 39-1 44 13

„

Dipl.-Inform. Andre Siebeck (Übung/Tutorien) Email: [email protected] Telefon: (05 51) 39-1 35 80

„

1.2

Gemeinsame email Adressen: … … …

[email protected]: Ebner, Soltwisch, Siebeck v_info2_1@, ..., v_info2_7@: Jeweiliger Tutor v_info2_all@: Dozenten und Tutoren

Universität Göttingen - Informatik II - SS 2005

1.3

Universität Göttingen - Informatik II - SS 2005

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 …

„

Erste Ausgabe am 12. April

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 18. April Die Einteilung wird am Freitag, den 15. April bekannt gegeben

Universität Göttingen - Informatik II - SS 2005

1.5

Universität Göttingen - Informatik II - SS 2005

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: Montag, 25. Juli, 9:00 - 11:00Uhr Ort: ZHG 011 Kreditpunkte: 9 ECTS

Anmeldung …

verbessern bzw. zu wiederholen.

Universität Göttingen - Informatik II - SS 2005

1.6

Für Nebenfächler werden wahlweise benotete und unbenotete Scheine ausgestellt

Universität Göttingen - Informatik II - SS 2005

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 2005

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 2005

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 2005

Informationsdarstellung Zahlensysteme Rechnerarithmetik Aussagenlogik und logische Gatter Prädikatenlogik

1.11

Assemblerprogrammierung

Universität Göttingen - Informatik II - SS 2005

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

„

…

1.13

…

„

„

…

…

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 2005

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

…

Verberge unnötige Implementierungsdetails Hilft zur Beherrschung realer, komplexer Systeme

Universität Göttingen - Informatik II - SS 2005

1. Organisation und Überblick

„

Informatik II

Grundidee: Ebenen der Abstraktion …

Universität Göttingen - Informatik II - SS 2005

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 2005

1.16

2. Zahlen und Logik

Überblick Zahlen Informationsdarstellung Zahlensysteme Rechnerarithmetik

Informatik II

Logik

SS 2005

Aussagenlogik und logische Gatter Prädikatenlogik

Kapitel 2: Zahlen und Logik Teil 1: Zahlen Dr. Michael Ebner Dipl.-Inf. René Soltwisch Lehrstuhl für Telematik Institut für Informatik

Universität Göttingen - Informatik II - SS 2005

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 2005

Interpretation

Informationsdarstellung Universität Göttingen - Informatik II - SS 2005

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

Informationsdarstellung Universität Göttingen - Informatik II - SS 2005

2.1-5

2. Zahlen und Logik

Universität Göttingen - Informatik II - SS 2005

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 2005

2.1-7

Informationsdarstellung Universität Göttingen - Informatik II - SS 2005

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 2005

2.1-9

2. Zahlen und Logik

Informationsdarstellung Universität Göttingen - Informatik II - SS 2005

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 2005

2.1-11

Informationsdarstellung Universität Göttingen - Informatik II - SS 2005

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 Universität Göttingen - Informatik II - SS 2005

2.1-13

2. Zahlen und Logik

Informationsdarstellung Universität Göttingen - Informatik II - SS 2005

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 2005

Wert 0

Informationsdarstellung Universität Göttingen - Informatik II - SS 2005

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

Informationsdarstellung Universität Göttingen - Informatik II - SS 2005

2.1-17

2. Zahlen und Logik

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 + -

2.1-18

2. Zahlen und Logik

Codierung - Codes (2/2)

Dezimalzahl

Universität Göttingen - Informatik II - SS 2005

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 2005

2.1-19

Informationsdarstellung Universität Göttingen - Informatik II - SS 2005

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 2005

2.1-21

2. Zahlen und Logik

↑ ←

l m n o

ACK UC ESC DEL Informationsdarstellung

Universität Göttingen - Informatik II - SS 2005

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 2005

k \

2.1-23

Informationsdarstellung Universität Göttingen - Informatik II - SS 2005

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 2005

2.1-25

2. Zahlen und Logik

Informationsdarstellung Universität Göttingen - Informatik II - SS 2005

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 2005

2.1-26

2.1-27

Informationsdarstellung Universität Göttingen - Informatik II - SS 2005

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 2005

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 einen Wert im Zahlensystem mit der Basis beschreibt. z.B. 12310 123 im Dezimalsystem, 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 2005

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:

Universität Göttingen - Informatik II - SS 2005

2.1-31

Zahlensysteme Universität Göttingen - Informatik II - SS 2005

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 2005

2.1-33

2. Zahlen und Logik

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

+

=

332810

+

+

=

351110

=

D16 * 16102

17610

710 710

oder entsprechend dem Horner Schema =

Dividierende Umrechnung im Quellsystem

(Quellsystem: Basis 10, Zielsystem: Basis 7)

(Einfaches ‘Ausmultiplizieren’)

DB716

2.1-34

2. Zahlen und Logik

Beispiel für manuelle Umrechnung (1/3)

DB716

Zahlensysteme Universität Göttingen - Informatik II - SS 2005

((D16 * 1610) + B16) * 1610 + 716

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

...

...

...

...

... ...

...

...

...

...

...

...

... 0

=

an

=

((1310 * 1610) + 1110) * 1610 + 710

...

=

(20810 + 1110) * 1610 + 710

...

=

350410 + 710

=

351110

Universität Göttingen - Informatik II - SS 2005

(a4a3a2a1a0)7 = 131447 Zahlensysteme 2.1-35

Zahlensysteme Universität Göttingen - Informatik II - SS 2005

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 2005

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 2005

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 2005

2.1-39

Zahlensysteme Universität Göttingen - Informatik II - SS 2005

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 * Bi

Vor dem Komma anfallende Ziffern entsprechen dem Rest bei der Division im Quellsystem (vgl. Folie 2.1-36).

(B, ai ∈ N0, B > 1, ai 128

-38

negatives Vorzeichen Rechnerarithmetik Universität Göttingen - Informatik II - SS 2005

2.1-51

Rechnerarithmetik Universität Göttingen - Informatik II - SS 2005

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 2005

Universität Göttingen - Informatik II - SS 2005

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 2005

+x

x+y

Rechnerarithmetik Universität Göttingen - Informatik II - SS 2005

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 2005

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 2005

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):

a=

i=0

((B – 1) – ai) * Bi

i=0

im Dualsystem: Komplementbildung ≅ „Bits stellenweise invertieren“

i=0 N-1 i=0

N-1

= ∑ (1 - ai ) * 2i 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 2005

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 2005

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

1 ⇒ –

Darstellbarer Zahlenbereich –(½ * BN – 1) ...

6

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 Und

0111

-5 10 1010

0 ⇒ +

0 0 0 ... 0

7

-6 9 1001

+-

0

1

0100

0011

0010

0001

0000 1111

Rechnerarithmetik Universität Göttingen - Informatik II - SS 2005

2.1-61

2. Zahlen und Logik

Rechnerarithmetik Universität Göttingen - Informatik II - SS 2005

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? a+b= a+( C – b)

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 2005

2.1-63

Rechnerarithmetik Universität Göttingen - Informatik II - SS 2005

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

Komplementbildung

III. Dualsystem (N = 5) Dezimal a+b–1 14 01110 – 0 + 11111 1 01101 1 14 01110

a+b–1 065 + 956 1 021

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 2005

2.1-65

2. Zahlen und Logik

Stellenkomplement: Reduktion mod C (6/7)

2. Fall: a, b > 0 ; a ≤ b ⇒ d ≤ 0

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: 5 – 7 – 2 Universität Göttingen - Informatik II - SS 2005

2.1-66

2. Zahlen und Logik

Stellenkomplement: Reduktion mod C (5/7)

dezimal

Rechnerarithmetik Universität Göttingen - Informatik II - SS 2005

dual

– 00101 00111

Gewünschte Ergebnis

a+b



+ 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 2005

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 ) + 1 ai * Bi = (BN-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

B5



Aufaddieren von 1:

+

1

11011

Rechnerarithmetik Universität Göttingen - Informatik II - SS 2005

2.1-69

2. Zahlen und Logik

Rechnerarithmetik Universität Göttingen - Informatik II - SS 2005

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 2005

7

-6 10 1010

0 ⇒ +

Darstellbarer Zahlenbereich ... –(½ * BN )

8

0 0000

1

0100

0011

0010

0001

Rechnerarithmetik Universität Göttingen - Informatik II - SS 2005

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 –

065 + 957 1 022 ⇓ 022

Dual 5 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 2005

2.1-73

2. Zahlen und Logik

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

2.1-74

2. Zahlen und Logik

Stellen- und Basiskomplement (1/2)

|a – b| ≤ |a|

Rechnerarithmetik Universität Göttingen - Informatik II - SS 2005

a, b < 0

Ein Fehler entsteht dann, wenn gilt |a| + |b| > BN-1 (Basiskomplement) ≥ BN-1 (Stellenkomplement) 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 2005

2.1-75

Rechnerarithmetik Universität Göttingen - Informatik II - SS 2005

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 2005

2.1-77

2. Zahlen und Logik

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:



2.1-78

2. Zahlen und Logik

Multiplikation und Division (2/2)

1 1 0 –1 0 0 1 0 – 1 1 –

Rechnerarithmetik Universität Göttingen - Informatik II - SS 2005

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 2005

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 2005

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

0101

1001

1100

0000 0110

→ Übertrag →+6

0101

1001

1100

0110

→ ungültiger BCD Code

0101

→ 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

→+6

1

0110

1010

0010

0110

0110

0110

0000

0010

0110

⇓ 0

⇓ 2

⇓ 6

⇓ 6

→ ungültiger BCD Code →+6

1

Rechnerarithmetik Universität Göttingen - Informatik II - SS 2005

2.1-81

2. Zahlen und Logik

Rechnerarithmetik Universität Göttingen - Informatik II - SS 2005

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 int main() { double a = 0.5; double b = 0.01; std::cout , < ,….) 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 2005

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 2005

4-35

Universität Göttingen - Informatik II - SS 2005

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 2005

4-37

4. Assembler

Universität Göttingen - Informatik II - SS 2005

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

#

li

$t0, 10

# Initialize loop counter to 10

$a0 = 0

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 2005

4-39

Universität Göttingen - Informatik II - SS 2005

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 2005

Wir sind nun in der Lage, die ganzen temporären Register zu sichern.

4-41

4. Assembler

Universität Göttingen - Informatik II - SS 2005

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 2005

#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 2005

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+1] restore $2 from stack restore $15 from stack restore $16 from stack restore stackpointer return

Universität Göttingen - Informatik II - SS 2005

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 2005

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 2005

4-47

Universität Göttingen - Informatik II - SS 2005

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 2005

4-49

4. Assembler

Universität Göttingen - Informatik II - SS 2005

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 2005

$t0

4-51

Universität Göttingen - Informatik II - SS 2005

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 LOAD X, R1 ADD 1, R1 BRANCH L ADD R1, R2 SUB R3, R2 L: STORE R1, Y

verzögerter Sprung 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 2005

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 2005

4-55

z.B. Intel Pentium-Familie

Neue Technologien besonders RISC geeignet (z.B. Galliumarsenid)

Universität Göttingen - Informatik II - SS 2005

4-54

5. Betriebssysteme

Überblick „ „ „

Informatik II

„ „

SS 2005

Einführung Prozessverwaltung Speicherverwaltung Ein- und Ausgabe Dateisysteme

Kapitel 5: Betriebssysteme

Dr. Michael Ebner Dipl.-Inf. René Soltwisch Lehrstuhl für Telematik Institut für Informatik Universität Göttingen - Informatik II - SS 2005

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 2005

5-3

Einführung Universität Göttingen - Informatik II - SS 2005

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 2005

5-5

Einführung Universität Göttingen - Informatik II - SS 2005

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 2005

5-6

5-7

Einführung Universität Göttingen - Informatik II - SS 2005

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 2005

5-9

5. Betriebssysteme

Bank- Flugsystem Reservierung Editor

5-10

5. Betriebssysteme

Schichten eines Rechnersystems

Compiler

Einführung Universität Göttingen - Informatik II - SS 2005

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 2005

5-11

Einführung Universität Göttingen - Informatik II - SS 2005

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 2005

5-13

Einführung Universität Göttingen - Informatik II - SS 2005

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 2005

5-15

Universität Göttingen - Informatik II - SS 2005

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 2005

5-17

Einführung Universität Göttingen - Informatik II - SS 2005

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)

„

Software 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) asynchron

Einführung Universität Göttingen - Informatik II - SS 2005

5-18

5-19

Einführung Universität Göttingen - Informatik II - SS 2005

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 2005

5-21

5. Betriebssysteme

5-22

5. Betriebssysteme

Architekturen von Betriebssystemen (2/2) „

Einführung Universität Göttingen - Informatik II - SS 2005

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 2005

5-23

Einführung Universität Göttingen - Informatik II - SS 2005

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 2005

5-25

Einführung Universität Göttingen - Informatik II - SS 2005

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.

„

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

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

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

… … …

„

Die Prozessverwaltung wird daher genauer vorgestellt

Es werden weiterhin Konzepte der folgenden, grundlegenden Teilgebiete kurz betrachtet 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 2005

5-26

5-27

Einführung Universität Göttingen - Informatik II - SS 2005

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 2005

5-29

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

5-31

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

5-33

5. Betriebssysteme

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

5-35

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

5-37

5. Betriebssysteme

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

5. Betriebssysteme

Threads besitzen eigenen Stack

Thread Beispiel

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

5-38

5-39

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

5-40

5. Betriebssysteme

5. Betriebssysteme

Charakterisierung von Threads „

„

Pro Prozess … … … … … … …

„

Vorteile/Nachteile von Threads

…

Adressraum Globale Variablen Offene Dateien Kinderprozesse Unerledigte Alarme Signal und Signalkontroller Informationen für Systemstatistiken

… …

„ „

Pro Thread … … … …

Kontextwechsel ist effizienter

„

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 2005

5-41

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

5-42

5-43

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

5-45

Universität Göttingen - Informatik II - SS 2005

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 2005

5-47

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

Prozessverwaltung

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

Universität Göttingen - Informatik II - SS 2005

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 2005

5-51

Universität Göttingen - Informatik II - SS 2005

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 2005

5-53

Universität Göttingen - Informatik II - SS 2005

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 2005

5-55

Universität Göttingen - Informatik II - SS 2005

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 2005

5-57

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

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 2005

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 2005

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;

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

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

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.

Universität Göttingen - Informatik II - SS 2005

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 2005

5-65

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

5-66

5-67

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

5-68

5. Betriebssysteme

5. Betriebssysteme

Verklemmungen/Deadlocks „

Deadlock – Illustration/Beispiel

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?

„

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.

…

(a) Ein potenzieller deadlock. (b) Ein tatsächlicher deadlock.

Diese Situation wird als Deadlock bezeichnet 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 2005

5-69

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

5-70

5-71

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

5-73

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

5-75

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

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 2005

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 2005

5-79

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

5-81

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

5-83

Prozessverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

5-85

Universität Göttingen - Informatik II - SS 2005

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 2005

5-87

Speicherverwaltung Universität Göttingen - Informatik II - SS 2005

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 Universität Göttingen - Informatik II - SS 2005

5-89

Speicherverwaltung Universität Göttingen - Informatik II - SS 2005

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 … …

„

Zwei wichtige Lösungen: … …

logische Adresse

346

Laufen meist viele Prozesse Haben die Prozesse oft mehr Speicherbedarf als physikalischer Speicher vorhanden ist Swapping: Verschieben von Prozessen zwischen Hauptspeicher und Platte Virtual Memory: Prozesse sind nur zum Teil im Hauptspeicher

Hauptspeicher

relocation register Prozessor

5-90

Speicheradresse

14000 MMU

14346

(memory management unit)

Speicherverwaltung Universität Göttingen - Informatik II - SS 2005

5-91

Speicherverwaltung Universität Göttingen - Informatik II - SS 2005

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 swap in programmHauptspeichers einigen Prozessen bereich das Betriebsmittel Hauptspeicher Hintergrundspeicher zwangsweise zu entziehen. Hauptspeicher

Speicherverwaltung Universität Göttingen - Informatik II - SS 2005

5-93

Universität Göttingen - Informatik II - SS 2005

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 rungsstrategie 600K 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 2005

5-95

2100K

600K verschoben

2100K

400K verschoben

2100K

P3

200K verschoben

Speicherverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

5-97

Speicherverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

5-99

Universität Göttingen - Informatik II - SS 2005

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 2005

5-101

5. Betriebssysteme

„ „

„

„

„

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 2005

5-102

5. Betriebssysteme

Eigenschaften des Paging „

Speicherverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

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 2005

5-105

Universität Göttingen - Informatik II - SS 2005

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 2005

5-106

5-107

Speicherverwaltung Universität Göttingen - Informatik II - SS 2005

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??).

„

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:

Least Recently Used (LRU) …

Es wird die Seite ersetzt, auf die am längsten nicht mehr zugegriffen wurde.

„

Least Frequently Used (LFU)

„

First In First Out (FIFO)

„

Second Chance (SC)

… … …

;

Beladys Anomalie

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 2005

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)

5-110

5. Betriebssysteme

Speicherverwaltung

„

4 3 2 1

Speicherverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

5-111

Universität Göttingen - Informatik II - SS 2005

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 2005

5-113

5. Betriebssysteme

Speicherverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

5-114

5-115

Speicherverwaltung Universität Göttingen - Informatik II - SS 2005

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 2005

5-117

Universität Göttingen - Informatik II - SS 2005

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 2005

5-118

5-119

Ein- und Ausgabe Universität Göttingen - Informatik II - SS 2005

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 2005

5-121

Ein- und Ausgabe Universität Göttingen - Informatik II - SS 2005

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 2005

5-123

Ein- und Ausgabe Universität Göttingen - Informatik II - SS 2005

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 2005

5-125

Ein- und Ausgabe Universität Göttingen - Informatik II - SS 2005

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 2005

5-126

5-127

Ein- und Ausgabe Universität Göttingen - Informatik II - SS 2005

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 2005

5-129

Ein- und Ausgabe Universität Göttingen - Informatik II - SS 2005

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 2005

5-131

Universität Göttingen - Informatik II - SS 2005

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 2005

5-133

Dateisysteme Universität Göttingen - Informatik II - SS 2005

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:

…

Lesen/Schreiben von Daten aus/in eine geöffnete Datei:

int close(int fd) 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:

…

Verkürzen einer geöffneten Datei:

off_t lseek(int fd, off_t offset, int whence) 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 2005

5-134

5-135

Dateisysteme Universität Göttingen - Informatik II - SS 2005

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 2005

5-137

5. Betriebssysteme

„

5-138

5. Betriebssysteme

Ausblick

iNodes in UNIX V7 „

Dateisysteme Universität Göttingen - Informatik II - SS 2005

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 2005

5-139

Universität Göttingen - Informatik II - SS 2005

5-140

6. Automaten und Sprachen

Überblick Wiederholung von Informatik I Begriffe/Einordnung

Regulär (Typ 3)

Informatik II

Reguläre Sprachen und Ausdrücke Endlicher Automat

SS 2005

Kontextfrei (Typ 2) Kontextfreie Sprachen und Grammatiken Kellerautomat

Kapitel 6: Automaten und Sprachen

Dr. Michael Ebner Dipl.-Inf. René Soltwisch Lehrstuhl für Telematik Institut für Informatik Universität Göttingen - Informatik II - SS 2005

6. Automaten und Sprachen

6-2

6. Automaten und Sprachen

Wiederholung von Informatik I

Überblick

Bedeutung und Zusammenhang

Wiederholung von Informatik I

Wort und Alphabet Sprache Ausdruck Grammatik Automat

Begriffe/Einordnung

Regulär (Typ 3) Reguläre Sprachen und Ausdrücke Endlicher Automat

Kontextfrei (Typ 2)

Chomsky-Hierarchie Syntax Semantik Pragmatik Erweiterte Backus-Naur-Form (EBNF)

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 2005

6-3

Universität Göttingen - Informatik II - SS 2005

6-4

6. Automaten und Sprachen

6. Automaten und Sprachen

Reguläre Ausdrücke (1/2)

Reguläre Ausdrücke (2/2)

Werden mit folgenden Ausdrücken rekursiv ausgedrückt:

Zeichenfolgen

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*.

r=‘c1c2c3...cn‘ = c1.c2.c3.....cn

Zeichenbereiche r=[c1-cn] = c1|c2|c3|...|cn Kleenesche Hülle + r+ = r.r*

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 2005

6-5

6. Automaten und Sprachen

Universität Göttingen - Informatik II - SS 2005

6. Automaten und Sprachen

Abkürzungen von regulären Ausdrücken

Beispiele für Reguläre Ausdrücke (1/2)

Zeichenfolgen r=‘c1c2c3...cn‘ ist äquivalent zu r=c1.c2.c3.....cn

Reguläre Ausdrücke

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.

Zeichenbereiche 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+ 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 2005

6-6

6-7

Universität Göttingen - Informatik II - SS 2005

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\.)

[0-9]+[A-Z]? [A-Z][a-z]*( [A-Z][a-z]*)* (Street|St\.|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 2005

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? \+[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-9

6. Automaten und Sprachen

6-10

6. Automaten und Sprachen

Überblick

Definition: Endlicher Automat

Wiederholung von Informatik I

Formal, ein endlicher Automat M ist ein Quintupel M=(Q,Σ,q0,F,δ), wobei

Begriffe/Einordnung

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

Regulär (Typ 3) Reguläre Sprachen und Ausdrücke Endlicher Automat

Kontextfrei (Typ 2) Kontextfreie Sprachen und Grammatiken Kellerautomat

Universität Göttingen - Informatik II - SS 2005

Universität Göttingen - Informatik II - SS 2005

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

6-11

Universität Göttingen - Informatik II - SS 2005

6-12

6. Automaten und Sprachen

6. Automaten und Sprachen

Zwei Arten von endlichen Automaten: Deterministisch und Nichtdeterministisch

Beispiel: Deterministischer Endlicher Automate

Deterministische endliche Automaten (DEA/DFA) δ: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

Nichtdeterministische endliche Automaten (NEA/NFA) Übergänge sind nichtdeterministisch und die Übergangsfunktion ist formal definiert als δ:Q x Σ -> φQ (Potenzmenge von Q)

6-13

6. Automaten und Sprachen

q2

a,b

a

q4

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 2005

Tabelle

Beispiel DFA Q={q1,q2,q3,q4,q5} Σ={a,b} q0=q1 F={q4} δ=

Übergänge sind deterministisch und die Übergangsfunktion ist formal definiert als

b

a,b

q5

a

q3

b Universität Göttingen - Informatik II - SS 2005

6-14

6. Automaten und Sprachen

Beispiel: Nichtdeterministischer Endlicher Automaten 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

{((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 2005

a {q5} {q5} {q4} {q5} {q5}

є {q2,q3} {q5} {q5} {q5} {q5}

Q={q1,q2,q3,q4,q5} Σ={a,b} q=q1 F={q4} δ=

a,b

Welche Sprache akzeptiert M?

q5

(ab*a)|ba

a b

6-15

Universität Göttingen - Informatik II - SS 2005

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 Auch wenn es so aussieht als ob Nichtdeterminismus einem endlichen Automaten mehr Ausdruckskraft verleiht, sind NFAs und DFAs formal äquivalent

b a

q2

q1 a,b

Eingabe:

a,b

a

q4 q3

a,b

Jeder NFA kann in einen DFA umgewandelt werden und ungekehrt

q5

Warum machen wir dann aber die Unterscheidung?

a

Es ist einfacher reguläre Ausdrücke in NFAs umzuwandeln Es ist einfacher DFAs zu simulieren (bzw. zu implementieren)

b

abba a Nicht akzeptiert!

Welche Sprache akzeptiert M? (ab*a)|ba Gleiche wie zuvor beim DFA… Universität Göttingen - Informatik II - SS 2005

6-17

6. Automaten und Sprachen

Eine Nebenbemerkung zu endlichen Automaten

Neu

Endliche Automaten sind auch für andere Dinge als lexikalische Analyse nützlich

Ausgabefunktion Ausgabealphabet

Die meisten Systeme, welche Transaktionen zwischen einer endlichen Anzahl von Zuständen vornehmen, können mit endlichen Automaten modelliert werden Beispiele

Moore-Automaten Die Ausgabefunktion ist formal definiert als φ:Q -> ΣA

Zu einem Zustand wird ein Zeichen ausgegeben

Beschreibung, Simulation, Überprüfung und Implementierung von Protokollen (Mealy-Automaten) Bauen von schnellen, zustandsbasierten Schaltungen (Moore-Automaten),siehe Kapitel 2

Mealy-Automaten Die Ausgabefunktion ist formal definiert als ΣA

Zu einem Ausgangszustand und einer Eingabe wird ein Zeichen ausgegeben Universität Göttingen - Informatik II - SS 2005

6-18

6. Automaten und Sprachen

Automaten mit Ausgabefunktionen

φ:Q x ΣE

Universität Göttingen - Informatik II - SS 2005

6-19

Universität Göttingen - Informatik II - SS 2005

MESI cache coherence protocol (Courtesy: John Morris, University of Western Australia)

Vending machine automata 25¢ 25 ¢



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

c

Charakter: c

є Alternative: r1|r2

є r1

Verkettung: r1.r2 є Kleenesche Hülle: r*

r1 r2 є

r1:

r1=a.b r2=c.d r3=r1|r2 r=r3*

є

Leere Zeichenkette: є

a

r=(‘ab’|’cd’)* Faktor:

NFA

є є

c r2:

r

є

r2

є

є є

Universität Göttingen - Informatik II - SS 2005

є

r:

6-21

є є

a

є

b

c

є

d

a

є

b

c

є

d

a

є

b

c

є

d

є є є

6. Automaten und Sprachen

NFAs nach DFAs (1/2)

NFAs nach DFAs (2/2)

є

є

Universität Göttingen - Informatik II - SS 2005

6. Automaten und Sprachen

6-22

Schritt 1: Der Startzustand

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

b

NFA

q2

є

Gegeben NFA M=(Q,Σ,q,F,δ) und DFA MD=(QD,Σ,qD,FD,δD) 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))

a,b

b

q4 є

q3

qD= є-FZ({q1}) = {q1,q2,q3}

a

q1

a,b

Schritt 2: Zustand {q1,q2,q3} δD({q1,q2,q3},a) =

q5

є-FZ(δ(q1,a)∪δ(q2,a)∪δ(q3,a)) = є-FZ({q5}∪{q5}∪ {q4}) = {q4,q5}

a b a,b

DFA a

{q4,q5}

a,b

{q5}

a

{q1,q2,q3}

є-FZ(δ(q1,b)∪δ(q2,b)∪δ(q3,b)) = є-FZ({q2,q4}∪{q2,q4}∪ {q5}) = {q2,q4,q5}

… {q2,q4,q5}

6-23

δD({q1,q2,q3},b) =

Schritt 3: Zustand {q4,q5}

b

Universität Göttingen - Informatik II - SS 2005

d

r3:

є є

b

b

Universität Göttingen - Informatik II - SS 2005

Schritt 4: Zustand {q2,q4,q5} … 6-24

6. Automaten und Sprachen

6. Automaten und Sprachen

NFA nach DFA Zusammenfassung

Einige Bemerkungen zu DFAs

Regulärer Ausdruck 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 Zustand in der Menge der {q1,q2,q3, erreichbaren Zustände ein q7,q12} Endzustand ist, dann ist der c ganze DFA Zustand ein Endzustand

Universität Göttingen - Informatik II - SS 2005

Ein DFA M gebaut unter Verwendung der Konstruktion von Untermengen kann nicht minimal sein

NFA

r=(‘ab’|’cd’)*

a c

q4 q8

є є

q5 q9

b d

q6 q10

є q11

є

є

{q8,q9}

Minimale DFAs sind besser geeignet für Implementierungszwecke

Die meisten automatischen Werkzeuge zum Konvertieren von NFAs nach DFAs führen einen Optimierungsprozess aus um die Anzahl der DFA Zustände zu reduzieren

b {q2,q3,q6, q7,q11,q12} c

Das Finden eines minimalen DFAs ist ein sehr hartes Problem (auch NP-vollständig bezeichnet), weshalb Optimierer keinen minimalen DFA garantieren können Praktisch gesehen ist das Ok, obwohl weniger Zustände immer besser ist ☺

a d {q2,q3,q7, q10,q11,q12} c 6-25

6. Automaten und Sprachen

Universität Göttingen - Informatik II - SS 2005

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 2005

q12

Weniger Zustände benötigen weniger Speicher und führen generell zu schnelleren Simulationen

a {q4,q5}

Mit anderen Worten, es könnte einen Automaten M‘ geben wobei L(M)=L(M‘) und M‘ hat weniger Zustände als M

Das Pumping Lemma ist eine Methode, um heraus zu finden, ob eine Sprache nicht regulär.

6-27

Universität Göttingen - Informatik II - SS 2005

6-28

6. Automaten und Sprachen

6. Automaten und Sprachen

Pumping Lemma für reguläre Sprachen (2)

Beweis

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:

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 2005

6-29

6. Automaten und Sprachen

Universität Göttingen - Informatik II - SS 2005

6-30

6. Automaten und Sprachen

Beispiele

Pumping Lemma für reguläre Sprachen 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.

Sind diese Sprachen (nicht) regulär? w = anbn w= ab|c

Die Anwendung des Pumping Lemmas ist ein kreativer Vorgang, da es kein „mechanisches“ Vorgehen für den Einsatz gibt.

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 2005

6-31

Universität Göttingen - Informatik II - SS 2005

6-32

6. Automaten und Sprachen

6. Automaten und Sprachen

Theoretische Ergebnisse (1/3)

Beispiel: Palindrome

Definitionen 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 2005

6-33

6. Automaten und Sprachen

Universität Göttingen - Informatik II - SS 2005

6-34

6. Automaten und Sprachen

Theoretische Ergebnisse (2/3)

Theoretische Ergebnisse (3/3) Definitionen

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

Beschreiben LR und LN die gleichen Mengen? 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: Introduction to Automata Theory, Languages, and Computation by Hopcroft and Ullman Introduction to the Theory of Computation by Michael Sipser

Universität Göttingen - Informatik II - SS 2005

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 }

6-35

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 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? 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 2005

6-36

6. Automaten und Sprachen

6. Automaten und Sprachen

Reguläre Sprachen: Zusammenfassung

Rückblick

Eine Sprache L(X) ist Regulär wenn:

Reguläre Sprachen Reguläre Ausdrücke Deterministische und nichtdeterministische endliche Automaten

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

Wichtige Algorithmen 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)

Gegeben ist ein beliebiger regulärer Ausdruck R und ein NFA MN, mit L(R)=L(MN)

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 2005

6-37

6. Automaten und Sprachen

Pumping Lemma für reguläre Sprachen

Universität Göttingen - Informatik II - SS 2005

6-38

6. Automaten und Sprachen

Überblick

Kontextfreie Grammatiken (1/5) Eine kontextfreie Grammatik (KFG/CFG) ist eine rekursive Definition einer Sprache mit:

Wiederholung von Informatik I Begriffe/Einordnung

Einem Alphabet Σ von Symbolen

Regulär (Typ 3) Eine Menge von Produktionen (oder Regeln) der Form

Reguläre Sprachen und Ausdrücke Endlicher Automat

symbol -> symbol symbol … symbol

Kontextfrei (Typ 2)

Ein Startsymbol

Kontextfreie Sprachen und Grammatiken Kellerautomat

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 2005

6-39

Universität Göttingen - Informatik II - SS 2005

6-40

6. Automaten und Sprachen

6. Automaten und Sprachen

Kontextfreie Grammatiken (2/5)

Kontextfreie Grammatiken (3/5)

Kurzschreibweisen:

Wenn eine KFG G zum Parsen von Programmiersprachen verwendet wird, dann gilt

Alternativen

s->a1..an|b1..bn|…|z1..zn = s->a1..an s->b1..bn … s->z1..zn

L(G) ist die Menge von gültigen Quellprogrammen, und die terminalen Symbole sind die Tokens, welche vom Scanner zurückgeliefert werden Klammergrammatik

Beispiel: expr -> LPAREN sum RPAREN expr -> INT sum -> expr PLUS expr

Kleenesche * Hülle

s->s1*= s->s1’ s1’->s1 s1’ s1’->є

Universität Göttingen - Informatik II - SS 2005

Terminale: {PLUS,LPAREN,RPAREN,INT} Nichtterminale: {sum,expr} Startsymbol: {expr} Σ = Terminale ∪ Nichtterminale 6-41

6. Automaten und Sprachen

6-42

6. Automaten und Sprachen

Kontextfreie Grammatiken (4/5)

Kontextfreie Grammatiken (5/5)

Eine KFG G erzeugt Zeichenketten durch:

Normalformen

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 2005

Universität Göttingen - Informatik II - SS 2005

6-43

Chomsky-Normalform Nur Regeln der Art: A ⇒ BC und A ⇒ a (A,B,C Variablen, a Terminal)

Greibach-Normalform 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 2005

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 2005

6-45

6. Automaten und Sprachen

Grammatik Nichtterminale: expr, sum; Terminale: INT expr -> ( sum ) expr -> INT sum -> expr + expr

Mögliche Ableitungen: expr ⇒ ( sum ) ⇒ ( expr + expr ) ⇒ ( INT + expr ) ⇒ (INT + ( sum ) ) ⇒ (INT + ( expr + expr ) ) ⇒ (INT + ( INT + expr ) ) ⇒ (INT + (INT + INT ) )

Universität Göttingen - Informatik II - SS 2005

6. Automaten und Sprachen

Ableitungen (2/4)

Ableitungen (3/4)

Rechtsseitige Ableitungen (rightmost derivations)

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

Ersetze jeweils das äußerste rechte Nichtterminalsymbol in jedem Ableitungsschritt Wird manchmal auch die kanonische Ableitung genannt

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 γ

Linksseitige Ableitungen (leftmost derivations) Ersetze jeweils das äußerste linke Nichtterminalsymbol in jedem Ableitungsschritt Siehe vorherige Folie

Kurzschreibweisen:

Andere Ableitungsreihenfolgen sind möglich Die meisten Parser suchen entweder nach einer rechtsseitigen oder linksseitigen Ableitung

α ⇒* β 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

L(G) = { w in Σ* | S

Universität Göttingen - Informatik II - SS 2005

6-46

6-47

G⇒

*

w },

Universität Göttingen - Informatik II - SS 2005

(w = Wort, Σ = Alphabet Terminale, S = Startsymbol)

6-48

6. Automaten und Sprachen

6. Automaten und Sprachen

Ableitungen (4/4)

Beispiel Ableitungen Grammatik:

Linksseitige Ableitungen (leftmost derivations):

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:

(INT + (INT + INT))

Rechtsseitige Ableitung:

expr ⇒ ( sum ) ⇒ ( expr + expr ) ⇒ ( INT + expr ) ⇒ (INT + ( sum ) ) ⇒ (INT + ( expr + expr ) ) ⇒ (INT + ( INT + expr ) ) ⇒ (INT + (INT + INT ) )

Rechtsseitige Ableitungen (rightmost derivations): 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 2005

Eingabe:

6-49

expr ⇒ ( sum ) ⇒ ( expr + expr ) ⇒ ( expr + ( sum ) ) ⇒ (expr + ( expr + expr) ) ⇒ (expr + ( expr + INT ) ) ⇒ (expr + ( INT + INT ) ) ⇒ (INT + (INT + INT ) )

Universität Göttingen - Informatik II - SS 2005

6. Automaten und Sprachen

6-50

6. Automaten und Sprachen

Ableitungen und Ableitungsbäume (1/2)

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 2005

6-51

Universität Göttingen - Informatik II - SS 2005

(

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: Grammatik:

Berühmteres Beispiel – “dangling else” Programmfragment: if a then if b then s1 else s2 Kann interpretiert werden als: 1) if a then { if b then s1 else s2} 2) if a then { if b then s1 } else s2

expression -> identifier | number | - expression | ( expression ) | expression operator expression operator -> + | - | * | /

Mehrdeutigkeit kann manchmal durch die Auswahl eines akzeptierenden Ableitungsbaumes aus mehreren gehandhabt werden

Eingabe: slope * x + intercept

Zum Beispiel, obige Interpretation #1 wird von den meisten Parsern für Sprachen die die „dangling else“ Mehrdeutigkeit haben ausgewählt

Generell ist Mehrdeutigkeit jedoch ein Zeichen dafür, dass die Grammatik „schlecht“ spezifiziert wurde und umgeschrieben werden sollte um Mehrdeutigkeiten zu beseitigen

Universität Göttingen - Informatik II - SS 2005

6-53

6. Automaten und Sprachen

6-54

6. Automaten und Sprachen

Mehrdeutigkeiten: Anmerkungen

Ü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 Auswertereihenfolge festlegen (bei versch. Terminalen) Gruppierung festlegen (bei gleichartigen Terminalen)

Universität Göttingen - Informatik II - SS 2005

Wiederholung von Informatik I Begriffe/Einordnung

Regulär (Typ 3) Reguläre Sprachen und Ausdrücke Endlicher Automat

Prioritäten

Kontextfrei (Typ 2) 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 2005

6-55

Universität Göttingen - Informatik II - SS 2005

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: 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.

Universität Göttingen - Informatik II - SS 2005

6-57

6. Automaten und Sprachen

Universität Göttingen - Informatik II - SS 2005

6-58

6. Automaten und Sprachen

Kellerautomat (3/4)

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 ).

Ein Kellerautomat (=pushdown automaton, PDA) ist ein Septupel P = {Q, Σ, Γ, δ, q0, Z0, F } mit: Q

Zustandsmenge, |Q | < ∞

Σ

Eingabealphabet, |Σ| < ∞

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.

Γ

Stackalphabet, |Γ| < ∞

δ

Übergangsfunktion (ZustandsÜF)

Kellerautomaten arbeiten nichtdeterministisch

q0

Anfangszustand

Z0

Startsymbol (für Stack)

F

Endzustände, F ⊆ Q

ε-Bewegungen sind erlaubt Die Menge der deterministischen Kellerautomaten ist eine echte Untermenge der nichtdeterministischen Kellerautomaten.

Universität Göttingen - Informatik II - SS 2005

6-59

δ(q,a,X)

Universität Göttingen - Informatik II - SS 2005

mit q ∈ Q, a ∈ {Σ, ε}, X ∈ Γ

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 2005

6-61

6. Automaten und Sprachen

Formelle Beschreibung: P = ({q0,q1,q2},{0,1},{0,1,Z0}, δ, q0, Z0, {q2}) δ(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)}

lesen und push

Wechsel nach q1, ohne Stack zu verändern lesen, vergleichen, pop Z0 erreicht, akzeptiert

Universität Göttingen - Informatik II - SS 2005

6-62

6. Automaten und Sprachen

Schreibkonventionen für PDAs

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 q w γ

Universität Göttingen - Informatik II - SS 2005

lesen und push

6-63

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 2005

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: Akzeptanz durch Endzustand Akzeptanz durch leeren Stack

Angenommen, δ(q, a, X) enthält (p, α). Dann gilt für alle Zeichenreihen w aus Σ* und β aus Γ*: (q, aw, X β) ⊢ (p, w, αβ)

Zwar unterscheiden sich die Sprachen, die die jeweiligen PDAs akzeptieren, aber sie sind jeweils ineinander überführbar. Akzeptanz durch Endzustand

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!)

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 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 2005

6-65

6. Automaten und Sprachen

Universität Göttingen - Informatik II - SS 2005

6-66

6. Automaten und Sprachen

Theoretische Ergebnisse

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‘‘) in Chomsky Normalform (G‘) und in Greibach Normalform (G‘‘).

Kontextfreie Sprachen/Grammatiken Pumping Lemma für kontextfreie Sprachen Normalformen Ableitungen und Ableitungsbäume Mehrdeutigkeiten

Pumping Lemma für kontextfreie Grammatiken. Kellerautomaten Konfiguration Akzeptanz

Eine Sprache L ist kontextfrei genau dann, wenn L von einem nichtdeterministischen Kellerautomaten erkannt wird. Die Menge der deterministischen Kellerautomaten (DPDA) ist eine echte Untermenge der nichtdeterministischen Kellerautomaten.

Universität Göttingen - Informatik II - SS 2005

6-67

Universität Göttingen - Informatik II - SS 2005

6-68

6. Automaten und Sprachen

6. Automaten und Sprachen

Tabellarischer Überblick

Beschreibungsmittel

Beschreibungsmittel Determinismus und Nichtdeterminismus Abschlusseigenschaften unter bestimmten Operationen Entscheidbarkeit 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 2005

6-69

6. Automaten und Sprachen

Abschlusseigenschaften

Nichtdeterministischer Automat

Deterministischer Automat

Äquivalent?

NFA

DFA

ja

LBA

TM

Universität Göttingen - Informatik II - SS 2005

6-70

6. Automaten und Sprachen

Determinismus und Nichtdeterminismus

PDA

Universität Göttingen - Informatik II - SS 2005

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 2005

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 2005

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 2005

6-75

Wortproblem

Universität Göttingen - Informatik II - SS 2005

6-74

7. Compilerbau

Inhalte „

Informatik II

Organisation von Compilern für moderne Programmiersprachen (Teil 7.1) … …

SS 2005

… …

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 Dipl.-Inf. 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 2005

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 2005

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 2005

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 2005

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 2005

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 2005

„

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 2005

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 2005

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 2005

Daher sollte man nicht davon ausgehen, dass Compiler immer fehlerfrei arbeiten!!!

Universität Göttingen - Informatik II - SS 2005

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 2005

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 2005

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 2005

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 2005

„

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 2005

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 2005

7.1-17

Universität Göttingen - Informatik II - SS 2005

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 2005

7.1-19

Universität Göttingen - Informatik II - SS 2005

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 2005

7.1-21

„

„

Universität Göttingen - Informatik II - SS 2005

7. Compilerbau

2 Fragen

Ein GGT Programm in C

Universität Göttingen - Informatik II - SS 2005

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?

„

Wie implementieren wir den Scanner nachdem wir wissen was die Tokens sind?

…

7.1-23

Mit anderen Worten, was sind die Tokens (Symbole)

Universität Göttingen - Informatik II - SS 2005

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

„

Der Kleenesche Hülle * (ode einfach Hülle oder Stern)

„ „

…

…

…

…

7.1-25

z.B. bedeutet r1.r2|r3 nun (r1.r2)|r3 oder r1.(r2|r3)???

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); }

r* ist kein oder mehrere Vorkommen des Wertes von r1

Universität Göttingen - Informatik II - SS 2005

7. Compilerbau

Ein GGT Programm in C

r1|r2 ist der Wert von r1 oder der Wert von r2

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 2005

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 2005

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

…

Konflikte zwischen regulären Ausdrücken Gegeben:

„

„

…

„ „

…

int

gcd

(int

i, int

j) {

/* gcd */ int gcd (int i, int j) {

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 2005

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 2005

…

7.1-29

Universität Göttingen - Informatik II - SS 2005

„

In Abhängigkeit von der Komplexität von Kommentaren ist eine Beschreibung via regulärer Ausdrücke vielleicht möglich

Gegeben sind zwei reguläre Ausdrücke r1 und r2, welche eine Teileingabe p=‘c1..ck‘ finden. Welche soll nun ausgewählt werden? …

…

SLC=‘//’.*.$

…

Findet Texte wie ƒ

Alternative 1: Längster Fund „

Zeilenkommentare (single line comments) können mit regulären Ausdrücken gefunden werden ƒ

„

„

$ ist ein spezielles Symbol, welches das Ende einer Zeile bedeutet

… …

…

…

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 2005

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: …

// Dies ist ein Kommentar

Einige Kommentare sind zu kompliziert um durch reguläre Ausdrücke gefunden zu 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 2005

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 2005

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 2005

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 2005

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 2005

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 2005

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 2005

7.1-38

7. Compilerbau

Überblick

„

…

break; } {ELSE}

7. Compilerbau

„

Wichtige Algorithmen …

break;

Universität Göttingen - Informatik II - SS 2005

„

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 2005

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 2005

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 2005

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 2005

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 2005

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 2005

7.1-45

Syntaxanalyse durch rekursiven Abstieg (1/4)

Grammatik:

„

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 2005

7.1-46

7. Compilerbau

id_list -> id id_list_tail id_list_tail -> , id id_list_tail id_list_tail -> ; „

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 2005

7. Compilerbau

Top-down versus Bottom-up Syntaxanalyse (2/2) „

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 2005

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:

…

Wenn die Satzform “n1 … nk factor sm … sn” lautet, dann sollte die nächste Satzform folgende sein:

„

„ „

factor -> ( expr ) | [ sexpr ]

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 2005

7.1-49

Universität Göttingen - Informatik II - SS 2005

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 2005

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 2005

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 2005

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 2005

7. Compilerbau

„

„

Linksrekursion kann durch das Umschreiben der Grammatik ausgeschlossen werden „

Universität Göttingen - Informatik II - SS 2005

„

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 2005

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 2005

…

Sei X ein Nichtterminal NULLABLE(X) ist wahr wenn gilt X ⇒* є (X kann den leeren String ableiten)

Universität Göttingen - Informatik II - SS 2005

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 2005

7.1-59

Universität Göttingen - Informatik II - SS 2005

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 2005

7.1-61

Universität Göttingen - Informatik II - SS 2005

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.

NULLABLE

FIRST

FOLLOW

A

False

{a}

{}

B

True

{b, є}

{}

S

False

{s}

{$}

NULLABLE

FIRST

FOLLOW

A

True

{a,b,є}

{b}

B

True

{b, є}

{s}

S

False

{s,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 2005

Schritt 2: i=1

ε

7.1-63

Schritt 4: i=3

NULLABLE

FIRST

FOLLOW

NULLABLE

FIRST

FOLLOW

A

True

{a,b,є}

{b,s}

A

True

{a,b,є}

{b,s,a}

B

True

{b, є}

{s,a}

B

True

{b, є}

{s,a,b}

S

False

{s,a,b}

{$}

S

False

{s,a,b}

{$}

Universität Göttingen - Informatik II - SS 2005

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 2005

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 2005

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 2005

7.1-67

Beispiele: ‘(‘, ‘)’, ‘[‘, ‘]’

Diese Art von Ableitungsbaum } wird „Abstrakter Syntaxbaum“ (abstract syntax tree, AST) genannt

Universität Göttingen - Informatik II - SS 2005

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 2005

7.1-69

Universität Göttingen - Informatik II - SS 2005

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 2005

7.1-71

Universität Göttingen - Informatik II - SS 2005

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 2005

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 2005

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 2005

7.1-75

Universität Göttingen - Informatik II - SS 2005

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 2005

„

„

7.1-77

Universität Göttingen - Informatik II - SS 2005

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 2005

7.1-79

Universität Göttingen - Informatik II - SS 2005

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 2005

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 2005

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 2005

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 2005

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)

„

und

r3 := *(r1+4)

r2 := r1

wird zu r3 := r1 + r1 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 2005

Wird durch Datenflussanalyse (data flow analysis) bestimmt „

oder r1 := r2 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 2005

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 2005

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 2005

7.2-5

7. Compilerbau

Biete Grundbefehle (primitives), Unterprogramme und Laufzeitunterstützung für übliche (lästige) Programmierpflichten

RC SPA

.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

MI PS

Universität Göttingen - Informatik II - SS 2005

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 2005

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 2005

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 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 2005

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 2005

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 2005

7.2-55

Universität Göttingen - Informatik II - SS 2005

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 2005

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 2005

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 2005

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 2005

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 2005

7.2-61

7. Compilerbau

Universität Göttingen - Informatik II - SS 2005

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 2005

7.2-63

Universität Göttingen - Informatik II - SS 2005

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 2005

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 2005

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 2005

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 2005

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 2005

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 2005

Universität Göttingen - Informatik II - SS 2005

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 2005

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=

Assoziativität von links nach rechts

von rechts nach links

Multiplikatiom, Division Modulo Addition, Subtraktion

von links nach rechts 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

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