Informatik II - Institute of Computer Science, Göttingen

Werbung
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 <ZAHL> einen Wert im Zahlensystem mit der Basis <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:
<ZAHL><BASIS>
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<B)
i=-1
Für Umrechnung Aufspalten in
Horner Schema:
z=
1 (a +
-1
B
1 (a-3 + ... +
B
1 (a-2 +
B
1 (a-N+1 +
B
1 a-N) ... )
B
ganze Zahl und
echter Bruch.
zB = 0 , a-1 a-2 a-3 a-4 ... a-N
Darstellung:
Wiederholte Multiplikation mit der Basis B bringt die Ziffern ai vor das
Komma: -N
-N
zB * B = a-1 + ∑ai * Bi
(wobei immer gilt : ∑ai * Bi < 1)
i=-2
z=
a-1 +
i=-2
1 (a +
-2
B
1
B
(a-3 + ... +
1 (a
-N+1 +
B
1 a ) ... )
-N
B
z.B.: 0.5310 * 1010 = 5,310
Zahlensysteme
Universität Göttingen - Informatik II - SS 2005
2.1-41
2. Zahlen und Logik
2.1-42
2. Zahlen und Logik
Umrechnung im Quellsystem
Beispiel: Umrechnung im Quellsystem (1/2)
Beispiel: 12,023 = ??,??2
Ganzahliger Anteil:
123 = 1012
Echter Bruch:
0,023 = 0,???2
Zahlensysteme
Universität Göttingen - Informatik II - SS 2005
0,023 = 0,???2
(Bemerkung: 123 = 510)
Dividierende Umrechnung im Quellsystem (vgl. Folie
2.1-36) bedeutet sukzessive Division durch 1/B
(Division mit Bruch = Multiplikation mit Kehrwert des Bruches)
Sukzessive Division durch 1/B entspricht einer
Sukzessiven Multiplikation mit der Basis B.
Der ganzzahlige Anteil bei den Multiplikationsschritten bildet die ai im Zielsystem.
Zahlensysteme
Universität Göttingen - Informatik II - SS 2005
2.1-43
Zahlensysteme
Universität Göttingen - Informatik II - SS 2005
2.1-44
2. Zahlen und Logik
2. Zahlen und Logik
0,023
*
23
=
0,113
a-1
=
0
0,113
*
23
=
0,223
a-2
=
0
0,223
*
23
=
1,213
a-3
=
1
Beispiel: Umrechnung im Quellsystem (2/2)
Ergebnis:
12,023
Periode
0,213
*
23
=
1,123
a-4
=
1
0,123
*
23
=
1,013
a-5
=
1
0,013
*
23
=
0,023
a-6
=
0
0,023
*
23
=
0,113
a-6
=
0
0,113
=
101,0011102
~ 5,2221710
5,210
Darstellung von Brüchen in unterschiedlichen Zahlensystemen kann
zu Ungenauigkeiten führen.
d.h. 0,023=0,0011102
0,22
Zahlensysteme
Zahlensysteme
3
Universität Göttingen - Informatik II - SS 2005
2.1-45
2. Zahlen und Logik
Umrechnen im Zielsystem (2/2)
z.B. 0.43657 ???10
(Erinnerung: multiplikative Umrechnung, vgl. Folie 2-34)
wg. Darstellung als negativer Exponent der Basis heißt das
Division
Division nach Horner mit Anschreiben der Ziffern in umgekehrter
Reihenfolge
1
7
* (4 +
5
2.1-46
2. Zahlen und Logik
Umrechnen im Zielsystem (1/2)
0,43657 =
Universität Göttingen - Informatik II - SS 2005
1
7
1
* (3 + 71 * (6 + 7 5)))
1
1
= ((( 7 + 6) * 7 + 3) * 7 + 4) *
1
7
510
:
710
=
0,714310
6, 714310
:
710
=
0,959210
3, 959210
:
710
=
0,565610
4, 565610 :
710
=
0,652210
0, 4 3 6 5
Zahlensysteme
Universität Göttingen - Informatik II - SS 2005
2.1-47
7
0, 6 5 2 2 10
Zahlensysteme
Universität Göttingen - Informatik II - SS 2005
2.1-48
2. Zahlen und Logik
2. Zahlen und Logik
Überblick
Zahlendarstellung und Rechnen im Dualsystem (1/3)
Zahlen
Durch N Bits lassen sich 2N Zahlenwerte codieren
Nur positive Zahlen, Wertebereich: 0 ... (2N–1)
Positive und negative Zahlen:
Informationsdarstellung
Zahlensysteme
Rechnerarithmetik
(N-1) - Bit Zahl mit Vorzeichen
darstellbarer Wertebereich: [-2N-1 ... 0 ... 2N-1-1]
Logik
Aussagenlogik und logische Gatter
Prädikatenlogik
„Most significant“ Bit als Vorzeichencodierung
7
↑
N=8
N= 16
6
5
4
3
2
1
0
„most significant bit“
0
= positive Zahl
1
= negative Zahl
Wertebereich: 0 ... 255 oder -128 ... +127
Wertebereich: 0 ... 65535 oder -32768 ... +32767
Rechnerarithmetik
Universität Göttingen - Informatik II - SS 2005
2.1-49
2. Zahlen und Logik
Universität Göttingen - Informatik II - SS 2005
2.1-50
2. Zahlen und Logik
Zahlendarstellung und Rechnen im Dualsystem (2/3)
Zahlendarstellung und Rechnen im Dualsystem (3/3)
N Bits erlauben 2N Möglichkeiten zur Zahlendarstellung, d.h. nur
eine Darstellung mit endlicher Genauigkeit.
Was macht man?
man führt Operationen auf einem Zahlenring durch
Darstellung (Codierung) der Zahlen als Binärworte
Bei positiven Zahlen:
Zahlen n und n + BN sind nicht unterscheidbar
(höchstwertige Bit geht verloren)
Bei positiven und negativen Zahlen:
Additionsüberlauf kann zu negativen Ergebnissen führen
Beispiel:
0 1001110
78
+ 0 1011000
1 0100110
|
+
88
166
> 128
-38
negatives Vorzeichen
Rechnerarithmetik
Universität Göttingen - Informatik II - SS 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 <iostream>
int main() {
double a = 0.5;
double b = 0.01;
std::cout << (int)(a / b) << std::endl;
return 0;
}
In Abhängigkeit von der verwendeten Genauigkeit und Rundung wird
als Ergebnis 50 (korrekt) oder 49 (falsch) geliefert.
Kein Fehler des Compilers, sondern Einschränkung von
Gleitkommazahlen
Rechnerarithmetik
Universität Göttingen - Informatik II - SS 2005
2.1-83
Universität Göttingen - Informatik II - SS 2005
2.1-84
2. Zahlen und Logik
2. Zahlen und Logik
Gleitkommazahlen: „Floating Point Numbers“ (1/3)
Gleitkommazahlen: „Floating Point Numbers“ (2/3)
Rechner speichert die Position des Dezimalpunktes
z.B. 0.473 * 1015 oder 0.3715 * 10-7
Allgemein: X = m * Be
(m: Mantisse, B: Basis, e: Exponent)
Bit-Darstellung:
Darstellung negativer Exponenten:
bereits bekannte Möglichkeiten:
Vorzeichen-/Betragdarstellung
Komplementdarstellung (Stellen- oder Basiskomplement)
aber, die allgemein übliche Form ist die Darstellung mittels einer
sog. Charakteristik
ch = e + K
Mantisse (z.B. 23 Bit)
z.B. mit K = BN/2 (sog. BIAS) (bei N-stelligen Exponenten)
Exponent (z.B. 8 Bit)
d.h. anstelle des Exponenten wird die Charakteristik dargestellt
Vorzeichen (1 Bit)
Speziell: X
Exponent wird meist zur Basis 2, 10 oder 16 angegeben.
Führende Nullen der Mantisse sollten möglichst vermieden werden
(‚Normalisieren‘)
= m * Bch
(m: Mantisse, B: Basis, ch: Charakteristik)
Rechnerarithmetik
Universität Göttingen - Informatik II - SS 2005
2.1-85
2. Zahlen und Logik
Gleitkommadarstellung nach IEEE Standard 754 (1/5)
Beispiel: +26.625 soll als 32 Bit Gleitkommazahl dargestellt werden
Format: 1 Bit Vorzeichen,
8 Bit Exponent (Charakteristik),
23 Bit Mantisse
Schritt: Dezimalzahl
31
S
Schritt: Normalisieren (Anpassen der Mantisse m, 1/B ≤ m < 1)
(11010.101)2 * 20 = (0.11010101)2 * 25
3.
Normenvorschlag der IEEE Computer Society, der von fast allen
Mikrocomputer-Herstellern übernommen worden ist (z.B. Intel
80X86, Motorola 680X0)
32 Bit Format:
Dualzahl
+(26,625)10 = +(11010.101)2
2.
2.1-86
2. Zahlen und Logik
Gleitkommazahlen: „Floating Point Numbers“ (3/3)
1.
Rechnerarithmetik
Universität Göttingen - Informatik II - SS 2005
30
23
22
Charak. E
0
Mantisse M
mit 0 < E < 255, Bias = 127
Schritt: Charakteristik berechnen:
X = (-1)S * 2E-127 * (1.M)2
N=8
Mantisse ist normiert: 1.M, d.h.
K = 27 = 128
ch = e + K = 510 + 12810
(101)2 + (10000000)2 = (10000101)2
31
30
0
10000101
11010101000000000000000
ch
M
Vorz
23
=
22
führende 1 wird nicht dargestellt
Erhöhung der Genauigkeit um eine Stelle
0
Rechnerarithmetik
Universität Göttingen - Informatik II - SS 2005
(Basis 2)
2.1-87
Rechnerarithmetik
Universität Göttingen - Informatik II - SS 2005
2.1-88
2. Zahlen und Logik
2. Zahlen und Logik
Gleitkommadarstellung nach IEEE Standard 754 (2/5)
Gleitkommadarstellung nach IEEE Standard 754 (3/5)
Zahlenbereiche
Beispiel: x= -1.5
x=
(-1)S
*
2E-127
* (1.M)2
1 * 2-126 ≤ |x| ≤ (2 – 2-23) * 2127
mit 0 < E < 255
1.18 *
10-38
≤ |x| ≤ 3.40 *
oder dezimal umgerechnet
1038
Bias = 127
darstellbare
negative Zahlen
31
30
1
S
01111111
Charakteristik E
23
22
0
darstellbare
positive Zahlen
negativer
Überlauf
1 0 0 0 ..................................... 0
Mantisse M
positiver
Überlauf
0
-(2 – 2-23) * 2127
(-1)1 * 2127-127 * (1.1)2 =
-1 * 20
* (1.1)2 =
-(1.1)2 = -1.510
-1.0 * 2-126
1.0 * 2-126
(2 – 2-23) * 2127
Es existiert eine Lücke im Bereich der darstellbaren Zahlen, die
insbesondere die 'NULL' enthält.
Man benötigt eine eigene Darstellung der 'NULL'
Rechnerarithmetik
Universität Göttingen - Informatik II - SS 2005
2.1-89
2. Zahlen und Logik
Rechnerarithmetik
Universität Göttingen - Informatik II - SS 2005
2.1-90
2. Zahlen und Logik
Gleitkommadarstellung nach IEEE Standard 754 (4/5)
Gleitkommadarstellung nach IEEE Standard 754 (5/5)
Besonderheiten des IEEE Formats
Abschließende Bemerkungen:
Not-a-Number: Darstellung „ungültiger“ Zahlen, z.B. Division durch 0,
Wurzel aus negativer Zahl.
Überlauf wird als unendlich dargestellt, d.h. es kann mit unendlich (∞)
weitergerechnet werden.
Unterlauf kann denormalisiert dargestellt werden, d.h. es kann mit
geringerer Genauigkeit weitergerechnet werden.
Null: eigene Darstellung
E
M
x
Erklärung
255
≠0
NaN
Not a Number
255
=0
(-1)S ∗ ∞
±∞
0 < E < 255
beliebig
(-1)S∗2E-127∗(1.M)
0
≠0
(-1)S∗2126∗(0.M)2
0
=0
(-1)S ∗
0
2
Neben dem 32-Bit Format existieren noch 64- und 80-Bit Formate. Sie
erlauben das Rechnen mit größerer Genauigkeit, aber prinzipiell folgt
die Darstellung dem vorgestellten Mechanismus.
Die Norm geht davon aus, dass zuerst mit beliebiger Genauigkeit
gerechnet wird und danach auf das jeweilige Zielformat gerundet wird.
Daher verwenden die meisten Implementierungen eine höhere
Genauigkeit für interne Berechnungen.
Moderne Gleitkommarecheneinheiten ermöglichen z.B. auch
trigonometrische und logarithmische Operationen.
Links zu Demonstrationswerkzeugen und weitergehende Informationen
über IEEE 754 sind auf der Vorlesungsseite angegeben.
Normalbereich
Denormalisiert
0
Rechnerarithmetik
Universität Göttingen - Informatik II - SS 2005
2.1-91
Rechnerarithmetik
Universität Göttingen - Informatik II - SS 2005
2.1-92
2. Zahlen und Logik
2. Zahlen und Logik
Größerer Fehler bei präziserer Genauigkeit sind möglich
Beispiel: Zahlenbereiche für Typ double in « nearest to even » Modus:
Gleitkommaarithmetik: Multiplikation
Z = X ∗ Y = (m[X] ∗ m[Y]) ∗ Be[X]+e[Y]
m[X]: Mantisse von X, m[Y]: Mantisse von Y
e[X]: Exponent von X, e[Y]: Exponent von Y
Multiplikation der Mantissen
Addition der Charakteristiken (- Bias)
16.0 + X = 16.0
Sun Solaris : 64 bits registers
X ∈ [-8.8817841970012523e-16 .. 1.7763568394002505e-15]
Intel Linux : 80 bits registers (more accurate handling of expressions)
X ∈ [-8.8861210056911943e-16 .. 1.7772242011382389e-15]
VX
CHX
MX
VY
CHY
=
- Bias (127)
=
MY
VZ
CHZ
MZ
⊕
+
∗
=
Gegebenenfalls normalisieren
Division entsprechend
Sonderregeln für 0 als Operand
Der Fehler ist größer auf der präziseren Architektur (Intel Linux)
Rechnerarithmetik
Universität Göttingen - Informatik II - SS 2005
2.1-93
2. Zahlen und Logik
Universität Göttingen - Informatik II - SS 2005
2. Zahlen und Logik
Gleitkommaarithmetik: Addition und Subtraktion
Gleitkommaarithmetik: Beispiel für Addition
Z = X + Y = (m[X] * Be[X]-e[Y] + m[Y]) ∗ Be[Y]
für: e[x] ≤ e [y]
m[X]: Mantisse von X, m[Y]: Mantisse von Y
e[X]: Exponent von X, e[Y]: Exponent von Y
Basis = 10, vierstellige Mantisse
Z = X + Y; X = 0.5320 ∗ 10-2; Y = 0.4162 ∗ 101
Berechne e[X] – e[Y]:
1.
2.
3.
4.
2.1-94
Berechne e[X] – e[Y]
Skalieren: Angleichen der Mantisse des kleineren Exponenten
Addition der Mantissen
gegebenenfalls Normalisieren
-2 – 1 = -3
Skalieren von m[X]:
0.5320 * 10-3 = 0.0005320 * 100
(Verschieben um 3 Stellen nach Rechts, evtl. mit Genauigkeitsverlust)
Addition der Mantissen: Übernahme des größeren Exponenten
+
Subtraktion entsprechend
0.4162
0.0005
0.4167
∗
∗
∗
101
101
101
Normalisieren entfällt
Rechnerarithmetik
Universität Göttingen - Informatik II - SS 2005
2.1-95
Rechnerarithmetik
Universität Göttingen - Informatik II - SS 2005
2.1-96
2. Zahlen und Logik
Überblick
Zahlen
Informationsdarstellung
Zahlensysteme
Rechnerarithmetik
Logik
Aussagenlogik und logische Gatter
Prädikatenlogik
Universität Göttingen - Informatik II - SS 2005
2.1-97
2. Zahlen und Logik
Überblick
„
Zahlen
…
Informatik II
…
…
„
SS 2005
Logik
…
Kapitel 2: Zahlen und Logik
Informationsdarstellung
Zahlensysteme
Rechnerarithmetik
…
Aussagenlogik und logische Gatter
Prädikatenlogik
Teil 2: Logik
Dr. Michael Ebner
Dipl.-Inf. René Soltwisch
Lehrstuhl für Telematik
Institut für Informatik
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2. Zahlen und Logik
2. Zahlen und Logik
Ziel: Rechnerarithmetik implementieren
„
2.2-2
Darstellung binärer Größen
Bitweise logische Operationen
„
E
E=A?B
= x"34" ? x"1C"
In digitalen Systemen werden Informationen in binärer Form dargestellt.
Binäre Größen können von jedem Baustein dargestellt werden, der nur 2
Operationszustände besitzt.
…
Beispiel: Schalter. Zuweisung der Zustände 0 für offen und 1 für geschlossen
ermöglicht die Darstellung binärer Werte.
… Typischerweise werden folgende Spannungen zugewiesen:
? ... beliebige logische Verknüpfung
„
a5 a4 a3 a2 a1 a0
Operand A
1
1
0
1
0
0
Operand A
b5 b4 b3 b2 b1 b0
Operand B
0
1
1
1
0
0
Operand B
e5 e4 e3 e2 e1 e0
Ergebnis E
1
0
0
0
0
0
Ergebnis E
„
„
Binäre 1: Eine beliebige Spannung zwischen 2V und 5V
Binäre 0: Eine beliebige Spannung zwischen 0V und 0.8V
Spannungen zwischen 0.8V und 2V werden nicht genutzt und können zu
Beschädigungen führen.
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-3
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-4
2. Zahlen und Logik
2. Zahlen und Logik
Boolesche Algebra (1/2)
„
Boolesche Algebra:
…
„
Definition der Booleschen Algebra
…
Variable, die nur zwei Werte annehmen können. Diese Werte werden
mit
L - H , wahr - falsch oder 0 - 1 bezeichnet. Boolesche Variable sind
logische Variable.
Boolesche Operatoren:
…
„
„
Die Booleschen Algebra (speziell die Aussagenlogik) ist ein
Formalismus zur Beschreibung der Funktion digitaler Komponenten.
Binäre oder Boolesche Variable (BV):
…
„
Boolesche Algebra (2/2)
Auf Boolesche Variable können Boolesche Operatoren angewendet
werden: NOT, OR, AND,XOR, ...
„
Boolesche Ausdrücke, Boolesche Funktionen:
…
Boolesche Ausdrücke oder Boolesche Funktionen ergeben sich durch
Verknüpfung von Boolesche Variable mit Booleschen Operatoren.
„
Die Booleschen Algebra ist eine algebraische Struktur. Sie besteht aus
einer Menge M = {e1, e2, …}, den Operatoren ψ und φ, Axiomen und
wichtigen Sätzen. Eine spezielle Boolesche Algebra ist die
Aussagenlogik. Sie wird charakterisiert durch folgende Eigenschaften:
M: {0,1}
e: 1
wahr
n: 0
falsch
ψ: ∧
zweistellige Operation
φ: ∨
zweistellige Operation
Die Boolesche Algebra wurde von George Boole um 1850
entwickelt
Claude Shannon verwendete um 1937 die Boolesche Algebra als
erster für den Schaltungsentwurf
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-5
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2. Zahlen und Logik
2. Zahlen und Logik
Operation
Wahrheitstabellen
„
Eingaben Funktion
x1,..,xn
f(x)
„
„
Ausgabe
y
„
Darstellung der Abhängigkeiten zwischen der Eingabe und Ausgabe
Alle möglichen Kombinationen der Eingabe (A,B) werden mit der
korrespondierenden Ausgabe (X) angegeben.
Beispiel:
Eingabe
Funktion von n Eingangsvariablen:
A
B
…
Nur vom gegenwärtigen Wert der Eingänge anhängig, kein "Gedächtnis"
… y = f(x) = f(xn, ... ,x3,x2,x1), xi ∈ {0,1}
… Für n Eingangsvariablen gibt es 2n Wertekombinationen.
… Die Wertekombinationen heißen auch die Belegungen Xj der Eingangsvariablen
„
2.2-6
Logische Operationen können auf zwei, sinngemäß gleiche Wege
dargestellt werden:
…
…
Boolescher Ausdruck: endlich, aber nicht eindeutig
… Wahrheitstabelle: endlich und eindeutig
Ausgabe
?
X
2.2-7
A
0
1
0
1
X
0
0
0
1
Die Ausgabe ist nur 1, wenn beide Eingaben 1 sind.
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
B
0
0
1
1
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-8
2. Zahlen und Logik
2. Zahlen und Logik
UND-Operator
ODER-Operator
Name
UND (AND)
Tabelle
b
0
0
1
1
Schriftlich
a
0
1
0
1
y
0
0
0
1
y = a ∧ b oder
= ab
oder
=a*b
UND wird verwendet, um Bits gezielt auf 0 zu
setzen. Dazu hat die Maske an allen Bitpositionen,
die übernommen werden sollen, eine 1 und an den
Stellen, die rückgesetzt werden sollen, eine 0.
Name
ODER (OR)
Tabelle
b
0
0
1
1
x“14“ = x"34" ∧ x"1C"
1
1
0
1
0
0
Operand A
0
1
1
1
0
0
Operand B
Schriftlich
y
0
1
1
1
y = a ∨ b oder
=a+b
Gatter
&
a
0
1
0
1
OR wird verwendet, um Bits gezielt auf 1 zu
setzen. Dazu hat die Maske an allen Bitpositionen,
die übernommen werden sollen, eine 0 und an den
Stellen, die gesetzt werden sollen, eine 1.
x“3C“ = x"34“ ∨ x"1C"
1
1
0
1
0
0
Operand A
0
1
1
1
0
0
Operand B
1
1
1
1
0
0
Ergebnis E
≥1
Gatter
0
1
0
1
0
0
Ergebnis E
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-9
2. Zahlen und Logik
NICHT (NOT)
Tabelle
a
0
1
Gängige logische Operationen: XOR
NICHT wird auch als Inverses oder Komplement
bezeichnet.
y
1
0
Name
XOR
Tabelle
b
0
0
1
1
x“0B“ = ~x"34"
Schriftlich
Gatter
y=a
1
1
0
1
0
0
Operand A
0
0
1
0
1
1
Ergebnis E
Schriftlich
1
a
0
1
0
1
y
0
1
1
0
y = a b oder
=a⊕b
Sprache "C"
2.2-11
XOR wird verwendet, um Bits gezielt zu
invertieren. Dazu hat die Maske an allen
Bitpositionen, die invertiert werden
sollen, eine 1 und an allen sonstigen
Stellen eine 0.
x“28“ = x"34" x"1C"
1
1
0
1
0
0
Operand A
0
1
1
1
0
0
Operand B
1
0
1
0
0
0
Ergebnis E
y=a^b
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-10
2. Zahlen und Logik
NICHT-Operator
Name
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-12
2. Zahlen und Logik
2. Zahlen und Logik
Gatter (1/2)
„
Gatter (2/2)
Funktion
Elektrische Realisierung mittels Schalter:
…
Relais, Knipser, Röhren, bipolare Transistoren,
Feldeffekt – Transistoren (MOS-FET), etc.
Knipser
Gatter
Knipser
Realisierung
Funktion
Realisierung
Q=ā
NOT
a
Gatter
MOS-FET
MOS-FET
_
a
a
+
+
L
AND
Q
A
a
&
b
a
Q
b
Q
B
Q
a
b
NAND
A
&
Q
B
+
+
OR
A
a
b
a
b
>=1
B
Q
Q
Q
a
NOR
b
2.2-13
2. Zahlen und Logik
a∨0=a
a∧0=0
R1
a∨1=1
a∧1=a
R2
a∨a=a
a∧a=a
R3
a∨a=1
a∧a=0
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
a ∨ (b ∨ c) =
(a ∨ b) ∨ c =
a∨b ∨c
Vereinfachung von Ausdrücken
Beispiel 1:
Y = A ∧ B ∧ C ∧ D ∨ A ∧ B ∨ ( B ∨ (A ∧ A) ) R4
= A ∧ B ∧ C ∧ D ∨ A ∧ B ∨ ( B ∨ 0) )
R1
...
=A∧B∧C∧D∨A∧B∨B
=A∧B∧C∧D∨B
=B
R5
a ∧ (b ∧ c) =
(a ∧ b) ∧ c =
a∧b ∧c
R6
Kommutativgesetz
a∨b=b∨a
a∧b=b∧a
R7
Distributivgesetz
a ∨ (b ∧ c) =
(a ∨ b) ∧ (a ∨ c)
a ∧ (b ∨ c) =
(a ∧ b) ∨ (a ∧ c)
R8
Beispiel 2:
R9
R5:
De Morgan:
Absorptionsgesetz
De Morgan'sches
Gesetz
2.2-14
Anwendung der Regeln
R4
a=a
Assoziativgesetz
Q
2. Zahlen und Logik
10 Regeln für logische Operationen
Boolesche
Variablen a, b
Elemente aus {0,1}
>=1
B
+
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
A
a ∨ (a ∧ b) = a
(a ∨ b) = a ∧ b
Universität Göttingen - Informatik II - SS 2005
a ∧ (a ∨ b) = a
(a ∧ b) = a ∨ b
Y=(A∧B∧C) +(D∧E∧F)
Y = ( A ∧ B ∧ C ) + (D ∧ E ∧ F )
Y = ( A ∧ B ∧ C ) ∧ (D ∧ E ∧ F )
R10
Aussagenlogik und logische Gatter
2.2-15
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-16
2. Zahlen und Logik
2. Zahlen und Logik
Implikationen aus dem De Morgan'schen Gesetz
(a ∨ b) = a ∧ b
A
(a ∨ b)
Q
(a ∧ b) = a ∨ b
NOR
1
B
&
A
1
B
(a ∧ b)
Q
1
>=1
Q
1
A
&
B
Alternative NOR Darstellung
a∧b
A
NAND
B
A
a∧b
>=1
Q
a∨b
>=1
Q
B
Q
B
Name
NAND
Tabelle
b
0
0
1
1
Schriftlich
y=a∧b
Das NAND-Symbol ist abgesehen von dem kleinen
Kreis am Ausgang identisch mit dem AND-Symbol.
Der kleine Kreis stellt die Invertierung dar.
a
0
1
0
1
y
1
1
1
0
1
1
0
1
0
0
Operand A
0
1
1
1
0
0
Operand B
1
0
1
0
1
1
Ergebnis E
&
Alternative NAND Darstellung
A
&
NAND-Operator
Gatter
a∨b
Invertieren
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-17
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2. Zahlen und Logik
2. Zahlen und Logik
NOR-Operator
Name
NOR
Tabelle
b
0
0
1
1
Schriftlich
a
0
1
0
1
Alternative Darstellung von Gattern
Das NOR-Symbol ist abgesehen von dem kleinen
Kreis am Ausgang identisch mit dem OR-Symbol.
Der kleine Kreis stellt die Invertierung dar.
Für die Gatter UND, ODER, NICHT, NAND und NOR gibt es eine
Alternative Darstellung
…
y
1
0
0
0
…
„
1
y=a∨b
„
1
0
1
0
0
„
Operand A
Invertiere jeden Eingang und Ausgang des Standardsymbols
Ändere das Operationssymbol von UND zu ODER, oder von ODER zu
UND
Die alternative Darstellung repräsentiert den gleichen
physikalischen Baustein.
Beispiele:
A
Gatter
2.2-18
≥1
0
1
1
1
0
0
Operand B
0
0
0
0
1
1
Ergebnis E
NOR
NAND
2.2-19
&
Q
>=1
Q
B
&
B
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
Q
B
A
Invertieren
A
>=1
A
Q
B
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-20
2. Zahlen und Logik
2. Zahlen und Logik
Vollständige Operatorensysteme
Normalformen (1/2)
„
Ein vollständiges Operatorensystem erlaubt die Darstellung aller
möglichen Funktionen
„
Die folgenden Systeme sind u.a. vollständig:
…
…
…
…
…
…
„
„
Bei zweistelligen, booleschen Funktionen sind dies 16 Möglichkeiten
…
…
NICHT:
UND:
ODER
Beschränkung auf ein vollständiges Operatorensystem reicht nicht für
Eindeutigkeit
Die Normalformen dienen dazu, anhand von Zustandstabellen
Schaltungen zu entwickeln. Dabei werden logische Funktionen in
Schaltkreise umgesetzt.
…
Randbedingungen:
„
„
Beispiel für NAND:
…
…
„
UND, ODER, NICHT
UND, NICHT
ODER, NICHT
NAND
NOR
Es gibt keinen eindeutigen booleschen Ausdruck für eine boolesche
Funktion
„
a∧a
(a∧b)∧(a∧b)
(a∧a)∧(b∧b)
die Zahl der Schaltkreise sollte möglichst gering sein
die einzelnen Bauelemente sollten möglichst gleich sein
Standarddarstellung im Operatorensystem UND/ODER/NICHT
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-21
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2. Zahlen und Logik
2. Zahlen und Logik
Normalform (2/2)
„
…
…
…
…
„
Übersetzungsregel für disjunktive Normalform
Disjunktive Normalform (DNF)
…
disjunktive Verknüpfung von Konjunktionen
Konjunktionen müssen alle Variablen enthalten (bejaht oder negiert)
Konjunktionsterme werden Minterme genannt
In der DNF werden alle UND – Verknüpfungen (Konjunktionen)
disjunktiv verknüpft (ODER- verknüpft), deren Ausgangsvariablen den
Wert „1“ annehmen.
amerikanischer Ausdruck: “sum of products“ (SOP)
Konjunktive Normalform (KNF)
…
…
…
…
Konjunktive Verknüpfung von Disjunktionen
Disjunktionen müssen alle Variablen enthalten (bejaht oder negiert)
Disjunktionsterme werden Maxterme genannt
In der KNF werden alle ODER – Verknüpfungen (Disjunktionen)
konjunktiv verknüpft (UND- verknüpft), deren Ausgangsvariablen den
Wert „0“ annehmen.
„
Man geht von der Einsstellenmenge aus.
„
Für jede Belegung ersetzt man
…
…
die 1 durch eine bejahte Variable
die 0 durch eine negierte Variable
„
und bildet eine UND Verknüpfung (Minterm).
„
Die Maxterme werden ODER verknüpft
“Disjunktive Normalform“ DNF
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-22
2.2-23
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-24
2. Zahlen und Logik
2. Zahlen und Logik
DNF Übersetzung
Übersetzungsregel für konjunktive Normalform
„
Man geht von der Nullstellenmenge aus.
„
Für jede Belegung ersetzt man
…
…
die 0 durch eine bejahte Variable
die 1 durch eine negierte Variable
„
und bildet eine ODER Verknüpfung (Maxterm).
„
Die Maxterme werden UND verknüpft
“Konjunktive Normalform“ KNF
Oktal Index
(x4,x3,x2,x1) f -> y
0
1
2
3
4
5
6
7
10
11
12
13
14
15
16
17
0,0,0,0
0,0,0,1
0,0,1,0
0,0,1,1
0,1,0,0
0,1,0,1
0,1,1,0
0,1,1,1
1,0,0,0
1,0,0,1
1,0,1,0
1,0,1,1
1,1,0,0
1,1,0,1
1,1,1,0
1,1,1,1
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-25
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
0
0
0
1
0
0
1
0
0
1
-
Beispiel: Durch 3 teilbare BCD Ziffern
Å Logische 1 für:
x4 = 0, x3 = 0, x2 = 1, x1 = 1
x4 x3 x2 x1
Å Logische 1 für:
x4 = 0, x3 = 1, x2 = 1, x1 = 0
x4 x3 x2 x1
Å Logische 1 für:
x4 = 1, x3 = 0, x2 = 0, x1 = 1
x4 x3 x2 x1
E = {3, 6, 11}
3 (0,0,1,1)
6 (0,1,1,0)
11 (1,0,0,1)
y=
x4 x3 x2 x1
∨ x4 x3 x2 x1
∨ x4 x3 x2 x1
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2. Zahlen und Logik
2.2-26
2. Zahlen und Logik
Übersetzung DNF Gleichung in Hardware
Beschreibung von logischen Schaltnetze
Jede Gleichung läßt sich 1:1 in Hardware umsetzen
„
y = x4 x3 x2 x1 ∨ x4 x3 x2 x1 ∨ x4 x3 x2 x1
Logische Schaltnetze können mit den grundlegenden logischen
Verknüpfungen UND, ODER und NICHT beschrieben werden:
1.
x4
2.
1
3.
&
x3
1
x2
1
x1
1
„
&
>1
y
„
&
x = AB ∨ C
x = (A ∨ B) C
x = (A ∨ B) C ∨ A
Die Verwendung nur eines Gattertyps erleichtert die technische
Realisierung, weswegen NAND oder NOR basierte Systeme
oftmals verwendet werden.
Logische Schaltnetze können durch die Minimierung der logischen
Verknüpfung minimiert werden
…
…
…
In vielen Fällen sind einfachere Schaltungen schneller
Weniger Gatter reduziert die Kosten
Es wird weniger Energie benötigt
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-27
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-28
2. Zahlen und Logik
2. Zahlen und Logik
Minimierung
„
Minimierungsverfahren
DNF liefert relativ aufwendige Lösungen
„
…
Baut auf den Mintermen auf
Jedes UND Gatter enthält alle Eingangsvariablen
… Nicht praktikabel in „echten“ Anwendungen
„
„
„
Es gibt 3 Arten von Minimierungsverfahren
…
…
…
Die Suche nach einer einfacheren Lösung ist Ziel der Optimierung
(Minimierung).
Voraussetzung jeder Optimierung: Kostenfunktion beschreibt Ziel.
In unserem Fall: Möglichst wenige, möglichst kleine Gatter
Genauer: Die Anzahl der Eingänge in alle Gatter soll minimal werden.
In einer Gleichung ist dann die Anzahl der Variablen aller Terme plus die
Anzahl der Terme (Länge) minimal.
_ _
_
Y = (D C B A) ∨ (D C B) ∨ (E C) => L = 4+3+2+3 = 12
…
„
„
„
algebraische Verfahren
graphische Verfahren (z.B. KV-Diagramme)
tabellarische/algorithmische Verfahren (z.B. Quine/McCluskeyVerfahren)
Algebraische Verfahren werden praktisch nicht verwendet
Graphische Verfahren sind für bis zu 6 Variablen handhabbar
Tabellarische Verfahren sind auch für mehr als 6 Variablen geeignet
Wie erzielen wir möglichst kleine Gatter? Wir versuchen, durch Anwendung
der Rechenregeln, die einzelnen Terme kürzer zu machen.
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-29
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2. Zahlen und Logik
2.2-30
2. Zahlen und Logik
Algebraische Minimierung
Blöcke
Vereinfachung durch Ausklammern und Anwendung der Regeln:
_
_ _
_
_ _
_
Bsp: y = c b a ∨ c b a = c a (b ∨ b) = c a 1 = c a
In Belegungsschreibweise
c b a
y
_
c b a
0 1 1 -> 1
_ _
c b a
0 0 1 -> 1
„
Zwei Belegungen, die sich nur in einer Komponente unterscheiden,
heißen benachbart.
„
Die identischen Komponenten heißen "gebundene", die
unterschiedlichen "freie" Komponenten.
„
Die freien Komponenten werden durch einen "-" gekennzeichnet.
„
Es entsteht ein (Belegungs-) Block.
„
Ein Block mit r freien Komponenten enthält ("überdeckt") 2r
Belegungen.
„
Beispiel:
Wir suchen Belegungen, die
Einsstellen sind und
sich nur in einer Komponente unterscheiden
(benachbart sind)
4 (0,1,0,0)
(0,1,0,-)
5 (0,1,0,1)
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-31
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-32
2. Zahlen und Logik
2. Zahlen und Logik
Minimierung über Nachbarschaftsbeziehungen
Oktal Index
0
1
2
3
4
5
6
7
(x3,x2,x1)
f ->
y
0,0,0
0,0,1
0,1,0
0,1,1
1,0,0
1,0,1
1,1,0
1,1,1
->
->
->
->
->
->
->
->
0
0
0
0
1
1
0
1
Bildung größerer Blöcke
Oktal Index
Zugehörige DNF:
0
1
2
3
4
5
6
7
y = (x3 x2 x1)
∨ (x3 x2 x1)
∨ (x3 x2 x1)
Benachbarte Belegungen:
Minimierte Gleichung:
4:
5:
Block:
y = (x3 x2)
∨ (x3 x2 x1)
1, 0, 0
1, 0, 1
1, 0, -
(x3,x2,x1)
f ->
y
0,0,0
0,0,1
0,1,0
0,1,1
1,0,0
1,0,1
1,1,0
1,1,1
->
->
->
->
->
->
->
->
0
0
0
0
1
1
1
1
Benachbarte Belegungen:
4: 1, 0, 0
5: 1, 0, 1
Block: 1, 0, 1, 0, 1, 1, 6: 1, 1, 0
Block: 1, -, 7: 1, 1, 1
Block: 1, 1, -
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-33
(x4,x3,x2,x1)
f ->
0,0,0,0
0,0,0,1
0,0,1,0
0,0,1,1
0,1,0,0
0,1,0,1
0,1,1,0
0,1,1,1
1,0,0,0
1,0,0,1
1,0,1,0
1,0,1,1
1,1,0,0
1,1,0,1
1,1,1,0
1,1,1,1
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
Minimierte Gleichung:
y = x3
Aussagenlogik und logische Gatter
2.2-34
y
Zusammenfassung Blockbildung
Mögliche Blöcke:
1
0/2: 00-0
0
2/6: 0-10
1
2/12: -010
0
5/7: 01-1
0
5/15: -101
1
5/7/15/17: -1-1
6/7: 0111
6/16: -110 6/7/16/17: -111
0
7/17: -111 2/12/6/16: --10
1
11/15: 1-01
1
12/16: 1-10
0
15/17: 11-1
0
16/17: 1111
1
1
_ _ _
_
_
y = x4x3x1 ∨ x4x2x1 ∨ x3x1 ∨ x2x1
„
Die Bildung von Blöcken kann zur Minimierung herangezogen
werden.
…
…
„
Benachbarte Blöcke können zu größeren Blöcken
zusammengefasst werden
…
…
…
„
„
Betrachtet werden nur die Einsstellen
Benachbarte Belegungen werden zu Blöcken zusammengefasst.
es gelten dieselben Regeln.
Blöcke bestehen immer aus 2r Belegungen (r = Anzahl der Striche)
Ein Block, der sich nicht mehr vergrößern lässt, heißt "Primblock"
Gesucht ist die minimale Anzahl von möglichst großen Blöcken, die
alle Einsstellen überdeckt.
Übergang zur disjunktiven Form
…
…
…
Für Blöcke gelten dieselben Übersetzungsregeln, aber
freie Komponenten ("Striche") werden ignoriert.
Ein aus einem Primblock entstehender Term heißt "Primimplikant"
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
Minimierte Gleichung:
2. Zahlen und Logik
Blockbildung bei komplizierteren Funktionen
0
1
2
3
4
5
6
7
10
11
12
13
14
15
16
17
y = (x3 x2 x1)
∨ (x3 x2 x1)
∨ (x3 x2 x1)
∨ (x3 x2 x1)
Universität Göttingen - Informatik II - SS 2005
2. Zahlen und Logik
Oktal Index
Zugehörige DNF:
2.2-35
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-36
2. Zahlen und Logik
2. Zahlen und Logik
Minimierung per KV-Diagramm
Karnaugh-Veitch-Diagramme
Erstellung durch wechselweise horizontales und vertikales Spiegeln
x1
„
„
KV-Diagramme bieten einen graphischen Weg zur Minimierung
Es können minimale konjunktive oder disjunktive Formen gebildet
werden
0
KV-Diagramm:
x1
x2
Koordinatendarstellung der Funktionstabelle
Jede Zelle entspricht einer Belegung
(Achtung: Zahlen sind im Oktalsystem
angegeben)
1
0
1
2
3
x1
x2
0
1
5
4
2
3
7
6
x5
x3
x2
0
1
5
4
2
3
7
6
12
13
17
16
10
11
15
14
x2
x4
2.2-37
2. Zahlen und Logik
0
1
5
4
24
25
21
20
2
3
7
6
26
27
23
22
12
13
17
16
36
37
33
32
10
11
15
14
34
35
31
30
x4
x3
x3
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
x1
x1
x1
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-38
2. Zahlen und Logik
KV-Diagramm
Minimierung per KV-Diagramm
x5
x2
x2
Eintragung in das KV-Diagramm
x1
x1
0
1
5
4
24
2
3
7
6
26
25
27
2
3
21
20
23
22
33
32
12
13
17
16
36
10
11
15
14
34
35
31
30
50
51
55
54
74
75
71
70
52
53
57
56
76
77
73
72
42
43
47
46
66
67
63
62
40
41
45
44
64
65
61
60
37
Oktal Index
0
1
2
3
4
5
6
7
x4
(x3,x2,x1)
f ->
y
0,0,0
0,0,1
0,1,0
0,1,1
1,0,0
1,0,1
1,1,0
1,1,1
->
->
->
->
->
->
->
->
0
0
0
0
1
1
0
1
__ __
x3 __
x2 x1 ∨
x3 x2 x1 ∨
x3 x2 x1
x6
x1
x2
x3
0
0
1
1
0
0
1
0
x3
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-39
Universität Göttingen - Informatik II - SS 2005
Aussagenlogik und logische Gatter
2.2-40
2. Zahlen und Logik
2. Zahlen und Logik
Blockbildung im KV-Diagramm
Interpretation eines KV-Diagramms
x1
1
0
0
x2
x1
0
0
0
0
0
__ __
x3 x2 x1
0
1
x2
0
0
0
0
x3
0
0
x2
0
__
__
x3 x2 x1
0
x3
x1
0
0
x1
0
0
1
0
0
x3 x2 x1
0
x2
0
0
1
0
0
x3
0
x3
x1
ÎDarstellung der DNF
einer Schaltfunktion
x2
0
1
0
1
1
0
1
0
x3
__ __
x3 x2 x1
__ __
x3 x2 x1 ∨
x3 x2 __
x1 ∨
__
x3 __
x2 __
x1 ∨
x3 x2 x1
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-41
2. Zahlen und Logik
x1
x2
0
1
1
0
0
1
0 0 0 0 1
1
0 0 0 1 1
2
0 0 1 0 1
3
0 0 1 1 1
4
0 1 0 0 0
5
0 1 0 1 0
6
0 1 1 0 0
7
0 1 1 1 0
10
1 0 0 0 0
11
1 0 0 1 1
12
1 0 1 0 0
13
1 0 1 1 1
14
1 1 0 0 0
15
1 1 0 1 0
16
1 1 1 0 0
17
1 1 1 1 0
A
0
1
1
1
2
B
5
3
7
1
1
12
0
0
13
17
11
D
14
0
0
C
__ _ _
16
0
15
1
0
6
0
0
1
10
4
0
0
__ _
_
_ _
__
DNF: Z = A B C D ∨ A B C D ∨ A B C D ∨ A B C D
Minterme: 0: 0000
1: 0001
13: 1011
00-0
(Blöcke) 2: 0010
3: 0011 00-1 11: 100110-1
_ _ _
__
_
Minimierte Gleichung: Z = A C D ∨ A C D ∨ ACD
Primblöcke: 00-- -0-1
__
_
Minimierte Gleichung mit Primtermen: Z = C D ∨ A C
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-42
Blockbildung bei unvollständig definierten Schaltfunktionen
x1
0
D C B A Z
2. Zahlen und Logik
Beispiel für Blockbildung in KV-Diagrammen
1
Fall
0
x2
x3
x1
1
0
0
1
1
0
0
1
x3
Vorläufige Blöcke. Es
entfällt je x3.
x2
1
0
0
1
1
0
0
1
Freistellen (do not care Stellen) können 0 oder 1 sein.
Festlegung derart, dass maximal große Blöcke entstehen.
x3
Endgültiger Block. Es
entfällt x2.
x1
Kann ein vorläufiger Block nicht mehr durch einen weiteren, symmetrisch
gelegenen gleich großen Block vergrößert werden, so erhält man den
maximal großen Block:
Primblock
Der zugehörige Term heißt
Primterm.
x2
x1
0
1
-
0
0
1
-
-
x2
x3
0
1
0
1
x1
-
0
=1
=0
=1
x3
-
x2
0
1
0
1
-
0
=1
=0
=1
-
x3
Jede vollständige Blocküberdeckung ist eine gültige Darstellung einer Funktion.
Vollständig: Jede Einsstelle wird von einem Block überdeckt.
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-43
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-44
2. Zahlen und Logik
2. Zahlen und Logik
Minimierung per KV-Diagramm
„
Minimierung per KV-Diagramm (1/3)
Minimierungsverfahren
Minimierungsverfahren
1. Spezifikation der Funktion durch Terme
2. Eintragung in das KV-Diagramm
3. Bestimmen der Primblöcke
„
„
„
Beispiel
Sukzessive Bildung von Blöcken mit 2, dann 4, dann 8 Belegungen, usw.
Verfolgung aller möglichen Kombinationen
Wenn Blockbildung abbricht, sind alle Primblöcke gefunden.
Ergebnis:
4. Auswahl der kleinsten Anzahl Primblöcke, die zur vollständigen
Überdeckung nötig sind
„
„
„
Bereits erledigt:
1. Spezifikation der Funktion durch Terme
2. Eintragung in das KV-Diagramm
x1
Identifikation der Kerne: Markierung aller Primblöcke, welche alleine eine
Funktionsstelle überdecken.
Falls diese bereits alle Stellen überdecken, ist minimale Lösung erreicht.
Reichen diese nicht zur Überdeckung aller Stellen aus, müssen weitere
Primblöcke hinzugenommen werden.
0 1 1 0
x2
0 0 1 1
0 0 1 -
5. Bildung eines kürzesten Ausdrucks (DMF: disjunktive Minimalform)
x3
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-45
2. Zahlen und Logik
x4
1 0 0
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-46
2. Zahlen und Logik
Minimierung per KV-Diagramm (2/3)
Minimierung per KV-Diagramm Beispiel (3/3) x1
Beispiel
4. Auswahl der kleinsten Anzahl
Primblöcke, die zur vollständigen
Überdeckung nötig sind
•
Identifikation der Kerne:
Markierung aller Primblöcke,
welche alleine eine Funktionsstelle
überdecken.
•
Falls diese bereits alle Stellen
überdecken, ist minimale Lösung
erreicht.
•
Reichen diese nicht zur
Überdeckung aller Stellen aus,
müssen weitere Primblöcke
hinzugenommen werden.
3. Bestimmen der Primblöcke
•
Sukzessive Bildung von Blöcken mit 2, dann 4, dann 8
Belegungen, usw.
•
Verfolgung aller möglichen Kombinationen
•
Wenn Blockbildung abbricht, sind alle Primblöcke gefunden.
w2
x1
w4
Primimplikanten:
0
1
1
0
0
0
1
1
0
0
1
-
-
1
0
0
w3
w1
x2
=>
x4
w5
x3
Grau gekennzeichnete Blöcke: Primblöcke
w1 = x3 x2
__ __
w2 = x4 x2 x1
__
w3 = x4 x3 x1
__ __
w4 = x3 x2 x1
__ __
w5 = x4 x3 x2
5. Bildung eines kürzesten Ausdrucks
(DMF: disjunktive Minimalform)
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-47
x2
0
1
1
0
0
0
1
1
0
0
1
-
-
1
0
0
x1
x2
x4
x3
0
1
1
0
0
0
1
1
0
0
1
-
-
1
0
0
x4
x3
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-48
2. Zahlen und Logik
2. Zahlen und Logik
Minimierung mittels KV-Diagramm
Oktal Index
0
1
2
3
4
5
6
7
Blöcke:
10–
1-1
(x3,x2,x1)
f ->
y
0,0,0
0,0,1
0,1,0
0,1,1
1,0,0
1,0,1
1,1,0
1,1,1
->
->
->
->
->
->
->
->
0
0
0
0
1
1
0
1
Minimierung in der konjunktiven Form
x1
0
x2
0
0
2
0
0
1
3
1
5
1
4
1
7
0
6
x3
Kern-Blöcke:
101-1
••
•
>1
••
•
>1
&
y
••
•
••
•
Minimierte Gleichung:
__
y = x3 x2 ∨ x3 x1
>1
z.B.
_
_
y= (a ∨ b ∨ c) (a ∨ b ∨ c)
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-49
2. Zahlen und Logik
Bei BCD kodierten Ziffern können
nur Werte von 0 bis 9 vorkommen:
Das Verhalten der Schaltung bei
Eingangswerten > 9 (118) ist
gleichgültig.
R = { 12,13,14,15,16,17}
E = { 3,6,11}
N = {0,1,2,4,5,7,10}
Universität Göttingen - Informatik II - SS 2005
2.2-50
2. Zahlen und Logik
Ermittlung der Maxterme
Beispiel
Durch 3 teilbare BCD Ziffern
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
Oktal Index
(x4,x3,x2,x1) f -> y
Oktal Index
(x4,x3,x2,x1) f -> y
0
1
2
3
4
5
6
7
10
11
12
13
14
15
16
17
0,0,0,0
0,0,0,1
0,0,1,0
0,0,1,1
0,1,0,0
0,1,0,1
0,1,1,0
0,1,1,1
1,0,0,0
1,0,0,1
1,0,1,0
1,0,1,1
1,1,0,0
1,1,0,1
1,1,1,0
1,1,1,1
0
1
2
3
4
5
6
7
10
11
12
13
14
15
16
17
0,0,0,0
0,0,0,1
0,0,1,0
0,0,1,1
0,1,0,0
0,1,0,1
0,1,1,0
0,1,1,1
1,0,0,0
1,0,0,1
1,0,1,0
1,0,1,1
1,1,0,0
1,1,0,1
1,1,1,0
1,1,1,1
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
0
0
0
1
0
0
1
0
0
1
-
Aussagenlogik und logische Gatter
2.2-51
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
->
0
0
0
1
0
0
1
0
0
1
-
ÅLogische 0 für:
x4 ∨ x3 ∨ x2 ∨ x1 = 0
•
••
••
•
ÅLogische 0 für:
_
x4 ∨ x3 ∨ x2 ∨ x1 = 0
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-52
2. Zahlen und Logik
2. Zahlen und Logik
KNF für Beispiel
N = {0,1,2,4,5,7,10}
Minimierung mit KV-Diagramm
x1
y=
0
0 (0,0,0,0)
1 (0,0,0,1)
2 (0,0,1,0)
4 (0,1,0,0)
5 (0,1,0,1)
7 (0,1,1,1)
10 (1,0,0,0)
(x4 ∨ x3 ∨ x2 ∨ x1)
_
∧ (x4 ∨ x3 ∨ x2 ∨ x1)
_
∧ (x4 ∨ x3 ∨ x2 ∨ x1)
_
∧ (x4 ∨ x3 ∨ x2 ∨ x1)
_
_
∧ (x4 ∨ x3 ∨ x2 ∨ x1)
_
_
_
∧ (x4 ∨ x3 ∨ x2 ∨ x1)
_
∧ (x4 ∨ x3 ∨ x2 ∨ x1)
0
x2
0
1
5
0
2
12
-
1
3
4
0
0
7
0
13
-
17
-
10 11
0
1
15
-
1
6
16
14
-
x4
x3
y = (x2 ∨ x4)
∧ (x1 ∨ x3)
_
_
∧ (x3 ∨ x1)
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-53
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2. Zahlen und Logik
2. Zahlen und Logik
Überblick
„
…
…
„
Prädikatenlogik
Zahlen
…
2.2-54
„
Siehe Tafelanschrieb
Informationsdarstellung
Zahlensysteme
Rechnerarithmetik
Logik
…
…
Aussagenlogik und logische Gatter
Prädikatenlogik
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-55
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-56
2. Zahlen und Logik
Ausblick
Compilerbau (Kapitel 7)
Automaten und Sprachen (Kapitel 6)
Betriebssysteme (Kapitel 5)
Maschinenorientierte Programmierung (Kapitel 4)
von-Neumann-Rechner (Kapitel 3)
Speicher
Zahlen und Logik (Kapitel 2)
Kommunikation (Kapitel 8)
von-Neumann-Rechner
Aussagenlogik und logische Gatter
Universität Göttingen - Informatik II - SS 2005
2.2-57
3. Rechnerarchitektur
Informatik II
SS 2005
Kapitel 3: Rechnerarchitektur
Teil 1: Schaltwerke
Dr. Michael Ebner
Dipl.-Inf. René Soltwisch
Lehrstuhl für Telematik
Institut für Informatik
Schaltnetze
Universität Göttingen - Informatik II - SS 2005
3. Rechnerarchitektur
3.1-2
3. Rechnerarchitektur
Kombinatorische Schaltelemente (Schaltnetze)
ZIEL DER VORLESUNG:
Verstehen lernen, was in einem
Rechner vorgeht. Wie er aufgebaut ist
und wie die einzelnen Bits und Bytes
den Rechner steuern….
„
Spezielle Verknüpfungselemente für Computer
…
Signalauswahl:
„
„
…
Registerauswahl:
…
Werte vergleichen
…
Addieren
…
Arithmetisch-Logische Einheit (ALU)
„
„
0000 0001 0000 1010 0101 0000 0010 0000
0000 0000 0001 0000 1010 0101 0101 0110
0000 0010 0000 0010 0010 0100 1010 0000
Multiplexer
Demultiplexer
„
Dekoder
Vergleicher
Addierer
Schaltnetze
Universität Göttingen - Informatik II - SS 2005
3.1-3
Schaltnetze
Universität Göttingen - Informatik II - SS 2005
3.1-4
3. Rechnerarchitektur
3. Rechnerarchitektur
Multiplexer (1/2)
A
2:1
Mux
B
Multiplexer (2/2)
A
y
B
4:1
Mux
C
S
S
y
0
A
1
B
_
SA ∨ SB
y
A
A
B
B
C
C
D
D
S1
S0
E
y
8:1
Mux
S2,S1,S0 y
F
S1,S0 y
0, 0
A
0, 1
B
1, 0
C
1,
1 __ D
__
Si .. Selektionseingänge
(S1
__ S0 A) ∨
(S1 S0
__ B) ∨
(S1 S0 C) ∨
(S1 S0 D)
D
0, 0, 0
0, 0, 1
0, 1, 0
0, 1, 1
1, 0, 0
1, 0, 1
1, 1, 0
1, 1, 1
G
H
S2
S1
S0
A
B
C
D
E
F
G
H
8:1
Mux
E
y
F
G
S2,S1,S0 y
H
0, 0, 0
0, 0, 1
0, 1, 0
0, 1, 1
1, 0, 0
1, 0, 1
1, 1, 0
1, 1, 1
S2
S1
S0
A
B
C
D
E
F
G
H
Schaltnetze
Universität Göttingen - Informatik II - SS 2005
3.1-5
Schaltnetze
Universität Göttingen - Informatik II - SS 2005
3. Rechnerarchitektur
3. Rechnerarchitektur
Dekoder/Demultiplexer
Vergleicher
A
B
C
y1
y2
y3
y4
A
B
2 bit
Dekoder
3 bit
Dekoder
y1
y2
y3
y4
y5
y6
y7
y8
A3
A2
A1
A0
B3
B2
B1
B0
y4,y3,y2,y1
C,B,A
y8,y7,y6,y5,y4,y3,y2,y1
A
0,
0,
1,
1,
0,
0,
0,
1,
0, 0, 0
0, 0, 1
0, 1, 0
0, 1, 1
1, 0, 0
1, 0, 1
1, 1, 0
1, 1, 1
0,
0,
0,
0,
0,
0,
0,
1,
B
0,
0,
1,
0,
0,
1,
0,
0,
1
0
0
0
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
0,
0,
1
0
0
0
0
0
0
0
A=B B, A
A>B
A=B
A<B
4 bit
Größe
>
<
=
=
=
=
=
=
=
=
=
Schaltnetze
Universität Göttingen - Informatik II - SS 2005
3.1-7
0
1
A3,B3, A2,B2, A1,B1, A0,B0, A>B,A=B,A<B A>B,A=B,A<B
4
A>B
A=B
A<B
A=B
B≠A
B=A
4 bit
Identität
4
B, A
0
1
0
1
3.1-6
>
<
=
=
=
=
=
=
=
>
<
=
=
=
=
=
>
<
=
=
=
1
0
1
0
0
0
1
1,
0,
1,
0,
1,
0,
1,
0,
0,
1,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0
1
0
1
0
1
0
1
0
0
1
Schaltnetze
Universität Göttingen - Informatik II - SS 2005
3.1-8
3. Rechnerarchitektur
3. Rechnerarchitektur
Addierer (1/4)
Addierer (2/4)
Halbaddierer
s
A
HA
B
c
B, A
s, c
0,
0,
1,
1,
0,
1,
1,
0,
0
1
0
1
„
Mehrstelliger Addierer
0
0
0
1
A0
B0
HA
Einstelliger Addierer für Addition zweier Binärzahlen A und B,
Ergebnis Summe S und Übertrag (Carry) C
s0
A
B
S
C
c
0
0
0
0
0
1
1
0
1
0
1
0
1
1
0
1
s1
A1
Volladdierer
ci-1
Bi
≥1
HA
A2
ci
VA
c
B2
c
B
&
C
Beispiel: 5 + 7
(5) 0101
(7) 0111
.. 1 1 1 <- Übertrag (Carry)
1100
c
s
S
Mehrstellige Additionsaufgabe
s2
Ai
=1
c
B1
si
HA
VA
A
Allgemein:
1. Summand
2. Summand
Übertrag
Summe
A4
B4
C5
S5
A3
B3
C4
S4
A2
B2
C3
S3
A1
B1
C2
S2
Si = (Ai + Bi ) + Ci
(+ = Addition)
Ci+1 = Ci Ai v CiAi v AiBi
Schaltnetze
Universität Göttingen - Informatik II - SS 2005
3.1-9
3. Rechnerarchitektur
B0
HA
c1
3.1-10
Addierer (4/4)
4 bit Paralleladdierer mit „carry look-ahead“ (paralleler Übertrag)
„Serienaddierer“: ökonomisch, aber langsam
s0
Schaltnetze
Universität Göttingen - Informatik II - SS 2005
3. Rechnerarchitektur
Addierer (3/4)
A0
A0
B0
C1 0
S1 S0
Beschleunigung mittels
Parallelisierung durch Carry-Vorausberechnung:
„carry look-ahead“
C2 =
C3 =
=
C4 =
C5 =
G1 ∨ C1P1
Cn+1
G2 ∨ C2P2 = G2 ∨ (G1 ∨ C1P1)P2
G2 ∨ G1 P2 ∨ C1P1P2
G3 ∨ G2 P3 ∨ G1P2P3 ∨ C1P1P2P3
G4 ∨ G3 P4 ∨ G2P3P4 ∨ G1P2P3P3 ∨ C1P1P2P3P4
= (BnAn) ∨ (Cn(Bn An))
Gn
Pn
G = generate carry
(erzeuge Übertrag
s1
A1
VA
c2
B1
s2
A2
VA
c3
B2
Cn+1 = (BnAn) ∨ (Cn(Bn An))
Gn
Cn+1 = Gn ∨ CnPn
C2 =
C3 =
=
C4 =
C5 =
Pn
C = propagate carry
(leite Übertrag weiter)
B4 A4 B3 A3 B2 A2 B1 A1 C1
| | | | | | | | |
Σ4
G1 ∨ C1P1
G2 ∨ C2P2 = G2 ∨ (G1 ∨ C1P1)P2
G2 ∨ G1 P2 ∨ C1P1P2
G3 ∨ G2 P3 ∨ G1P2P3 ∨ C1P1P2P3
G4 ∨ G3 P4 ∨ G2P3P4 ∨ G1P2P3P3 ∨ C1P1P2P3P4
| | | | |
C5 Z4 Z3 Z2 Z1
Schaltnetze
Universität Göttingen - Informatik II - SS 2005
3.1-11
Schaltnetze
Universität Göttingen - Informatik II - SS 2005
3.1-12
3. Rechnerarchitektur
3. Rechnerarchitektur
Addierer-Subtrahierer
Arithmetisch-Logische Einheit (ALU) (1/2)
S4 S3 S2 S1 Z
B4
|
|
|
A4
|
|
|
&
&
B3
|
|
|
A3
|
|
|
B2
|
|
|
&
&
&
A2
|
|
|
B1
|
|
|
&
&
A1
|
|
|
&
Auswahl
=1
=1
=1
=1
=1
=1
=1
Komplement
Σ4
C5
|
|
Z4
|
|
Z3
|
|
Z2
|
|
Z1
=1
0
0
0
0
C1
„
S4 0
S3
0
0
1
C1-1
„
0
0
1
0
C1-1
0
0
1
1
C1-2
0
S2
S1 0
1
0
0
C1+A
„
1
0
1
C1-A-1
„
0
1
1
0
C1+A-1
0
1
1
1
C1-A-2
1
0
0
0
C1+B
1
0
0
1
C1+B-1
1
0
1
0
C1-B-1
C1 1
0
1
1
C1-B-2
1
1
0
0
C1+A+B
1
1
0
1
C1+B-A-1
1
1
1
0
C1+A-B-1
1
1
1
1
C1-A-B-2
„
funktionaler Kern eines Digitalrechners
führt arithmetische und logische Operationen aus
Eingabe: Daten und Steuersignale
Ausgabe: Ergebnis und Statussignale
Meist nur für Festkommazahlen (Gleitkomma wird oft von einem
speziellen Arithmetik-Coprozessor ausgeführt oder in
Festkommazahlen unterteilt)
Schaltnetze
Universität Göttingen - Informatik II - SS 2005
3.1-13
3. Rechnerarchitektur
3.1-14
3. Rechnerarchitektur
Schaltwerke
x1
x2
Eingangs- x
3
variablen
Arithmetisch-Logische Einheit (ALU) (2/2)
Register X
Schaltnetze
Universität Göttingen - Informatik II - SS 2005
Register Y
s1
Multiplexerschaltnetz
s2
Schaltnetze
xn
zero
arithmetisch-logisches Schaltnetz
s3
s4
Schaltwerk
s5
cout
Schiebeschaltnetz
s6
s7
Takt
Speicher
elemente
Reset
Register Z
Schaltnetze
Universität Göttingen - Informatik II - SS 2005
Ausgangsvariablen
yn
cin
sign
overflow
y1
y2
y3
3.1-15
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-16
3. Rechnerarchitektur
3. Rechnerarchitektur
Takt
„
„
Moore- oder Zustandsautomat
Schaltwerke befinden sich zu gegebener Zeit in einem Zustand Q.
Ein solcher Zustand ist beispielsweise durch die Werte der
Ausgangsleitungen zu diesem Zeitpunkt charakterisiert.
Zustände ändern sich nur zu bestimmten diskreten Zeitpunkten, bei
Eintreffen eines Taktes, das heißt, wenn eine 1 auf der Taktleitung
anliegt oder bei Pegeländerung auf der Taktleitung, d.h. bei positiver
oder negativer Flanke.
„
Ausgangsbelegungen sind nur vom Zustand des Schaltwerkes
abhängig
X
Speicher
Schaltnetze
Schaltnetze
Y
Takt
Takt=1
Flanke
1
0
Zeit
Takt=0
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-17
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3. Rechnerarchitektur
3. Rechnerarchitektur
Mealy- oder Übergangsautomat
„
Speicherelemente
Ausgangsbelegungen sind vom Zustand und vom Wert der
Eingangsbelegungen abhängig
„
Binäre Speicherelemente:
…
…
…
X
Schaltnetze
3.1-18
Speicher
Schaltnetze
Y
kleinste logische Bausteine zur Aufbewahrung von Information.
Speicherung durch Einnahme der Zustände “0” oder “1”.
Realisierung als Schaltwerke.
D
Q
En
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-19
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-20
3. Rechnerarchitektur
3. Rechnerarchitektur
RS-Flipflop
Realisierung eines RS-Flipflop
Ein RS-Flipflop besitzt zwei besondere Eingänge zum
• Setzen
(auf “1”; Set)
und
• Rücksetzen (auf “0”; Reset)
des Inhalts.
Funktionstabelle der
Schaltfunktion
für neuen Zustand Q(n+1)
aus aktuellem Zustand Q(n)
R
Takt T
T=0: Zustand ändert sich nicht,
T=1: Zustand kann sich ändern.
Dann wird das RS-Flipflop durch
folgende Tabelle beschrieben:
S
T
Q(n)
S
0
0
1
1
Q(n+1)
Q(n+1)
Q(n)
0
1
nicht def.
R
0
1
0
1
S
0
0
0
0
1
1
1
1
R
0
0
1
1
0
0
1
1
Q(n)
0
1
0
1
0
1
0
1
Q(n)
R
0
1
1
1
0
0
-
S
Q(n+1)
0
1
0
0
1
1
undef.
undef.
__
__
Q(n+1) = R Q (n) ∨ S = R (Q (n) ∨ S)
________
Q(n+1) = R ∨ (Q (n) ∨ S)
R
≥1
Q
Rückkopplung
_
Q
≥1
Nebenbedingung: r ∧ s = 0
S
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-21
3. Rechnerarchitektur
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3. Rechnerarchitektur
Erweiterung zum RS-Latch
Funktionstabelle der
Schaltfunktion
für neuen Zustand Q(n+1)
aus aktuellem Zustand Q(n)
RS-Flipflop
Takt (Pegelsteuerung), „Clock“: Clk
Clk=0: Zustand ändert sich nicht,
Clk=1: Zustand kann sich ändern.
Symbol
R
R
0
0
1
1
0
0
1
1
Q(n)
0
1
0
1
0
1
0
1
Q(n+1)
0
1
0
0
1
1
undef.
undef.
R
&
≥1
Tabelle
Symbol
0
0
1
0
1
0
0
0
1
1
0
1
-
0
1
0
1
verb.
Q
R
S
Clk
Clk R S Q
Q
Q#
0 - - Q
1 - - Q
↑ 0 0 Q
↑ 1 0 0
↑ 0 1 1
Zeitdiagramm für das RS Latch
Clk
&
_
Q
≥1
S
S
R
R
Q
Q
Clk
S
Q
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
RS-Latch
Tabelle
RSQ Q
Q
Q#
S
=> VerUNDung von S und R mit Clk
S
0
0
0
0
1
1
1
1
3.1-22
3.1-23
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-24
3. Rechnerarchitektur
3. Rechnerarchitektur
Taktflankensteuerung
Taktflankengesteuerte Flipflops
Wir haben bisher ein taktpegelgesteuertes RS-NORFlipflop.
Taktflankensteuerung 2:
Ersetzen der UND-Glieder durch Impulsglieder
Positive Flankentriggerung
Clk
1
Clk
&
Z
1
0
Z
X
&
Clk
Z
Negative Flankentriggerung
1
0
X
Clk
X
1
t
t
&
0
Clk
1
t
0
t
Positive Flankentriggerung
X
1
Z
Q
S
Q
&
0
Clk
1
t
0
t
Z
R
X
Clk
Z
Z
t
t
Clk
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-25
3. Rechnerarchitektur
3. Rechnerarchitektur
D-Latch und D-Flipflop
D-Latch
Tabelle
Symbol
Häufig ist es wünschenswert, dass statt Set und Reset nur ein
Eingangssignal benutzt wird.
Der Wert des Eingangssignals wird dann beim entsprechendem
Enable- oder Taktsignal übernommen.
D
Q(n)
0
1
0
1
0
1
0
1
Q(n+1)
__
R
0
R=S
≥1
&
1
0
Clk
0
1
≥1
&
En
1
S
D
undef.
undef. D: „Vorbereitungseingang“
Q
Q
0
1
Q
D
D = Delay
En
D
_
Q
Q
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
En
Zeitdiagramm
1
R
0
0
1
1
0
0
1
1
Q
Q#
En
Eingangsseitige Erweiterungsbeschaltung von R und S.
S
0
0
0
0
1
1
1
1
3.1-26
3.1-27
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-28
3. Rechnerarchitektur
3. Rechnerarchitektur
D-Flipflop -- Flankengesteuert
Tabelle
Symbol
D
Q
Q#
Clk
T-Flipflop (als Vorstufe zu JK Flipflop)
Tabelle
Symbol
Clk
Q
0
1
↑
Q
Q
D
D
Q
Q#
Clk
Clk
Q
0
1
↓
Q
Q
D
Soll bei jeder Taktflanke den Zustand wechseln, wenn an einem
Steuereingang der Signalpegel 1 anliegt, sonst nicht
(„gesperrt“).
Erweiterung des RS-Flipflop
R1
R2
Zeitdiagramm (positiv flankengetriggert)
Clk
&
≥1
&
≥1
Q
Clk
Clk
S1
S2
R
&
&
S
_
Q
D
Q
R
&
T
&
≥1
Q
&
≥1
_
Q
Clk
Clk
Meistgebrauchtes Flipflop: Basis-Flipflop für alle
Register in Prozessoren und in Controllern
&
S
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-29
3. Rechnerarchitektur
JK-Flipflop (1/2)
Tabelle
Symbol
Tabelle
Symbol
Clk T Q Q
Q
Q#
Clk
T = Toggle
3.1-30
3. Rechnerarchitektur
T-Flipflop
T
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
0
1
↑
↑
↑
0
1
1
0
1
Q
Q
Q
1
0
Möglichst vielseitiges Flipflop:
Speicherfall, Setzfall, Rücksetzfall, Kippfall: Auswahl durch 2
Steuerleitungen (J=Jump, K=Kill)
Clk T Q Q
T
Clk
Q
Q#
0
1
↓
↓
↓
0
1
1
0
1
Q
Q
Q
1
0
Modifikation
des T-Flipflops
T
&
&
≥1
Q
&
≥1
_
Q
Clk
Clk
&
Zeitdiagramm (positiv flankengetriggert)
R
S
Clk
T
K
&
J
&
≥1
Q
&
≥1
_
Q
Clk
Clk
Q
R
&
S
Hauptanwendung: Zählerschaltungen
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-31
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-32
3. Rechnerarchitektur
JK-Flipflop (2/2)
Symbol
3. Rechnerarchitektur
Clk J K
J
Q
Q#
K
Clk
Zeitdiagramm
Symbol
Tabelle
0
1
↑
↑
↑
↑
0
1
0
1
Bevorrechtigte Eingänge
Tabelle
Q
Clk J K Q
J
- Q
- Q
0 Q
0 1
1 0
1 /Q
Q
Q#
K
Clk
0
1
↓
↓
↓
↓
0
1
0
1
- Q
- Q
0 Q
0 1
1 0
1 /Q
„
Oft möchte man Flipflops gezielt auf einen Wert setzen
…
„
Gezieltes Laden eines Zählers auf einen Wert
…
Daher besondere Eingänge eines Flipflops zum Setzen / Rücksetzen
„
„
„
…
…
…
J
…
„
müssen nicht beide vorhanden sein
Reset häufiger als Set.
Sondereingänge können direkt wirken
Clk
K
Beispiele: Rücksetzen einer Schaltung beim Einschalten oder "Reset
Taster"
man nennt das asynchron
Vorteil: Wirkt immer, auch ohne Takt
Nachteil: Auch kurze Impulse können Reset auslösen (gefährlich!)
Also: ok für General-Reset, nicht für logische Funktion
Gegensatz: Synchrone Eingänge wirken mit der Taktflanke
…
…
Q
Auch für Logikfunktionen nutzbar
Aber: Taktgenerator muss laufen, sonst funktioniert z.B. Reset nicht.
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-33
3. Rechnerarchitektur
S
D
Clk
R
Q
Q#
Zeitdiagramm
Synchrone bevorrechtigte Eingänge
Tabelle
Symbol: D-Flipflop mit
Tabelle
Setz- und Rücksetzeingang Clk R S D Q
R S Clk DQ
0
1
1
1
1
1
1
0
0
0
0
0
1
↑
↑
0
1
0
1
Q
Q
0
1
R und S wirken auch ohne Takt.
R ist bevorrechtigt.
S
D
Clk
R
Q
Q#
Zeitdiagramm
Clk
Clk
R
R
D
D
Q
Q
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-34
3. Rechnerarchitektur
Asynchrone bevorrechtigte Eingänge
Symbol: D-Flipflop mit
Setz- und Rücksetzeingang
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-35
0
1
↑
↑
↑
↑
0
1
1
1
1
0
0
0
1
Q
Q
0
1
0
1
R und S wirken nicht ohne Takt.
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-36
3. Rechnerarchitektur
3. Rechnerarchitektur
Das Register
Das Register: Anwendung
Ein Register ist
„
…
…
„
Anwendung: Standardspeicher in Prozessoren
eine Aneinanderreihung von D-Flipflops, z.B. 8, oder 16 oder 32 Stück
("Breite" des Registers)
Der Takt ist allen FFs gemeinsam
D4
D3
D2
…
…
„
D1
Ein Register hat oft bevorrechtigte Eingänge
…
Clk
Clr
…
Clk
Clk
Clk
Clk
Q3
Wie bei den Einzelflipflops, z.B. Set oder Reset (synchron oder
asynchron)
Ein Eingang wirkt auf alle Flipflops des Registers
S
D
R
S
D
R
S
D
R
S
D
R
„
Typischer bevorrechtigter Eingang: Clock Enable
…
Q4
Für den Benutzer sichtbare Register
Viele Register für Zwischenwerte
Q2
Q1
…
…
CE muß 1 sein, damit Register synchrone Operation ausführt
Effekt: Register behält den alten Wert bei, "hält seinen Zustand„
Typische Anwendung zur Auswahl eines bestimmten Registers
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-37
3. Rechnerarchitektur
Beispiel Register
Q
0
1
↑
Qi
Qi
Di
3.1-38
3. Rechnerarchitektur
mit Reset
Der Zähler (1/3)
mit Enable
Tabelle
Clk
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
Asynchronzähler
Besteht aus Flipflops, die nicht durch einen gemeinsamen Takt gleichzeitig
1
geschaltet werden.
T
Asynchrone Dualzähler
Q
Q
T
Duales Zahlensystem,
Q#
Clk
Q#
Aufbau aus T-Flipflops
0
Zeitdiagramm für Register mit Enable
E
Q0 20
__
Q0
1
Q1 21
__
Q1
0
Q2 22
__
Q2
1
Q3 23
__
Q3
Prinzipieller
Aufbau
Clk
Clk
G
Q0
D
X"00"
Q
X"??"
X"55"
X"AA"
X"55"
X"FF"
Q1
X"AA"
Q2
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-39
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-40
3. Rechnerarchitektur
3. Rechnerarchitektur
Der Zähler (2/3)
Clk
Qi
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
↑
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111
0000
Carry
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
Der Zähler (3/3)
Grundsätzliche Zähler-Tabelle
Symbol
Tabelle (Kurzform)
mit bevorrechtigten Eingängen
Clk
Qi Carry
Clk, R, Ld,En,Di
↑
Qi
0
1111 1
Qi+1 0
↑
↑
↑
-
1
0
0
0
0
0
1
0
0
0
0
0
1
0
1
Qi Carry
Zeitdiagramm
- 0000 0
Di Di 0
Qi 0
- Qi+1 0
- 1111 0
- 1111 1
Clk
Clr
Wird zur Kaskadierung
mit dem Enable-Eingang
des nachfolgenden Zählers verbunden,
der dann bei der nächsten positiven Flanke
hochzählen kann.
Achtung: En beeinflusst Carry
Load
EnP/T
D
X"A"
X"5"
Q X"?"
X"0"
X"5"
X"6"
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-41
3. Rechnerarchitektur
3.1-42
3. Rechnerarchitektur
Das Schieberegister (1/5)
Das Schieberegister (2/5)
Aneinanderreihung von N Flipflops, deren Ausgang jeweils mit dem
Eingang des nachfolgenden Flipflops verbunden ist und mit gemeinsamer
Taktleitung.
Beispiel 4-bit Schiebregister:
Q1
Clk
1
2
3
4
5
1
2
3
4
5
D
Q1
Schieberichtung
Q2
Q2
Q3
Q4
Q3
Q4
D
Clk
S
D
Clk
R
Q#
S
D
Clk
R
Q#
S
D
Clk
R
Q#
S
D
Clk
R
Q
Q#
Clk
D
Q1
Q2
Q3
Das Signal, das an D anliegt, wird mit jedem Clock-Signal zum
nachfolgenden Flipflop weiter geschoben.
Q4
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-43
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-44
3. Rechnerarchitektur
3. Rechnerarchitektur
Das Schieberegister (3/5)
Tabelle Clk, SerIn
↑
↑
↑
↑
↑
1
1
0
1
1
0
Das Schieberegister (4/5)
Q
0000
0001
0010
0101
1011
0110
„
Anwendung:
…
Serielle Datenübertragung
„
„
…
…
verschiedene Implementierungen
„
Parallel – Serienwandlung
Serien – Parallelwandlung
Verzögerung
Rechenoperationen
Verschiedene Ausführung, je nach Anwendung:
…
Nur Serien-Eingang und –Ausgang
…
Serien-Eingang und -Ausgang plus FF-Ausgänge
…
Serien-Eingang und -Ausgang plus FF Eingänge
…
Universal Schieberegister: Alle Ein- Ausgänge
„
„
„
für Verzögerungen
zur Seriell-Parallel Wandlung
zur Parallel-Seriell Wandlung
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-45
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3. Rechnerarchitektur
3. Rechnerarchitektur
Das Schieberegister (5/5)
„
…
…
…
…
„
Ausblick
Bevorrechtigte Eingänge:
…
„
Reset: setzt alle FFs auf 0
Set ist ungebräuchlich
Load: paralleles Laden des Registers
Shift Enable: Es wird geschoben wenn Enable 1 ist.
Direction: Nach rechts oder links schieben.
…
Mit diesen Bausteinen kann man nun komplexe Schaltwerke
aufbauen, die aus in der Größenordnung 107 (!) Gattern und
Latches bestehen. Solch hochkomplexe Systeme kann man
natürlich nicht manuell und unsystematisch aufbauen. Generell gilt:
…
…
Mathematische Bedeutung des Schiebens:
Bsp:
0000 0010 dezimal 2
0000 0100 dezimal 4
0000 1000 dezimal 8
…
3.1-46
…
Realisiere Funktionen durch Gatterschaltungen
Realisiere Register und kritische Speicherplätze durch Master Slave
Latches
Benutze zur Konstruktion Hardwarebeschreibungssprachen
(Hardware Description Languages, HDL) und übersetze sie in
Schaltungen, so wie man Programme in Maschinenprogramme
transformiert.
Schieben nach links: Multiplikation mit 2
Schieben nach rechts: Division durch 2
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-47
Schaltwerke
Universität Göttingen - Informatik II - SS 2005
3.1-48
3. Rechnerarchitektur
Von Neumann Prinzipien (1946)
1.
Rechner besteht aus vier Werken:
…
Haupt- bzw. Arbeitsspeicher für
Programme und Daten
… Steuerwerk
… Rechenwerk (ALU)
… Ein- / Ausgabewerk (I/O)
Informatik II
SS 2005
2.
Kapitel 3: Rechnerarchitektur
3.
4.
Teil 2: von Neumann Architektur
5.
Dr. Michael Ebner
Dipl.-Inf. René Soltwisch
6.
7.
Lehrstuhl für Telematik
Institut für Informatik
Programmsteuerung (universelle
Hardware)
Gemeinsamer Speicher
Hauptspeicher besteht aus
adressierbaren Zellen
Programm besteht aus einer Folge von
Befehlen
Sprünge sind möglich (bedingte und
unbedingte)
Speicherung erfolgt binär
Universität Göttingen - Informatik II - SS 2005
3. Rechnerarchitektur
3. Rechnerarchitektur
Bestandteile eines von Neumann Rechners
„
„
…
…
„
„
Datenbus, Adressbus, Steuerbus
„
„
Keyboard, Maus, Scanner, …..
Drucker, Bildschirm, ….
Festplatten / Magnetbänder
„
„
Steuerwerk (auch Leitwerk genannt)
Rechenwerk
…
…
„
„
Ein- / Ausgabewerk (I/O)
…
„
„
RAM, ROM
Busse
…
„
Speicher
Haupt- bzw. Arbeitsspeicher für Programme und Daten
…
Speicherwerk (Hauptspeicher, Arbeitsspeicher).
Persistente Speicher wie Festplatten sowie Caches und Register zählen wir
logisch nicht zum Speicher.
Der Arbeitsspeicher besitzt einen eingeschränkten Adressumfang
Ergänzung durch Hintergrundspeicher (z.B. Plattenspeicher,
Magnetbandspeicher, etc.), die persistent sind.
Die Zugriffsgeschwindigkeit zum Arbeitsspeicher sollte der
Arbeitsgeschwindigkeit der CPU angepasst sein.
Je schneller der Speicher desto teurer Æ Speicherhierarchie
Für die verschiedenen Einsatzbereiche der Speicher werden
unterschiedliche Speicherarten verwendet, die sich unterscheiden
hinsichtlich:
…
Speichermedium und physikalischem Arbeitsprinzip
Organisationsform
… Zugriffsart
… Leistungsparameter
… Preis
Register
Arithmetical Logical Unit (ALU)
…
Steuerwerk + Rechenwerk = CPU
Universität Göttingen - Informatik II - SS 2005
3.2-2
3.2-3
Universität Göttingen - Informatik II - SS 2005
3.2-4
3. Rechnerarchitektur
3. Rechnerarchitektur
Busse
„
Ein gemeinsam genutztes Medium
Die Anzahl gleichzeitig
übertragbarer Bits heißt Busbreite.
Busse können hierarchisch
organisiert sein über Brücken
CPU direkt am Front Side Bus
North Bridge
„
South Bridge
„
„
„
„
…
…
Beispiel Busse
Schnittstelle
USB 1.0/1.1
USB 2.0 Hi-Speed
Firewire
Serielle Schnittstelle
Parallele Schnittstelle
SCSI (SCSI 1)
Fast SCSI (SCSI 2)
Ultra SCSI
Ultra Wide SCSI
Ultra 2 Wide SCSI
Ultra 3 Wide SCSI
AGP / PCI
Seriell / Audio / USB / Firewire
Übertragungsgeschw.
1,5 MByte/s
60 MByte/s
50 MByte/s
0,12 MByte/s
0,12 MByte/s
5 MByte/s
10 MByte/s
20 MByte/s
40 MByte/s
80 MByte/s
160 MByte/s
Max. Kabellänge
5m
5m
4,5 m
100 m
5m
6m
3m
1,5 m
1,5 m
12 m
12 m
Beispiel eines älteren PCs
Universität Göttingen - Informatik II - SS 2005
3.2-5
3. Rechnerarchitektur
Universität Göttingen - Informatik II - SS 2005
3.2-6
3. Rechnerarchitektur
Ein- und Ausgabe (I/O für input / output)
„
„
„
In den Bereich I/O fallen alle Geräte, die Daten ausgeben oder
Eingaben annehmen wie Monitore oder Soundkarten
Auch die Festplatten sind nach von Neumann I/O Geräte
DMA – Direct Memory Access
…
„
Bock Mode bei eigenem Cache
I/O Geräte sind über den Bus mit Speicher und Prozessor
verbunden
Universität Göttingen - Informatik II - SS 2005
3.2-7
Universität Göttingen - Informatik II - SS 2005
3.2-8
3. Rechnerarchitektur
3. Rechnerarchitektur
Das Leitwerk (Steuerwerk, control unit)
„
„
„
„
„
Das Leitwerk steuert die Arbeitsweise des Rechenwerks durch schrittweise
Interpretation der Maschinenbefehle
Der Befehlszähler (PC) enthält die Adresse des nächsten auszuführenden
Befehls; Das Leitwerk erhöht diesen Wert vor jeder Operation um 1.
(PC:=PC+1)
Das Befehlsregister (IR) enthält den aktuellen Befehl
Das Statusregister (SR) nimmt Rückmeldungen aus dem System auf
Das Leitwerk decodiert den Befehl
…
Der Operationsteil (auch Opcode genannt) bestimmt dabei welche Operationen
ausgeführt werden sollen
… Operanden werden durch Angabe von Registern oder Speicheradressen
bestimmt
… Direktoperanden können durch Konstanten angegeben werden
… Decodierung i.d.R. durch Mikroprogramme
„
Das Leitwerk erzeugt die nötigen Steuersignale für das Rechenwerk
Universität Göttingen - Informatik II - SS 2005
3.2-9
3. Rechnerarchitektur
„
„
„
„
„
„
3.2-10
3. Rechnerarchitektur
Das Rechenwerk
„
Universität Göttingen - Informatik II - SS 2005
Rechneraufbau
Das Rechenwerk bildet zusammen mit dem Steuerwerk die CPU
Es besteht aus einer (oder mehreren) ALU und Registern
arithmetische Operationen (Addition, Subtraktion, ...)
logische Operationen (UND, ODER, NICHT, ...)
Verschiebe-Operationen
u. U. Bitmanipulation
Vergleichs- und Bit-Test-Operationen
Quelle: Rechenberg, Pomberger
Informatik-Handbuch S. 301
Universität Göttingen - Informatik II - SS 2005
3.2-11
Universität Göttingen - Informatik II - SS 2005
3.2-12
3. Rechnerarchitektur
3. Rechnerarchitektur
Der Befehlszyklus
Der Befehlszyklus
„
1.
2.
3.
4.
5.
FETCH – Befehlsholphase
DECODE – Dekodierungsphase
FETCH OPERANDS – Operanden nachladen
EXECUTE – Befehl ausführen
UPDATE PC – PC auf den nächsten Befehl zeigen
lassen
„
„
„
„
„
„
Universität Göttingen - Informatik II - SS 2005
3.2-13
Die Gemeinsame Arbeitsweise von Leitwerk und Rechenwerk wird
durch den Maschinenbefehlszyklus beschrieben
Der Befehlszyklus wird von der CPU ständig durchlaufen
Die Befehle stehen im Speicher
Das Leitwerk "weiß" jederzeit, welcher Befehl als nächster
auszuführen ist
Die Adresse (= Nummer der Speicherzelle) des nächsten
auszuführenden Befehls steht in einem speziellen Register des
Leitwerks, dem Befehlszähler (PC)
Üblicherweise stehen aufeinander folgende Befehle in aufeinander
folgenden Speicherzellen, der zuerst auszuführende Befehl hat die
niedrigste Adresse
Zu Beginn des Programms wird der PC mit dessen Startadresse
geladen
Universität Göttingen - Informatik II - SS 2005
3. Rechnerarchitektur
3.2-14
3. Rechnerarchitektur
Ablauf des Befehlszyklus im Detail
Programm-Unterbrechungen (Interrupts) – I
(1a) Befehlsholphase: Speicherzugriff auf die vom PC angezeigte Adresse.
(1b)Der Befehl wird in das Befehlsregister des Leitwerks gebracht. Anschließend wird der
PC erhöht, er zeigt dann auf den nächsten Befehl. Besteht ein Befehl aus mehreren
Speicherworten, so setzt sich diese Phase auch aus mehreren Speicherzugriffen
zusammen, bis der Befehl vollständig im IR steht.
Das Befehlsregister (instruction register IR) ist untergliedert in Opcode-Register (OR,
Befehlsregister) und Adress- Register (AR).
(2) Der Befehl im OR wird decodiert (Befehlsdecoder) und der Ablaufsteuerung
zugeführt. Diese kann als Mikroprogramm oder hart verdrahtet realisiert sein. Die
Ablaufsteuerung erzeugt die für die Befehlsausführung nötigen Steuersignale.
(3) Benötigt der Befehl Operanden, so wird deren Adresse aus dem Inhalt des AR
ermittelt.
(4a)Nun erfolgt der Speicherzugriff auf die so festgelegte Operandenadresse.
(4b)Die Operanden werden in das vom Opcode spezifizierte Register des Rechenwerks
oder in ausgewählte Speicherzellen gebracht.
(5) Falls die Art des Opcodes weitere Teiloperationen erfordern, werden diese nun
ausgeführt. Dabei kann auch der Inhalt des PCs verändert werden (Sprungbefehle,
Prozeduraufrufe).
„
Universität Göttingen - Informatik II - SS 2005
Universität Göttingen - Informatik II - SS 2005
3.2-15
„
„
„
„
Der Programmablauf muss manchmal unterbrochen werden.
Lesen von Daten, Terminal Eingaben usw.
Die Unterbrechung erfolgt durch ein an die CPU gesandtes Signal,
das interrupt request (IRQ) genannt wird.
Die CPU veranlasst das gerade laufende Programm zu
unterbrechen und eine Befehlsfolge auszuführen, die auf die
Unterbrechung reagiert
Nach dem Abarbeiten der interrupt service routine (ISR) fährt der
Rechner mit der Ausführung des unterbrochenen Programms fort.
3.2-16
3. Rechnerarchitektur
3. Rechnerarchitektur
Programm-Unterbrechungen (Interrupts) – II
„
RISC vs. CISC
Als Reaktion auf eine Unterbrechungsanforderung geschehen zwei Dinge:
„
…
Retten des aktuellen Programmzustands: Der Maschinenstatus, d.h. der Inhalt
der Register der CPU, muss festgehalten werden. Dies geschieht durch
Wegspeichern der Registerinhalte des gerade unterbrochenen Programms
(Zustandsvektor) auf den Stack.
… Laden der Register mit dem Zustandsvektor der ISR (z.B. Startadresse der ISR):
Der Zustandsvektor steht an einer festgelegten Adresse im Speicher (InterruptVektor). Das Programm wird nun ab der Startadresse der ISR fortgesetzt.
„
„
„
Die Unterbrechung darf nicht mitten in einer Befehlsausführung erfolgen
(undefinierter Prozessorstatus!), sondern erst nachdem der gerade laufende
Befehl vollständig abgearbeitet ist, also am Ende des Befehlszyklus.
Nach Ende der ISR wird der ursprüngliche Zustandsvektor wieder vom
Stack geholt und das Programm an der Unterbrechungsstelle fortgesetzt.
Während des Rettens des Programmzustands und des anschließenden
Ladens des Zustandsvektors der ISR darf keine neue
Unterbrechungsanforderung auftreten (Zustandsinformation unvollständig!).
Der Befehlssatz der Prozessoren enthält daher spezielle Befehle zum
Sperren und Freigeben von Unterbrechungsanforderungen
Universität Göttingen - Informatik II - SS 2005
3.2-17
„
…
…
…
…
…
…
…
„
„
SIMD
Single
Instruction
Multible
Data
MIMD
Multible
Instruction
Multible
Data
Der Earth Simulator:
…
Nach Daten und Instruktionen
MISD
Multible
Instruction
Single
Data
…
…
…
…
…
…
Universität Göttingen - Informatik II - SS 2005
3.2-18
Was ist möglich?
Klassifikation nach Flynn
SISD
Single
Instruction
Single
Data
Das Konzept des Pipelinings wurde verfolgt
3. Rechnerarchitektur
Nicht von Neumann Architekturen
…
weniger Befehle
gleiche Länge der Befehle
kürzere Ausführungszeit pro Befehl
pipelining
feste Verdrahtung
die arithmetischen Befehle werden nur auf Registern ausgeführt nicht
auf den Speicher
Auf den Speicher kann nur über Lade- und Schreibbefehle zugegriffen
werden
Universität Göttingen - Informatik II - SS 2005
3. Rechnerarchitektur
„
Die Intel x86 CPUs und Motorola 68000 Serie sind CISC
Prozessoren – CISC (Complex Instruction Set Computer)
Der RISC Prozessor ist einfacher aufgebaut (Reduced Instruction
Set Computer)
3.2-19
5,120 (640 8-way Knoten)
500 MHz NEC CPUs
8 GFLOPS per CPU (41
TFLOPS total)
2 GB (4 512 MB FPLRAM
modules) per CPU (10 TB
total)
shared memory in jedem
Knoten
640 × 640 crossbar switch
zwischen den Knoten
16 GB/s Bandbreite
zwischen den Knoten
20 kVA Stromverbrauch pro
Knoten
Universität Göttingen - Informatik II - SS 2005
Der Earth Simulator -- NEC SX
Earth Simulation Center
Yokohama – Japan
http://www.es.jamstec.go.jp/
www.top500.org
3.2-20
3. Rechnerarchitektur
3. Rechnerarchitektur
Ausblick
Benchmarking
„
„
„
Analyse der Geschwindigkeit von Rechnern (Performance)
Was sagen die MIPS (million instructions per second [nicht unser
MIPS Prozessor!!!]) und Flops (Floating point Operations) aus?
So genannte Mixe aus verschiedenen Operationen, um die Leistung
zu bewerten.
…
…
„
Compilerbau (Kapitel 7)
Automaten und Sprachen (Kapitel 6)
Betriebssysteme (Kapitel 5)
Maschinenorientierte Programmierung (Kapitel 4)
Der LINPACK-Benchmark ist wichtig für die Numerik
Es gibt viele weitere: SPAC, WHETSTONE, DHRYSTONE, EDN,
SSBA-Suite, …usw.
von-Neumann-Rechner (Kapitel 3)
Die Thematik ist sehr komplex und würde alleine eine ganze
Vorlesung füllen.
Speicher
Zahlen und Logik (Kapitel 2)
Kommunikation (Kapitel 8)
von-Neumann-Rechner
Universität Göttingen - Informatik II - SS 2005
3.2-21
Universität Göttingen - Informatik II - SS 2005
3.2-22
4. Assembler
Assembler Programmierung – Motivation
Was ist ein Programm?
Eine Reihe von Befehlen, die der Ausführung einer Aufgabe dient
Dazu wird das Programm sequentiell abgearbeitet und Befehl für Befehl
abgearbeitet. Der Prozessor arbeitet dabei zustandsbasiert
Informatik II
Problem:
SS 2005
Welche Befehle kennt der Prozessor?
Sind das dieselben Befehle, die ein Mensch verwendet?
Kapitel 4: Assembler Programmierung
Sich Schritt für Schritt dem Prozessor nähern…
Anweisung: Addiere die Zahlen von eins bis hundert und speichere das
Ergebnis!
Integer: Ergebnis := Sum(1+2+3+4+…+100);
….aber das sind immer noch nicht die Befehle, die ein Prozessor
versteht.
Dr. Michael Ebner
Dipl.-Inf. René Soltwisch
Lehrstuhl für Telematik
Institut für Informatik
Universität Göttingen - Informatik II - SS 2005
4. Assembler
4. Assembler
Assembler Allgemein – Befehle (Maschinensprache)
Assembler vs. Maschinensprache
Die Befehle, die der Computer versteht und ausführen kann, sind Bitfolgen
Maschinensprache, in der Regel für jede CPU unterschiedlich.
Ausnahme: (aufwärts-) kompatible Rechnerfamilien
Beispiel: 286, 386, 486, Pentium
Der Befehl muss zwei Angaben enthalten (v. Neumann-Rechner):
Gesamtheit aller vom Prozessor ausführbaren Befehle
(Maschinenbefehle) heißt Maschinensprache
Prozessoren können nur numerische Instruktionen ausführen.
0000 0010 0010 0100 0000 0010 0000
Addiere den Inhalt der Register 17 und 18 und speichere das Ergebnis
im Register 8 ab
für den Menschen nicht gut verständlich
durchzuführende Operation (Was!) Operations-Code
verwendeter Operand (Womit!) Adresse
Häufig gehen diese Angaben auch direkt in den Op-Code ein. Nach der
Anzahl der Operanden im Adressteil unterscheidet man:
8-Bit-Mikrocomputer arbeiten fast immer mit Einadress-Befehlen (1. Quelle und
Zieladresse implizit gegeben, z.B. Akkumulator), 16-Bit-CPUs dagegen oft mit
Zweiadress-Befehlen.
Ein Befehl kann aus einem oder mehreren Speicherworten bestehen
Bei Computern mit großer Wortlänge können auch mehrere Befehle in einem
Speicherwort stehen
Bei 8-Bit-Mikros besteht der OP-Code aus einem Byte, der Adress-Teil aus
einem oder zwei Bytes (= eine Adressangabe)
Universität Göttingen - Informatik II - SS 2005
4-2
4-3
Ein Assembler setzt die Befehle um und verwaltet symbolische
Adressen
Der Wortschatz eines Assembler heißt Assemblersprache oder auch
einfach Assembler
Universität Göttingen - Informatik II - SS 2005
4-4
4. Assembler
4. Assembler
Assembler
Vom Assembler zur Hochsprache
Lösung des Problems: eine Hochsprache
Es werden dem Programmierer mehr Befehle angeboten
Speicherverwaltung wird übernommen
Die Befehle sind Prozessor unabhängig
Aber auch die Maschinenbefehle (bzw. Assemblerbefehle) sind für
den Menschen schwer zu verstehen, selbst wenn er nicht direkt in der
binären Maschinensprache programmieren muss.
Es gibt keine Variablen
Einige Befehle stehen nicht direkt zur Verfügung.
Jeder Prozessor ist anders, also auch jeder Assembler
Das bedeutet, dass ein Programmierer ein Assemblerprogramm (z.B.
Summe von 1 bis 100) für jeden Prozessor neu schreiben muss.
Wer vermittelt nun zwischen Hochsprache und Maschinensprache?
Ein Compiler übersetzt das Hochsprachenprogramm in
Assemblerprogramm.
Diesen Vorgang nennt man kompilieren
Ein Assembler macht aus einem Assemblerprogramm ein
Maschinensprachenprogramm
Anstelle des Compilers kann auch ein Interpreter verwendet werden.
Dieser erzeugt auch Maschinencode, aber erst zur Laufzeit.
Im Unterschied zum Interpreter übersetzt der Compiler das gesamte
Programm.
Universität Göttingen - Informatik II - SS 2005
4-5
4. Assembler
Universität Göttingen - Informatik II - SS 2005
4-6
4. Assembler
Wo wir jetzt sind – ein kurzes Fazit
Vorher Zahlendarstellung / Gatter
von Neumann Rechner
ALU
Programm in einer
temp = v[k];
Hochsprache (C, Java)
v[k] = v[k+1];
Compiler
Assembler Programm
(Spim für MIPS R2000)
Jetzt Assembler Programmierung
Assembler
Später:
Compilerbau: Wie bekomme ich aus einer Hochsprache ein
Assemblercode? Wie optimiere ich den Compiler? In welcher Sprache
schreibe ich einen solchen Compiler?
Formale Sprachen: Formale Analyse der Sprachen und ihrer
Mächtigkeit, usw.
Maschinensprache
Programm (MIPS R2000)
Universität Göttingen - Informatik II - SS 2005
4-7
v[k+1] = temp;
lw
lw
sw
sw
$15,
$16,
$16,
$15,
0($2)
4($2)
0($2)
4($2)
0000 1001 1100 0110 1010 1111 0101 1000
1010 1111 0101 1000 0000 1001 1100 0110
1100 0110 1010 1111 0101 1000 0000 1001
0101 1000 0000 1001 1100 0110 1010 1111
Interpretation durch
Leitwerk
Registertransfer
IR ← Imem[PC]; PC ← PC + 4
Anweisungen
ALUOP[0:3] ⇐ InstReg[9:11] & MASK
°
°
Universität Göttingen - Informatik II - SS 2005
C code
Assemblerprogramm
Maschinencode
Registertransfer
Anweisung
4-8
4. Assembler
4. Assembler
Wie können wir nun Programmieren?
Arbeitsweise des R 2000
Wir brauchen:
Einen Simulator:
1.
2.
MIPS R2000 – Stanford Projekt: Microprocessor without Internal
Pipeline Stages
RISC Prozessor
SPIM (unser Simulator) unterliegt der GNU-Lizenz
3.
Der Befehl wird geladen
Der Befehl wird decodiert
Daten werden in die Register geladen
Die zugehörigen Operanden werden geladen
4.
http://www.cs.wisc.edu/~larus/spim.html
Linux: xspim; Windows© PCSpim
In Abhängigkeit des aktuellen Befehls werden die Register
verändert.
z.B. der Inhalt von zwei Registern wird addiert und das Ergebnisse in
ein anderes Register geschrieben.
Einen Texteditor
5.
Daten werden aus den Registern in den Speicher geschrieben
Zum Erstellen der Programme
Universität Göttingen - Informatik II - SS 2005
4-9
4. Assembler
Universität Göttingen - Informatik II - SS 2005
4-10
4. Assembler
Adressierung des Speichers
Der Speicher
Warum Hexadezimal?
Von Neumann-Rechner haben gemeinsamen Speicher für Daten
und Programm
Der Programmierer muss verhindern, dass der Rechner versucht,
die abgelegten Daten als Programm auszuführen.
Der Prozessor soll das Programm nicht mit Daten überschreiben
Selbstmodifizierender Code ist möglich (Beispiel: Computer Viren)
Lösung: Segmente für Daten, Programm, OS und Stack
Größe des Speichers
Jede Zelle ist 8 Bit (1 Byte) Groß und hat eine 32 Bit Adresse
Kilobyte 1KB = 1024 Byte = 210Byte
Megabyte 1MB = 1024 KB = 220 Byte
Gigabyte 1GB = 1024 MB = 230 Byte
Mit den Direktiven .data und .text geben wir an, wohin die folgenden
Befehle geschrieben werden
Der Programmierer kann aber auch direkt in den Speicher
schreiben.
Universität Göttingen - Informatik II - SS 2005
4-11
Universität Göttingen - Informatik II - SS 2005
4-12
4. Assembler
4. Assembler
Hauptspeicher Verwaltung
Datentypen
Adresse 32 Bit
Der Speicher besteht aus 232
Zellen à einem Byte
.text und .data sind Direktiven,
die angeben, was Programm
und was Daten sind.
Speicherzellen 8 Bit
0xFFFFFFFF
Betriebssystem
und ROM
0x80000000
0x7FFFFFFF
Stack Segment
Ganze Zahlen
.word – 32-Bit-Zahlen
.half – 16-Bit-Zahlen
.byte – 8-Bit-Zahlen
Zeichenketten
Freier Bereich
.ascii – 8Bit pro Zeichen (256 verschiedene Zeichen)
.ascii
.asciiz
“Das ist ein Beispieltext. Und ohne “
“Zeilenumbruch geht es weiter.“
Floating Point wird vom Coprozessor unterstützt.
Daten Segment
0x10000000
Text Segment
0x00400000
Reserved
0x00000000
Universität Göttingen - Informatik II - SS 2005
4-13
4. Assembler
Big Endian: Mainfraim, IBM
Litte Endian: PC, Intel, AMD
Bi Endian: PowerPC
Daten sollten im Speicher
ausgerichtet (Aligned) sein
Beispiel: 00000000 00000000
00000100 00000001 (1025)
Universität Göttingen - Informatik II - SS 2005
4-14
4. Assembler
Speicher – Litte Big Endian
Litte-Endian vs. Big-Endian
Big Endian „denkt“, dass das
erste Byte, das er liest, das
größte ist.
Little Endian „denkt“, dass das
erste Byte, das er liest, das
kleinste ist
Universität Göttingen - Informatik II - SS 2005
R 2000 Register
Adresse
Big-Endian
Darstellung
von 1025
Little-Endian
Darstellung
von 1025
00
00000000
00000001
01
00000000
00000100
02
00000100
00000000
03
00000001
00000000
4-15
32 General Purpose Register mit 32 Bit
Wortbreite
$0 bis $31 oder per „Name“
$zero enthält immer(!) den Wert 0
$at temporäres Assemblerregister
$v0, $v1 Funktionsergebnisse
$a0 bis $a3 Argumente für
Prozeduraufrufe
$t1 bis $t9 temporäre Register
$s0 bis $s7 langlebige Register
$k0, $k1 Kernel Register
$gp Zeiger auf Datensegment
$sp Stack Pointer
$fp Frame Pointer
$ra Return Address
Zusätzlich lo und hi (Spezialregister)
Universität Göttingen - Informatik II - SS 2005
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$zero
$at
$v0
$v1
$a0
$a1
$a2
$a3
$t0
$t1
$t2
$t3
$t4
$t5
$t6
$t7
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$s0
$s1
$s2
$s3
$s4
$s5
$s6
$s7
$t8
$t9
$k0
$k1
$gp
$sp
$fp
$ra
4-16
4. Assembler
4. Assembler
Die Assembler Befehle
Assembler Programme
Befehlsformat
Sequentielle Abarbeitung von Befehlen
<Marke>: <Befehl1> <Arg_1> <Arg_2> <Arg_3> # <Kommentar>
<Marke>: <Befehl2>, <Arg_1>, <Arg_2>, <Arg_3> # <Kommentar>
Sprünge sind möglich
Nur ein Befehl pro Zeile
„#“ leitet einen Kommentar ein
„<name>:“ ist ein Label
Befehle
Lade- / Speicherbefehle
Arithmetische Operationen (+ , * , - , / )
Logische Operationen (AND , OR , XOR , NAND , …)
Schiebe- / Rotationsbefehle
Sprungbefehle
Das Label „main:“ muss immer vorhanden sein
Label können angesprungen werden z.B. „while:“ oder „for:“
Den Namen des Labels entscheidet der Programmierer
(bis auf „main:“)
Pseudobefehle werden vom Assembler in mehrere Befehle
umgesetzt
in die Befehle, die der Prozessor verarbeiten kann.
Direktiven sind Assembleranweisung, die NICHT in Befehle
umgesetzt werden; z.B. um Platz zu lassen für Variablen (beginnen
mit einem Punkt z.B. „.data“)
Universität Göttingen - Informatik II - SS 2005
4-17
4. Assembler
Assembler Programm – ein Beispiel
Register Format (R)
rsrs
6
5
rtrt
rdrd
5
5
shamt
shamt
5
# Beispielprogramm V. 001
# berechnet den Umfang eines Dreiecks mit den Kanten x, y, z
# kein sehr sinnvolles Programm
.data
x:
.word 12
y:
.word 14
z:
.word 5
u:
.word 0
.text
main: lw
$t0, x
lw
$t1, y
lw
$t2, z
add
$t0, $t0, $t1 # $t0 := x + y
add
$t0, $t0, $t2 # $t0 := x + y + z
sw
$t0, u
# u := x + y + z
li
$v0, 10
# EXIT
syscall
funct
funct
6
Immediate Format (I)
Op-Code
Op-Code
rsrs
rtrt
16--Bit
Bit Konstante
Konstante(Imm)
(Imm)
16
6
5
5
16
Sprung Format (J)
Op-Code
Op-Code
4-18
4. Assembler
Die drei Instruktionsformate
Op-Code
Op-Code
Universität Göttingen - Informatik II - SS 2005
26Bit
BitSprungadresse
Sprungadresse
26
6
Universität Göttingen - Informatik II - SS 2005
26
4-19
Universität Göttingen - Informatik II - SS 2005
4-20
4. Assembler
4. Assembler
Ladebefehle und Adressierungsarten I
Ladebefehle und Pseudoinstruktionen
lw Rd, Adr
Weitere Befehle
Der Befehl lw (load word) lädt ein Wort in ein Register
Rd und Adr sind die Argumente. Adr ist die Adresse im Hauptspeicher,
von wo der Befehl in das Register Rd geladen wird.
Adressierungsmodi I – „...wie wird die Adresse angegeben?“
Register Indirekt (RS): Der Wert steht an der Adresse, die im Register
RS angegeben ist.
Direkt: Die Adresse wird direkt angegeben über ein Label oder Label +
Konstante.
Indexierte – Label (RS): Der Wert wird durch ein Label angegeben +
den Wert aus Register RS (+ Konstante)
lb Rd, Adr
lbu Rd, Adr
lh Rd, Adr
lhu Rd, Adr
ld Rd, Adr
: load byte
8 Bit
: load unsigned byte
8 Bit
: load halfword
16 Bit
: load unsigned halfword 16 Bit
: load double-word
ist eine Pseudoinstruktion
Pseudoinstruktionen werden vom Assembler aufgelöst
ld Rd, Adr
:=
lw Rd, Adr
lw Rd+1,Adr+4
Daten müssen aligned im Speicher sein
Adressen von Wörtern müssen durch 4 teilbar sein.
Adressen von Halbwörtern müssen gerade sein.
Oder es werden die Befehle ulw, ulh und ulhu verwendet.
Universität Göttingen - Informatik II - SS 2005
4-21
4. Assembler
Universität Göttingen - Informatik II - SS 2005
4-22
4. Assembler
… und nun das Ganze noch mal zum Speichern
Register Transfer Befehle und Adressierungsarten II
sw Rs, Adr
sb Rs, Adr
sh Rs, Adr
sd Rs, Adr
ush Rs, Adr
usw Rs, Adr
Register direkte Adressierung:
Es wird direkt auf die Register zugegriffen unter Nennung der
Registernamen Rd (destination) und Rs (source).
store word
store byte
store halfword
store double-word (Pseudoinstruktion)
unaligned store halfword
unaligned store word
move Rd,Rs move Rs
Rd
Unmittelbare Adressierung:
Dort wird eine Konstante unmittelbar in ein Register übertragen. Die
Konstante ist Teil des Programmcodes, nicht der Daten.
li Rd, Imm load immediate (Imm ist dann eine Konstante)
lui Rs, Imm load upper immediate Rs
Imm * 216
Universität Göttingen - Informatik II - SS 2005
4-23
Universität Göttingen - Informatik II - SS 2005
4-24
4. Assembler
4. Assembler
Arithmetische Befehle (Addition & Subtraktion)
Überläufe und Ausnahmen
Können nur direkt auf den Registern ausgeführt werden
Addition und Subtraktion (mit Overflow)
add Rd, Rs1, Rs2
addi Rd, Rs1, Imm
sub Rd, Rs1, Rs2
Was passiert, wenn die Summe zweier positiver Zahlen negativ
wird?
Es tritt eine Ausnahme (Exception) auf. Ausnahmen sind Fehler,
die während der Laufzeit des Programms auftreten.
Rd := Rs1 + Rs2
Rd := Rs1 + Imm
Rd := Rs1 – Rs2
Der Exception Handler beendet in diesem Fall das Programm!
add kann auch mit einer Konstanten (unmittelbaren Operanden)
verwendet werden. Der Assember benutzt dann automatisch addi.
sub und alle weiteren arithmetischen Befehle können mit einer
Konstanten verwendet werden. ☺
Universität Göttingen - Informatik II - SS 2005
4-25
4. Assembler
A= 0111
B= 0001 +
-------------S= 1000
7
1
---8
Universität Göttingen - Informatik II - SS 2005
4-26
4. Assembler
Addition ohne Überlauf
addu
addiu
aubu
Ein klassisches Beispiel ist auch die Division durch Null.
Beispiel: Die Halfbytes (4 Bit) a und b werden addiert.
Multiplikation und Division
Rd, Rs1, Rs2
Rd, Rs1, Imm
Rd, Rs1, Rs2
Problem eines Überlaufs ist sehr wahrscheinlich und es werden
sogar doppelt so viel Bits zum Speichern benötigt.
Beispiel: (1 * 232) * (1* 232) = 1 * 232+32 = 1* 264
Der MIPS verfügt über zwei Spezialregister hi und lo
Es gibt aber nur 4 Maschinenbefehle für Multiplikation und Division
U sollte nicht durch unsigned übersetzt werden, da auch bei Addition
von vorzeichenlosen Zahlen Überläufe auftreten können.
div Rd, Rs
divu Rd, Rs
mult Rd, Rs
multu Rd, Rs
hi:=Rd MOD Rs; lo:= Rd DIV Rs
hi:=Rd MOD Rs; lo:= Rd DIV Rs
hi:=Rd * Rs DIV 232; lo:=Rd * Rs MOD 232
hi:=Rd * Rs DIV 232; lo:=Rd * Rs MOD 232
Die Ergebnisse von Maschinenbefehlen werden immer in hi und lo
gespeichert.
Universität Göttingen - Informatik II - SS 2005
4-27
Universität Göttingen - Informatik II - SS 2005
4-28
4. Assembler
4. Assembler
Multiplikation und Division
SPIM – Ein- und Ausgaben
Diese Pseudobefehle arbeiten direkt auf den Registern:
div Rd, Rs1, Rs2
Rd:=Rs1 MOD Rs2 mit Überlauf
divu Rd, Rs1, Rs2
Rd:=Rs1 MOD Rs2 ohne Überlauf
mul Rd, Rs1, Rs2
Rd:= Rs1 * Rs2 ohne Überlauf
mulo Rd, Rs1 ,Rs2
Rd:= Rs1 * Rs2 mit Überlauf
Der Befehl syscall
Der Befehl hat keine Argumente.
Ein Parameter wird über das Register $v0 übergeben.
Das Verhalten des Simulators ist abhängig vom Register $v0
$v0=1 print_int
Wert in $a0 wird dezimal ausgegeben auf dem
Bildschirm
$v0=4 print_string
Die mit Chr0 endende Zeichenkette wird
ausgegeben. $a0 muss die Adresse enthalten,
an der die Zeichenkette im Speicher beginnt.
Das Ergebnis wird in Rd gespeichert.
Ob div ein Maschinenbefehl oder Pseudobefehl ist, erkennt der
Assembler an der Anzahl der Parameter.
Logische Operationen
Sprünge
Jetzt erst mal weiter mit dem SPIM Ein- und Ausgaben…
Universität Göttingen - Informatik II - SS 2005
4-29
4. Assembler
4-30
4. Assembler
Syscall Parameter
Logische Befehle
Vor Aufruf von syscall muss der Parameter in $v0 gegeben werden
1
print_int
Wert in $a0 wird dezimal ausgegeben
2
print_float
32 Bit Gleitkommazahl aus Register $f12/13
wird ausgegeben
3
print_double
64 Bit …
4
print_string
Die an ($a0) beginnende und auf Chr 0
endende Zeichenkette wird ausgegeben.
5
read_int
Schreibt eine Dezimalzahl in $v0
6
read_float
Schreibt eine Gleitkommazahl in $f0 (32 Bit)
7
read_double
Schreibt eine Gleitkommazahl in $f0/1 (64 Bit)
8
read_string
Schreibt eine Zeichenkette bis Chr 0 in den
Speicher. Startadresse: $a0 Max. Länge $a1
9
sbrk
Reserviert Speicher
10 exit
Beendet das Programm
Universität Göttingen - Informatik II - SS 2005
Universität Göttingen - Informatik II - SS 2005
4-31
and Rd, Rs1, Rs2
andi Rd, Rs, Imm
nor Rd, Rs1, Rs2
or Rd, Rs1, Rs2
ori Rd, Rs, Imm
xor Rd, Rs1, Rs2
xori Rd, Rs, Imm
not Rd, Rs
Rd:=Rs1 AND Rs2
Rd:=Rs AND Imm
Rd:=Rs1 NOR Rs2
Rd:=Rs1 OR Rs2
Rd:=Rs AND Imm
Rd:=Rs1 XOR Rs2
Rd:=Rs AND Imm
Rd:= NOT(Rs)
:= xori Rd, Rs, -1
Universität Göttingen - Informatik II - SS 2005
4-32
4. Assembler
4. Assembler
Rotations- und Schiebebefehle
Vergleiche
Rotation: Alle Bits in einem Register werden nach links oder rechts
verschoben; das Letzte kommt dann an den Anfang.
Schiebebefehle: Wie Rotation allerdings fällt das letzte Bit weg. Das
erste Bit wird durch 0 ersetzt (logische Schiebebefehle) oder das
höchstwertige Bit wird übernommen, damit das Vorzeichen erhalten
bleibt (arithmetische Schiebebefehle).
rol Rd, Rs1, Rs2 rotiert Rs1 um Rs2 Stellen nach links (ror für rechts)
sll und sllv (shift left logical); srl und srlv (shift right logical); sra und srav
(shift right arithmetic)
V steht für Variable, was bedeutet, dass ein Register die Anzahl der
Schritte bestimmt; ansonsten ist der Wert eine Konstante.
Universität Göttingen - Informatik II - SS 2005
4-33
4. Assembler
Es werden zwei Werte verglichen und wenn die Bedingung (z.B.
gleich, > , < ,….) erfüllt ist, wird in das Zielregister eine 1 geschrieben
und sonst eine 0.
Beispiel: seq Rd, Rs1, Rs2 Falls (Rs1)=(Rs2) Rd:=1, sonst Rd:=0
sne – ungleich; sge – größer oder gleich; sgeu – größer oder gleich
(unsigned) usw.
Bei den Vergleichen gibt es nur 4 Maschinenbefehle:
slt Rd, Rs1, Rs2
sltu Rd, Rs1, Rs2
slti Rd, Rs1, Imm
sltui Rd, Rs1, Imm
set less than
set less than unsigned
set less than immediate
set less than immediate unsigned
Universität Göttingen - Informatik II - SS 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]
$16 <-- v[k+1]
$16 --> v[k]
$15 --> v[k+1]
restore $2 from stack
restore $15 from stack
restore $16 from stack
restore stackpointer
return
Universität Göttingen - Informatik II - SS 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 ¢
0¢
75¢
25 ¢
50 ¢
25 ¢
50 ¢
25 ¢
vend
25 ¢
50¢
50 ¢
50 ¢
6-20
6. Automaten und Sprachen
6. Automaten und Sprachen
Reguläre Ausdrücke nach NFA
Beispiel: Reguläre Ausdrücke nach NFA
Regulärer Ausdruck
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 << 1
…
r1 := r1 + 0
r1 := r1 - 0
r1 := r1 * 1
r3 := *r3
Komplexe Optimierungen
…
„
wird zu r3 := r1 + 4
7. Compilerbau
Peephole-Optimierungstypen (3/3)
r1 := r2 x 2
r1 := r2 / 2
r3 := r1 + 4
r2 := …
Universität Göttingen - Informatik II - SS 2005
7. Compilerbau
„
und
r2 := …
Fortpflanzung von Zuweisungen (copy propagation)
r2 := r1
r3 := r1 + r2
r2 := 5
r4 := r1 x r5
r2 := r4 + r3
r3 := r4
Universität Göttingen - Informatik II - SS 2005
„
r2 := 4
wird zu r3 := r1 + 4
und auch
r2 := 4
r3 := r1 + r2
r3 := *r3
Konstantenfaltung (constant folding)
„
Fortpflanzung von Konstanten (constant propagation)
(wird komplett beseitigt)
Ist wichtig für Optimierungen welche datenverändernde Instruktionen
einfügen, löschen oder bewegen
Der ursprüngliche Programmdatenfluss kann nicht geändert werden!
Es ist für den Optimierer erforderlich die Struktur des
Kontrollflussgraphen (control flow graph) zu „verstehen“
…
…
7.1-87
Beispiel: Finde die Variablenmenge welche einen grundlegenden Block auf
dem Weg zu einem anderen Block „durchfliesst“ und von diesem anderen
Block verwendet wird (lebendige Variablen)
Wird durch Kontrollflussanalyse bestimmt
Ist wichtig für die Leistungsoptimierung von Schleifen oder
schleifenähnlichen Strukturen in dem Kontrollflussgraphen
Universität Göttingen - Informatik II - SS 2005
7.1-88
7. Compilerbau
7. Compilerbau
Beispiel für komplexe Optimierung
„
Schleifeninvarianter Code
(Loop Invariant Code Motion)
…
Bewege Berechnungen,
dessen Werte während allen
Schleifeniterationen gleich
bleiben (invariant sind), aus
der Schleife raus
Rückblick
L1:
r1 := *(sp + 100)
r2 := *r1
…
r3 := r2 < 100
if r3 goto L1
L0:
r1 := *(sp + 100)
„
Compiler sind komplexe Programme welche eine höhere
Programmiersprache in eine Assemblersprache umwandeln um
danach ausgeführt zu werden
„
Compilerprogrammierer handhaben die Komplexität des
Kompilationsprozesses durch:
…
…
aufteilen des Compilers in unterschiedliche Phasen
verwenden, ausgehend von der Spezifikation, eine Theorie für den Bau
von Compilerkomponenten
L1:
r2 := *r1
…
r3 := r2 < 100
if r3 goto L1
Universität Göttingen - Informatik II - SS 2005
7.1-89
Universität Göttingen - Informatik II - SS 2005
7.1-90
7. Compilerbau
Überblick
Einführung Programmiersprachen
Namen, Bindungen und Gültigkeitsbereiche
Speichermanagement und Implementierung
Kontrollfluss
Informatik II
SS 2005
Kapitel 7: Compilerbau
Teil 2: Konzepte von Programmiersprachen
Als Grundlage dient das Buch “Programming Language Pragmatics”
von Michael L. Smith
Dr. Michael Ebner
Dipl.-Inf. René Soltwisch
Siehe u.a. Kapitel 3, 6 und 9
Lehrstuhl für Telematik
Institut für Informatik
Universität Göttingen - Informatik II - SS 2005
7. Compilerbau
7. Compilerbau
Abstraktionen...
Sprachen als Abstraktion
Die menschliche Sprache ist ein Werkzeug für die Abstraktion von
Gedanken
Eliminiere Details welche unnötig zum Lösen eines speziellen
Problems sind
„Wenn es mir warm ist, dann schalte ich den Ventilator ein.“
Komplexität wird versteckt
Eine einfache Absicht wird mitgeteilt, wobei aber die kognitiven und
neurologischen Bedingungen, durch welche die Absicht aufkam, höchst
wahrscheinlich für jeden zu komplex sind um sie zu Verstehen
Die Bedeutung dieser Aussage ist dem Verständnis des Individuums
welches es äußert und den Individuen die es hören überlassen
Baue oft auf anderen auf
Erlaubt das Lösen von zunehmend komplexeren Problemen
(teile und herrsche, divide and conquer)
Komplexität moderner Software ist ohne Beispiel (Präzedenzfall)
Programmiersprachen sind ein Werkzeug zum Abstrahieren von
Berechnungen
Abstraktion ist ein grundlegender Bestandteil zum Handhaben von
diesen komplexen Problemen
if (temperatur() > 30.0) { schalte_ventilator_ein(); }
Abstraktion
Abstraktum
Digitale Logik
Computerarchitektur
Assemblersprache
Betriebssystem
Computerkommunikation
Transistoren
Digitale Logik
Maschinensprache
Allokation von Ressourcen (Zeit, Speicher, etc.)
(Physikalische) Netzwerke, Protokolle
Universität Göttingen - Informatik II - SS 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<=n;i++) { sum += i; }
Analogie aus der realen Welt: „Das Pfandgesetz ist ein deklaratives
Programm welches Einzelhändlern mitteilt das sie ein
Recyclingprogramm für Einwegflaschen und Dosen des eigenen
Sortiments aufstellen müssen, ohne exakt mitzuteilen wie dies zu
erfolgen hat.
Universität Göttingen - Informatik II - SS 2005
7.2-9
7. Compilerbau
7.2-10
7. Compilerbau
Imperative Sprachen (2/2)
Deklarative Sprachen (1/2)
Die objekt-orientierten Sprachen
Die funktionalen Sprachen
schließen Smalltalk, Eiffel, C++, Java und Sather ein
Sind ähnlich der von Neumann Sprachen mit der Erweiterung von
Objekten
Objekte
enthalten ihren eigenen internen Zustand (Klassenvariablen, member
variables) und Funktionen welche auf diesem Zustand operieren
(Methoden)
Berechnung ist organisiert als Interaktion zwischen Objekten (ein Objekt ruft
die Methoden eines anderen Objektes auf)
Die meisten objekt-orientierten Sprachen bieten Konstrukte (facilities)
basierend auf Objekten welche objekt-orientierte Programmierung
fördern
Kapselung (encapsulation), Vererbung (inheritance) und Polymorphismus
(polymorphism)
Wir werden uns darüber später genauer unterhalten
Universität Göttingen - Informatik II - SS 2005
Universität Göttingen - Informatik II - SS 2005
7.2-11
schließen Lisp/Scheme, ML, Haskell (Gofer) ein
Sind eine Reflektion von Church‘s Theorie der rekursiven Funktionen
(lambda calculus)
Berechnung werden ausgeführt als Rückgabewerte von Funktionen
basierend auf der (möglicherweise rekursiven) evaluation von anderen
Funktionen
Mechanismus ist als Reduktion bekannt
Keine Seiteneffekte
Erlaubt gleichungsbasiertes Problemlösen (equational reasoning),
einfachere formale Beweise von Programmkorrektheit, etc.
Beispiel: Aufsummieren der ersten n Ganzzahlen in SML
fun sum (n) = if n <= 1 then n else n + sum(n-1)
Universität Göttingen - Informatik II - SS 2005
7.2-12
7. Compilerbau
7. Compilerbau
Deklarative Sprachen (2/2)
Die logischen Sprachen
schließen Prolog, SQL und Microsoft Excel/OpenOffice OpenCalc ein
Sind eine Reflektion von der Theorie der Aussagenlogik
(propositional logic)
Berechnung ist ein Versuch einen Wert zu finden welcher eine Menge
von logischen Beziehungen erfüllt
Der meist verwendete Mechanismus um diesen Wert zu finden ist bekannt
als Resolution (resolution) und Vereinheitlichung (unification)
Beispiel: Aufsummieren der ersten n Ganzzahlen in Prolog
sum(1,1).
sum(N,S) :-
N1 is N-1, sum(N1,S1), S is S1+N.
Universität Göttingen - Informatik II - SS 2005
7.2-13
7. Compilerbau
Name
Seit
Bemerkungen
Verbreitung
FORTRAN
1957
Für mathematische und naturwissenschaftliche Anwendungen
Sehr groß
COBOL
1960
Für betriebswirtschaftliche Anwendungen
Sehr groß
ALGOL-60
1960
Für mathematische Berechnungen
Klein
LISP
1962
Wichtigste Sprache der Künstlichen Intelligenz (KI)
Mittel
BASIC
1963
Einfache Anfängersprache
Groß
PL/1
1965
Für technische und betriebswirtschaftliche Anwendungen, sehr umfangreich
Mittel
ALGOL-68
1968
Für mathematische und allgemeine Anwendungen; Einsatz fast nur im
Hochschulbereich
Klein
PASCAL
1971
Sprache der strukturierten Programmierung; Grundlage für viele andere Sprachen
Mittel
C
1973
Für Systemprogrammierung und allgemeine Anwendungen; enger Bezug zu Unix
Sehr groß
SMALLTALK
1974
Erste objektorientierte Sprache
Klein
PROLOG
1977
KI-Sprache, logisches Schließen
Klein
MODULA
1978
Weiterentwicklung von PASCAL
Klein
ADA
1980
Sehr umfangreich; für allgemeine Anwendungen; basiert auf PASCAL und PL/1
Klein
C++
1982
Ergänzung von C um objektorientierte Sprachelemente, sog. Hybridsprache
Groß
Eiffel
1982
Rein objektorientierte Sprache; Einsatz fast nur im Hochschulbereich
Klein
Java
1994
Objektorientiert, plattformunabhängig, Internet-Programmierung
Klein
Universität Göttingen - Informatik II - SS 2005
7.2-14
7. Compilerbau
Eine historische Perspektive: Maschinensprachen
Eine historische Perspektive: Assemblersprachen (1/2)
Die ersten Maschinen wurden direkt in einer Maschinensprache
oder Maschinencode programmiert
Langweilig, aber Maschinenzeit war teurer als Programmiererzeit
Programme wurden immer Komplexer
zu schwierig, zeitintensiv und teuer um Programme in Maschinencode
zu schreiben
Assemblersprachen wurden entwickelt
Für den Menschen lesbar ☺
Ursprünglich wurde eine eins-zu-eins Beziehung zwischen Instruktionen
der Maschinensprache und Instruktionen der Assemblersprache
bereitgestellt
Schließlich wurden „makro“ Einrichtungen hinzugefügt um
Softwareentwicklung durch anbieten von primitiven Formen von CodeWiederverwendung weiter zu beschleunigen
Der Assembler war das Programm welches ein Assemblerprogramm in
Maschinencode übersetzte mit welchem die Maschine laufen konnte
MIPS Maschinencode für ein Programm zum
Berechnen des GGT von zwei Ganzzahlen
Universität Göttingen - Informatik II - SS 2005
7.2-15
Universität Göttingen - Informatik II - SS 2005
7.2-16
7. Compilerbau
7. Compilerbau
Eine historische Perspektive: Assemblersprachen (2/2)
Eine historische Perspektive: höhere Sprachen (1/2)
Programme wurden immer Komplexer
Beispiel:
es war zu schwierig, zeitintensiv und teuer um Programme in Assemblersprache
zu schreiben
es war zu schwierig von einer Maschine zu einer anderen zu wechseln, welche
eine andere Assemblersprache hatte
Es wurden höhere Programmiersprachen entwickelt
Mitte der 1950er wurde Fortran entworfen und implementiert
Assembler
es erlaubte numerische Berechnungen in einer Form ähnlich von mathematischen
Formeln auszudrücken
Der Compiler war das Programm welches ein höheres Quellprogramm in ein
Assemblerprogramm oder Maschinenprogramm übersetzte.
Ursprünglich konnten gute Programmierer schnellere Assemblerprogramme schreiben
als der Compiler
Andere höhere Programmiersprachen folgen Fortran in den späten 50er und
frühen 60er
Lisp: erste funktionale Sprache, basierte auf der Theorie der rekursiven Funktionen
Algol: erste block-strukturierte Sprache
Universität Göttingen - Informatik II - SS 2005
7.2-17
7. Compilerbau
7.2-18
7. Compilerbau
Eine historische Perspektive: höhere Sprachen (2/2)
Ausführung von Programmen höherer Sprachen
Beispiel:
Kompilation
Programm wird in Assemblersprache oder direkt in Maschinensprache
übersetzt
Kompilierte Programme können so erstellt werden, dass sie relativ
schnell in der Ausführung sind
Fortran, C, C++
int gcd (int i, int j) {
while (i != j) {
if (i > j)
i = i – j;
else
Compiler
j = j – i;
}
printf(“%d\n”,i);
}
Universität Göttingen - Informatik II - SS 2005
Universität Göttingen - Informatik II - SS 2005
Interpretation
Programm wird von einem anderem Programm gelesen und Elemente
der Quellsprache werden einzeln ausgeführt
Ist langsamer als kompilierte Programme
Interpreter sind (normalerweise) einfacher zu implementieren als
Compiler, sind flexibler und können exzellent Fehlersuche (debugging)
und Diagnose unterstützen
Java, Pyhton, Perl, etc.
7.2-19
Universität Göttingen - Informatik II - SS 2005
7.2-20
7. Compilerbau
7. Compilerbau
Überblick
Namen, Bindungen und Gültigkeitsbereiche (1/3)
Einführung Programmiersprachen
Namen, Bindungen und Gültigkeitsbereiche
Speichermanagement und Implementierung
Kontrollfluss
Namen
Ein mnemonischer Zeichenname wird verwendet um irgendetwas
anderes zu repräsentieren oder zu benennen (Mnemonic ist die
Bezeichnung für Ausdrücke deren Bedeutung vorwiegend durch die verwendete
Buchstabenfolge leicht behalten werden kann.)
Normalerweise Bezeichner (identifier)
Ist essentiell für Abstraktion
Erlaubt es Programmierern Werte zu bezeichnen damit die Notwendigkeit
zur direkten Manipulation von Adressen, Registernamen, etc. vermieden
wird
Beispiel: Es ist nicht notwendig zu wissen ob die Variable foo im Register $t0 oder
an der Speicherstelle 10000 gespeichert wird
Erlaubt es Programmierern einen einfachen Namen für ein potenziell
komplexes Programmstück stehen zu lassen
Beispiel: foo = a*a + b*b + c*c + d*d;
Beide Fälle verringern die konzeptuelle Komplexität
Universität Göttingen - Informatik II - SS 2005
7.2-21
7. Compilerbau
Universität Göttingen - Informatik II - SS 2005
7.2-22
7. Compilerbau
Namen, Bindungen und Gültigkeitsbereiche (2/3)
Namen, Bindungen und Gültigkeitsbereiche (3/3)
Gültigkeitsbereiche (Scope)
Bindungen
Ist der Textbereich eines Programms in welchem eine Bindung aktiv ist
Java Beispiel:
public void foo (int a) {
Global Scope
int b;
Ist eine Assoziation zwischen zwei Dingen
Ein Variablenname zu einem Wert
Ein Variablenname zu einer spezifischen Speicherstelle
Ein Typ und seine Repräsentation oder Layout im Speicher
while(a < n) {
int c;
c = a + a;
b = a * c;
a++;
}
Die Bindezeit ist die Zeit zu der eine solche Assoziation gemacht wird
Method Scope
Block Scope
}
Verbessert die Abstraktion durch die Kontrolle über die Sichtbarkeit von
Bindungen
Universität Göttingen - Informatik II - SS 2005
7.2-23
Universität Göttingen - Informatik II - SS 2005
7.2-24
7. Compilerbau
7. Compilerbau
Bindezeitpunkte (1/8)
Bindezeitpunkte (2/8)
Wir unterscheiden 7 Zeitpunkte für die Entscheidung über eine
Bindung
Zeitpunkt des Sprachentwurfs
Entscheidungen welche vom Designer der Programmiersprache
gemacht wurden
Sprache
Entwurf
Implementierung (mit Compilern)
Typische Beispiele:
Binden von Kontrollstrukturen (Bedingungen, Schleifen, etc.) zu Ihrer
abstrakten Bedeutung
Programm
Programmierung (Schreiben des Programms)
Kompilation
Linken
Laden
Ausführen
Universität Göttingen - Informatik II - SS 2005
„Befehle in einem while Schleifenblock werden ausgeführt bis die Bedingung nicht
mehr länger wahr ist“
Binden von primitiven Datentypnamen (int, float, char, etc.) zu Ihrer
geforderten Repräsentation
„Variablen vom Typ int beinhalten vorzeichenbehaftete Ganzzahlen“
„Variablen vom Typ int beinhalten vorzeichenbehaftete 32-bit Werte“
7.2-25
7. Compilerbau
7.2-26
7. Compilerbau
Bindezeitpunkte (3/8)
Bindezeitpunkte (4/8)
Zeitpunkt des Programmierens
Zeitpunkt der Sprachimplementierung
Entscheidungen des Programmierers
Typische Beispiele:
Entscheidungen welche vom Compiler bzw. vom
Compilerprogrammierer gemacht wurden
Mit anderen Worten, Angelegenheiten der Sprachimplementierung die nicht
spezifisch während des Sprachentwurfs definiert wurden
Typische Beispiele:
Binden eines Algorithmus zu den Befehlen der Programmiersprache mit denen
der Algorithmus implementiert ist
Binden von Namen zu Variablen, welche für einen Algorithmus erforderlich sind
Binden von Datenstrukturen zu Sprachdatentypen
Zeitpunkt der Kompilation
Binden von primitiven Datentypen zu deren Repräsentationsgenauigkeit
(Anzahl der Bits)
Entscheidungen des Compilers
Typische Beispiele:
„bytes sind 8-bits, shorts sind 16-bits, ints sind 32-bits, longs sind 64-bits“
Binden von höheren Konstrukten zu Maschinencode (Optimierung
eingeschlossen)
Binden von statisch definierten Datenstrukturen zu einem spezifischen
Speicherlayout
Binden von benutzerdefinierten Datentypen zu einem spezifischen
Speicherlayout
Binden von Dateioperationen zur betriebssystemspezifischen
Implementierung dieser Operationen
open() ist mit einem SYS_open Systemaufruf implementiert
Universität Göttingen - Informatik II - SS 2005
Universität Göttingen - Informatik II - SS 2005
7.2-27
Universität Göttingen - Informatik II - SS 2005
7.2-28
7. Compilerbau
7. Compilerbau
Bindezeitpunkte (5/8)
Bindezeitpunkte (6/8)
Zeitpunkt des Verbindens (linken)
Zeitpunkt der Programmausführung
Entscheidungen des Linkers
Linker binden Programmmodule zusammen
Typische Beispiele:
Binden von Objekten (Unterprogramme und Daten) zu einem spezifischen
Platz in einer ausführbaren Datei
Binden von Namen, welche Objekte in anderen Modulen referenzieren, zu
deren tatsächlichen Ortsreferenz
Entscheidungen welche während der Programmausführung gemacht
werden
Typische Beispiele:
Binden von konkreten Werten zu Programmvariablen
„a = a + 1;“
Zeitpunkt des Ladens
Binden von Referenzen von dynamisch zugeteilten Objekten zu
Speicheradressen
Binden von Namen zu Objekten in Sprachen mit dynamischen
Gültigkeitsbereichen
Entscheidungen des Laders
Lader holen ausführbare Dateien in den Speicher
Typische Beispiele:
Binden von virtuellen Adressen in der ausführbaren Datei zu den
physikalischen Speicheradressen
In modernen Betriebssystemen nicht mehr wirklich notwendig, da das
Betriebssystem virtuelle Adresse zu physikalischen Adressen bindet in dem es
virtuellen Speicher (einschließlich der notwendiger Hardware) verwendet
Universität Göttingen - Informatik II - SS 2005
7.2-29
7. Compilerbau
7.2-30
7. Compilerbau
Bindezeitpunkte (7/8)
Bindezeitpunkte (8/8)
Ähnliche Bindeentscheidungen können zu mehreren
Bindezeitpunkten durchgeführt werden
Statisches Binden (static binding)
Bezieht sich auf alle Bindeentscheidungen die vor der Laufzeit gemacht werden
Linkentscheidungen können zur Linkzeit, Ladezeit (ein Typ des
dynamischen Linken) oder Laufzeit (ein anderer Typ des dynamischen
Linkens) auftreten
Optimierungsentscheidungen können zur Compilezeit, Linkzeit,
Ladezeit und sogar zur Laufzeit (dynamische Optimierung) auftreten
Bindeentscheidungen können zu verschiedenen Bindezeitpunkten
in verschiedenen Sprachen getroffen werden
C bindet Variablennamen an die referenzierten Objekte zur Compilezeit
Wenn wir in C sagen „foo=bar;“, dann wissen wir genau ob foo und bar
global oder lokal sind oder nicht, von welchem Typ sie sind, ob ihre Typen
für Zuweisungen kompatibel sind oder nicht, etc.
Dynamisches Binden (dynamic binding)
Bezieht sich auf alle Bindeentscheidungen die zur Laufzeit gemacht werden
Frühe Bindezeitpunkte
Verbunden mit größerer Effizienz
Kompilierte Sprachen laufen typischerweise viel schneller, weil die meisten
Bindeentscheidungen zur Compilezeit getroffen wurden
Ist eine Bindeentscheidung aber erst einmal getroffen worden, dann verlieren wir auch
einiges an Flexibilität
Späte Bindezeitpunkte
Verbunden mit größerer Flexibilität
Interpretierte Sprachen erlauben es die meisten Bindeentscheidungen zur Laufzeit zu
treffen, was eine größere Flexibilität erlaubt
Perl (und gilt eigentlich für alle interpretierten Sprachen) bindet
Variablennamen an die referenzierten Objekte zur Laufzeit
Wir können in Perl sagen „$foo=$bar;“, und wenn der Name $bar nicht
schon an ein Objekt gebunden ist, dann wird eines erzeugt, und dann zu
$foo zugewiesen
Universität Göttingen - Informatik II - SS 2005
Universität Göttingen - Informatik II - SS 2005
7.2-31
Zum Beispiel, die meisten interpretierten Sprachen erlauben es einem Programm Fragmente
eines anderen Programms dynamisch zu generieren und auszuführen
Da Bindeentscheidungen zur Laufzeit getroffen werden, können interpretierte Sprachen
langsam sein
Universität Göttingen - Informatik II - SS 2005
7.2-32
7. Compilerbau
7. Compilerbau
Zusammenfassung Namen und Bindungen
Gültigkeitsbereiche
Namen
Textueller Bereich eines Programms in welchem eine Bindung aktiv
ist
Es gibt grundsätzlich zwei Varianten:
Ein mnemonischer Zeichenname wird verwendet um irgendetwas
anderes zu repräsentieren oder zu benennen
Beispiel: Variable foo kann die Speicherstelle 10000 referenzieren
Statische Gültigkeitsbereiche (static scopes)
Es kann zur Compilezeit genau festgestellt werden welcher Name welches
Objekt an welchen Punkten im Programm referenziert
Bindungen
Dynamische Gültigkeitsbereiche (dynamic scopes)
Ist eine Assoziation zwischen zwei Dingen
Bindungen zwischen Namen und Objekten hängen vom Programmfluss zur
Laufzeit ab
Ein Name und das was er referenziert
Nähere Ausführung
Bindezeit
Der Prozess durch den eine Menge von Bindungen aktiv wird, wenn die
Kontrolle in einen Gültigkeitsbereich eintritt
Die Bindezeit ist die Zeit zu der die Entscheidung über eine solche
Assoziation gemacht wird
Zum Beispiel die Allokation von Speicher um Objekte darin zu halten
Beispiel: Ist der Wert von foo in einem Register oder im Speicher?
(Entscheidung wird zur Compilezeit gemacht)
Universität Göttingen - Informatik II - SS 2005
7.2-33
7. Compilerbau
Universität Göttingen - Informatik II - SS 2005
7.2-34
7. Compilerbau
Gültigkeitsbereiche
Static scope: Verschachtelte Unterprogramme
Referenzierende Umgebung (referencing environment)
Frage:
Die Menge von aktiven Bindungen zu einem gegebenen Zeitpunkt in
der Programmausführung
Wird durch die Regeln für Gültigkeitsbereiche einer
Programmiersprache festgelegt
Statische Gültigkeitsbereiche
Bindungen zwischen Namen und Objekten könne zur Compilezeit
festgestellt werden
Einfache Varianten
Welches Objekt wird von X im
Funktionsblock von F1 referenziert?
Regel über den nächsten
Gültigkeitsbereich
(closest nested scope )
Referenzen von Variablen
referenzieren das Objekt im
naheliegendsten Gültigkeitsbereich
Frühe Versionen von BASIC hatten einen, globalen Gültigkeitsbereich
Komplexe Varianten
Moderne Programmiersprachen erlauben verschachtelte Unterprogramme
und Module weshalb kompliziertere Regeln für Gültigkeitsbereiche
erforderlich sind
Universität Göttingen - Informatik II - SS 2005
7.2-35
Universität Göttingen - Informatik II - SS 2005
7.2-36
7. Compilerbau
7. Compilerbau
Ein Problem welches nicht von verschachtelten Unterprogrammen
behandelt wird (1/2)
Ein Problem welches nicht von verschachtelten Unterprogrammen
behandelt wird (2/2)
Geheimnisprinzip (information hiding) für komplexe abstrakte
Datentypen (ADT)
Für einfache ADTs könnten Funktionen mit statischen lokalen
Variablen funktionieren
Siehe Beispiel auf nächster Folie:
Die Variable name_nums behält seinen Wert über Aufrufe von
gen_new_name bei
Dies ist zu einfach für ADTs mit mehreren Funktionen die sich einen
globalen Zustand teilen müssen
Universität Göttingen - Informatik II - SS 2005
7.2-37
7. Compilerbau
Universität Göttingen - Informatik II - SS 2005
7.2-38
7. Compilerbau
Module
Ein Modul Beispiel
Ein Modul erlaubt es eine Sammlung von Objekten zu kapseln, so
dass
Objekte innerhalb eines Moduls sich gegenseitig sehen können
Objekte innerhalb des Moduls nach außen nicht sichtbar sind, es sei
denn sie werden explizit exportiert
Objekte von außerhalb nach innen nicht sichtbar sind, es sei denn sie
werden explizit importiert
Abstraktion eines Stacks in
Modula
Wir exportieren die push
und pop Funktionen
Außerhalb des Moduls nicht
sichtbar
Top des Stackzeigers „top“
Stack array „s“
Module mit geschlossenem Gültigkeitsbereich
Betrifft Module in welche Namen explizit importiert werden müssen um
innerhalb des Moduls sichtbar zu sein
Module mit offenem Gültigkeitsbereich
Betrifft Module für die es nicht explizit erforderlich ist Namen von
außerhalb zu importieren um sichtbar zu sein
Universität Göttingen - Informatik II - SS 2005
7.2-39
Universität Göttingen - Informatik II - SS 2005
7.2-40
7. Compilerbau
7. Compilerbau
Dynamische Gültigkeitsbereiche
Statische vs. dynamische Gültigkeitsbereiche
Bindungen zwischen Namen und Objekten hängen vom
Programmfluss zur Laufzeit ab
Statischer Gültigkeitsbereich
Programm gibt 1 aus
Reihenfolge in welcher Unterprogramme aufgerufen werden ist wichtig
Die Regeln für dynamische Gültigkeitsbereiche sind normalerweise
einfach
Die aktuelle Bindung zwischen Name und Objekt ist diejenige die
während der Ausführung als letzte angetroffen wurde (sprich diejenige
die am kürzlichsten gesetzt wurde)
Universität Göttingen - Informatik II - SS 2005
7.2-41
7. Compilerbau
Dynamischer Gültigkeitsbereich
Programm gibt 1 oder 2 aus in
Abhängigkeit des gelesenen
Wertes in Zeile 8
Warum?
Ist die Zuweisung zu „a“ in
Zeile 3 eine Zuweisung zu dem
globalen „a“ von Zeile 1 oder
dem Lokalen „a“ von Zeile 5?
Universität Göttingen - Informatik II - SS 2005
7.2-42
7. Compilerbau
Vorteile von dynamischen Gültigkeitsbereichen
Ein Problem von dynamischen Gültigkeitsbereichen
Problem: unvorhersagbare referenzierende Umgebungen
Was sind die Vorteile von dynamischen Gültigkeitsbereichen?
Es erleichtert die Anpassung von Unterprogrammen
Beispiel:
begin --nested block
print_base: integer := 16
print_integer(n)
Die Variable print_base kontrolliert die Basis welche print_integer für
die Ausgabe von Zahlen verwendet
print_integer kann früh in einem globalen Gültigkeitsbereich mit einem
Standardwert belegt werden und kann temporär in einem globalen
Gültigkeitsbereich auf eine andere Basis überschrieben werden
Universität Göttingen - Informatik II - SS 2005
7.2-43
Globale Variable max_score wird verwendet von scaled_score()
max_score wird umdefiniert in foo()
scaled_score() wird von foo() aufgerufen
Ahhhhh
Universität Göttingen - Informatik II - SS 2005
7.2-44
7. Compilerbau
7. Compilerbau
Vermischte Gültigkeitsbereiche (mixed scoping)
Zusammenfassung für Gültigkeitsbereiche
Perl unterstützt beide Arten, dynamische wie statische
Gültigkeitsbereiche
Dynamic Scoping
Statische Gültigkeitsbereiche
Wird von den meisten, kompilierten Hochsprachen verwendet
C, C++, Java, Modula, etc.
Static Scoping
$i = 1;
$i = 1;
sub f {
sub f {
local($i) = 2;
my($i) = 2;
return g();
return g();
}
}
sub g { return $i; }
sub g { return $i; }
print g(), f();
print g(), f();
Ausgabe:
1 2
Ausgabe:
1 1
Universität Göttingen - Informatik II - SS 2005
Bindungen von Namen zu Variablen können zur Compilezeit festgestellt
werden
Effizient
Dynamische Gültigkeitsbereiche
Wird von vielen interpretierten Sprachen verwendet
Ursprüngliches LISP, APL, Snobol und Perl
Bindungen von Namen zu Variablen können eine Feststellung zur
Laufzeit benötigen
Flexibel
7.2-45
7. Compilerbau
7.2-46
7. Compilerbau
Überblick
Speichermanagement und Implementierung
Einführung Programmiersprachen
Namen, Gültigkeitsbereiche und Bindungen
Speichermanagement und Implementierung
Kontrollfluss
Universität Göttingen - Informatik II - SS 2005
Universität Göttingen - Informatik II - SS 2005
Lebensdauer von Objekten
Speichermanagement
Weiterführende Spracheigenschaften und Bindungen
Implementierung von statischen Gültigkeitsbereichen für verschachtelte
Unterprogramme
Implementierung von Unterprogrammreferenzen
7.2-47
Universität Göttingen - Informatik II - SS 2005
7.2-48
7. Compilerbau
7. Compilerbau
Objektlebensdauer (1/3)
Objektlebensdauer (2/3)
Beispiel:
Schlüsselereignisse während der Lebensdauer eines Objektes
Objekt wird erzeugt
Bindungen zum Objekt werden erzeugt
Referenzen zu den Variablen, Unterprogrammen und Typen werden
durch Bindungen gemacht
Deaktivierung und Reaktivierung von temporär nicht verwendbaren
Bindungen
Vernichtung von Bindungen
Vernichtung des Objekts
public void foo (void) {
Lebensdauer
des Objekts Bar
}
Reaktiviere Bindung von b zu Bar
}
Beispiel: Zeit während der eine Java Referenz ein Objekt im Speicher
referenziert
Lebensdauer von Objekten: Zeit zwischen Erzeugung und
Vernichtung eines Objekts
Beispiel: Zeit während der ein Objekt im Speicher „lebt“
7.2-49
7. Compilerbau
Anmerkung: Das durch foo() erzeugte Objekt Bar ist nicht unbedingt nach
der Rückkehr aus dem Unterprogramm zerstört. Es kann nach der Rückkehr
von foo() nicht länger referenziert werden, aber es wird wahrscheinlich erst
bei der „garbage collection“ zu einem späteren Zeitpunkt in der
Programmausführung zerstört werden.
Universität Göttingen - Informatik II - SS 2005
7.2-50
7. Compilerbau
Objektlebensdauer (3/3)
Statische Allokation
Die Lebenszeit eines Objekts korrespondiert mit einem von drei
Hauptmechanismen der Speicherallokation
Was wird statisch allokiert?
Globale Variablen
Statische Allokation
Beispiel: Statische Klassenvariablen
Objekte werden zur Compilezeit oder Laufzeit zu festen Speicherplätzen
allokiert
Stack Allokation
Konstante Variablen welche während der Programmausführung sich
nicht ändern sollten
Beispiel: “i=%d\n” ist konstant in printf(“i=%d\n”,i);
Objekte werden zur Laufzeit wie benötigt allokiert, wobei eine last-in, first-out
Ordnung gilt
Beispiel: locales, wie z.B. lokale Variablen
Heap Allokation
Objekte werden zur Laufzeit in einer beliebigen Reihenfolge allokiert und
freigegeben
Beispiel: dynamisch allokierte Objekte
Universität Göttingen - Informatik II - SS 2005
int b;
b = b + 1; ...
Deaktiviere Bindung von b zu Bar
Lebensdauer von Bindungen: Zeit zwischen Erzeugung und
Vernichtung einer Bindung
Universität Göttingen - Informatik II - SS 2005
Bar b = new Bar();
while(1) {
Binde Namen b an Objekt Bar
7.2-51
Der Programmcode (Unterprogramme, etc.)
Ausnahme: dynamisch verbundene Unterprogramme
Vom Compiler produzierte Informationen zum Debuggen
Falls eine Sprache rekursive Unterprogrammaufrufe nicht untersützt,
dann auch lokale Variablen, Unterprogrammargumente,
Rückgabewerte, vom Compiler generierte temporäre Daten, etc.
Universität Göttingen - Informatik II - SS 2005
7.2-52
7. Compilerbau
7. Compilerbau
Beispiel: Statische Allokation von Lokalem
Allokation über einen Stack (1/2)
Keine Rekursion
bedeutet das es zu
einer Zeit nur eine
aktive Instanz bzw.
Aktivierung einer
Instanz von jedem
gegebenen
Unterprogramm
geben kann
Falls eine Sprache Rekursion erlaubt, dann kann jedes
Unterprogramm mehrere simultane Aktivierungen haben
Beispiel:
public int foo (int n) {
int a, b, c;
a = random(); b = random();
if (n > 0) { c = foo(n-1); }
c = c * (a + b);
}
Daher können wir für
eine einzelne,
mögliche Aktivierung
für jedes
Unterprogramm eines
Programms den
Speicher statisch
reservieren
Universität Göttingen - Informatik II - SS 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<N;i++) {
do_something(i);
Einige Sprachen verwenden andere
Mechanismen um das gleiche Ziel
zu erreichen
Wie lauten die Kategorien von Kontrollflussmechanismen
Welche Eigenschaften stellen Sprachen zur Verfügung um die
Kontrollflussmechanismen einer gegebenen Kategorie zu
implementieren?
Wie übersetzen Compiler Kontrollflussmechanismen in
ausführbaren Code?
Rekursion: ML
fun foo i N =
}
if i < N then
do_something i
Iteratoren: Icon, CLU
foo i + 1 N
every do_something(0 to N-1)
foo 0 N
Universität Göttingen - Informatik II - SS 2005
7.2-73
7. Compilerbau
7.2-74
7. Compilerbau
Kategorien von Kontrollflussmechanismen
Sequentialität (sequencing)
Sequentialität (sequencing)
Bestimmt für ein gegebenes Paar von Berechnungen welches zuerst ausgeführt
wird
Auswahl (selection)
Wähle, basierend auf einer Laufzeitbedingung, welche von mehreren
Berechnungen ausgeführt werden soll
Bestimmt für ein gegebenes Paar von Berechnungen welches
zuerst ausgeführt wird
Zwei Typen von Berechnungen für welche wir die Reihenfolge
betrachten wollen
Ausdrücke (expressions)
Iteration (iteration)
Berechnungen die einen Wert erzeugen
Beispiel:
Führt eine Gruppe von Berechnungen mehrmals aus
Rekursion (recursion)
Erlaubt es Berechnungen durch sich selbst zu definieren (Allows computations to be
defined in terms of themselves)
Prozedurale Abstraktion (procedural abstraction)
zweistellige Ausdrücke: foo + bar
Evaluieren wir zuerst die Unterausdrücke foo oder bar bevor wir die Addition
ausführen?
Zuweisungen (assignments)
Erlaubt es einer Gruppe von Berechnungen zu bennen, möglicherweise zu
parametrisieren und auszuführen wann immer der Name referenziert wird
Berechnungen welche die Werte von Variablen ändern
Beispiel:
Nebenläufigkeit (concurrency)
foo = bar + 1;
bar = foo + 1;
Erlaubt es Berechnungen „zur gleichen Zeit“ auszuführen
Keine Festlegung (Nondeterminancy)
Welche von diesen beiden Zuweisungen evaluieren wir zuerst?
Reihenfolge zwischen Berechnungen wird unspezifiziert gelassen
Universität Göttingen - Informatik II - SS 2005
Universität Göttingen - Informatik II - SS 2005
7.2-75
Universität Göttingen - Informatik II - SS 2005
7.2-76
7. Compilerbau
7. Compilerbau
Was genau ist eine Ausdruck (expression)?
Evaluation von Ausdrücken und Seiteneffekte
Berechnungen welche einen Wert erzeugen
Evaluation von Ausdrücken kann zusätzlich zu den Werten auch
Seiteneffekte erzeugen
Beispiele:
Variablenreferenzen
Holt den Wert der Variablen aus dem Speicher
Konstantenreferenzen
int foo (void) { a = 10; return a; }
… foo() + 20 …
Evaluation von „foo()+20“ ergibt den Wert 30 UND als einen
Seiteneffekt die Zuweisung des Wertes 10 an die Globale a
1, 2, 3, ‘a’, ‘b’, ‘c’, …
Operatoren oder Funktionen angewandt auf eine Sammlung von
Unterausdrücken
Funktionsaufrufe
Ausdrücke ohne Seiteneffekte werden „referentially transparent”
genannt
foo(a,b+10)
Arithmetische Operationen
Solche Ausdrücke können als mathematische Objekte behandelt
werden und entsprechend durchdacht
foo + bar
Universität Göttingen - Informatik II - SS 2005
7.2-77
7. Compilerbau
Universität Göttingen - Informatik II - SS 2005
7.2-78
7. Compilerbau
Priorität und Assoziativität
Beispiel zur Motivation (1/3)
// kleines Bsp. für die
#include <iostream>
using namespace std;
Zwei Wege um die Reihenfolge zu spezifizieren in welcher
Unterausdrücke von komplexen Ausdrücken evaluiert werden
Prioritätsregel
Spezifiziert wie Operationen gruppieren wenn Klammern abwesend sind
Assoziativität
Ähnlich dem mathematischen Konzept mit dem gleichen Namen
Spezifiziert ob Operatoren von der gleichen Prioritätsgruppe zur Linken
oder Rechten zuerst evaluieren
Verwendung von *= und ++
int main()
{
int x=3, y=2;
cout << "x=3, y=2“ << endl;
x *= ( (x++) - (++y) + x );
cout << "x*=((x++)-(++y)+x): " <<x<<endl;
return 0;
}
Universität Göttingen - Informatik II - SS 2005
7.2-79
Universität Göttingen - Informatik II - SS 2005
7.2-80
7. Compilerbau
7. Compilerbau
Beispiel zur Motivation (2/3)
Beispiel zur Motivation (3/3)
// kleines Bsp. für die
von *= und ++
#include <iostream>
using namespace std;
Das Programm liefert auf folgenden Plattformen und Compilern
unterschiedliche Ergebnisse, z.B.:
Linux Intel g++ 3.3.3; Ergebnis = 10
Linux Intel g++ 2.95.4; Ergebnis = 10
Solaris SPARC g++ 2.95.3; Ergebnis = 4
Solaris SPARC Sun WorkShop 6 update 1 C++ 5.2; Ergebnis =16
Verwendung
int main()
{
int x=3, y=2;
cout << "x=3, y=2“ << endl;
x *= ( (x++) - (++y) + x );
Das Problem liegt nicht an der Priorität der Operatoren oder der
Assoziativität, da alles geklammert ist.
cout << "x*=((x++)-(++y)+x): "
<<x<<endl;
Das Problem liegt an der fehlenden Spezifikation im C Standard über
den Zeitpunkt der tatsächlichen Ausführung der Addition um 1
beim ++-Operator.
return 0;
}
7.2-81
7. Compilerbau
2. Ergebnis x=4 ergibt sich durch
((x++)-(++y) + x) =
( 3 -(2+1) + 3) = 3
*=
x++
für altes x=3
für altes x=3
=> x=9
=> x=4
x++ wird erst nach der Zuweisung *=
ausgeführt (mit Bezug auf das Alte)!!!
3. Ergebnis x=10 ergibt sich durch
((x++)-(++y) + x) =
(3
-(2+1) + 3) = 3
für altes x=3
für neues x=9
=> x=9
=> x=10
x++ wird erst nach der Zuweisung *=
ausgeführt (mit Bezug auf das Neue)!!!
Universität Göttingen - Informatik II - SS 2005
7.2-82
7. Compilerbau
Priorität (Precedence)
Assoziativität
Beispiel:
Die Assoziativität ist in Sprachen einheitlicher
Elementare arithmetische Operatoren assoziieren von links nach
rechts
-a * c
Wie ist die Reihenfolge der Evaluierung?
(-a) * c oder –(a * c)???
Operatoren werden von links nach rechts gruppiert und evaluiert
Beispiel (Subtraktion):
In C, -, unäre Negierung (unary negation), hat höhere Priorität als *
(Multiplikation), weshalb die erste Klammerung korrekt ist
9 – 3 – 2 evaluiert eher zu (9 – 3) -2 als 9 - (3 - 2)
Prioritätsregeln variieren stark von Sprache zu Sprache
Einige arithmetische Operatoren assoziieren aber von rechts nach
links
Beispiel (Potenzieren):
Frage:
Wie wird in C int i = 0; int *ip = &i; ++*ip++; ausgewertet?
++( ) auf den Wert von *ip++. Der Wert ist der Inhalt der Variablen, auf die ip
verweist. Wenn ip abgerufen wurde, wird ip im nachhinein um eins erhöht
(Zeigerarithmetik).
Daher ist am Ende i = 1 und der Zeiger ip wurde auch um eins erhöht (und
zeigt somit höchstwahrscheinlich ins Nirvana, da kein Bezug zu dieser
Speicherstelle besteht)
Universität Göttingen - Informatik II - SS 2005
x++ und y++ werden vor
der Zuweisung *= ausgeführt
*=
x++
Unterschiedliche Interpretation der Operatoren durch C(++) Compiler
Universität Göttingen - Informatik II - SS 2005
1. Ergebnis x=16 ergibt sich durch
((x++)-(++y) + x) =
((3+1)-(2+1) + 3) = 4 => x=16
7.2-83
4**3**2 evaluiert eher zu 4**(3**2) als (4**3)**2
In Sprachen die Zuweisungen in Ausdrücken erlauben, assoziieren
Zuweisungen von rechts nach links
Beispiel:
a = b = a + c evaluiert zu a = (b = a + c)
a + c wird berechnet und b zugewiesen, danach wird b zu a zugewiesen
Universität Göttingen - Informatik II - SS 2005
7.2-84
Priorität/Assoziativität von Operatoren in C
7. Compilerbau
Priorität
Arbeiten mit Prioritäten und Assoziativität
15
Regeln für Prioritäten und Assoziativität variieren stark von Sprache
zu Sprache
12
11
10
9
8
7
<< >>
< <= >
== !=
&
^
6
5
4
3
2
|
&&
||
?:
=
+= -= *= /=
%= &= ^= |=
<<= >>=
,
14
In Pascal:
„if A < B und C < D then ...“
Könnte zu „if A < (B and C) < D then...“ evaluiert werden
Upps!
13
Leitfaden/Richtlinie:
Im Zweifelsfall lieber Klammern verwenden, speziell
wenn jemand oft zwischen verschiedenen Sprachen
wechselt!
Universität Göttingen - Informatik II - SS 2005
7.2-85
7. Compilerbau
1
>=
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<b
a && b || c oder a & b | c
Die Evaluation von booleschen Ausdrücken kann durch die „short
circuiting“ Technik optimiert werden
Beispiel:
Wenn f(b) die Variablen c oder d modifiziert, dann hängt der Wert des
ganzen Ausdruckes davon ab, ob f(b) zuerst ausgeführt wird oder nicht
Verbesserung des Codes
Wir wollen (c*d) zu erst berechnen, so dass wir das berechnete
Ergebnis nicht speichern und wiederherstellen müssen bevor und
nachdem f(b) aufgerufen wird
(a < b) && (c < d)
Wenn (a < b) zu falsch evaluiert wird dann gibt es keinen Bedarf mehr (c <d )
auszuwerten
Siehe Regel R1 aus Kapitel 2, Boolesche Algebra und Gatter
Dies wird wichtig bei Code nach folgendem Muster:
if (unwahrscheinliche Bedingung && teure Funktion() ) ...
Wir wollen die Auswertung einer teuren Funktion() verhindern, wenn eine
unwahrscheinliche Bedingung zu falsch ausgewertet wird
Nochmals: Im Zweifelsfall Klammern setzen!
Universität Göttingen - Informatik II - SS 2005
Operator
Funktionsaufruf
Arrayindex
Memberzugriff
Negation (logisch, bitweise)
Inkrement, Dekrement
Vorzeichen
Dereferenzierung, Adresse
Typecast
()
[]
->
! ∼
++ -+ * &
(typ)
sizeof
* /
%
+ -
7.2-87
Universität Göttingen - Informatik II - SS 2005
7.2-88
7. Compilerbau
7. Compilerbau
Zuweisungen
Was genau ist eine Variable? (1/2)
Berechnungen welche den Wert einer Variablen beeinflussen
Die Interpretation eines Variablennamens hängt von dem Kontext ab
in welchem er auftritt
Beispiel: c = a + b
Weisst den Wert, der durch den Ausdruck „ a +b“ berechnet wird, der
Variablen c zu
d=a
Zuweisungen sind der fundamentale Mechanismus um
Seiteneffekte zu erzeugen
Die Referenz zu der Variablen „a“ auf der „rechten Seite“ einer
Zuweisung benötigt einen Wert
Werte die Variablen zugewiesen werden können zukünftige
Berechnungen beeinflussen
Wird ein r-value-context genannt und das „a“ wird r-value genannt
Zuweisungen sind unerlässlich für das imperative
Programmiermodel
a=b+c
Die Referenz zu der Variablen „a“ auf der „linken Seite“ einer
Zuweisung bezieht sich auf a‘s Speicherort
Wird ein l-value-context genannt und das „a“ wird l-value genannt
Universität Göttingen - Informatik II - SS 2005
7.2-89
7. Compilerbau
Zuweisungsfolgen
Zwei Wege um eine Variable zu behandeln
Zuweisungsfolgen (assignment sequencing) sind in den meisten
Sprachen einfach
Wertemodell
Variablen sind benannte Container für Werte
Beide Interpretationen als l-value und r-value von Variablen sind möglich
Modell wird verwendet von Pascal, Ada, C, etc.
Zuweisungen werden in der Reihenfolge ausgeführt in der sie im
Programmtext auftreten
Beispiel:
a = 10; b = a;
b zugewiesen
Referenzmodell
Variablen sind benannte Referenzen für Werte
Nur die Interpretation als l-value ist möglich
Es wird zuerst die 10 dem a zugewiesen und danach wird a dem
Ausnahmen
Variablen in einem r-value-context müssen „dereferenziert“ werden um einen
Wert zu erzeugen
Modell wird verwendet von Clu
Universität Göttingen - Informatik II - SS 2005
7.2-90
7. Compilerbau
Was genau ist eine Variable? (2/2)
Wertemodell
Universität Göttingen - Informatik II - SS 2005
Zuweisungsausdrücke
Beispiel: a = b = a * c
Erinnere dich an die Auswertereihenfolge bei Ausdrücken: In den meisten
Programmiersprachen gilt die Assoziation von rechts nach links
Initialisierung
Kombinationen mit dem Zuweisungsoperator
Referenzmodell
7.2-91
Universität Göttingen - Informatik II - SS 2005
7.2-92
7. Compilerbau
7. Compilerbau
Zuweisungsfolgen: Initialisierung (1/2)
Zuweisungsfolgen: Initialisierung (2/2)
Wie initialisieren oder wie weisen wir initiale Werte Variablen zu?
Verwende den Zuweisungsoperator um initiale Werte zur Laufzeit
zuzuweisen
Verwende den Zuweisungsoperator um initiale Werte zur Laufzeit
zuzuweisen
Lösungen:
Statische Initialisierung:
Beispiel für C: static char s[] = “foo”
Der Compiler kann den Elementen des Arrays s die Werte zur Compilezeit
zuweisen, was uns 4 Zuweisungen zur Laufzeit erspart (eine für jedes Zeichen
plus dem NULL (String-)Terminator)
siehe auch C++ Konstruktorinitialisierung
Probleme:
Ineffizienz: Wenn wir den initialen Wert einer Variablen zur Compilezeit
kennen, dann kann der Compiler diesen Wert dem Speicher zuweisen ohne
eine Initialisierung zur Laufzeit zu benötigen
Programmierfehler: Wenn Variablen kein initialer Wert bei der Deklaration
zugewiesen wird, dann könnte ein Programm eine Variable verwenden bevor
sie irgendeinen (sinnvollen) Wert enthält
Defaultwerte (Standardwerte/Ausgangswerte/...)
Sprachen können einen Defaultwert für jede Deklaration eines eingebauten
(built-in) Typs spezifizieren
Dynamische Wertkontrollen
Mache es zu einem Laufzeitfehler, wenn eine Variable verwendet wird bevor ihr
ein Wert zugewiesen wurde
Statische Wertkontrollen
Mache es zu einem Compilerfehler wenn eine Variable verwendet werden könnte
bevor ihr ein Wert zugewiesen wurde
Universität Göttingen - Informatik II - SS 2005
7.2-93
7. Compilerbau
Universität Göttingen - Informatik II - SS 2005
7.2-94
7. Compilerbau
Zuweisungsfolgen: Kombinationen
Sequentialität: Zusammenfassung
Gibt es einen effizienteren Weg um komplexe Zuweisungen zu
handhaben?
Ausdrücke
Prioritäten und Assoziativität kontrollieren die Reihenfolge
Es müssen Seiteneffekte bei Unterausdrücken beachtet werden
Logische Ausdrücke können von der short-circuit Auswertung profitieren
Beispiele:
a = a + 1;
b.c[3].d = b.c[3].d * e;
Zuweisungen
Probleme:
Ist fehleranfällig und schwierig zu schreiben, da Text wiederholt wird
Kann zu ineffizientem kompilierten Code führen
Lösungen: Kombinationen mit dem Zuweisungsoperator
Beispiele:
a += 1;
b.c[3].d *= e;
Die Folge des Auftretens im Programmtext bestimmt die Reihenfolge
Zuweisungen zur Compilezeit erlauben die Vermeidung von
Zuweisungen zur Laufzeit
Zusammengesetzte Zuweisungsoperatoren kombinieren
Ausdrucksauswertung und Zuweisung um effizienter sein zu können
Zuweisungen werden mit Operatoren für Ausdrücke kombiniert
Vermeidet sich wiederholenden Code
Erlaubt es dem Compiler auf einfacherem Wege effizienteren Code zu
generieren
Universität Göttingen - Informatik II - SS 2005
7.2-95
Universität Göttingen - Informatik II - SS 2005
7.2-96
7. Compilerbau
7. Compilerbau
Auswahl (selection) (1/4)
Auswahl (selection) (2/4)
Wähle, basierend auf einer Laufzeitbedingung, welche von
mehreren Berechnungen ausgeführt werden soll
Am häufigsten Ausgeführt vom if..then..else Sprachkonstrukt
Beispiel:
if ((a < b) && (c < d)) { do_something(); }
Wenn beide bedingte Anweisungen „a<b“ und „c<d“ zu wahr ausgewertet
werden, dann führe die Berechnung, welche durch das Unterprogramm
do_something() referenziert wird, aus
Universität Göttingen - Informatik II - SS 2005
7.2-97
7. Compilerbau
Short circuiting
Zur Erinnerung: Kann verwendet werden um unnötige
Ausdrucksauswertungen zu verhinden
Beispiel:
if ( (a < b) && (c < d) ) { do_something(); }
Wenn (a < b) falsch ist, dann kann do_something() nicht ausgeführt werden,
egal was (c < d) ergibt
Siehe Regel R1 aus Kapitel 2, Boolesche Algebra und Gatter
Short circuiting wird Code generieren der die Auswertung von (c < d)
genauso ausläßt (skipped) wie die Ausführung von do_something(), wenn (a
< b) falsch ist
Universität Göttingen - Informatik II - SS 2005
7.2-98
7. Compilerbau
Auswahl (selection) (3/4)
Auswahl (selection) (4/4)
Angenommen wir haben Code der ähnlich wie dieser aussieht:
Lösung: case/switch Befehle
j := … (* something complicated *)
IF j = 1 THEN
clause_A
ELSIF j IN 2, 7 THEN
clause_B
ELSIF j in 3..5 THEN
clause_C
ELSE
clause_D
END
Beispiel:
CASE …
1:
| 2,7:
| 3..5:
ELSE
END
clause_A
clause_B
clause_C
clause_D
Ist einfacher zu schreiben und zu verstehen
Problem:
Ist kompliziert zu schreiben
Universität Göttingen - Informatik II - SS 2005
7.2-99
Universität Göttingen - Informatik II - SS 2005
7.2-100
7. Compilerbau
7. Compilerbau
Iteration
Aufzählungsgesteuerte Schleifen: Probleme (1/3)
Beispiel von FORTRAN I, II und IV
Führt eine Gruppe von Berechnungen mehrmals aus
Sprachen bieten für Iterationen Schleifenkonstrukte an
do 10 i = 1, 10, 2
...
10: continue
Aufzählungsgesteuerte Schleifen
Die Schleife wird für jeden Wert aus einer endlichen Menge (Aufzählung)
ausgeführt
Logikgesteuerte Schleifen
Die Schleife wird solange ausgeführt bis sich eine boolesche Bedingung
ändert
Probleme:
Anmerkung:
Der imperative Stil der Programmierung favorisiert Schleifen gegenüber
Rekursion
Iteration und Rekursion können beide verwendet werden um eine
Gruppe von Berechnungen wiederholt auszuführen
Alle Arten von Schleifen können auf die beiden Konstrukte Selektion
(if..then..end) und Sprung (goto) zurückgeführt werden. Wird oft in
Zwischensprachen zur Codegenerierung verwendet.
Universität Göttingen - Informatik II - SS 2005
7.2-101
7. Compilerbau
Goto-Sprünge in die Schleife hinein, wobei i nicht vernünftig initialisiert wird, werden
wahrscheinlich in einem Laufzeitfehler enden
Die Schleife wird beendet wenn der Wert von i die obere Grenze überschreitet.
Dies könnte einen (unnötigen) arithmetischen Überlauf veranlassen, wenn die
obere Grenze in der Nähe des größten, zulässigen Wertes von i liegt
Universität Göttingen - Informatik II - SS 2005
7.2-102
Aufzählungsgesteuerte Schleifen: Antworten (3/3)
Können der Schleifenindex oder die Grenzen verändert werden?
Allgemeine Form von Schleifen:
Ist bei den meisten Sprachen verboten
FOR j := first TO last BY step DO
…
END
Algol 68, Pascal, Ada, Fortran 77 und 90, Modula-3
Was passiert wenn first größer als last ist?
Die meisten Sprachen werten first und last aus bevor die Schleife ausgeführt wird
Falls first größer als last ist, dann wird der Schleifenrumpf niemals ausgeführt
Fragen die zu dieser Schleifenart zu stellen sind:
3.
Kann j, first und/oder last im Schleifenrumpf verändert werden?
Wenn ja, welchen Einfluss hat dies auf die Steuerung?
Was passiert wenn first größer als last ist?
Welchen Wert hat j wenn die Schleife beendet wurde?
4.
Kann die Kontrolle von außerhalb in die Schleife hineinspringen?
2.
Der Schleifenrumpf wird immer mindestens einmal ausgeführt
Statements im Schleifenrumpf könnten i ändern und somit würde auch das
Verhalten der Schleife verändert werden
Goto Statements können in oder aus der Schleife springen
7. Compilerbau
Aufzählungsgesteuerte Schleifen: Fragen (2/3)
1.
Die Variable i wird die Indexvariable genannt und nimmt hier die Werte 1, 3, 5,
7, 9 an
Die Statements zwischen der ersten und letzte Zeile werden der Schleifenrumpf
(loop body) genannt und wird hier für jeden der fünf Werte von i einmal
ausgeführt
Welchen Wert hat der Schleifenindex j am Ende der Schleife?
Ist in einigen Sprachen nicht definiert, z.B. Fortran IV oder Pascal
In den meisten Sprachen gilt der zuletzt definierte Wert
Einige Sprachen machen die Indexvariable zu einer lokalen Variablen der Schleife,
weswegen die Variable außerhalb des Gültigkeitsbereiches der Schleife nicht sichtbar ist
Kann die Kontrolle von außerhalb in die Schleife hineinspringen?
Nein, für die meisten Sprachen
Viele Sprachen erlauben aber den Sprung von innen nach außen
Viele Sprachen bieten Anweisungen (break; exit; last, etc,) an, die einen frühzeitige
Abbruch der Schleife ohne expliziten Sprung erlauben
Universität Göttingen - Informatik II - SS 2005
7.2-103
Universität Göttingen - Informatik II - SS 2005
7.2-104
7. Compilerbau
7. Compilerbau
Iteratoren
Logikgesteuerte Schleifen
Alle bisher betrachteten Schleifen iterieren über eine arithmetische Folge
(1,3,5,7)
Aber wie iterieren wir über eine frei wählbare Menge von Objekten?
Antwort: Iteratoren
Die “FOR j := first TO last BY step DO … END” Schleife kann auch geschrieben
werden als
“every j := first to last by step do { … }” in ICON
Beispiel:
Beispiele:
Vorprüfende Schleife
„while Bedingung do Anweisung“
Die C for-Schleife ist eine vorprüfende, logikgesteuerte Schleife und nicht
eine aufzählungsgesteuerte Schleife!
for(Vor-Anweisung; Bedingung; Nach-Anweisung ) Block
Nachprüfende Schleife
“every write (1 + upto(‘ ‘, s))” in ICON schreibt jede Position in den String s
welcher ein Leerzeichen folgt
upto(‘ ‘,s) erzeugt jede Position in s gefolgt von einem Leerzeichen
Iteratoren sind Ausdrücke die mehrere Werte generieren und welche Ihre
enthaltende Ausdrücke und Statements bestimmen können um diese
mehrmals auszuwerten oder auszuführen
Ein anderes Beispiel:
“write(10 + 1 to 20)” schreibt 10 + j für jedes j zwischen 1 und 20
1 bis 20 erzeugt die Folge 1 bis einschließlich 20
„repeat Anweisung until Bedingung“
„do Anweisung while Bedingung“
Diese Art von Schleife werden oft falsch verwendet und sollten daher
vermieden werden
(da mindest ein Durchlauf erfolgt!)
Prüfung in der Mitte einer Schleife
„loop Anweisung when Bedingung exit Anweisung end“
Siehe auch Standard Template Library (STL) von C++
Universität Göttingen - Informatik II - SS 2005
7.2-105
7. Compilerbau
Universität Göttingen - Informatik II - SS 2005
7.2-106
7. Compilerbau
Rekursion
Rekursion und Iteration
Erlaubt es Berechnungen durch sich selbst zu definieren
Mit anderen Worten, komplexe Berechnungen werden mit Begriffen von
einfacheren Berechnungen ausgedrückt
Ähnlich dem Prinzip der mathematischen Induktion
Ist die bevorzugte Methode der wiederholenden
Programmausführung in funktionalen Sprachen
Eigentlich ist es die meiste Zeit der einzigste Weg um Berechnungen in
funktionalen Sprachen wiederholt auszuführen
Warum?
Weil für die Alternative, nämlich Iteration (Schleifen), die Ausführung von
Anweisungen mit Seiteneffekten (wie Zuweisungen) verbunden ist, was in
rein funktionalen Sprachen verboten ist
Informell gesprochen, die Schleife
“FOR j := first TO last BY step DO … END”
wird durch Rekursion zu:
fun loop j step last =
if j <= last then
…
loop j + step step last
Es gibt mit der rekursiven Emulation von Iteration aber ein Problem:
sie ist langsam!
Dies ist nicht wirklich eine Einschränkung da Rekursion streng
genommen genauso Mächtig ist wie Iteration und umgekehrt
Universität Göttingen - Informatik II - SS 2005
7.2-107
Universität Göttingen - Informatik II - SS 2005
7.2-108
7. Compilerbau
7. Compilerbau
Verbesserte Durchführung von Rekursion
Evaluationskonzepte von Funktionsargumenten
Gegebene Schleife
Wie werden Argumente für Funktionen ausgewertet?
fun loop j step last =
if j <= last then
…
loop j + step step last
Die Argumente einer Funktion werden ausgewertet bevor die Funktion die
Steuerung erhält?
Wird Applicative-Order Evaluation (eager evaluation, call-by-value) bezeichnet
Ist der Standard in den meisten Sprachen
Der rekursive Aufruf der Schleife „loop“ ist die letzte ausgeführte
Berechnung der Funktion „loop“
Die Argumente einer Funktion werden nur dann ausgewertet, wenn sie
auch benötigt werden?
Wird Endrekursion (tail recursion) genannt
Wird Normal-Order Evaluation (lazy evaluation‚ call by need, delayed evaluation)
bezeichnet
Kann zu einer besseren Leistung führen wenn an eine Funktion übergebene
Argumente manchmal nicht gebraucht werden
Beispiel:
Geschickte Compiler werden Endrekursionen durch eine Schleife
ersetzen
Argumente für den Aufruf der Endrekursion werden ausgewertet und in
den entsprechenden Lokalen platziert und ein Sprung zurück zum
Anfang der Funktion wird gemacht anstatt einen rekursiven Aufruf zu
machen
Dies kann zu einer signifikanten Steigerung der Leistung führen
Universität Göttingen - Informatik II - SS 2005
7.2-109
7. Compilerbau
void foo (int a, int b, int c) {
if (a + b < N) { return c; } else { return a + b; }
foo(a,b,expensive_function())
In einigen Fällen wird „c“ nicht benötigt, und der Wert von c könnte von einerteuer zu
berechnenden Funktion bestimmt werden
Universität Göttingen - Informatik II - SS 2005
7.2-110
7. Compilerbau
Ausblick
Was haben Sie in diesem Kapitel gelernt?
Compilerbau (Kapitel 7)
Automaten und Sprachen (Kapitel 6)
Programmiersprachen sind Abstraktionsmechanismen, welche:
ein Rahmenwerk zum Lösen von Problemen und erzeugen neuer
Abstraktionen bieten
Schirmen den Programmierer von niederen Detailebenen (low-level
details) der Zielmaschine (Assemblersprache, Verbinden (linken), etc.)
ab
Compiler sind komplexe Programme welche eine höhere
Programmiersprache in eine Assemblersprache umwandeln um
danach ausgeführt zu werden
Compilerprogrammierer handhaben die Komplexität des
Kompilationsprozesses durch:
Betriebssysteme (Kapitel 5)
Maschinenorientierte Programmierung (Kapitel 4)
von-Neumann-Rechner (Kapitel 3)
aufteilen des Compilers in unterschiedliche Phasen
verwenden, ausgehend von der Spezifikation, eine Theorie für den Bau
von Compilerkomponenten
Speicher
Zahlen und Logik (Kapitel 2)
Kommunikation (Kapitel 8)
von-Neumann-Rechner
Universität Göttingen - Informatik II - SS 2005
7.2-111
Universität Göttingen - Informatik II - SS 2005
7.2-112
8. Computernetzwerke
Überblick
Grundlagen von Netzen
Grundlegende Protokollmechanismen
Lokale Netze und Zwischensysteme (Schicht 2 und 3)
Internet-Technologien (Schicht 3 und 4)
Informatik II
SS 2005
Kapitel 8: Computernetzwerke (Telematik)
Dr. Michael Ebner
Dipl.-Inf. René Soltwisch
Lehrstuhl für Telematik
Institut für Informatik
Universität Göttingen - Informatik II - SS 2005
8. Computernetzwerke
8. Computernetzwerke
Literatur (1/5)
Literatur (2/5)
Foliensätze (aus denen ev. teilweise Folien übernommen wurden):
Bitte achten Sie immer auf die neusten Ausgaben der Bücher!!!
Grundlagen/Allgemeines
Prof. Dr. S. Fischer, Universität Lübeck (ehemals Universität
Braunschweig):
http://www.ibr.cs.tu-bs.de/lehre/ss04/bsn/
(Foliensatz dient als Grundlage dieses Kapitels)
J. F. Kurose & K. W. Ross: „Computernetze: Ein Top-Down-Ansatz mit
Schwerpunkt Internet“, Pearson Studium (Addison-Wesley), ISBN 38273-7017-5, 2002 (Top-Down Ansatz nach Schichtenmodell)
Stallings: „Data & Computer Communications“, Prentice Hall, ISBN 013-086388-2: http://williamstallings.com/DCC6e.html
Universität Göttingen - Informatik II - SS 2005
8-2
8-3
J. F. Kurose & K. W. Ross: „Computernetze: Ein Top-Down-Ansatz mit
Schwerpunkt Internet“, Pearson Studium (Addison-Wesley), ISBN 38273-7017-5, 2002 (Top-Down Ansatz nach Schichtenmodell)
G. Krüger & D. Reschke: „Lehr- und Übungsbuch Telematik --- Netze –
Dienste – Protokolle“, Fachbuchverlag Leipzig (Carl-Hanser), 2.
Auflage, ISBN 3-446-22073-9, 2002 (Gutes Lehrbuch, wegen
kompakter Darstellung)
A. S. Tanenbaum: „Computernetzwerke“, Pearson Studium (PrenticeHall), 4. überarb. Auflage, ISBN 3.8273-7046-9, 2003 (Bottom-Up
Ansatz nach Schichtenmodell)
Douglas E. Comer: „Computernetzwerke und Internets mit InternetAnwendungen“, Pearson Studium (Prentice-Hall), 3. überarb. Auflage,
ISBN 3-8273-7023-X, 2002 (Sehr auf Internet-Technologien fixiert)
Rechenberg & Pomberger: „Informatik-Handbuch“, Hanser Verlag, ISBN
3-446-21842-4
Universität Göttingen - Informatik II - SS 2005
8-4
8. Computernetzwerke
8. Computernetzwerke
Literatur (3/5)
Literatur (4/5)
Details zu TCP/IP
Programmierung
W. Richard Stevens: „TCP/IP Illustrated Volume 1-3“, Pearson
Education (Addison-Wesley),
W. Richard Stevens: „UNIX Network Programming“, Prentice-Hall, 2.
Auflage
W. Richard Stevens: „TCP/IP Illustrated, The Protocols“, Pearson Education,
Volume 1, ISBN 0-201-63346-9
W. Richard Stevens: „TCP/IP Illustrated, The Implementation“, Pearson
Education, Volume 2, ISBN 0-201-63354-X
W. Richard Stevens: „TCP/IP Illustrated, TCP for Transactions, HTTP,
NNTP, and the UNIX Domain Protocols“, Pearson Education, Volume 3,
ISBN 0-201-63495-3
W. R. Stevens: „UNIX Network Programming --- Networking APIs: Sockets
and XTI“, Prentice-Hall, Volume 1, 2. Auflage, ISBN 0-13-490012-x
W. R. Stevens: „UNIX Network Programming --- Interprocess
Communication“, Prentice-Hall, Volume 2, 2. Auflage, ISBN 0-13-081081-9
Douglas Comer: „Internetworking with TCP/IP“
Volume 1: „Principles, Protocols and Architecture“, ISBN 0130183806
Volume 2: „ANSI C Version: Design, Implementation, and Internals“, ISBN
0139738436
Volume 3: „Client-Server Programming and Applications, Linux/Posix
Sockets Version“, ISBN 0130320714
Universität Göttingen - Informatik II - SS 2005
8-5
8. Computernetzwerke
Universität Göttingen - Informatik II - SS 2005
8. Computernetzwerke
Literatur (5/5)
Überblick
Weiterführende Themen
Grundlagen von Netzen
Mobilkommunikation
1.
Jochen Schiller: „Mobilkommunikation“ Pearson Studium (Addison-Wesley),
2. überarb. Auflage, ISBN 3-8273-7060-4, 2003
Verteilte Systeme
G. Coulouris: „Verteilte Systeme – Konzepte und Design“, Pearson Studium
(Addison-Wesley), 3. überarb. Auflage, ISBN 3-8273-7022-1, 2002
2.
3.
4.
5.
6.
A. Tanenbaum: „Verteilte Systeme - Grundlagen und Paradigmen“, Pearsin
Studium (Prentice-Hall), ISBN 3-8273-7057-4, 2003
Kombination Kommunikation und Kooperation (Kommunikation und
Datenbanken)
7.
Grundlagen
Übertragungsmedien
Übertragungssysteme
Netztopologien und Medienzuteilung
Dienste und Protokolle
ISO/OSI Referenzmodell
Internet-Schichtenmodell
Grundlegende Protokollmechanismen
Lokale Netze und Zwischensysteme (Schicht 2 und 3)
Internet-Technologien (Schicht 3 und 4)
s. Abeck, P.C. Lockemann, J. Schiller, J. Seitz: „Verteilte
Informationssysteme – Integration von Datenübertragungstechnik und
Datenbanktechnik“, dpunkt Verlag, ISBN 3-89864-188-0, 2003
Universität Göttingen - Informatik II - SS 2005
8-6
8-7
Universität Göttingen - Informatik II - SS 2005
8-8
8. Computernetzwerke
8. Computernetzwerke
Grundlagen
Begriffe
Kommunikationsnetze stellen eine allgegenwärtige Schlüsseltechnologie
dar und bilden die Grundlage der kommenden Informationsgesellschaft.
Telematik = TELEkommunikation und InforMATIK
(Simon Nora und Alain Minc in Ihrem Bericht an den französischen
Präsidenten, 1978)
Geschichte der Kommunikation
Historisch: Verflechtung von Rechnern und Telekommunikationsmitteln
Fackeltelegraphie (5. Jhdt. v. Chr. Griechenland)
drahtgebundene Telegraphie: Morse (ca. 1840)
Unterseekabel London - New York (1866)
Telefon Edison (1877)
öffentliche Telefonnetze (ab 1880)
ARPANET (Vorläufer des heutigen Internets) (ab 1969)
lokale Netze (z.B. Ethernet ab 1976)
World-Wide-Web (ca. 1990)
Andere Begriffe
Computernetze
Computernetzwerke
Rechnernetze
Kommunikationsnetze
Aufgabengebiete
Praktische und Angewandet Informatik (Teilweise auch technische
Informatik)
Technische Infrastruktur verteilter Systeme (Netze)
Netz-Dienste und darauf aufbauende Anwendungen
Regeln für Nachrichtenaustausch (Protokolle)
Werkzeuge zum Entwickeln verteilter Anwendungen
Datenkommunikation:
Austausch von Daten zwischen datenverarbeitenden Geräten.
Telekommunikation:
Austausch von Informationen (z.B. Sprache, Video) zwischen Menschen.
Derzeit Integration von Datenkommunikation und Telekommunikation.
Universität Göttingen - Informatik II - SS 2005
8-9
8. Computernetzwerke
Universität Göttingen - Informatik II - SS 2005
8-10
8. Computernetzwerke
Struktur eines Datennetzes
Zusammenhang mit Betriebssystemen
Netzwerkbetriebssystem:
Betriebssystem, das um Kommunikationskomponenten erweitert wurde
Endsystem
Zwischensystem
Verteiltes Betriebssystem:
Betriebssystem, das intern auf Kommunikationskomponenten aufgebaut
ist und die Struktur und Komplexität des Kommunikationssystems
verbirgt (Transparenz).
Netz
Basiskomponenten:
Endsysteme
Zwischensysteme
Kommunikationsverbindungen zwischen direkt benachbarten Systemen
Universität Göttingen - Informatik II - SS 2005
8-11
Universität Göttingen - Informatik II - SS 2005
8-12
8. Computernetzwerke
8. Computernetzwerke
Ziele der Netznutzung (1/2)
Ziele der Netznutzung (2/2)
Lastverbund:
Wartungsverbund:
Ziel: Gleichmäßige Auslastung verschiedener Ressourcen.
Methode: Aufteilung anfallender Spitzenlasten auf mehrere Rechner.
Ziel: Schnellere und billigere Wartung verschiedener Rechner.
Methode: Zentrale Störungserkennung und -behebung.
Leistungsverbund:
Funktionsverbund:
Ziel: Verringerte Antwortzeiten.
Methode: Aufteilung einer komplexen Aufgabe in kleinere Teilaufgaben.
Kapazitätsverbund:
Kommunikationsverbund:
Ziel: Effiziente Nutzung der verfügbaren Ressourcen.
Methode: Versendung von Aufgaben an verschiedene Rechner und
gemeinsame Nutzung spezieller Hard- und Software.
Ziel: Übertragung von Informationen an verschiedene räumlich
getrennte Orte.
Methode: Einsatz von Briefdiensten oder verteilten
Informationssystemen.
Die Rechnernetztypen sind nicht alle scharf voneinander
abzugrenzen.
Normalerweise werden mit einem Rechnernetz mehrere Verbünde
gleichzeitig realisiert.
Datenverbund:
Ziel: Austausch logisch zusammenhängender Daten zwischen örtlich
getrennten Systemen.
Methode: Zugriff auf entfernte Dateien oder verteilte Datenbanken.
Universität Göttingen - Informatik II - SS 2005
8-13
8. Computernetzwerke
8-14
Übertragungsmedien (2/3)
Verdrillte Kupferkabel (twisted pair):
Lichtwellenleiter (fibre optics):
Preiswerte Technologie für niedrige
Frequenzen.
Anfällig gegen Störungen
(elektromagnetische Einstrahlungen)
Technologie für hohe bis sehr hohe
Frequenzen.
Besteht aus einem zentralen Leiter,
der von einem peripheren Leiter
ummantelt ist.
Geringe Anfälligkeit gegen
elektromagnetische Einstrahlungen.
Bei hohen Frequenzen aufgrund der
Bauform kaum Energieverluste
(geringe Dämpfung)
Universität Göttingen - Informatik II - SS 2005
8. Computernetzwerke
Übertragungsmedien (1/3)
Koaxialkabel (coaxial cable):
Ziel: Bereitstellung spezieller Funktionen an verschiedenen Orten.
Methode: Einsatz von Spezialrechnern (Transputer, Superrechner).
Übertragung höchster Frequenzen.
Monomodefaser können Licht über nahezu 100 km ohne Verstärkung
übertragen.
Leistungsfähiger und billiger als Koaxialkabel, obwohl die
Anschlusstechnologie etwas komplizierter ist.
STP:
STP:Shielded
ShieldedTwisted
Twisted
Pair
Pair
Multimode graded index
Coaxial
Coaxial
Single mode
Universität Göttingen - Informatik II - SS 2005
8-15
Universität Göttingen - Informatik II - SS 2005
8-16
8. Computernetzwerke
8. Computernetzwerke
Übertragungsmedien (3/3)
Vermittlungstechniken (1/2)
Richtfunk (line-of-sight):
Moduliert das Signal auf eine elektromagnetische Welle (Träger).
Einsatz in Gebieten, in denen eine Verkabelung nicht praktikabel ist.
Zwischen Sender und Empfänger muss eine Sichtverbindung bestehen.
Fehlerhäufigkeit hängt von den Sichtbedingungen (Wetter) ab.
Radiowellen (radio):
Ausstrahlung von elektromagnetischen Wellen in einem festgelegten
Gebiet (Zelle).
Mobilität der Empfänger und Sender möglich.
Geringe Bandbreite und hohe Fehleranfälligkeit.
Frage: Wie werden die Daten an einen Netzknoten weitergeleitet?
Es sind zwei Techniken bekannt:
Leitungsvermittlung und Speichervermittlung
Leitungsvermittlung (circuit switched network):
Vom Sender zum Empfänger wird eine durchgängige physikalische
Leitung etabliert.
Eine Kommunikation findet in folgenden Phasen statt:
1.
2.
3.
Satelliten (satellites):
Lange Übertragungszeiten (ca. 200 ms) zwischen Sender und
Empfänger.
Sehr hohe Frequenzen und Bandbreiten durch Mikrowellen und
Multiplexing.
Übertragung über geostationäre Satelliten, die sich mit der Erde drehen.
Universität Göttingen - Informatik II - SS 2005
8-17
8. Computernetzwerke
Verbindungsaufbau
Datenaustausch
Verbindungsabbau
Nach dem Verbindungsaufbau steht die Bandbreite dem Sender
vollständig zur Verfügung (reservierte Bandbreite).
Beispiel: Telefonverbindungen, DATEX-L
Universität Göttingen - Informatik II - SS 2005
8-18
8. Computernetzwerke
Vermittlungstechniken (2/2)
Kommunikationsformen (1/2)
Frage: Welche Kommunikationsformen gibt es?
Paket- bzw. Speichervermittlung (packet switched network):
Nachrichten werden in kleine Einheiten, so genannte Pakete (packets),
zerlegt.
Vom Sender existiert lediglich eine durchgängige Leitung zur nächsten
Relais-Station.
Relais-Stationen nehmen Pakete entgegen und leiten sie in Richtung
des Ziels weiter.
Relais-Stationen müssen die Wege zu den einzelnen Zielen kennen
(Wegewahl).
Die Bandbreite zwischen Relais kann besser genutzt, aber auch
überverplant werden.
Beispiel: DATEX-P, Internet
Es können u.a. folgende Formen unterschieden werden:
Verbindungsorientiert und verbindungslos
Expliziter Verbindungsaufbau oder nicht
Unidirektional und bidirektional
Kommunikation nur in eine oder beide Richtungen möglich
Blockierend und nicht blockierend
Sender wird blockiert und muss auf Antwort warten oder wird nicht blockiert
etc.
Universität Göttingen - Informatik II - SS 2005
8-19
Universität Göttingen - Informatik II - SS 2005
8-20
8. Computernetzwerke
8. Computernetzwerke
Kommunikationsformen (2/2)
Matrix von 2 Kommunikationsformen
Verbindungsorientierte Kommunikation (connection oriented, CO):
Jede Kommunikation erfordert zunächst den Aufbau einer Verbindung zum
Kommunikationspartner (Signalisierung).
Leitungsvermittlung
Paketvermittlung
Verbindungs
-los
IP über feste
ATM-Strecken
UDP über IP
im Internet;
NFS-Anwendung
Verbindungs
-orientiert
Telefon
TCP über IP im
Internet; Email; FTP
Verbindungsorientierte Kommunikation kann auf Leitungs- und
Speichervermittlungssystemen realisiert werden.
Die Adresse des Empfängers wird nur beim Verbindungsaufbau angegeben.
Ausfälle von Netzkomponenten führen zum (bemerkbaren) Verbindungsabbruch.
Verbindungslose Kommunikation (connectionless, CL):
Datenaustausch kann jederzeit ohne speziellen Verbindungsaufbau beginnen.
Verbindungslose Kommunikation kann auf Leitungs- und
Speichervermittlungssystemen realisiert werden.
Jede versendete Nachricht muss vollständige Adressinformationen besitzen.
Ausfälle und Störungen können zu unbemerkten Verlusten von Nachrichten führen.
Universität Göttingen - Informatik II - SS 2005
8-21
8. Computernetzwerke
Universität Göttingen - Informatik II - SS 2005
8-22
8. Computernetzwerke
Übertragungssysteme
Primäres Signal y(t)
Umformer
Signal x´(t)
Rückformer
Signal y´(t)
Physikalisches
PhysikalischesMedium
Medium
Störquelle z´(t)
z.B. Rundfunk, analoges Telefon
nachrichtentechnischer
Kanal
wertkontinuierliche und zeitdiskrete
Signale
z.B. Steuerung von technischen Prozessen
Medium
Das Medium überbrückt die räumliche Distanz zwischen Quelle und Senke.
Zahlreiche Störeinflüsse auf das Medium sind möglich.
Signal y´(t) ist vom zeitlichen Verlauf von x´(t) und der Störgröße z´(t) bestimmt.
Nachrichtentechnischer Kanal
Besteht aus Umformer, Rückformer, physikalischem Medium und Störquelle.
Vom inneren Aufbau wird abstrahiert; interessant ist, welche Formen von
Primärsignalen mit welcher Leitung übertragen werden können.
Universität Göttingen - Informatik II - SS 2005
8-23
wertdiskrete Signale (Grundlage der digitalen
Übertragung)
diskret
kontinuierlich
Primäres Signal x(t)
Wert-
Ein nachrichtentechnischer Kanal kann nach der
zeitKlasse der unterstützten primären Signale
kontinuierlich
klassifiziert werden.
s
wertkontinuierliche und zeitkontinuierliche Signale
Senke
diskret
Quelle
Signalklassen
t
s
t
bei zeitkontinuierlichen Digitalsignalen können die
Signalwerte zu beliebigen Zeitpunkten wechseln, unter
Beachtung eines Mindestzeitintervalls zwischen
Signaländerungen
bei zeitdiskreten Digitalsignalen ist in der Regel ein
isochrones Zeitraster für die Signaländerung
vorgesehen
Universität Göttingen - Informatik II - SS 2005
8-24
8. Computernetzwerke
8. Computernetzwerke
Serielle und parallele Übertragung
Ein digitales Signal x(t) wird durch eine zeitliche Folge von Signalschritten
gebildet.
Aufeinanderfolgende Schritte eines Signals werden zu Gruppen
zusammengefasst
Wörter: kleinere Gruppen (z.B. 7,8) einer festen Anzahl von Schritten
Blöcke: größere Gruppen einer eventuell variablen Anzahl von Schritten
Signal
Serielle Übertragung
0
1
0
0
0
0
0
1
10000010
Zeit
Parallele Übertragung
0
1
0
0
0
0
0
1
Zeichen
Signalschritte
Seriellübertragung
Bitstellen werden in festgelegter Reihenfolge seriell übertragen.
Bei vorhandener Wortstruktur reihen sich die Worte seriell aneinander.
Typisch bei Übertragungen über größere Distanzen.
Parallelübertragung
Signalschritt
Schrittgruppe
z.B. Wort/Zeichen
Zwischen Quelle und Senke werden mehrere Verbindungen parallel geschaltet.
Bei einer Wortlänge von 8 Bit und 8 Verbindungen kann ein ganzes Wort in einem
Schritt übertragen werden.
Wird bei kürzeren Entfernungen (z.B. Anschluss von Druckern) eingesetzt.
Taktraster
Block
Universität Göttingen - Informatik II - SS 2005
8-25
8. Computernetzwerke
Netztopologien und Medienzuteilung
Bandbreite (bandwidth)
Stern
Übertragbare Datenmenge pro Zeiteinheit
Ethernet 10 Mbit/s, Fast Ethernet 100 Mbit/s
einfache Wegwahl
geringe Ausfallsicherheit
Bitbreite (bitwidth)
Ring
Zeit, die zur Übertragung
eines Bits benötigt wird
(ca. 1 Mikrosekunde bei
1 Mbit/s)
einfache Wegwahl
geringe Ausfallsicherheit
hoher Aufwand für die Steuerung
Bus
Stationen teilen sich ein Medium
gute Ausfallsicherheit
Verzögerung (delay)
Zeit, um eine Nachricht von der Quelle zur Senke zu übertragen
1. Bit
letztes Bit
Liniennetz
konzeptionell einfach
mittlere Ausfallsicherheit
Position im Netz beeinflusst
Übertragungszeiten
B
A
Transferzeit
8-26
8. Computernetzwerke
Parameter eines Kanals
Übertragungszeit
Universität Göttingen - Informatik II - SS 2005
Signallaufzeit
Universität Göttingen - Informatik II - SS 2005
Round-TripZeit
Zeit
8-27
Universität Göttingen - Informatik II - SS 2005
8-28
8. Computernetzwerke
8. Computernetzwerke
Netztopologien
Netzwerkkategorien
Vermaschtes Netz
PAN = Personal Area Network
LAN = Local Area Network
WLAN = Wireless Local Area Network
MAN = Metropolitan Area Network
WAN = Wide Area Network
GAN = Global Area Network
keine Vermittlung notwendig
gute Ausfallsicherheit
n (n-1) / 2 Verbindungen bei n Knoten
Backbone-Netze
Kopplung von Netzen zu größeren
Einheiten
meist hierarchische Struktur
Ausfallsicherheit direkt abhängig von
der
Zuverlässigkeit der
Verbindungselemente
passt sich gut in bestehende
hierarchische
Organisationsformen ein
Die logische Struktur eines Netzes
kann sich von der physikalischen
Struktur unterscheiden (z.B. logischer
Ring auf einem physikalischen Bus).
Universität Göttingen - Informatik II - SS 2005
8-29
8. Computernetzwerke
Universität Göttingen - Informatik II - SS 2005
8-30
8. Computernetzwerke
Formen der Medienzuteilung
Frequenzmultiplex
Benutzen mehrere Systeme ein physikalisches Medium gemeinsam,
dann muss das Medium nach einem wohldefinierten Verfahren den
Systemen zur Datenübertragung zugeteilt werden.
Breitbandige Übergangswege ermöglichen die Unterbringung vieler
Übertragungskanäle in unterschiedlichen Frequenzbereichen
(Frequenzbändern).
Verfügbare Bandbreite wird in eine Reihe - nicht notwendigerweise
gleichbreite - Frequenzbänder eingeteilt.
Jedem Frequenzband wird ein Übertragungskanal zugeordnet.
Medienzuteilung
Zeitmultiplex
Frequenzmultiplex
Beispiel:
Kabelnetze zur Übertragung von Fernseh- und Radioprogrammen
vorgegebenes
Raster
...
Multiplexed
link
nach Bedarf
dezentral
Medium bandwidth
6
5
4
3
2
1
zentral
...
konkurrierend
Universität Göttingen - Informatik II - SS 2005
geordnet
8-31
Universität Göttingen - Informatik II - SS 2005
Time
8-32
8. Computernetzwerke
8. Computernetzwerke
Zeitmultiplex
Dienste und Protokolle
Beim Zeitmultiplex wird kurzzeitig die gesamte
Übertragungskapazität einem Sender zur Verfügung gestellt.
Ein starres Zeitmultiplex wird als time division multiplexing (TDM)
bezeichnet.
Beim bedarfsgesteuerten Zeitmultiplex werden die Zeitscheiben je nach
Bedarf vergeben.
Bedarfsgesteuertes Zeitmultiplex wird auch als statistisches
Zeitmultiplex (statistical time multiplexing, STDM) bezeichnet.
Medium bandwidth
Time
8-33
8. Computernetzwerke
Diskussion über den
Existentialismus
Chinesischer
Philosoph
Techniker
TechnikerAA
erkennt
erkennteinzelne
einzelneBuchBuchstaben
stabenund
und„morst“
„morst“diese
diese
Universität Göttingen - Informatik II - SS 2005
8-34
8. Computernetzwerke
Kommunikation in Schichten
Dolmetscher A
Chinesisch
Englisch
Request: Anforderung eines Dienstes
Indication: Anzeige, daß ein Dienst angefordert wurde
Response: Reaktion des Dienstes auf eine Dienstanzeige
Confirmation: Bestätigung, daß ein angeforderter Dienst erbracht wurde
Die Schnittstellen, über die die Dienstprimitive in Anspruch
genommen werden können, werden als Dienstzugangspunkte
(service access point, SAP) bezeichnet.
Die Dienste werden von sogenannten Instanzen (entities) erbracht.
Die Regeln, nach denen sich Instanzen verhalten und mit anderen
Instanzen interagieren, werden als Protokoll bezeichnet.
123456 123456 123456 123456 123456
Universität Göttingen - Informatik II - SS 2005
Die von einem Netz bereitgestellten Funktionen werden abstrakt als
Dienst bezeichnet.
Die einzelnen elementaren Funktionen werden als Dienstprimitive
bezeichnet. Typische ISO/OSI Dienste sind:
Uninterpretierte Sätze
ohne Kenntnis des
Existentialismus
Uninterpretierte Zeichen
in korrekter Reihenfolge
Darstellung und Schichtung von Diensten
Dienstnutzer
Spanischer
Philosoph
Dienstzugangpunkt N
N-Instanz 1
Dolmetscher
DolmetscherBB
Spanisch
Spanisch
Englisch
Englisch
N-Instanz 2
Dienstschnittstelle N-1
(N-1)-Instanz 1
Schicht N
Dienstzugangpunkt N-1
(N-1)-Instanz 2
Schicht N-1
Techniker
TechnikerBB
Die Bildung von Schichten ist ein grundlegendes Prinzip zur
Strukturierung von Kommunikationssystemen.
Dienste einer Schicht dürfen immer nur Dienstprimitive von Diensten
in direkt benachbarten Schichten in Anspruch nehmen.
Netz
Universität Göttingen - Informatik II - SS 2005
Dienstnutzer
Dienstschnittstelle N
8-35
Universität Göttingen - Informatik II - SS 2005
8-36
8. Computernetzwerke
8. Computernetzwerke
Protokolldateneinheit (1/2)
Protokolldateneinheit (2/2)
Eine Protokolldateneinheit (PDU, Protokol Data Unit) ist eine
Informationseinheit, die zwischen Partnerinstanzen in
verschiedenen Stationen als Teil des Protokolls ausgetauscht wird.
Als Dienstdateneinheit (SDU, Service Data Unit) werden
Schnittstellendaten bezeichnet, die von einer Schicht an die nächst
niedrige oder umgekehrt übertragen werden.
N-Header
Folgenummer
Adressen
SAP
(N-1)-SDU
PCI
PCI
(N-1)-PDU
(N-1)- Benutzerdaten
(N-1)-Trailer
Nachricht der N-Schicht
Fehlerprüfung
8-37
8. Computernetzwerke
PCI
(N-1)-PDU
PDU = Protokolldateneinheit
PCI = Protokollkontrollinformation
Universität Göttingen - Informatik II - SS 2005
(N-1)-PDU
SDU = Dienstdateneinheit
SAP = Dienstzugangspunkt
Universität Göttingen - Informatik II - SS 2005
8-38
8. Computernetzwerke
Weg-Zeit-Diagramme
Dienstnutzer
SAP
SCHNITTSTELLE
PKI
(N-1)-Protokoll(N-1)-Header
dateneinheit
N-PDU
(N-1)-Schicht
N-BenutzerN-Trailer
daten
FRAGMENTIERUNG
N-PDU
(N-1)-SDU
PKI
Beispiele:
N-Schicht
PKI
PKI
N-Protokolldateneinheit
1-35
KEINE FRAGMENTIERUNG
Weg-Zeit-Diagramme: Beispiel
Diensterbringer
Dienstnutzer
Benutzer A
Diensterbringer
request
indication
response
confirmation
request
Verbindungsaufbauphase
indication
Verbindungsanforderung
Verbindungsbestätigung
(Verbindung hergestellt)
Daten
Bestätigter Dienst
Datentransferphase
Unbestätigter Dienst
Daten
Daten
Weg-Zeit-Diagramme verdeutlichen den zeitlichen und räumlichen
Zusammenhang zwischen Dienstprimitiven.
Die vertikale Achse ist die Zeitachse, die horizontale Achse gibt den
räumlichen Abstand an zwischen Dienstnutzer und Diensterbringer an.
Werden Dienstaufrufe (requests) grundsätzlich (positiv oder negativ)
bestätigt, so handelt es sich um einem bestätigten Dienst (confirmed
service).
Werden Dienstaufrufe (requests) nicht bestätigt, so handelt es sich um
einen unbestätigten Dienst (unconfirmed service).
Universität Göttingen - Informatik II - SS 2005
Auslösungsanforderungen
Schicht
Benutzer B
Verbindungsanzeige
(ankommender Ruf)
Antwort auf
Verbindungswunsch
(Annahme des Anrufes)
Daten
Daten
Daten
Auslösungsanzeige
Verbindungsabbauphase
Auslösungsbestätigung
8-39
Universität Göttingen - Informatik II - SS 2005
8-40
8. Computernetzwerke
8. Computernetzwerke
Darstellung und Spezifikation von Protokollen
Das ISO/OSI-Referenzmodell
Anwendungsprozeß
Darstellung von Protokollen mit endlichen Automaten:
XReq
XConf
XRes
XReq; YReq
Warten
Endsystem
XInd
YInd; XInd
Warten
Ruhe
YConf; XConf
Application Process
Endsystem
Anwendung
Application
Darstellung
Presentation
Steuerung
Session
XRes; YRes
Transport
YReq
YConf
YRes
YInd
Spezifikationsmöglichkeiten für Protokolle:
natürliche Sprache
Formale Modelle (erweiterte endliche Automaten, attributierte Grammatiken,
Petrinetze, Prozessalgebra, temporale Logik)
Spezifikationssprachen (LOTOS, Estelle, SDL)
Universität Göttingen - Informatik II - SS 2005
Vermittlung
Network
Network
Sicherung
Data Link
Data Link
Bitübertragung
Physical
Physical
Medium
8-41
8. Computernetzwerke
Transport
Transitsystem
Media
Universität Göttingen - Informatik II - SS 2005
8-42
8. Computernetzwerke
ISO/OSI-Transportsystem (1/2)
ISO/OSI-Transportsystem (2/2)
Bitübertragungsschicht (physical layer):
Vermittlungsschicht (network layer):
Übertragung einer Folge von Bits über ein Medium
Festlegung von Eigenschaften des benutzten Mediums
Darstellung der Werte 0 und 1 (z.B. Spannungswerte)
Synchronisation zwischen Sender und Empfänger
Festlegungen von Steckernormen
Bestimmung eines Weges durch das Netz
Multiplexen von Endsystemverbindungen über eine
Zwischenverbindung
Fehlererkennung und -behebung zwischen Endsystemen
Flusssteuerung zwischen Endsystemen
Aufteilung eines Pakets in Rahmen
Sicherungsschicht (data link layer):
Übertragung einer Bitfolge in Rahmen (frames)
Datenübertragung zwischen Systemen, die ein gemeinsames Medium
besitzen
Erkennung und Behebung von Übertragungsfehlern
Flusssteuerung zur Behandlung von Überlastsituationen
Realisierung meist in Hardware auf Adapterkarten
Universität Göttingen - Informatik II - SS 2005
8-43
Transportschicht (transport layer):
Ende-zu-Ende Kommunikationskanäle zwischen Applikationen
Virtuelle Verbindungen über verbindungslose Datagrammdienste
Fehlererkennung und -behebung zwischen Applikationen
Flusssteuerung zwischen Applikationen
Verschiedene Dienstgüten möglich
Universität Göttingen - Informatik II - SS 2005
8-44
8. Computernetzwerke
8. Computernetzwerke
ISO/OSI-Anwendersystem
ISO/OSI-Standardisierung
Sitzungsschicht (session layer):
Die International Organization for Standardization (ISO) ist eine freiwillige, nicht
per Staatsvertrag geregelte Organisation zur internationalen Normung.
Die Mitglieder der ISO setzen sich aus den Normungsinstituten der einzelnen
Mitgliedsländer zusammen (ANSI für die USA und DIN für Deutschland).
Die Standards der ISO werden in ca. 200 technischen Komitees (TCs) durch
deren Unterkomitees (SCs) und Arbeitsgruppen (WGs) erstellt.
ISO-Standardisierungsmodell:
Synchronisation und Koordination von kommunizierenden Prozessen
Dialogsteuerung (Sicherungspunkte)
Darstellungsschicht (presentation layer):
Transformation und Anpassung von Datendarstellungen
Serialisierung von Datenstrukturen zum Zweck der Übertragung
Datenkompression
Entwurfsvorschlag (draft proposal, DP)
Entwurf (draft international standard, DIS)
Standard (internation standard, IS).
Anwendungsschicht (application layer):
Bereitstellung von grundlegenden Diensten, die direkt von beliebigen
Anwendungen benutzt werden können:
Dateitransfer, virtuelle Terminals, Namensraumverwaltung,
Datenbankzugriff, Netzwerkmanagement, elektronische
Nachrichtensysteme, Prozess- und Maschinensteuerung, ...
Universität Göttingen - Informatik II - SS 2005
Die jeweiligen Übergänge bedürfen Mehrheiten (Abstimmungen) und können
sich mehrmals zyklisch wiederholen.
Die Open Sytems Interconnection (OSI) beschreibt den Teil der Standards,
der sich mit der Kommunikation in offenen (Kommunikations-) Systemen
befasst.
8-45
8. Computernetzwerke
Anwendungsprozeß
Internet-Standardisierung
Application Process
Endsystem
Endsystem
Applikation
Applikation
Application
Application
Transport
Router
Internet (IP)
Internet (IP)
Internet (IP)
Subnetzwerk
Subnetzwerk
Subnetwork
Subnetwork
Subnetwork
Subnetwork
Medium
Universität Göttingen - Informatik II - SS 2005
8-46
8. Computernetzwerke
Das Internet-Schichtenmodell
Transport
Universität Göttingen - Informatik II - SS 2005
Die Standardisierung der Internet-Protokolle wird durch die Internet Engineering
Task Force (IETF) durchgeführt. Kontrolliert wird die IETF durch die Internet
Engineerung Steering Group (IESG).
Die IETF ist eine offene Organisation, bei der prinzipiell jeder mitarbeiten kann.
(Es gibt keine Mitgliedschaftspflicht bzw. -gebühren oder dergleichen.)
Internet-Standards werden in Arbeitsgruppen (working groups, WGs)
ausgearbeitet, die wiederum in verschiedenen Bereichen (areas) organisiert
sind.
IETF-Standardisierungsmodell:
Vorgeschlagener Standard (proposed standard)
Vorläufiger Standard (draft standard)
Internet Standard (full standard)
Die jeweiligen Übergänge erfordern "rough consensus" und Implementationen.
Zyklische Wiederholungen sind begrenzt möglich.
Die IETF befasst sich ausschließlich mit Standards rund um das Internet.
Media
8-47
Universität Göttingen - Informatik II - SS 2005
8-48
8. Computernetzwerke
8. Computernetzwerke
Eigenschaften der Modelle (1/2)
Eigenschaften der Modelle (2/2)
Das Internet-Protokoll (IP) stellt sehr geringe Anforderungen an ein
Subnetzprotokoll (Übertragung eines Pakets an eine Zieladresse).
Die Internet-Architektur stammt aus der Computerwelt und hat
entsprechend geeignete Programmierschnittstellen.
Fast alle Netzwerktechnologien (nicht nur der Schicht 2) können als
Subnetzwerk benutzt werden.
Die ISO/OSI-Architektur stammt aus der Telekommunikationswelt
und ist mehr auf die Bedürfnisse der klassischen
Telekommunikation zugeschnitten.
Das Internet-Protokoll (IP) schafft eine gemeinsame Basis, die leicht
an neue Netzwerktechnologien angepasst werden kann.
Andererseits ist der Adressraum der derzeitigen IP Version 4 (IPv4)
zu klein, um dem Bedarf nach Adressen zu befriedigen, weshalb
eine Umstellung zur Version 6 (IPv6) erfolgen muss.
Universität Göttingen - Informatik II - SS 2005
8-49
8. Computernetzwerke
UN
TokenRing
8-50
TokenBus
Universität Göttingen - Informatik II - SS 2005
Grundlagen von Netzen
Grundlegende Protokollmechanismen
Lokale Netze und Zwischensysteme (Schicht 2 und 3)
Internet-Technologien (Schicht 3 und 4)
ITU
SNV
(Schweiz)
ITU-T
IEEE
Ethernet
Universität Göttingen - Informatik II - SS 2005
Überblick
ISO
ANSI
(USA)
ISO/OSI-Protokolle werden von formalen Standardisierungsgremien
entworfen, was sehr zeitaufwändig ist und oftmals zu komplexen
Resultaten führt.
8. Computernetzwerke
Standardisierung: Zusammenfassung
DIN
Implementationen von Internet-Protokollen sind meist frei
zugänglich, was deren Verbreitung und Verbesserung in kurzen
Zeitintervallen ermöglicht.
WLAN
ITU-R
ETSI
DoD
IETF
GSM/UMTS
TCP/IP (Internet)
8-51
Universität Göttingen - Informatik II - SS 2005
8-52
8. Computernetzwerke
8. Computernetzwerke
Protokollmechanismen die alle Schichten betreffen
Namensgebung/Naming (1/2)
Namensgebung (Naming): Identifikation von Objekten/Ressourcen
Segmentieren und Blocken
Verbindungen und Multiplexen
Synchronisation: Kontrolle in einer Umgebung mit
unvorhersehbarer Verzögerung und Fehlverhalten
Fehlerüberwachung: Fehlererkennung und -behebung
Flusskontrolle/Staukontrolle
Prioritäten
Identifizieren (Bezeichnen) ist das Herzstück eines
Rechensystementwurfs, sowohl verteilt als auch zentralisiert
Der Name einer Ressource zeigt an, was wir suchen,
eine Adresse zeigt an, wo wir es finden, und
eine Route sagt uns, wie man dort hingelangt.
Bezeichner werden in allen Schichten benötigt, für z.B.
Schutz
Fehlerüberwachung
Ressourcenverwaltung
Lokalisieren und gemeinsames Nutzen von Ressourcen
Bezeichner können sehr unterschiedlich sein:
von Namen hoher Ebenen bis Adressen niedriger Ebenen
von benutzerorientierten Namen bis zu maschinenorientierten Adressen
Universität Göttingen - Informatik II - SS 2005
8-53
8. Computernetzwerke
Universität Göttingen - Informatik II - SS 2005
8-54
8. Computernetzwerke
Namensgebung/Naming (2/2)
Segmentieren und Reassemblieren
Manche Benutzerdaten sind zu umfangreich, um als eine einzige Nachricht
übertragen zu werden.
Einteilung in kleinere Pakete.
Namen werden auf Adressen abgebildet (Binding)
statisch: zur Übersetzungszeit eines Programms
dynamisch: zur Ausführungszeit (Dynamisches Binding wird oft mit
Nameservern gemacht)
Eine logische Sichtweise (System ist Raum von benannten
Objekten) gilt gegenüber einer physikalischen Sichtweise (System
ist Raum von Hoststationen, die Objekte enthalten) als Ideal.
Interne Puffer in den verschiedenen Schichten haben endliche Größe
extrem lange Nachrichten monopolisieren gemeinsam genutzte
Übertragungswege und andere Ressourcen
Aufbrechen einer langen Nachricht in kleinere Pakete erlaubt parallele
Benutzung von Mehrfachverbindungen (load sharing)
bei hoher Fehlerrate kann bessere Nutzleistung mit kürzeren Nachrichten
erreicht werden.
Die meisten Netze unterstützen nur Nachrichten bis zu einer bestimmten
maximalen Länge
(siehe Maximum Transmission Unit, MTU)
Lange
Benutzernachricht
Kommunikationsnachrichten
Universität Göttingen - Informatik II - SS 2005
8-55
Universität Göttingen - Informatik II - SS 2005
8-56
8. Computernetzwerke
8. Computernetzwerke
Blocken und Entblocken
Verbindungen
Kommunikationsverbindungen werden benötigt, um mehrere
Nachrichten von Quelle zu Ziel zu transferieren.
Verbindungen bewahren Zustandsinformation zwecks:
Auch zu kleine Nachrichten sind ungünstig.
Der Verwaltungsaufwand muss in vernünftigem Verhältnis zu den
Nutzdaten stehen.
Wiederaufsetzen nach Fehlern
Übergabe in der richtigen Reihenfolge
Segmentieren/Reassemblieren und Blocken/Entblocken
Eine Verbindung ist ein Nachrichtenstrom zwischen zwei
kommunizierenden Instanzen.
Benutzernachrichten
Kommunikationsnachricht
Universität Göttingen - Informatik II - SS 2005
8-57
8. Computernetzwerke
8-58
8. Computernetzwerke
Multiplexen und Demultiplexen
Fehlerüberwachung (2/2)
Multiplexing (bündeln) verschiedener logischer Verbindungen auf
eine physikalische.
Aufwärts-Multiplexen (Multiplexen/Demultiplexen): Verbindungen
einer höheren Schicht auf eine Verbindung einer niedrigeren
Schicht.
Abwärts-Multiplexen (Teilen/Vereinigen): Eine Verbindung einer
höheren Schicht auf mehrere Verbindungen einer niedrigeren
Schicht.
(N+1)-Schicht
Universität Göttingen - Informatik II - SS 2005
(N)-Verbindungen
(N)-Verbindungen
Hauptaufgabe der Protokolle: zuverlässige Kommunikation
Drei Aspekte:
Erkennung von Fehlern
Korrektur von Fehlern
Wiederaufsetzen nach Fehlern (Recovery)
Typische Probleme:
Informationsverfälschung (Bitfehler)
Verlust von Nachrichten
Verdopplung von Nachrichten
Nachrichten in falscher Reihenfolge
Typische Lösungen:
Die meisten Protokolle beheben Fehler durch automatische
Wiederholung der Übertragung.
Fehler in der Nachricht: Einfügen redundanter Information
Reihenfolgefehler: Vergabe einer Folgenummer
N-Schicht
(N-1)-Schicht
(N-1)-Verbindungen (N-1)-Verbindungen
Universität Göttingen - Informatik II - SS 2005
8-59
Universität Göttingen - Informatik II - SS 2005
8-60
8. Computernetzwerke
8. Computernetzwerke
Fehlerüberwachung (2/2)
Flusskontrolle
Es gibt auch nichtbehebbare Fehler. Dann müssen ev. mehrere
Schichten reinitialisiert werden.
Überwachung des Informationsflusses zwischen Sender und
Empfänger, um zu verhindern, dass der Sender den Empfänger
überflutet.
z.B. Fensterflusskontrolle
Beispiele: Fehlererkennung und –korrektur in Schicht 2
Fehlererkennung durch redundante Information, an der der Empfänger
eine Verfälschung erkennt.
Parity Check: Es werden Bitfolgen betrachtet (zumeist Bytes). Ist die
Quersumme gerade, wird an die Bitfolge eine 0 angefügt (gerade
Parität) andernfalls eine 1 (ungerade Parität)
Block Check: Eine Folge von Bytes wird als Block aufgefaßt. Es werden
Zeilen- und Spaltenquersummen gebildet und zum Block hinzugefügt.
Cyclic Redundancy Checksum (CRC): Am häufigsten verwendete
Methode (z.B. HDLC, SDLC).
Fenster = 5
7
0
7
6
1
5
2
4
Fenster = 4
Folgenummer = 1
Bestätigungsnummer = 5
Letzte empfangene Bestätigung
Sender
Universität Göttingen - Informatik II - SS 2005
8-61
8. Computernetzwerke
2
3
Letzte quittierte Nachricht
Empfänger
Universität Göttingen - Informatik II - SS 2005
8-62
8. Computernetzwerke
Synchronisation (1/3)
Synchronisation (2/3)
Für die Kommunikation zwischen zwei Prozessen über ein Netzwerk
muss Synchronisation auf verschiedenen Ebenen sichergestellt
sein:
Bit-Synchronisation:
Empfänger muss Anfang und Dauer eines Signalelements bestimmen.
Abtasten der Leitung in bestimmten Abständen
Byte-Synchronisation:
Austausch von Zeichen meist in 8-Bit-Einheiten (1 Byte)
Empfänger muss Anfang und Ende eines Byte bestimmen können
Beispiel für Blocksynchronisation:
Syn.-Zeichen Start Kopf Benutzerdaten Blockprüfung Ende
SYN.-ZEICHEN
START
KOPF
BENUTZERDATEN
BLOCKPRÜFUNG
ENDE
- Das Bitmuster, um Bytessynchronisation zu erreichen
- Kennung für den Beginn einer Nachricht
- Protokollkontrollinformation
- Information der nächsthöheren Ebene
- Fehlererkennung bzw. Korrekturinformation
- Kennung für das Ende einer Nachricht
In High Level Data Link Control (HDLC) sieht der
Synchronisationsblock folgendermaßen aus: 01111110
Block-Synchronisation:
Daten werden in Blöcken zu mehreren Bytes zusammengefasst (z.B.
eine Nachricht)
Die Bedeutung eines Bytes hängt von der Position im Block ab
Universität Göttingen - Informatik II - SS 2005
1
5
4
3
0
6
HDLC (bzw. eine Abwandlungen davon) ist z.B. das Schicht2-Protokoll
von ISDN (Integrated Services Digital Network), X.25 und PPP (Point to
Point Protocol)
8-63
Universität Göttingen - Informatik II - SS 2005
8-64
8. Computernetzwerke
8. Computernetzwerke
Synchronisation (3/3)
Prioritäten
Zugang zum Übertragungsmedium:
Nachrichten eine Priorität zuweisen, um sie im Wettbewerb mit
anderen zu bevorzugen
Eine Prioritätszuweisung kann
bei gemeinsamer Nutzung
ein Benutzer darf nur zu einer bestimmten Zeit Zugriff haben
der Zugriff muss fair sein
statisch sein und
vom Nachrichteninhalt abhängig sein
Protokollsynchronisation:
Die meisten Protokolle kennen zwei Prioritätsebenen
kommunizierende Partnerinstanzen haben Zustandsinformation (z.B.
Sequenznummer)
nach Fehlern und Neustart muss Zustandsinformation konsistent
gemacht werden
normaler Datentransfer
beschleunigter Datentransfer
Eigenschaften beschleunigten Datentransfers
Prozesssynchronisation:
kurze Nachrichten, niedrige Verzögerung, können andere Überholen
geht an Flusskontrollmechanismen vorbei
Synchronisation bei Zugriff auf gemeinsam genutzte Ressource (z.B.
Daten)
typische Anwendungen
Multimedia, Unterbrechung anzeigen, Protokollsteuerung, Alarm in
Prozesssteuerungsanwendungen
Universität Göttingen - Informatik II - SS 2005
8-65
8. Computernetzwerke
8-66
8. Computernetzwerke
Inhalte
Überblick
Grundlagen von Netzen
Grundlegende Protokollmechanismen
Lokale Netze und Zwischensysteme (Schicht 2 und 3)
Internet-Technologien (Schicht 3 und 4)
Universität Göttingen - Informatik II - SS 2005
Universität Göttingen - Informatik II - SS 2005
LANs (Direktverbindungsnetze)
Eigenschaften und Standards
Zwischensysteme
Hub/Repeater
Switch/Brücke
Router
Gateway
8-67
Universität Göttingen - Informatik II - SS 2005
8-68
8. Computernetzwerke
8. Computernetzwerke
Eigenschaften lokaler Netze
LAN-Entwicklung
Kennzeichen lokaler Netze (Local Area Networks, LANs):
Netze zur bitseriellen Übertragung von Daten zwischen unabhängigen,
miteinander verbundenen Komponenten.
Unter rechtlicher Kontrolle des Benutzers/Betreibers und meist auf den
Bereich innerhalb eines Grundstücks beschränkt.
Maximaler Durchmesser des Netzes im Bereich von wenigen
Kilometern.
Relativ hohe Geschwindigkeit (10 Mbps - 1 Gbps).
Leichter, kostengünstiger Anschluss für Geräte unterschiedlichster Art
(z.B. PCs, Workstation, Drucker, Messgeräte, ...)
Direktverbindungsnetze
Universität Göttingen - Informatik II - SS 2005
8-69
8. Computernetzwerke
Die gebräuchlichsten Standards für lokale Netze (local area networks,
LAN) stammen von der IEEE (Institute of Electrical and Electronics
Engineers).
IEEE-Standards für lokale Netze werden in den IEEE 802-Dokumenten
veröffentlicht.
Einige der IEEE-Standards wurden von der ISO übernommen und als
ISO-Standards mit gleichem Inhalt veröffentlicht.
Universität Göttingen - Informatik II - SS 2005
8-70
LANs im ISO/OSI-Referenzmodell
High Level Interface
Logical Link Control
CSMA/CD LANs (Produktbezeichnung Ethernet)
Token-Bus LANs
Token-Ring LANs
DQDB MANs
Broadband LANs
Fibre Optics
Isochronous LANs
Security
Wireless LANs
Demand Priority Access
Cable Modems
Wireless Personal Area Network
Broadband Wireless Access
Resilient Packet Ring
Universität Göttingen - Informatik II - SS 2005
siehe auch Vorlesungen Mobilkommunikation I und II
IEEE Standards für lokale Netze
8. Computernetzwerke
IEEE-Standards
IEEE 802.1
IEEE 802.2
IEEE 802.3
IEEE 802.4
IEEE 802.5
IEEE 802.6
IEEE 802.7
IEEE 802.8
IEEE 802.9
IEEE 802.10
IEEE 802.11
IEEE 802.12
IEEE 802.14
IEEE 802.15
IEEE 802.16
IEEE 802.17
Entwicklung der LANs seit Mitte der 70er Jahre.
Weite Verbreitung von Ethernet und Token Ring LANs in den 80er
Jahren.
Derzeit Entwicklung von Hochgeschwindigkeit-LANs
(Fast Ethernet, Gigabit Ethernet)
Stark zunehmende Verbreitung von Wireless LANs, Bluetooth
Die LAN-Protokolle sind in der zweiten Schicht des
ISO/OSI- Referenzmodells (Sicherungsschicht, data link
layer) angesiedelt.
Die Sicherungsschicht wird nach IEEE in zwei
Teilschichten aufgeteilt:
Die logical link control (LLC) Schicht realisiert die
normalerweise in der Schicht 2 vorhandenen
Sicherungsfunktionen.
Logical Link Control
Anwendung
Darstellung
Steuerung
Transport
Vermittlung
Sicherung
Media Access Control
Bitübertragung
Die media access control (MAC) Schicht regelt den
Zugang zum Übertragungsmedium.
8-71
Universität Göttingen - Informatik II - SS 2005
8-72
8. Computernetzwerke
8. Computernetzwerke
Zwischensysteme: Aufteilung der Netzwerkkomponenten
Verbindung von Netzen
Verkabelung (Passive Komponenten)
Klassifikation von Verbindungen:
Im Gebäude (oder außerhalb) verlegte Kabel (Twisted Pair, Koaxial,
Glasfaser etc.)
Patchfelder meist eingebaut in 19“-Schränken
Anschlussdosen in Räumen
Patchkabel zur Anbindung der Aktiven Komponenten und Clients
Verbindung von homogenen Netzen über Brücken
Verbindung von heterogenen Netzen über Brücken oder Gateways
Zwischensysteme
Repeater und Hubs (bis Schicht 1)
Brücken (bridges) und Switches (bis Schicht 2)
Router (bis Schicht 3)
Gateways (bis Schicht 4 oder höher)
Aktive Netzwerkkomponenten (meist mit Stromaufnahme)
Hubs 10 bzw. 100 MBit, Repeater
Switches (auch Kopplung von 10 MBit auf 100 MBit bzw. GBit)
Router (ISDN, ADSL, Interne LAN-LAN-Kopplung, WAN-Kopplung)
Firewalls, Application Level Gateways, Level 7 Switches etc.
Diese Zwischensysteme gibt es oft nicht in Reinform, da
verschiedene Funktionalitäten angeboten werden
z.B. Router haben oft Funktionalitäten eines Gateways, wie
z.B. Port-Filter (für Firewalls)
Server und Clients (Hosts/ Stationen)
Die Bezeichnungen von Zwischensystemen werden auch
desöfteren falsch verwendet!
PC‘s, Server, Workstations, Drucker, NAS, Scanner, etc.
Universität Göttingen - Informatik II - SS 2005
8-73
8. Computernetzwerke
8-74
8. Computernetzwerke
Repeater und Hub
Brücke
Eine Brücke (bridge) verbindet zwei oder mehr Netze auf Schicht 2.
Ein Repeater ist eine aktive Netzwerkkomponente, die eine
Regenerierungsfunktion übernimmt. Ein Repeater empfängt Signale,
verstärkt sie und gibt sie an alle Anschlüsse weiter.
Brücken dienen somit der Kopplung gleicher oder verschiedener Netze
z.B. Ethernet-Ethernet oder Ethernet-Token-Ring
Ein Repeater arbeitet auf OSI-Ebene 1
Kann auch zur Kopplung unterschiedlicher Medien eingesetzt werden
Repeater besitzen keine Protokollfunktionen und verarbeitet keine Daten
Der Datenstrom wird gefiltert, weshalb nur Pakete für angeschlossene
Endsysteme weitergeleitet werden (einfache Wegewahl entgegen der
eigentlichen Schichtenfunktionalität)
Formatumwandlung der Datenpakete bei heterogenen Netzen
Netze werden partitioniert
Ein Hub (oder auch Sternkoppler) hat die gleichen Aufgaben wie ein
Repeater
Er bildet den Konzentrationspunkt für eine sternförmige Verkabelung zur Bildung
logischer LANs.
Somit werden mehrere abgehende Signale erzeugt.
Kaskadierung ist möglich, erhöht aber nicht den Gesamtdurchsatz (im
Gegensatz zu einem Switch)
Universität Göttingen - Informatik II - SS 2005
Universität Göttingen - Informatik II - SS 2005
8-75
Brücken können somit als Mini-Firewall zur Abschottung eingesetzt
werden
Verkehrsunterscheidung
Intranetz-Verkehr: Datenstrom zwischen Endsystemen eines LANs
Internetz-Verkehr: Datenstrom zwischen Endsystemen in
verschiedenen LANs, welche über eine oder mehrere Brücken
miteinander verbunden sind.
Universität Göttingen - Informatik II - SS 2005
8-76
8. Computernetzwerke
8. Computernetzwerke
Switch
Router
Mischform einer Brücke und Hubs
Mit der Verwendung eines Switches als Alternative zum Hub ist es
möglich, jedem Anschluss die volle Übertragungsbandbreite eines
LAN bereitzustellen. Datenpakete werden dabei nicht mehr auf
allen, sondern nur noch auf dem richtigen (Ziel-) Anschluss
ausgegeben.
Es können mehrere Datenpakete, im Gegensatz zur Brücke,
gleichzeitig vermittelt werden
Kollisionen (siehe CSMA/ CD - Kollisionserkennung) können somit
beim Medienzugriff nur selten auftreten und jede Station kann
(theoretisch) die volle Bandbreite des Mediums in Anspruch
nehmen. (erfordert Vollduplex-Übertragung, sprich für jede
Richtung ein Übertragungsmedium)
Ein Switch setzt verschiedene Geschwindigkeiten untereinander
um (z.B. 10 MBit auf 100 MBit)
Ein Switch arbeitet auf OSI-Ebene 2
Universität Göttingen - Informatik II - SS 2005
8-77
8. Computernetzwerke
Ein Router ist ein Gerät, das Netzwerke koppeln und große
Netzwerke in Subnetze aufteilen kann.
Diese Kopplung kann eine Verbindung zwischen zwei oder mehr
lokalen Netzen oder die Verbindung zwischen LAN und WAN bzw.
WAN und WAN sein.
Ein Router arbeitet auf OSI-Ebene 3 und erfüllt auch alle Aufgaben
einer Brücke
Führen die Wegewahl anhand weltweit eindeutiger Adressen durch und
sind somit die Vermittlungseinrichtungen des Internets und
wesentliche Komponente in WANs
Tabellen für die Wegewahl können leicht über 50000 Einträge haben
Segmentieren und Reassemblieren Pakete entsprechend den Paketgrössen
auf Schicht 2.
Haben erweitere Fähigkeiten der Paketfilterung
Gehören zu den leistungsfähigsten Netzkomponenten
(Datendurchsätze im Multi-Gigabit-Bereich)
Universität Göttingen - Informatik II - SS 2005
8. Computernetzwerke
Gateway / Layer 7 Switch
Zwischensysteme: Zusammenfassung
Ein Gateway (Anwendungs-Gateway oder Layer7 Switch/ Router)
verbindet Netzwerke mit völlig unterschiedlichen Protokollen und
Adressierungen. Es kann also eigentlich inkompatible Netze
miteinander verbinden.
Möglich wird dies dadurch, dass ein Gateway auf allen 7 Schichten
des OSI-Modells tätig werden kann und somit im Extremfall eine
ankommende Nachricht bis auf Schicht 7 entpackt, um sie dann für
andere Netze passend wieder bis auf Schicht 1 zu verpacken. Es
setzt also real ein Protokoll in ein anderes um und hat daher auch
vollen Zugriff auf die Inhalte.
Isolation des Verkehrs
Plug & Play
Optimale Wegewahl
Ein Gateway ist ein Übergangsrechner zwischen
verschiedenen Netzwerken.
Universität Göttingen - Informatik II - SS 2005
8-78
Durchleiten ohne
Zwischenspeicherung
8-79
Hub
Brücke
Switch
Router
Nein
Ja
Ja
Ja
Ja
Ja
Ja
Nein
Nein
Nein
Nein
Ja
Ja
Nein
Ja
Nein
Universität Göttingen - Informatik II - SS 2005
8-80
8. Computernetzwerke
8. Computernetzwerke
Überblick
Internet-Entwicklung (1/2)
Grundlagen von Netzen
Grundlegende Protokollmechanismen
Lokale Netze und Zwischensysteme (Schicht 2 und 3)
Internet-Technologien (Schicht 3 und 4)
Die Defense Advanced Research Project Agency (DARPA) der USA
startet Ende der 60er Jahre ein Projekte zur Entwicklung von
Internetworking-Technologie.
Es entsteht das ARPANET, ein auf gemieteten Leitungen
realisiertes Datagramm-Netz.
Internet Protokoll Version 4 (IPv4)
Transportprotokolle UDP and TCP
Domain Name System (DNS)
Das ARPANET wird zum Backbone-Netzwerk zwischen den
Universitäten der USA.
Anfang der 80er Jahre wird eine Implementierung der InternetProtokolle als Teil des BSD UNIX-Betriebssystems allgemein
verfügbar.
Das BSD UNIX erhält eine Socket-Programmierschnittstelle, mit der
sich relativ einfach netzwerkfähige Applikationen entwickeln lassen.
Universität Göttingen - Informatik II - SS 2005
8-81
8. Computernetzwerke
Universität Göttingen - Informatik II - SS 2005
8-82
8. Computernetzwerke
Internet-Entwicklung (2/2)
Entwicklung des Internet (Hosts im DNS)
1983 wird das ARPANET in das Forschungsnetz ARPANET und
das militärisch genutzte MILNET aufgeteilt.
1986 wird von der National Science Foundation der USA das
NSFNET realisiert.
1990 geht das NSFNET in das ANSNET über, das von MERIT, MCI
und IBM betrieben wird und eine kommerzielle Nutzung des
Internets möglich macht.
Anfang der 90er Jahre wird am CERN das World-Wide Web
geboren.
Derzeit läuft in den USA eine Internet-2 Initiative, mit der ein GigabitBackbone zwischen den Universitäten realisiert werden soll.
Technologisch ist der Übergang von der IP-Version 4 zur IP-Version
6 zu erwarten.
Universität Göttingen - Informatik II - SS 2005
8-83
Universität Göttingen - Informatik II - SS 2005
8-84
8. Computernetzwerke
8. Computernetzwerke
Die Internet-Protokollfamilie
Das Modell von IP
Datagramme
Web browser,
e-mail, ...
Applications
Other user
applications
Einzelne, unabhängig voneinander weitergeleitete Pakete, die sich
ihren Weg zum Ziel suchen
User
space
Application protocols:
HTTP, SMTP, FTP, ...
Routing-Tabellen
R2
geben den Ausgang zu
einem Ziel an
Application Programming Interface (API)
R3
R1
UDP
TCP
IGMP
ICMP
Transport
RIP
IP
RARP
„Best effort“-Dienst
OSPF
OS
kernel
Auslieferung eines Pakets
Korrekte Reihenfolge
ARP
Praktisch keine Echtzeit
LAN DL
technology
WAN DL
technology
Universität Göttingen - Informatik II - SS 2005
8-85
Universität Göttingen - Informatik II - SS 2005
8. Computernetzwerke
Wie funktioniert eigentlich das ganze Internet?
IP Operationen
Beispiel: FTP über das Internet unter Verwendung von TCP/IP und
Ethernet
1
App
2
3
4
OS
“A” Stanford
Ethernet
5
R1
R1 6 8
7 9 R2
R2
10
R4
R4
Universität Göttingen - Informatik II - SS 2005
“B” (MIT)
14
R5
R5
11 15
16
R3
R3 12
13
yx
yx
DA,SA
data
Routing tables
Router R1
DA
y
...
Data Link
20
App
19
18
17
OS
Ethernet
8-87
yx
R6
yx
R4
x
Keine Garantie für
Network
R5
Next hop
R3, R4
...
y
yx
Router R3
DA
y
...
Next hop
R6
...
yx
Router R6
DA
y
...
Next hop
...
8-86
8. Computernetzwerke
8. Computernetzwerke
IPv4-Adressen
IPv4-Adressen: Uni Göttingen
32 bits
Bildung von Netzhierarchien:
Binäre und dezimale Darstellung
32
Binär:
23
15
7
0
GWDG/Uni Göttingen: 134.76.x.x
Institut für Informatik: 134.76.81.x
Beispiel für ein geplantes Subnetz für 16 (bzw. 14) Rechner:
11010100 01111110 11010000 10000111
212
Dezimal
.
126
.
208
.
135
Ausgabe von Unix-Befehl: ipcalc 134.76.81.224/28
Hierarchische Adressierung
Netzwerk-Nummer + Netzmaske (Classless Interdomain Routing
(CIDR), RFC 1519).
Bemerkung: IP-Adressklassen werden praktisch nicht mehr verwendet
(wg. Adressknappheit)
Netzangabe: 134.76.0.0/255.255.0.0 oder alternativ 134.76.0.0/16
(16 = Länge der Netzmaske)
Universität Göttingen - Informatik II - SS 2005
134.76.81.225/28 = 134.76.81.(224-239)
134.76.81.239 ist die Broadcast-Adresse (letzten 4 Bits = 1111)
8-89
8. Computernetzwerke
Address: 134.76.81.224
Netmask: 255.255.255.240 = 28
Wildcard: 0.0.0.15
=>
Network: 134.76.81.224/28
(Class B)
Broadcast: 134.76.81.239
HostMin: 134.76.81.225
HostMax: 134.76.81.238
Hosts/Net: 14
10000110.01001100.01010001.1110 0000
11111111.11111111.11111111.1111 0000
00000000.00000000.00000000.0000 1111
10000110.01001100.01010001.1110 0000
10000110.01001100.01010001.1110 1111
10000110.01001100.01010001.1110 0001
10000110.01001100.01010001.1110 1110
Universität Göttingen - Informatik II - SS 2005
8-90
8. Computernetzwerke
IPv4 - Subnetze
IPv4-Paketformat
Subnetz-Adressen:
Bits: 0
Endsystemadressen können mit Hilfe von Netzmasken weiter unterteilt werden.
Eine IPv4-Adresse wird mit der negierten Subnetz-Maske bitweise logisch und
verknüpft, um die Adresse des Endsystems zu erhalten.
Beispiel:
134.169.9.10
Netz-Maske 255.255.0.0
134.169.246.34
134.169.34.12
8
16
19
31
Data (≤ 65536 octets)
134.169.34.1
Type of Service field (8 bits)
0 1 2
Precedence
Subnetz-Maske 255.255.255.0
Besondere Adressen:
Alle Adressen mit dem Format 127.*.*.* gehören zum lokalen System (loopback).
Alle Adressen mit dem Format 10.*.*.* werden niemals weitergeleitet.
Universität Göttingen - Informatik II - SS 2005
4
Version HdrLng Type of service
Total length
Identification
Flags
Fragment offset
20
Time to live
Protocol
Header checksum
octets
Source address
Destination address
Options + padding
8-91
3
4 5
ToS
6
7
0
Flags field (3 bits)
0 1 2
D M -
D = Don’t fragment
M = More fragments
Precedence (priority): High: 7 - Network control .... Low: 0 - Routine.
ToS (Type of Service): 8 - Min. delay. 4 - Max. throughput. 2 - Max. reliability.
1 - Min. cost ($). 0 - Normal service.
Options: Security. Source routing. Route recording. Time stamping.
Universität Göttingen - Informatik II - SS 2005
8-92
8. Computernetzwerke
8. Computernetzwerke
IP Next Generation: IPv6
Struktur für IPv6
Substantielles Re-Design von IP
Basierend auf den erfolgreichen Eigenschaften von IPv4
Erweiterte und verbesserte Funktionalität
Entwickelt zwischen 1992 und 1997
Jetzt stabil, wird in neue Produkte (Router, Betriebssysteme) eingebaut.
Neue Eigenschaften
Erweiterte Adressen (128-bit). Neue Adressierungsschemata.
Neue flexiblere und effizientere Paketformate
Auto-Konfiguration („plug-and-play“)
Adressenauflösung und Gruppenmanagement jetzt Teil von ICMPv6
(ARP, IGMP wurden entfernt)
Sicherheitsmechanismen direkt im Protokoll (Authentifizierung und
Verschlüsselung)
Dienstgüteunterstützung
Universität Göttingen - Informatik II - SS 2005
8-93
8. Computernetzwerke
Universität Göttingen - Informatik II - SS 2005
8-94
8. Computernetzwerke
IP v6 Header
Transportschicht: TCP und UDP
Aufgabe der Transportschicht: Datentransport von einem Prozess
auf einem Rechner zu einem (oder mehreren) anderen Prozessen
auf anderen Rechnern im Internet
Zwei Möglichkeiten
Der grundlegende unzuverlässige Internetdienst genügt, dann verwende
UDP.
Er genügt nicht, dann verwende TCP.
End-To-End-Signifikanz:
IP-Adressen identifizieren IP-Hosts und keine Applikationen.
IP besitzt daher eine Host-To-Host-Signifikanz.
Ein Transportendpunkt wird durch eine IP-Adresse und eine lokale
eindeutige Portnummer identifiziert.
TCP und UDP besitzen End-To-End-Signifikanz.
Für Standard-Dienste sind Portnummern fest definiert (well-known
ports).
Universität Göttingen - Informatik II - SS 2005
8-95
Universität Göttingen - Informatik II - SS 2005
8-96
8. Computernetzwerke
8. Computernetzwerke
Well-known Ports für UDP
Port
7
Echo
9
Discard
11
13
17
Well-known Ports für TCP
Protocol
Users
Daytime
Quote
Description
Port
Echoes a received datagram back to the sender
Protocol
7
Echo
9
Discard
Active users
11
Users
Returns the date and the time
13
Daytime
17
Quote
19
Chargen
20
FTP, Data
21
FTP, Control
23
TELNET
25
SMTP
Discards any datagram that is received
Returns a quote of the day
Returns a string of characters
Description
Echoes a received datagram back to the sender
Discards any datagram that is received
Active users
Returns the date and the time
Returns a quote of the day
Returns a string of characters
19
Chargen
53
Nameserver
67
Bootps
Server port to download bootstrap information
68
Bootpc
Client port to download bootstrap information
69
TFTP
Trivial File Transfer Protocol
53
DNS
111
RPC
Remote Procedure Call
67
BOOTP
123
NTP
Network Time Protocol
79
Finger
Finger
161
SNMP
Simple Network Management Protocol
80
HTTP
Hypertext Transfer Protocol
162
SNMP
Simple Network Management Protocol (trap)
111
RPC
Remote Procedure Call
Domain Name Service
Universität Göttingen - Informatik II - SS 2005
8-97
8. Computernetzwerke
Terminal Network
Simple Mail Transfer Protocol
Domain Name Server
Bootstrap Protocol
Universität Göttingen - Informatik II - SS 2005
8-98
Transmission Control Protocol (TCP)
Eigenschaften:
Unzuverlässiger, verbindungsloser Datagrammdienst.
Einfache Erweiterung von IP um Portnummern (RFC 768).
Zusätzliche Prüfsumme über den UDP-Protokollkopf.
UDP-Protokollkopf:
8
File Transfer Protocol (control connection)
8. Computernetzwerke
User Datagram Protocol (UDP)
0
File Transfer Protocol (data connection)
16
UDP Source Port
24
31 (Bitposition)
UDP Destination Port
UDP Message Length
UDP Checksum
Zuverlässiger, verbindungsorientierter Dienst über einem
unzuverlässigen, verbindungslosen Netzwerkprotokoll (RFC 793).
Endsysteme tauschen einen unstrukturierten Bytestrom aus (stream
orientation).
Duplex und Halbduplex-Betrieb und die Zustellung von out-of-bandDaten.
Ende-zu-Ende-Flusskontrolle durch Fenstertechnik mit adaptiven
Timeouts und automatische Anpassung an Stausituationen (slow
start, multiplicative decrease).
Data
Universität Göttingen - Informatik II - SS 2005
8-99
Universität Göttingen - Informatik II - SS 2005
8-100
8. Computernetzwerke
8. Computernetzwerke
TCP Pakete („Segmente“)
Pseudoheader
0
TCP Verbindungszustandsdiagramm
Source IP address
Destinati on IP address
Protocol (6)
TCP segment length
0
IP header
(20 bytes +opt.)
TCP header
(20 bytes +opt.)
TCP data
4
10
16
Source TCP port
Destinati on TCP port
Sequence number
Acknowledgement number
Hdr.len.
Fl ags
Window size
Checksum
Urgent poi nter
Opti ons (if any)
31
Data (if any)
Fl ags:
URG ACK PSH RST SYN FIN
Universität Göttingen - Informatik II - SS 2005
8-101
Universität Göttingen - Informatik II - SS 2005
8. Computernetzwerke
TCP Verbindungsaufbau
Universität Göttingen - Informatik II - SS 2005
Drei-Wege-Handshake:
TCP Zustandsdiagramm
8-103
8-102
8. Computernetzwerke
TCP
Verbindungsmanagement
Drei-Wege-Handshake:
Beispiel
TCP server
Lebenszyklus
TCP client
Lebenszyklus
Universität Göttingen - Informatik II - SS 2005
8. Computernetzwerke
8. Computernetzwerke
TCP Protokollablauf
UserAA
User
(client)
(client)
Erinnerung: Flusskontrolle
TCPAA
TCP
CLOSED
Open-Active
Open-Active
TCPBB
TCP
SYN,......
SYN,
LISTEN
SYN+ACK,......
SYN+ACK,
Open-Success
Open-Success
UserBB
User
(server)
(server)
CLOSED
Open-Passive
Open-Passive
SYN-SENT
ESTABLISHED
Send(dt[100])
Send(dt[100])
8-106
SYN-RCVD
Open-Success
Open-Success
ACK,......
ACK,
ESTABLISHED
Deliver(dt[100])
Deliver(dt[100])
...,dt[100]
dt[100]
...,
Fenstertechnik:
Sender und Empfänger einigen sich auf ein Fenster innerhalb des
Wertebereichs der Sequenznummern (Flusskontrollfenster, flow control
window).
Nach dem Verbindungsaufbau besitzt der Sender implizit Kredite für so
viele Datenblöcke wie durch die Fenstergröße angegeben ist.
Durch positive Quittungen wird das Fenster beim Sender verschoben.
Zusätzlich kann die Größe des Fensters dynamisch angepasst werden.
ACK,......
ACK,
Close
Close
FIN-WAIT-1
Fenster = 5
FIN,......
FIN,
ACK,......
ACK,
FIN-WAIT-2
Terminate
Terminate
TIME-WAIT
FIN,......
FIN,
ACK,......
ACK,
CLOSED
Universität Göttingen - Informatik II - SS 2005
Closing
Closing
CLOSE-WAIT
Close
Close
7
0
6
Sender
Terminate
Terminate
CLOSED
Folgenummer = 1
1
5
2
4
LAST-ACK
7
Bestätigungsnummer = 5
3
Letzte empfangene Bestätigung
8-107
Universität Göttingen - Informatik II - SS 2005
Fenster = 4
0
6
1
5
2
4
Empfänger
3
Letzte quittierte Nachricht
8-108
8. Computernetzwerke
8. Computernetzwerke
TCP Flusskontrolle: Fenstertechnik
UserAA
User
Programmierschnittstelle: Die Socket-Schnittstelle
TCPAA
TCP
TCPBB
TCP
ESTABLISHED
Send(data[500])
Send(data[500])
Send(data[300])
Send(data[300])
Send(data[400])
Send(data[400])
ACK,ack=s1,
ack=s1,win=1000
win=1000
ACK,
seq=s1,data[500]
data[500]
seq=s1,
UserBB
User
ESTABLISHED
Receiver buffer
1000
1000
seq=s1+500,data[300]
data[300]
seq=s1+500,
500
500
500
500
seq=s1+800,data[200]
data[200]
seq=s1+800,
500
500
300 200
200
300
500
500
300 200
200
300
Waiting for credit
ACK,ack=s1+500,
ack=s1+500,win=500
win=500
ACK,
ACK,
ack=s1+800,
win=200
ACK, ack=s1+800, win=200
ACK,ack=s1+1000,
ack=s1+1000,win=0
win=0
ACK,
Stop Retrans Timer
Start Persist Timer
ACK,ack=s1+1000,
ack=s1+1000,win=800
win=800
ACK,
Deliver(data[800])
Deliver(data[800])
800
800
200
200
Stop Persist Timer
seq=s1+1000,data[200]
data[200]
seq=s1+1000,
ACK,ack=s1+1200,
ack=s1+1200,win=600
win=600
ACK,
200
200200
200
600
600
Universität Göttingen - Informatik II - SS 2005
8-109
8. Computernetzwerke
Funktion
Aufgabe
socket(domain, type, protocol)
Kreiert einen Kommunikationsendpunkt
bind(socket, address, length)
Bindet eine Adresse an einen lokalen Endpunkt.
connect(socket, address, length)
Stellt Verbindung zu zweitem Socket her
listen(socket, backlog)
Zeigt an, wie viele eingehende
Verbindungswünsche akzeptiert werden
accept(socket, address, length)
Annahme einer Verbindung
write(...), send(...), sendto(...)
Übertragung von Daten über einen Socket
read(...), recv(...), recvfrom(...)
Empfang von Daten
shutdown(socket, how)
(Teilweise) Beendigung einer Verbindung
close(socket)
Schließen eines Sockets
getsockname(), getpeername()
Erfragen von lokaler/entfernter Adresse
Weitere Hilfsfunktionen
Bytekonvertierung ins/vom Netzwerkformat
Universität Göttingen - Informatik II - SS 2005
8-110
8. Computernetzwerke
Verbindungsorientierte Kommunikation
Verbindungslose Kommunikation
socket()
Beim verbindungsorientierten Protokoll
wird zunächst von einer Seite ein
Socket geöffnet, über den
Verbindungswünsche entgegen
genommen werden.
Der accept()-Aufruf blockiert den
Prozess, bis eine Verbindung etabliert
ist und liefert einen neuen Socket für
diese Verbindung.
Die read() und write() Aufrufe sind
blockierend.
Nach der Auflösung der Verbindung
kann mit einem erneuten Aufruf von
accept() eine weitere Verbindung
entgegen genommen werden.
Universität Göttingen - Informatik II - SS 2005
bind()
listen()
socket()
accept()
connection setup
connect()
read()
data
write()
write()
data
read()
close()
connection release
close()
8-111
Beim verbindungslosen Protokoll
werden auf beiden Seiten Sockets
geöffnet und an eine Adresse
gebunden.
Der recvfrom()-Aufruf blockiert den
Prozess, bis eine Nachricht
eingetroffen ist. Die Adresse des
sendenden Prozesses wird dem
empfangenden Prozess mitgeteilt.
Der sendto()-Aufruf sendet die
Daten an die angegebene
Adresse, ohne zu blockieren.
Beim Schließen eines Endpunkts
ist keine Interaktion erforderlich.
Universität Göttingen - Informatik II - SS 2005
socket()
bind()
socket()
bind()
recvfrom()
data
sendto()
data
sendto()
recvfrom()
close()
8-112
8. Computernetzwerke
8. Computernetzwerke
Domain Name Service DNS
Namenshierarchie
Unnamed
root
Aufgabe von DNS
Übersetze Namen in Adressen und lasse Anwendungen so Netzdienste
nutzen: www.cs.tu-bs.de ↔ 134.169.34.18.
Top level
domains
com
org
edu
2nd level
domains
cisco
ietf
univ
i-u
co
ac
in-addr
dept
iustud01
bbc
univ
209
de
...
uk
...
arpa
Internet Name Service
DNS: Domain Name System. Frühe 80er Jahre.
Grundlegende Definition: RFC 1034 und 1035, 1987
Zahllose weitere RFCs für die Nutzung von DNS, Updates etc.
Hierarchisches Namensschema
Verteilte Namensdatenbank
DNS-Protokoll: query-response protocol.
Top:
Top:Generic
Genericdomains
domains
com
com--Commercial
Commercial
edu
Educational
edu - Educational
org
org--Non-profit
Non-profitOrganizations
Organizations
net
net--Network
NetworkProviders
Providers
mil
US
Military
mil - US Military
gov
gov--US
USGovernment
Government
int
int--International
InternationalOrganizations
Organizations
host
host.dept.univ.edu.
host.dept.univ.edu.
Universität Göttingen - Informatik II - SS 2005
8-113
8. Computernetzwerke
Eine Zweig des Namensraums, der
getrennt verwaltet wird
Der Namensraum ist rekursiv in kleinere
Zonen aufgeteilt.
1
IP:
IP: 209.12.17.1
209.12.17.1
Universität Göttingen - Informatik II - SS 2005
8-114
Iterative Abfragen
Rekursive Abfragen
root
name
servers
root NS
...
2(Q)
other top
level zones
5(R) 4(R)
root NS
Q = Query
R = Response
Rfr = Referral
3(Q)
3(Q) 4(Rfr)
sam.edu NS
(local)
1(Q)
Delegation der Verantwortung
bob.com NS
(authoritative)
6(R)
sam.edu NS
(local)
1(Q)
bob.com NS
(authoritative)
2(Rfr)
5(Q)
...
6(Rfr)
vega.sam.edu
cs.univ.edu ee.univ.edu
name
name
server(s)
server(s)
Eine Gruppe von „root name servers“ stellen Name-Syerver-Adressen
für die Top-Level-Domains zur Verfügung. Alle anderen Server kennen
die Adresse der Root-Server und einiger Name Server der oberen
Ebenen.
Universität Göttingen - Informatik II - SS 2005
Top:
Top:arpa
arpadomain
domain
Address-to-name
Address-to-nametranslation.
translation.
in-addr
IP
address.
in-addr - IP address.
17
DNS-Abfragen (1/2)
univ.edu
name
server(s)
Der Administrator einer Zone verwaltet
den/die Name Server (Primär-, Sekundär-)
Jeder Name Server verwaltet die
Namensinformation für seine Zone und kennt
die Name Server der Unterzonen.
12
8. Computernetzwerke
Server-Hierarchie
„Zone of authority“
Top:
Top:Country
Countrydomains
domains
de
de--Germany
Germany
frfr--France
France
uk
uk--United
UnitedKingdom
Kingdom
nl
nl--Netherlands
Netherlands......
8-115
sun.bob.com
Query: “Address of
sun.bob.com”
5(R)
5(R)
sun.bob.com
Query: “Address of
sun.bob.com”
Vega sam.edu
bob.comNS
NS
rootNS
NS bob.com
sam.eduNS
NS root
Vega
1(Q)
1(Q)
2(Q)
2(Q)
3(Q)
3(Q)
6(R)
6(R)
vega.sam.edu
4(R)
4(R)
Universität Göttingen - Informatik II - SS 2005
Vega sam.edu
bob.comNS
NS
rootNS
NS bob.com
sam.eduNS
NS root
Vega
1(Q)
1(Q)
2(Rfr)
2(Rfr)
3(Q)
3(Q)
4(Rfr)
4(Rfr)
5(Q)
5(Q)
6(R)
6(R)
8-116
8. Computernetzwerke
8. Computernetzwerke
Geschafft
DNS-Abfragen (2/2)
Compilerbau (Kapitel 7)
Automaten und Sprachen (Kapitel 6)
Iterativ und rekursiv können kombiniert
werden
Client startet rekursive Abfrage.
Ein Zwischen-Server startet eine
iterative Abfrage an Root, gefolgt von
einer rekursiven Query an den ersten
Server in der Ziel-Domain.
root NS
Betriebssysteme (Kapitel 5)
3(Q)
bob.com NS
(intermediate)
Maschinenorientierte Programmierung (Kapitel 4)
5(Q)
sam.edu NS
(intermediate)
DNS caching
Name Server speichern
erhaltene Antworten (für
begrenzte Zeit).
Eine Anfrage wird nur
weitergeleitet, wenn die
Antwort nicht im Cache liegt.
Ziel?
Q = Query
R = Response
Rfr = Referral
8(R)
2(Q)
cs.sam.edu
(local)
NS
1(Q)
6(Q)
9(R)
7(R)
von-Neumann-Rechner (Kapitel 3)
it.bob.com NS
(authoritative)
Speicher
Zahlen und Logik (Kapitel 2)
10(R)
Kommunikation (Kapitel 8)
moon.cs.tom.edu
von-Neumann-Rechner
mars.it.bob.com
Query: “Address of
mars.it.bob.com”
Universität Göttingen - Informatik II - SS 2005
8-117
8. Computernetzwerke
Universität Göttingen - Informatik II - SS 2005
8-118
8. Computernetzwerke
Klausur Informatik II
Lehrstuhl für Telematik
Termin: Montag, 25. Juli, 9:00-11:00Uhr
Ort: ZHG 011
Dauer: 120 Minuten
Identifizierung
Vorlesungen
Informatik II (SS)
Telematik (WS)
Mobilkommunikation I (SS) und II (WS)
Seminare
Personalausweis und Immatrikulationsbescheinigung
oder Studentenausweis mit Lichtbild
Netzwerksicherheit (WS)
Mobilkommunikation/Mobiles Internet (SS)
Advanced Topics in Computer Networking (SS)
Hilfsmittel: keine (aber bitte Kugelschreiber mitbringen ☺)
Klausureinsicht: 28. Juli, 14:00-15:00Uhr, Raum MN68
Praktika
Praktikum Telematik
Wiederholungsklausur:
Termin: Donnerstag, 06. Oktober 2005, 9:30- 11:30Uhr
Ort: MN 67
Anmeldung: bis zum 30. September (Munopag/Wopag/Anmeldeschein)
BSc und MSc Arbeiten
siehe http://www.tmg.informatik.uni-goettingen.de/theses
Hiwis
auf Anfrage
Universität Göttingen - Informatik II - SS 2005
8-119
Universität Göttingen - Informatik II - SS 2005
8-120
8. Computernetzwerke
8. Computernetzwerke
Forschungsgebiete des Lehrstuhls für Telematik
Aktuelle und zukünftige Projekte des Lehrstuhls für Telematik
Demnächst:
Modellierung und Testen von Kommunikationsprotokollen (Dr.
Ebner, Dipl.-Inf. C. Werner)
Internet-Signalisierungsprotokolle (Dr. Fu)
Testen von IPv6 (Dr. Fu)
Netzwerksicherheit (Dipl-Inf. Soltwisch)
Mobiles Internet (MobileIPv6)
etc.
Communication Systems Engineering with UML2
VIDIOS - VIdeo DIstribution Over MPLS networks
iMob - Emerging Internet Mobility Architectures and Paradigms
TAROT - Training And Research On Testing
On-demand End-to-end QoS Provisioning
IPT - Internet Protocol Testing
SIGNET - New, Extensible Internet Signaling Protocols
MobiAuth - QoS and Authentication Issues in IP Mobility
ELAN - E-Learning Academic Network
Use of Formal Description Techniques for Testing
Economy of the broadband wireless internet access
Quality of Service und Authentifizierung in Mobil IP
Voice over IP (Dipl.-Inf. C. Werner, Dipl.-Inf. Zibull)
E-Learning (Dipl.-Math. Riedel, Dipl.-Inf. Zibull)
Ökonomie von WLAN Internetzugängen (Dipl.-Math. Riedel)
usw.
Weitere Informationen:
http://www.tmg.informatik.uni-goettingen.de/research
Universität Göttingen - Informatik II - SS 2005
8-121
8. Computernetzwerke
Bachelor/Master-Arbeiten
Modellieren, Simulieren und Testen von Protokollen
Entwicklung von (Internet-) Protokollen
Handhabung der Komplexität durch Entwicklungswerkzeuge wie in der
Industrie (z.B. bei Nokia, Ericsson, Audi, Airbus, etc.)
Michael Ebner, email: [email protected]
Sicherheit
Protokolle für Schlüsselaustausch, Kryptografie, Authentifikation, etc.
Rene Soltwisch, email: [email protected]
Universität Göttingen - Informatik II - SS 2005
8-123
Universität Göttingen - Informatik II - SS 2005
8-122
Herunterladen