Sie sind auf Seite 1von 139

Einführung in die Informatik für andere Fachrichtungen

Prof. Dr. J. Schlichter


Institut für Informatik, TU München

Skript erzeugt mit Targeteam


Johann Schlichter, TU München

i
Inhaltsverzeichnis

1 Übersicht 2
1.1 Behandelte Themen . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2 Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.1 Begleitende Literatur . . . . . . . . . . . . . . . . . . . . 2
1.2.2 Weiterführende Literatur . . . . . . . . . . . . . . . . . . 3

2 Einführung 4
2.1 Was ist Informatik? . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2 Computer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.3 Geschichtliche Entwicklung . . . . . . . . . . . . . . . . . . . . 7
2.3.1 Vor- und Pionierphase . . . . . . . . . . . . . . . . . . . 7
2.3.2 Industrielle Phase . . . . . . . . . . . . . . . . . . . . . . 8
2.4 Daten und Codierung . . . . . . . . . . . . . . . . . . . . . . . . 9
2.4.1 Information und Nachrichten . . . . . . . . . . . . . . . . 9
2.4.2 Bits und Bytes . . . . . . . . . . . . . . . . . . . . . . . 11
2.4.3 Codierung . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4.4 Codierung von Bildern und Tönen . . . . . . . . . . . . . 15
2.4.5 Komprimierung . . . . . . . . . . . . . . . . . . . . . . . 16

3 Rechnerarchitektur 17
3.1 Aufbau eines Rechners . . . . . . . . . . . . . . . . . . . . . . . 17
3.1.1 Interna eines PCs . . . . . . . . . . . . . . . . . . . . . . 18
3.1.2 Struktureller Aufbau eines Rechners . . . . . . . . . . . . 19
3.1.3 Aufbau der Zentraleinheit . . . . . . . . . . . . . . . . . 19
3.2 Der Zentralprozessor . . . . . . . . . . . . . . . . . . . . . . . . 20

ii
Johann Schlichter, TU München INHALTSVERZEICHNIS

3.2.1 Aufbau eines Zentralprozessors . . . . . . . . . . . . . . 20


3.2.2 Kommunikation zwischen Arbeitsspeicher und CPU . . . 22
3.2.3 Charakteristika von Zentralprozessoren . . . . . . . . . . 23
3.3 Maschinenbefehle . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.3.1 Befehlsvorrat . . . . . . . . . . . . . . . . . . . . . . . . 24
3.3.2 Adressierungsarten . . . . . . . . . . . . . . . . . . . . . 24
3.3.3 Beispielprogramm in Maschinensprache (Assembler) . . . 27
3.3.4 Unterteilung von Prozessoren nach Befehlsumfang . . . . 27
3.4 Befehlszyklus . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
3.4.1 Sequentielle Bearbeitung . . . . . . . . . . . . . . . . . . 28
3.4.2 Fließband Bearbeitung (Pipelining) . . . . . . . . . . . . 29
3.5 Schaltnetze und Schaltwerke . . . . . . . . . . . . . . . . . . . . 29
3.6 Ein-/Ausgabegeräte . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.6.1 Eingabegeräte . . . . . . . . . . . . . . . . . . . . . . . . 30
3.6.2 Ausgabegeräte . . . . . . . . . . . . . . . . . . . . . . . 31
3.6.3 Datenübertragungsgeräte . . . . . . . . . . . . . . . . . . 31
3.6.4 Speichermedien . . . . . . . . . . . . . . . . . . . . . . . 32

4 Systemsoftware 34
4.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.1.1 Aufgaben des Betriebssystems . . . . . . . . . . . . . . . 35
4.1.2 Hardware-Software Struktur . . . . . . . . . . . . . . . . 36
4.1.3 Betriebssystemen versus Benutzeroberflächen . . . . . . . 37
4.1.4 Wesentliche Komponenten eines Betriebssystems . . . . . 37
4.1.5 Aktuelle Betriebssysteme . . . . . . . . . . . . . . . . . . 38
4.2 Dateiverwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
4.3 Prozessorverwaltung / Prozessorzuteilung . . . . . . . . . . . . . 40
4.3.1 Prozesse . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
4.3.2 Prozessorzuteilung . . . . . . . . . . . . . . . . . . . . . 42
4.3.3 Prozess-Unterbrechungen (interrupt) . . . . . . . . . . . . 43
4.4 Arbeitsspeicherverwaltung . . . . . . . . . . . . . . . . . . . . . 44
4.4.1 Linearer Ansatz . . . . . . . . . . . . . . . . . . . . . . . 44
4.4.2 Virtueller Speicher . . . . . . . . . . . . . . . . . . . . . 45

iii
Johann Schlichter, TU München INHALTSVERZEICHNIS

4.4.3 Seitenwechsel (Paging) . . . . . . . . . . . . . . . . . . . 46


4.5 Nebenläufigkeit . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

5 Grundlagen der Programmierung 49


5.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.1.1 Sicht des Programmierers . . . . . . . . . . . . . . . . . 49
5.2 Algorithmus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.2.1 Spezifikation als Ausgangspunkt für ein Programm . . . . 51
5.2.2 Begriff des Algorithmus . . . . . . . . . . . . . . . . . . 51
5.2.3 Komponenten eines Algorithmus . . . . . . . . . . . . . . 53
5.2.4 Darstellung von Algorithmen . . . . . . . . . . . . . . . 54
5.2.5 Algorithmus und Programm . . . . . . . . . . . . . . . . 55
5.3 Datentypen und Ausdrücke . . . . . . . . . . . . . . . . . . . . . 55
5.3.1 Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . 57
5.4 Programmkonstrukte . . . . . . . . . . . . . . . . . . . . . . . . 57
5.4.1 Zuweisungen . . . . . . . . . . . . . . . . . . . . . . . . 57
5.4.2 Alternativanweisungen . . . . . . . . . . . . . . . . . . . 58
5.4.3 Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . 58
5.5 Modularisierung von Programmen . . . . . . . . . . . . . . . . . 59
5.5.1 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . 59
5.5.2 Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
5.5.3 Strukturierung von Algorithmen . . . . . . . . . . . . . . 62
5.5.4 Module . . . . . . . . . . . . . . . . . . . . . . . . . . . 63
5.5.5 Prozedurales / Objektorientieres Programmieren . . . . . 64
5.6 Rekursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
5.7 Objektorientierte Programmierung . . . . . . . . . . . . . . . . . 68
5.8 Programmiersprachen . . . . . . . . . . . . . . . . . . . . . . . . 71
5.9 Software-Engineering . . . . . . . . . . . . . . . . . . . . . . . . 74
5.9.1 Software/Engineering - Definition des Ideals . . . . . . . 74
5.9.2 Komplexität von Software-Projekten . . . . . . . . . . . . 75
5.9.3 Vorgehensmodelle . . . . . . . . . . . . . . . . . . . . . 75
5.9.4 Strukturierte Programmierung . . . . . . . . . . . . . . . 77
5.9.5 Notationen für Analyse und Entwurf . . . . . . . . . . . . 78
5.9.6 Software-Qualitätssicherung . . . . . . . . . . . . . . . . 80

iv
Johann Schlichter, TU München INHALTSVERZEICHNIS

6 Datenstrukturen und Algorithmen 83


6.1 Datenstrukturen . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.1.1 Listen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
6.1.2 Graphen . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.1.3 Bäume . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
6.2 Suchverfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
6.3 Sortierverfahren . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
6.4 Komplexität . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
6.4.1 Komplexitätsklassen . . . . . . . . . . . . . . . . . . . . 90

7 Grundlagen von Rechnernetzen 92


7.1 Einführung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
7.2 Übertragungsmedien . . . . . . . . . . . . . . . . . . . . . . . . 96
7.2.1 Kriterien zur Kategorisierung . . . . . . . . . . . . . . . 96
7.2.2 Elektrische Leiter . . . . . . . . . . . . . . . . . . . . . . 97
7.2.3 Lichtwellenleiter . . . . . . . . . . . . . . . . . . . . . . 98
7.3 Lokale Netze (LAN) . . . . . . . . . . . . . . . . . . . . . . . . 99
7.3.1 LAN - Netztopologien . . . . . . . . . . . . . . . . . . . 99
7.3.2 Zugriffsverfahren des Ethernet - CSMA/CD . . . . . . . . 100
7.4 WAN - Wide Area Network . . . . . . . . . . . . . . . . . . . . . 101
7.4.1 Internet . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
7.5 Referenzmodelle . . . . . . . . . . . . . . . . . . . . . . . . . . 105
7.5.1 TCP/IP Referenzmodell . . . . . . . . . . . . . . . . . . 105
7.5.2 Sicherung gegen Fehler . . . . . . . . . . . . . . . . . . . 107
7.5.3 IP-Adresskonzept . . . . . . . . . . . . . . . . . . . . . . 108

8 Anwendungen von Rechnernetzen 110


8.1 Verteilte Anwendungen . . . . . . . . . . . . . . . . . . . . . . . 110
8.1.1 Entwicklung hin zu verteilten Anwendungen . . . . . . . 110
8.1.2 Verteilte Systeme . . . . . . . . . . . . . . . . . . . . . . 111
8.1.3 Definition Verteilte Anwendung . . . . . . . . . . . . . . 113
8.1.4 Client-Server-Modell . . . . . . . . . . . . . . . . . . . . 114
8.1.5 Beispiel-Services . . . . . . . . . . . . . . . . . . . . . . 115

v
Johann Schlichter, TU München INHALTSVERZEICHNIS

8.1.6 World Wide Web . . . . . . . . . . . . . . . . . . . . . . 116


8.2 Electronic Commerce . . . . . . . . . . . . . . . . . . . . . . . . 117
8.2.1 E-Commerce und E-Business . . . . . . . . . . . . . . . 117
8.2.2 Verschiedene E-Commerce Stufen . . . . . . . . . . . . . 118
8.2.3 Probleme/Herausforderungen bei E-Commerce . . . . . . 118
8.2.4 Beispiele von Verteilten Anwendungen im E-Commerce . 119
8.3 Sicherheit in verteilten Systemen . . . . . . . . . . . . . . . . . . 119
8.3.1 Sicherheitsanforderungen . . . . . . . . . . . . . . . . . 120
8.3.2 Verschlüsselung . . . . . . . . . . . . . . . . . . . . . . . 120
8.3.3 Identitätsprüfung . . . . . . . . . . . . . . . . . . . . . . 122

9 Datenbanken und Informationssysteme 123


9.1 Dateisysteme . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123
9.2 Datenbanksysteme . . . . . . . . . . . . . . . . . . . . . . . . . 124
9.3 Relationale Datenbanksysteme . . . . . . . . . . . . . . . . . . . 127
9.3.1 Allgemeine Eigenschaften . . . . . . . . . . . . . . . . . 127
9.3.2 Abfragesprache SQL . . . . . . . . . . . . . . . . . . . . 128
9.3.3 Beispielsysteme . . . . . . . . . . . . . . . . . . . . . . 129
9.4 Hypertextsysteme . . . . . . . . . . . . . . . . . . . . . . . . . . 130
9.4.1 Definition . . . . . . . . . . . . . . . . . . . . . . . . . . 130
9.4.2 Navigation in Hypermedia . . . . . . . . . . . . . . . . . 130

vi
Johann Schlichter, TU München Schlichter, TUM

 Prof. J. Schlichter

– Lehrstuhl für Angewandte Informatik / Kooperative Systeme


– Fakultät für Informatik, TU München
– Email: schlichter@in.tum.de (URL: mailto:schlichter@in.tum.de)
– Tel.: 089-289 25700
– URL: http://www11.informatik.tu-muenchen.de/

1
Kapitel 1

Übersicht

Ziel dieser Vorlesung ist eine inhaltlich abgestimmte Vorstellung der Grundlagen
der Informatik sowie deren mögliche Nutzung. Die Vorlesung richtet sich
an Nicht-Informatik-Studierende. Die Vorlesung behandelt alle grundlegenden
Aspekte der Informatik.

1.1 Behandelte Themen


 Rechnerarchitektur

 Betriebssysteme

 Datenstrukturen, Algorithmen und Codierung von Information

 Grundlagen der Programmierung und Software-Entwicklungstechnik

 Rechnernetze und Verteilte Systeme mit Client-Server-Architekturen

 Datenbanken und Informationssysteme

1.2 Literatur
Als Basis für die Vorlesung wurden die nachfolgenden Bücher verwendet.

1.2.1 Begleitende Literatur


Begleitend zur Vorlesung können verwendet werden:

2
Johann Schlichter, TU München 1.2. LITERATUR

 H.-P. Gumm, M. Sommer: "Einführung in die Informatik", 4. Auflage,


Oldenbourg Verlag, 2000

 U. Rembold: "Einführung in die Informatik für Naturwissenschaftler und


Ingenieure", Hanser 1991

 H. Balzert: "Lehrbuch Grundlagen der Informatik", Spektrum Verlag 1999

– hauptsächlich LE 1-3; siehe auch im WWW (URL:


http://www.software-technik.de/netscape/buecher/gdi/LE1.html)

1.2.2 Weiterführende Literatur


Für Fortgeschrittene zur Vertiefung:

 M. Broy: "Informatik - Eine Grundlegende Einführung", Springer-Verlag


1998 (Teile 1 und 2)

 P. Pepper: "Grundlagen der Informatik", Oldenbourg-Verlag 1995.

3
Kapitel 2

Einführung

 Fragestellungen dieses Kapitels

– Übersicht über die verschiedenen Aspekte der Informatik


 Mit welchen Bereichen beschäftigt sich Informatik?
 Was gehört alles zu einem Computersystem?
– Daten und Codierung
 Was ist ein Byte?
 Wie stellt ein Computer ganze Zahlen dar?
 Wie stellt ein Computer Bilder dar?

2.1 Was ist Informatik?


Der Begriff Informatik leitet sich vom Begriff "Information" ab. Bei Informatik
geht es grundsätzlich um die Erfassung, Verbreitung, Be- und Verarbeitung von
Information. Dabei werden hauptsächlich technische Lösungen betrachtet, die
Teilaufgaben des Gesamtprozesses übernehmen oder unterstützen können.

 Informatik ist die Wissenschaft, Technik und Anwendung der maschinellen


Verarbeitung, Speicherung und Übertragung von Information.

 Der Begriff ist in den 60er Jahren entstanden. Im Englischen entstand der
Begriff "Computer Science". Von der Ausrichtung her konzentriert sich
die "Computer Science" mehr auf die Technik, während die "Informatik"
zusätzlich grundlegende Fragen im Zusammenhang mit Information und
Informationsverarbeitung mit einschließt.

4
Johann Schlichter, TU München 2.1. WAS IST INFORMATIK?

 Die Beschäftigung mit der Technik zur Verarbeitung von Informationen


(Rechnertechnik, Technik des Programmierens) ist ein wichtiger Teil
der Informatik. Zusätzlich spielt aber auch die Beschäftigung mit
Information an sich eine Rolle (wo kommen sie her, wie kann man sie
darstellen, wie können Menschen motiviert werden sie zu liefern, wie
können Menschen damit umgehen). Hier gibt es enge Verbindungen zur
Betriebswirtschaftslehre, Psychologie und Soziologie.

 Das Gebiet der Informatik ist sehr breit und wird deshalb in mehrere
Teilgebiete untergliedert:

– Technische Informatik
 Rechnerarchitektur
Befasst sich mit der technischen Konstruktion von Computern, al-
so mit physikalischen Kompontenten wie Prozessoren, Speicher-
chips, mit der Konstruktion von Peripheriegeräten und Geräten
zur Realisierung von Netzkomponenten, z.B. Router und Mo-
dems.
 Systemsoftware
Hier geht es um die Konzeption und Implementierung von System-
software, d.h. Hardware-naher und Anwendungs-unspezifischer
Software; also Software zur Steuerung der technischen Hardwa-
re. Beispiele für Systemsoftware sind Betriebssysteme, Netz-
software, Software zur Steuerung von Verteilten Systemen (Cli-
ent/Server), Shells, Windowmanager.
– Praktische Informatik
Befasst sich mit der Programmierung ganz allgemein. Beispiele
für Themen sind Programmiersprachen, Übersetzerbau, das Vorgehen
bei der Softwareentwicklung (Software Engineering). Außerdem
beschäftigt sich die Praktische Informatik noch mit Standard-
Anwendungsprogrammen oder Middleware wie Datenbank- und
Wissensbanksystemen.
– Theoretische Informatik
Befasst sich mit den theoretischen Grundlagen des Gebietes. Dazu
zählen formale Sprachen, Automatentheorie, Semantik und Logik,
Komplexitätsabschätzungen von Algorithmen.
– Angewandte Informatik
Befasst sich mit dem Einsatz von Rechnern in verschiedenen Anwen-
dungsbereichen; die Lösungen können universell einsetzbar sein (z.B.

5
Johann Schlichter, TU München 2.2. COMPUTER

Textverarbeitungssysteme oder Tabellenkalkulation) oder gezielt für


einen Anwendungsbereich entwickelt werden (z.B. Flugbuchungssy-
stem).
 Für manche Anwendungsbereiche haben sich spezielle Ausprä-
gungen der Informatik herausgebildet, sogenannte Informatik-
Ableger, z.B. Wirtschaftsinformatik, Medizinische Informatik,
Bioinformatik.
 Angewandte Informatik ist häufig interdisziplinär. Neben der
Disziplin des Anwendungsbereichs sind meist beteiligt: BWL,
Psychologie, Soziologie
 Beispiele für Anwendungsbereichs-unabhängige Teilbereiche der
Angewandten Informatik sind Rechnergestützte Gruppenarbeit
(CSCW, Groupware) und Community-Support.

2.2 Computer
Eng mit dem Begriff Informatik verbunden ist der Begriff Computer (oder
Rechner).

 Computer sind technische Geräte, die umfangreiche Informationen mit


hoher Zuverlässigkeit und großer Geschwindigkeit automatisch verarbeiten
und sicher aufbewahren können.

 Im Gegensatz zu Automaten (wie Kaffeemaschinen) kann die Vorschrift,


nach der Computer arbeiten soll, jeweils neu vorgegeben werden. Solche
Vorschriften oder Handlungsanweisungen nennt man Algorithmen. Wenn
Algorithmen in einem präzisem Formalismus beschrieben werden, dann
bezeichnet man sie als Programme.

 Struktur eines Rechner-/Computersystems


Ein Rechnersystem umfasst sowohl den eigentlichen Rechner oder
Computer (die Hardware) als auch Software. Schnittstelle zwischen Hard-
und Software ist die Maschinensprache des im Computer eingesetzten
Prozessors (CPU).

6
Johann Schlichter, TU München 2.3. GESCHICHTLICHE ENTWICKLUNG

Benutzer/Anwender

Rechnersystem/Computersystem
Software
Anwendungssoftware

Systemsoftware

Maschinensprache

Rechner/Computer

Hardware

– Anwendungssoftware ist Software, die Aufgaben des Anwenders mit


Hilfe eines Computersystems löst (unter Rückgriff auf Systemsoftwa-
re). Beispiele sind Textverarbeitungsprogramme, Tabellenkalkulation,
Zeichenprogramme.

2.3 Geschichtliche Entwicklung


2.3.1 Vor- und Pionierphase
bis 1800

Mechanische Rechner, Grundrechenarten

 Erste mechanische Hilfsmittel gab es schon im 2.Jh.v.Chr. in China mit den


ersten Versionen des Abakus (Rechenbrett mit verschiebbaren Kugeln)

 Pascal (1641), Leibniz (1674)

7
Johann Schlichter, TU München 2.3. GESCHICHTLICHE ENTWICKLUNG

1800 - 1900

Lochkartengesteuerte mechanische Maschinen und Rechnermodelle

 Babbage (1822)

1900 - 1940

Lochstreifengesteuerte Relaisrechner, Berechenbarkeitsmodelle

 Der erste nach dem Grundprinzip von Babbage realisierte mechanische


Rechner war die 1934 von Conrad Zuse entworfene und 1937 fertiggestellte
Z1.

 Zuse (1934), Turing (1936)

1940 - 1950

Durch internes Programm gesteuerte Röhrenrechner

 Das 1941 fertiggestellte Nachfolgemodell der Z1, die Z3 beruhte bereits


auf elektromechanischen Bauelementen (Relais). Dieser Rechner konnte
Multiplikationen in 3s berechnen.

 Der erste voll-elektronische Rechner war der 1946 fertiggestellte ENIAC


(USA) mit 18000 Röhren und einer Multiplikationszeit von 3ms. Der
Rechner hatte ein Gewicht von 20 Tonnen.

 Aiken (1944), v. Neumann (1946)

2.3.2 Industrielle Phase


1950 - 1955

Röhrenschaltkreise, Trommelspeicher

 Univac I (1950), IBM 801 (1953)

8
Johann Schlichter, TU München 2.4. DATEN UND CODIERUNG

1955 - 1960

Transistorschaltkreise, Ferritspeicher

 IBM 7090 (1958), IBM 1401 (1959)

1960 - 1970

Integrierte Schaltkreise, Festplatten

 IBM S360 (1964), Siemens 4004 (1969)

1970 - heute

Hochintegrierte Schaltkreise, offene Architekturen

 Apple-I (1976), Intel 8080 (1981), IBM PC (1986), Sun Sparc (1987)

Zusätzlich zu den angesprochenen Entwicklungen gibt es noch eine Reihe von


Arbeiten, in denen spezialisierte Rechnerarchitekturen entstanden sind, z.B. Par-
allelrechner, Lisp-Maschinen, Datenflußmaschinen. Diese konnten sich jedoch
auf Dauer nicht durchsetzen, sondern sie wurden durchwegs durch Allzweckrech-
ner ersetzt. Für spezialisierte Rechner wurde der Entwicklungsaufwand zu groß,
und sie konnten mit der schnellen Entwicklung der Technologie zeitlich nicht mit-
halten.

2.4 Daten und Codierung


Dieser Abschnitt beschäftigt sich mit wichtigen Grundbegriffen der Informatik

2.4.1 Information und Nachrichten


Information-/Datenverarbeitung

9
Johann Schlichter, TU München 2.4. DATEN UND CODIERUNG

Information
menschlicher
Anwender

Codierung Interpretation

(binaere) Daten Rechner

 Für den menschlichen Anwender bedeutsame Informationen werden im


Rechner als (binäre) Daten repräsentiert. Man spricht deshalb auf der
Ebene des Benutzers von Informationsverarbeitung, während auf der
Rechnerebene von Datenverarbeitung gesprochen wird.

 Daten werden im Rechner als eine Folge von Bits dargestellt.

Nachrichten

Im Kontext der Übertragung spricht man oft von Nachrichten anstelle von Daten.

Information Information

Codierung Interpretation

Übertragungskanal
(binäre) Daten (binäre) Daten

Nachricht
Rechner Rechner

 Eine Nachricht ist eine Folge von Zeichen, oft aus sinnesphysiologischen
oder technischen Gründen in Worte unterteilt.

10
Johann Schlichter, TU München 2.4. DATEN UND CODIERUNG

 Soll eine Nachricht von einem Sender zu einem Empfänger gelangen, muß
zwischen beiden ein Übertragungskanal bestehen, z.B. eine Verbindung
über ein Rechnernetz.

 Um übertragbar oder speicherbar zu sein, muss eine Nachricht eine


Repräsentation haben, i.a. als Bitfolge.

2.4.2 Bits und Bytes


Bits

 Ein Bit ist die kleinstmögliche Informationsheit. Ein Bit lässt zwei mögliche
Werte auf eine Frage zu, z.B. Ja oder Nein, Wahr oder Falsch, Links oder
Rechts.

 Oft werden in diesem Zusammenhang die beiden Werte 0 und 1 benutzt.


Technisch werden die beiden Werte durch elektrische Ladungen (0 =
ungeladen, 1 = geladen), elektrische Spannungen (0 = 0 Volt, 1 = 5 Volt)
oder Magnetisierungen dargestellt.

 Bitfolgen werden benötigt, falls zur Darstellung mehr als zwei Werte
notwendig sind (z.B. die Beantwortung einer Frage enthält mehr als zwei
mögliche Antworten, wie "Woher kommt der Wind?" - Süd, West, Ost oder
Nord).


000 Süd
001 West
010 Nord
011 Ost
100 Südost
101 Nordwest
110 Nordost
111 Südwest

 Jedes zusätzliche Bit in einer Folge verdoppelt die Anzahl der möglichen,
unterschiedlichen Bitfolgen, d.h. es gibt genau 2 N mögliche Bitfolgen der
Länge N.

11
Johann Schlichter, TU München 2.4. DATEN UND CODIERUNG

Byte

Ein Byte umfasst acht Bit, ist also eine Bitfolge der Länge 8.

 Häufige Abkürzungen:

– 1 KB = 1024 Bytes = 210 Bytes (Kilo)


– 1 MB = 1024 * 1024 Bytes = 220 Bytes (Mega)
– 1 GB = 1024 * 1024 * 1024 Bytes = 230 Bytes (Giga)
– 1 TB = 1024 * 1024 * 1024 * 1024 Bytes = 2 40 Bytes (Tera)
– 1 PB = 1024 * 1024 * 1024 * 1024 * 1024 Bytes = 2 50 Bytes (Peta)

2.4.3 Codierung
Codierung ist allgemein die Zuordnung (oder Abbildung) der Werte eines
Zeichenvorrats auf Werte eines anderen Zeichenvorrats.

 Zeichen: Ausprägung (Form, Wert) eines Signals; häufig spricht man auch
von Symbolen.

 Zeichenvorrat: Menge der Zeichen (d.h. Formen, Werte), die ein


bestimmtes Signal annehmen kann.

 Codierung erfolgt für bestimmten Zweck:

– Speicherung
– Übertragung
– Komprimierung
– Verschlüsselung
– Veranschaulichung

 Eine Codierung ist z.B. notwendig, da die für den Menschen verständliche
Information auf eine für den Rechner verständliche oder speicherbare
Darstellung abgebildet werden muss. Hier Zuordnung von Symbolen, die
für den Menschen Sinn machen, zu Bitfolgen.

 Die einer Codierung zugrundeliegende Abbildung muss berechenbar,


eindeutig und (in der Regel) umkehrbar sein.

12
Johann Schlichter, TU München 2.4. DATEN UND CODIERUNG

 Ganze Zahlen
Darstellung von Zahlen durch eine Folge von Bits, z.B. 4 Bit, 16 Bit, 32 Bit
oder 64 Bit. In aktuellen Rechnerarchitekturen werden für die Darstellung
einer ganzen Zahl entweder 32 oder 64 Bit verwendet.

– Positive ganze Zahlen werden immer durch ihre Darstellung im


Binärsystem codiert. Für die Codierung negativer ganzer Zahlen gibt
es mehrere Möglichkeiten.
– Einerkomplement-Darstellung
Das erste Bit der Zahlencodierung wird als Vorzeichenbit interpretiert.
Damit sind Zahlen von -2n-1 bis 2n-1 möglich. Es gibt jedoch zwei
Nullen, d.h. eine positive (nur Nullen) und eine negative Null (nur
Einsen).
– Zweierkomplement-Darstellung
Beim Zweierkomplement existiert eine negative Zahl mehr als
die Anzahl der positiven Zahlen; Zweierkomplement hat den
Vorteil der einfachen Umsetzung der Grundrechenarten Addition und
Subtraktion.
 Beispiel für 4 bit Darstellung
Zweierkomplement-Darstellung mit 4 bit für eine ganze Zahl

0000
1111 0001
0 0010
1110 -1 1
-2 2
1101 0011
-3 3
1100 -4 4 0100

-5 5
1011 0101
-6 6
1010 -7 7 0110
-8
1001 0111
1000
 Wert einer positiven Zahl
P
W = i=0,n-1 (bi * 2n-1-i)

13
Johann Schlichter, TU München 2.4. DATEN UND CODIERUNG

 Beispiel
Æ eine ganze Zahl sei als 8 bit lange Zahl zur Basis 2 dargestellt
Æ W(000011012) = 0*27 +..+ 0*24 + 1*23 + 1*22 + 0*21 +
1*20 = 8 + 4 + 1 = 1310
 Wert einer negativen Zahl
P
W = - (2n - i=0,n-1 (bi * 2n-1-i))
Æ
 Differenzbildung von zwei ganzen Zahlen
dezimal dual
17 00010001
+(-14) 11110010
=3 00000011
Æ

 Alphanumerische Daten - ISO-ASCII 8-bit-Code


Darstellung von alphanumerischen Zeichen in einer 8-Bit Folge, d.h.
Codierung eines Zeichens durch eine (Binär-)zahl zwischen 0 und 255.

– ISO = International Standards Organisation


– ASCII = American Standard Code for Information Interchange
– Kleinbuchstaben sind in alphabetischer Reihenfolge duchnummeriert
(97 - 124)
– Großbuchstaben sind in alphabetischer Reihenfolge duchnummeriert
(65 - 92)
– Ziffern 0 bis 9 sind in aufsteigender Reihenfolge dargestellt (48 - 58)
– Darstellung von Sonderzeichen, z.B. CR (Carriage Return = Absat-
zende), LF (Linefeed = Neuzeile)
– Zu den entsprechenden Zeichen wird der jeweilige Zahlenwert zur
Basis 10 angegeben.
 Zeichen ASCII Binärdarstellung
a 97 01100001
A 65 01000001
b 98 01100010
B 66 01000010
0 48 00110000
? 63 00111111
CR 13 00001101

14
Johann Schlichter, TU München 2.4. DATEN UND CODIERUNG

Viele Systeme bei der Netzübertragung arbeiten noch mit 7-bit ASCII Code.
Deshalb müssen spezielle, sprachspezifische Zeichen wie ü, ä oder ö in
eine 7-bit Darstellung konvertiert werden (Verwendung eines Zeichens zur
Einleitung von zusätzlichen Zeichen, "Escape-Zeichen").
 Ein neuer Standard (Unicode) codiert jedes Zeichen mit zwei Bytes. Damit
sind 65536 verschiedene Zeichen möglich.

2.4.4 Codierung von Bildern und Tönen


Bilder

 Auflösung des Bildes in Rasterpunkte, je nach Auflösungsgrad 60 bis 360


Bildelemente (pixel) pro Zoll (1 Zoll (inch) = 2,54cm)
 Darstellung der Eigenschaften eines Pixels (Grauwert, Farbe, Helligkeit)
durch eine Bitfolge (normalerweise ein oder zwei Byte)
 Darstellung von Farbinformation mittels RGB (rot-grün-blau) oder anderen
Codierungen
 VGA: 640 * 480 * (8bit pro Pixel / 8bit pro Byte) = 307200 Byte
 SVGA: 1024 * 768 * (8bit pro Pixel / 8bit pro Byte) = 786432 Byte

Töne

Abtastpunkte
111
110
101
100
011
010
001
000
101 111 111 111 110 Bitstrom

 Diskretisierung und Digitalisierung, je nach erforderlicher Qualität in 100,


1000 und mehr Werte pro Sekunde. Also Unterteilung der Amplitude in
Bereiche, denen jeweils eine Bitfolge zugeordnet wird.

15
Johann Schlichter, TU München 2.4. DATEN UND CODIERUNG

 Darstellung der Eigenschaften des Tonelements durch ein oder zwei Byte

 Sprache wird beim Telefon 8000 mal pro Sekunde (8kHz) abgetastet.

2.4.5 Komprimierung
Kompression von Daten (vor allem bei Bildern und Tönen) um Speicher- und
Übertragungskosten zu reduzieren.

 Verlustfreie Kompression
Ausnutzung von Mustern und Redundanzen in den Daten; Ausnutzung der
Häufigkeit von Symbolen durch Änderung der Codierung

 Verlustbehaftete Kompression
Ausnutzung von Medien- und Wahrnehmungseigenschaften

16
Kapitel 3

Rechnerarchitektur

In diesem Abschnitt werden die Hardware-nahen Komponenten eines Rechners


behandelt. Dabei geht es insbesondere um den Aufbau eines Rechners aus
einzelnen Komponenten und dem Aufbau der einzelnen Rechnerkomponenten
sowie um die Möglichkeiten der Steuerung des Ablaufs, z.B. den Befehlszyklus
und den beispielhaften Aufbau einer Maschinensprache.

 Fragestellungen des Abschnitts:

– Aus welchen (Hardware-)Elementen setzt sich ein Rechner zusam-


men?
– Wie kommunizieren die einzelnen Komponenten eines Rechners?
– Wie sieht die Schnittstelle zwischen Hardware und Software aus (d.h.
Maschinenbefehle)?

3.1 Aufbau eines Rechners


Die Hardware eines Computersystems besteht aus dem Rechner und einer
Menge von Peripheriegeräten, z.B. Tastatur, Maus, Bildschirm, Drucker,
Scanner. Bezüglich der Rechner gibt entsprechend ihrer Funktionalität und
Leistungsfähtigkeit sehr unterschiedliche Klassen, z.B. PDA ("personal digital
assistant", Palm V), Notebook/Laptop, Schreibtisch PC, Server oder Großrechner.

17
Johann Schlichter, TU München 3.1. AUFBAU EINES RECHNERS

3.1.1 Interna eines PCs

18
Johann Schlichter, TU München 3.1. AUFBAU EINES RECHNERS

3.1.2 Struktureller Aufbau eines Rechners

Rechner/Computer
Zentraleinheit
Zentralprozessor (CPU) Hauptspeicher

anderer
Bus Computer
Netzwerk
Ein/Ausgabe-Controller

Eingabe- Ausgabe- externe


geräte geräte Speicher

 Die Interna eines Rechners kann man unterteilen in Zentraleinheit (häufig


auf einer Zentralplatine untergebracht) und Ein/Ausgabe-Controller.

 Die Komponenten eines Rechners kommunizieren über einen Bus mitein-


ander. Der Bus unterteilt sich in

– Adressbus: zur Übergabe einer Adresse


– Datenbus: zur Übermittlung von Daten
– Steuerbus: mehrere Steuerleitungen

 Ein/Ausgabe-Controller sind Komponenten, die Nachrichten auf dem


Bus für Ein/Ausgabe-Geräte umsetzen und deren Eingaben den anderen
Komponenten zur Verfügung stellen. Beispiele für E/A-Controller sind
Graphikkarten und Netzwerkkarten.

3.1.3 Aufbau der Zentraleinheit


 Die Zentraleinheit wird unterteilt in Rechnerkern (Zentralprozessor, CPU)
und Arbeitsspeicher (Hauptspeicher)

– Zentralprozessor und Hauptspeicher kommunizieren über denselben


Bus wie Zentralprozessor und E/A-Controller

19
Johann Schlichter, TU München 3.2. DER ZENTRALPROZESSOR

– Der Arbeitsspeicher (ASP; "main memory") ist ein Feld von


adressierbaren Speicherzellen der Größe 8 Bit zur Ablage von
Programmen und binären Daten. Jede Speicherzelle kann über seine
Adresse (eindeutiger Identifikator) direkt angesprochen werden.
– Im Zentralprozessor finden die Rechen- und Umformvorgänge statt.
Gleichzeitig steuert und kontrolliert der Zentralprozessor den Ablauf
des Rechenvorgangs.

 Den Ablauf der Informationsverarbeitungsvorgänge im Rechner steuern


Programme.

3.2 Der Zentralprozessor


Im Zentralprozessor finden die Rechen- und Umformvorgänge statt. Gleichzeitig
steuert und kontrolliert der Zentralprozessor den Ablauf des Rechenvorgangs.
Dazu lädt er Befehle eines Programms aus dem Speicher und führt diese aus.

3.2.1 Aufbau eines Zentralprozessors

20
Johann Schlichter, TU München 3.2. DER ZENTRALPROZESSOR

Zentralprozessor E/A-Controller
Rechenwerk EA-Register 0c00
Register R1
EA-Register 0c01
Register R2
ALU
Register R3
Register R4
Register R5
Register R6
Statusregister

Arbeitsspeicher
Speicherzelle 0001

Befehlsregister Speicherzelle 0002

Speicherzelle 0003
Steuerlogik
Speicherzelle 0004

Befehlszähler
Steuerwerk

Datenbus Steuerbus
Adressbus

Steuerwerk

Das Steuer- bzw. Leitwerk übernimmt das Holen der Befehle aus dem
Arbeitsspeicher; es steuert den Programmablauf.

 Befehlszähler
Der Befehlszähler gibt an, welcher Befehl aus dem Arbeitsspeicher als
nächstes geholt werden soll.

 Befehlsregister
Das Befehlsregister speichert den Befehl, der aktuell abgearbeitet wird.

 Taktgeber

21
Johann Schlichter, TU München 3.2. DER ZENTRALPROZESSOR

Rechenwerk

Das Rechenwerk führt die Berechnungen des Programms durch; dazu dient
die ALU (Arithmetic Logic Unit) als Addierwerk; Operanden müssen in
Registern vorliegen, die Ergebnisse von Berechnungen werden jeweils in Register
gespeichert.

 Register sind spezielle Speicherzellen im Zentralprozessor zur Speicherung


von Operanden und Ergebnissen

 Das Statusregister ist ein spezielles Register, in dem das Rechenwerk


Ergebnisse von Vergleichsoperationen und anderen Rechenoperationen
speichert

E/A-Register

Die E/A-Register nehmen Ein-/Ausgabe-Informationen auf, z.B. Befehle für die


Steuerung einer Festplatte, Daten, die auf Festplatte bzw. von der Festplatte
übertragen werden.

3.2.2 Kommunikation zwischen Arbeitsspeicher und CPU


 Beispiel: Übertragung von Daten aus dem Arbeitsspeicher zum Zentralpro-
zessor (CPU)

1. CPU legt die ASP-Adresse des gewünschten Datenelements auf den


Adressbus.
2. CPU legt das Signal "Lesen" auf eine bestimmte Leitung im Steuerbus.
3. CPU legt das Signal "Adresse gültig" auf eine bestimmte Leitung im
Steuerbus.
4. ASP ist passiv, "hört" aber auf Adress- und Steuerbus mit.
5. ASP erkennt, dass eine Adresse gültig ist und prüft, ob er mit dieser
Adresse gemeint ist. Falls ja, führe Schritte 6-12 aus.
6. ASP prüft das Transportrichtungssignal im Steuerbus (es erkennt das
Signal "Lesen").
7. ASP legt die (adressierten) Daten auf den Datenbus.
8. ASP legt das Signal "Daten bereit" auf eine bestimmte Leitung im
Steuerbus.

22
Johann Schlichter, TU München 3.2. DER ZENTRALPROZESSOR

9. CPU hat gewartet, bis das Signal "Daten bereit" erscheint und
übernimmt Daten vom Bus in das Zielregister.
10. CPU legt das Signal "Daten übernommen" auf eine bestimmte Leitung
im Steuerbus.
11. ASP deaktiviert daraufhin den Datenbus und das Signal "Daten
bereit".
12. Sobald das Signal "Daten bereit" vom ASP weggenommen wird, deak-
tiviert die CPU die von ihm verwendeten Adress- und Steuerleitungen.

 Ein solcher Ablauf aus Aktions- und Kommunikationsschritten zwischen


Kommunikationspartnern heißt ein Protokoll. Das Protokoll definiert die
Syntax, Semantik und die Reihenfolge der auszutauschenden Information.

 Der oben geschilderte Ablauf heißt Busprotokoll.

3.2.3 Charakteristika von Zentralprozessoren


 Interne Datendarstellung

– Anzahl der Bits, die zur Codierung ganzer Zahlen verwendet werden
(entspricht der Breite der Prozessorregister)
– Heute übliche Prozessoren arbeiten mit 32 oder 64 Bit breiten
Registern.
– Meist haben die Busse (Adress- und Datenbus) des Rechners
dieselbe Breite. Die Zahl ist also ein Maß dafür, wieviele Bits
gleichzeitig übertragen werden können und wieviele Speicheradressen
ein Prozessor direkt ansprechen kann.

 Aufbau der Maschinenbefehle

– Hier wird zwischen RISC und CISC unterschieden (siehe Abschnitt


! Unterteilung von Prozessoren (siehe Seite 27)).

 Struktur der Funktionseinheiten

– Manche Funktionseinheiten können mehrfach vorhanden sein, um


eine parallele Bearbeitung mehrerer Befehle zu ermöglichen (siehe
Abschnitt zu ! Pipelining (siehe Seite 29)).

 Taktrate

23
Johann Schlichter, TU München 3.3. MASCHINENBEFEHLE

– Arbeitsschritte pro Sekunde (muss nicht mit der Anzahl der


bearbeiteten Maschinenbefehle übereinstimmen); Aktuelle Werte
liegen im Bereich 300 MHz - 1 GHz.

 Cache

– Um den Zugriff auf den Arbeitsspeicher zu beschleunigen wird


zwischen dem Zentralprozessor und Bus (und damit Arbeitsspeicher)
häufig ein Cache eingebaut, der sich Daten aus dem Speicher merkt
und bei mehrmaliger Nachfrage schneller liefern kann. Üblicherweise
bei Arbeitsspeicher ca. 60ns Zugriffszeit, bei Caches <10ns.

3.3 Maschinenbefehle
Einfache Kommandos, die der Hauptprozessor ausführen kann; Setzen sich
zusammen aus Operationsteil und Operandenteil (Adressteil).

3.3.1 Befehlsvorrat
 Transportbefehle, z.B. LOAD, STORE
LOAD: Transportieren von Daten vom Arbeitsspeicher in ein Register;
STORE spezifiziert den umgekehrten Weg.

 Arithmetische und logische Befehle, z.B. ADD, SUB, AND, OR, CMP

 Schiebebefehle, z.B. SH (Shift links, rechts), ROT (Schieben im Kreis)

 Sprungbefehle, z.B. JMP, JGT (Jump Greater Than) - (bedingte) Änderung


des Befehlszählers

 Sonderbefehle
Behandlung von Unterbrechungen (z.B. Alarm bei Division durch 0), Ände-
rungen des Maschinenstatus, Rückmeldungen von E/A Geräten, Laden von
Prozessbeschreibungen, Synchronisationsbefehle bei Speicherzugriff etc.

3.3.2 Adressierungsarten
Der Adressteil bei den LOAD und STORE-Befehlen dient zur Identifizierung der
Operanden, z.B. eine oder mehrere Speicherzellen. In der Regel werden Adressen

24
Johann Schlichter, TU München 3.3. MASCHINENBEFEHLE

nicht unmittelbar angegeben. Um eine größere Flexibilität der Programmierung


zu erreichen, werden Informationen angegeben, aus denen die Adressen der
Operanden im Befehlszyklus berechnet werden können. Die Adressierungsart
gibt an, wie die physikalische Adresse zu ermitteln ist.

Absolut/Direkt

Die im Adressteil angegebene Adresse kennzeichnet genau den Aufenthaltsort des


Operanden.
Beispiel

Speicher
R1 3
1
2
3 10
R2 10 4
5
6
7

Indirekt

Der Inhalt der im Adressteil angegebenen Speicherzelle ist die Adresse des
Operanden.
Beispiel

25
Johann Schlichter, TU München 3.3. MASCHINENBEFEHLE

LOAD (R1), R2

Speicher
R1 3
1
2
3 5
R2 10 4
5 10
6
7

Indiziert

Die Adresse des Operanden ist die Summe des Adressteils und dem Inhalt eines
speziellen Indexregisters. Dies ist besonders zum Durchlaufen zusammenhängen-
der Speicherbereiche geeignet.
Beispiel

Speicher
R1 3
+ 1
R2 2
2
3
4

R3 10 5 10
6
7

26
Johann Schlichter, TU München 3.3. MASCHINENBEFEHLE

3.3.3 Beispielprogramm in Maschinensprache (Assembler)


Darstellung in Maschinensprache

0100 LOAD 0118


0102 STORE 0116
0104 LOAD 0114
0106 JUMPZERO 011a
0108 SUB 0118
010a STORE 0114
010c LOAD 0116
010e ADD 0116
0110 STORE 0116
0112 JUMP 0104
0114 #2
0116 #0
0118 #1
011a STOP

Darstellung in Hochsprache

y = 1;
while (x!=0) {
x = x - 1;
y = y + y;
}
d.h. y = 2x

 Das Programmstück berechnet 2x

3.3.4 Unterteilung von Prozessoren nach Befehlsumfang


Je nach dem Umfang der unterstützten Maschinenbefehle kann zwischen CISC-
und RISC Prozessoren unterschieden werden.

CISC ("Complex Instruction Set Computers")

ca. 300-400 verschiedene Maschinenbefehle; Erledigung komplexer Operationen


durch einen Maschinenbefehl. Für die Ausführung eines Maschinenbefehls sind
u.U. jedoch mehrere Maschinentakte notwendig.

 Länge der Befehle variieren

27
Johann Schlichter, TU München 3.4. BEFEHLSZYKLUS

 Realisierung von Pipelining ist komplexer


 Statistiken haben ergeben, dass Maschinenprogramme in den meisten
Fällen (>90%) nur einen kleinen Teil des Befehlssatzes verwenden.
 Beispiel: Intel Pentium

RISC ("Reduced Instruction Set Computers")

wenige einfache Befehle (ca. 100), die möglichst in einem Maschinentakt erledigt
werden; Load-and-Store Archtektur; feste Befehlslänge; viele Mehrzweckregister
 Erleichtert das Pipelining von Befehlen, da Operationsteils für alle Befehle
gleich lang ist, und damit sofort identifizierbar ist
 Beispiele: Sun Sparc, PowerPC
 In der Zwischenzeit wächst der Befehlsumfang wieder und nähert sich bei
einigen RISC Architekturen der Anzahl 200.

3.4 Befehlszyklus
Für die Ausführung eines Maschinenbefehls durchläuft der Hauptprozessor
immer wieder ein festes Schema von Schritten, das der Bereitstellung des Befehls,
dem Bereitstellen seiner Operanden, seiner Entschlüsselung und schließlich seiner
Ausführung dient. Dieses Schema wird Befehlszyklus genannt.

3.4.1 Sequentielle Bearbeitung

Befehl holen

Befehl decodieren

Befehl ausführen

STOP?

28
Johann Schlichter, TU München 3.5. SCHALTNETZE UND SCHALTWERKE

3.4.2 Fließband Bearbeitung (Pipelining)


Eine Pipeline ist eine Warteschlange, in der sich die als nächstes abzuarbeitenden
Maschinenbefehle befinden. Jeder Befehl besteht aus einer Reihe von Phasen.
Während noch die letzten Phasen der vorderen Befehle in der Pipeline
abgearbeitet werden, kann bereits mit den ersten Phasen der hinteren Befehle
begonnen werden, d.h. es ergibt sich eine quasi-parallele Ausführung mehrerer
Maschinenbefehle.

Befehl Befehl Befehl


Zeit holen decodieren ausführen

Befehl 1

Befehl 2 Befehl 1

Befehl 3 Befehl 3 Befehl 1

3.5 Schaltnetze und Schaltwerke


Der Zentralprozessor und alle anderen Komponenten in Rechnern sind durch inte-
grierte Schaltkreise realisiert. Bei diesen handelt es sich um komplexe Schaltnetze
und Schaltwerke, welche mit Transistoren und einfachen Bauelementen wie Kon-
densatoren realisiert sind.

 Logikelemente
Die komplexen Schaltnetze kann man in einzelne Logikelemente zerlegen,
die jeweils eine logische Grundfunktion (UND-, ODER-, NICHT-
Verknüpfung) mit elementaren Schaltungen wie Transistoren realisieren.

 (Halb)Addierer aus Logikelementen

29
Johann Schlichter, TU München 3.6. EIN-/AUSGABEGERÄTE

A B

UND Nicht ODER


(NOR)

Nicht ODER
(NOR)

Ü S

– Schaltfunktion des Halbaddierers


A 0 0 1 1
B 0 1 0 1
S 0 1 1 0
Ü 0 0 0 1

 Aktuelle Chips haben etwa 10 Mio Transistoren (PentiumPro: 5,5 Mio;


ADM K7 Athlon: 22 Mio)

3.6 Ein-/Ausgabegeräte
3.6.1 Eingabegeräte
Eingabegeräte dienen allgemein der Eingabe von Daten, Befehlen und Program-
men in Rechenanlagen. Ein immer wichtiger werdender Aspekt ist dabei die In-
teraktion mit laufenden Programmen.

Technische Formen

Technische Formen

 Tastatur
 Lichtgriffel, "Touch Screen", Trackball, Maus, etc.

30
Johann Schlichter, TU München 3.6. EIN-/AUSGABEGERÄTE

 Lochkartenleser und Lochstreifenleser

 Scanner

 Optische und magnetische Belegabtaster und -leser

 Smartcard-Leser

 Mikrophone

 "Eye-Tracking"-System

 Eingabe über externe Speichergeräte

 Sensoren und Messgeräte mit Analog-/Digitalwandlern

3.6.2 Ausgabegeräte
Ausgabegeräte dienen zur Ausgabe von Daten für den menschlichen Benutzer, zur
Aufbewahrung auf externen Speichermedien oder für die direkte Steuerung von
Prozessen durch Steuersignale.

Geräte und Techniken

Geräte und Techniken

 Bildschirme

 Drucker (Matrixdrucker, Zeichendrucker, Zeilendrucker, Tintenstrahl-


drucker, Laserdrucker)

 Plotter

 Ausgabe auf externe Speichermedien

 Digital-/Analogwandler und Steuergeräte

3.6.3 Datenübertragungsgeräte
Eine besondere Form der Ein-/Ausgabe besteht in der direkten Übermittlung von
Daten von einem Rechner an einen anderen. Zur Übertragung von Daten benötigt
technische Geräte.

31
Johann Schlichter, TU München 3.6. EIN-/AUSGABEGERÄTE

 Modems (Modulatoren für die Umwandlung von analogen in digitale


Signale und umgekehrt)

 Zugriffskarten (Erlauben Zugriff auf


ein bestimmtes Leitungs-/Netzmedium, z.B. ! Ethernet (siehe Seite 99),
ISDN)

3.6.4 Speichermedien
Übersicht

Es gibt eine breite Palette von Möglichkeiten, Daten außerhalb des Arbeitsspei-
chers zu speichern.

 Magnetische Datenträger (Magnet-Bänder, Disketten, Festplatten)

 Optische Datenträger (Mikrofilm, Speicherplatten (CD’s), DVD (Digital


Versatile Disk))

 Elektronische Datenträger (Chip-Karten, Smart Cards)

Festplatten

 Strukturierung einer Festplatte

Spur

Sektor

– Spuren (konzentrische Kreise), ihnen entspricht jeweils eine Stellung


des Schreib-Lese-Kopfes
– Zwei Speicherflächen (Ober- und Unterseite einer Platte)

32
Johann Schlichter, TU München 3.6. EIN-/AUSGABEGERÄTE

– Sektoren (Abschnitte auf Spuren)

 Die Zugriffszeit auf einen Block eines Sektors setzt sich aus folgenden
Anteilen zusammen:

– Positionierzeit: Die Zeit, die vergeht, bis der Arm mit dem Schreib-
Lese-Kopf von der aktuellen Position auf die gewünschte Spur bewegt
wurde.
– Latenzzeit: Die Zeit, die nach der Positionierung noch gewartet
werden muß, bis der gewünschte Sektor am Schreib-Lese-Kopf ist.
Im Mittel muss die halbe Umdrehungszeit abgewartet werden.
– Transferzeit: Die Zeit, die für die Übertragung der Daten von der
Festplatte zur CPU (bzw. Arbeitsspeicher) notwendig ist.

Kenndaten

 Typische Kenndaten einiger Speichermedien

– Magnetbänder (z.B. DAT Bänder)


 Kapazität/Spule: mehrere GB
 Datenrate: 0.1 - 1 MB/sec
– Festplatten
 Kapazität: 1 - 100 GB
 Zugriffszeit: 5 msec
 Datenrate: 3 - 10 MB/sec
– Disketten
 Kapazität: 64 kB - 2 MB
 Zugriffszeit: 50 - 200 msec
 Datenrate: 50 - 500 kB/sec
– Optische Platten
 Kapazität: 100MB - 5GB
 Zugriffszeit: 150 msec
 Datenrate: 1 MB/sec
– Arbeitsspeicher
 Kapazität: 1 MB - 10 GB
 Zugriffszeit: 50 nanosec
 Datenrate: 500 MB/sec

33
Kapitel 4

Systemsoftware

Ohne Programme ist die Hardware nicht arbeitsfähig. Bei den Programmen wer-
den zwei Klassen unterschieden: Systemprogramme und Anwendungsprogram-
me. Die Systemeprogramme, insbesondere das Betriebssystem, stellen dem Be-
nutzer und Anwendungsprogrammen elementare Dienste zur Verfügung.

 Fragestellungen des Abschnitts:

– Was sind die Aufgaben eines Betriebssystems?


– Welche Dienste bietet ein Betriebssystem zur Arbeit mit Massenspei-
chern?
– Was sind Prozesse (im Gegensatz zu Programmen)?
– Wie wird der Arbeitsspeicher verwaltet?

4.1 Einführung
Betriebssysteme verwalten (knappe) Ressourcen eines Rechners und schirmen
Anwendungsprogramme von den genauen Eigenschaften der Hardware ab. Bei-
spiele dafür sind die Ausführung mehrerer Programme mit einem Zentralprozes-
sor (CPU), die Zuweisung von Speicher an die Programme und die transparente
Verwaltung verschiedener Drucker und Massenspeicher.

34
Johann Schlichter, TU München 4.1. EINFÜHRUNG

4.1.1 Aufgaben des Betriebssystems


Sichten

1. Abschirmung von der Komplexität und den genauen Eigenschaften der


Hardware. Das Betriebssystem ist eine virtuelle Maschine, die für den
Anwendungsprogrammierer einfacher zu programmieren ist als die darunter
liegende Hardware.

2. Das Betriebssystem ist ein ’Betriebsmittelverwalter’. Es steuert alle inter-


nen Abläufe (Prozesse) im Rechner, stellt Dienste für den Mehrbenutzer-
betrieb zur Verfügung und koordiniert die Betriebsmittel des Rechners (Ar-
beitsspeicher, Platte, Terminal, Drucker, ...).

Aufgaben

1. Startet und beendet Rechnerbetrieb

2. Lädt Programme, startet und beendet sie

3. Verwaltet Hauptspeicher für gleichzeitige Nutzung durch mehrere Program-


me

4. Steuert Prozessorzuteilung im Falle eines Mehrprogrammbetriebs

5. Stellt Grunddienste für Transport von Daten zwischen Hauptspeicher und


E/A-Geräten

6. Verwaltet Dateien auf externem Speicher

7. Prüft Zugangsberechtigung von Benutzern

8. Sammelt Daten für Nutzungsabrechnung und Leistungsoptimierung

Beispielabläufe

 Der Benutzer schreibt einen Text in einem Textverarbeitungsprogramm,


hört zur selben Zeit Musik (über den Computer) und druckt eine Tabelle aus
einer Tabellenkalkulation aus. Am Rechnersystem werden zur selben Zeit
mehrere Geräte genutzt und der Anwender erwartet, dass alles einwandfrei
funktioniert. Die Steuerung aller Abläufe ist eine der Aufgaben des
Betriebssystems.

35
Johann Schlichter, TU München 4.1. EINFÜHRUNG

 Nun möchte der Anwender den Text ausdrucken, obwohl der Ausdruck der
Tabelle noch nicht beendet ist. Das Betriebssystem muß hier sicherstellen,
dass erst die Tabelle zu Ende gedruckt wird, und dann der Text.

4.1.2 Hardware-Software Struktur

Benutzer/Anwender

Anwendungssoftware

graphische Benutzerschnittstelle Dienstprogramme


Betriebssystem

Hardware

 Das Betriebssystem besteht aus folgenden Komponenten

– Dienstprogramme: machen Betriebssystemfunktionen und -Parameter


dem Benutzer direkt zugänglich
– Hardware-unabhängiger Teil
– Hardware-abhängiger Teil mit Treiberprogrammen (z.B. Druckertrei-
ber, Graphikkartentreiber)
– (Graphische Benutzerschnittstelle: stellt Anwendungsprogrammen
und Dienstprogrammen des Betriebssystems Dienste zur Interaktion
mit dem Benutzer zur Verfügung) - nicht Teil des engeren Betriebssy-
stems

 Das Betriebssystem ist üblicherweise auf der Festplatte gespeichert.


Zum Laden des Betriebssystems von der Festplatte muss ein Basis
Ein/Ausgabesystem (BIOS) existieren, um die Festplatte anzusprechen.

36
Johann Schlichter, TU München 4.1. EINFÜHRUNG

4.1.3 Betriebssystemen versus Benutzeroberflächen


Abgrenzung zwischen Betriebssystemen und (graphischen) Benutzeroberflächen

Betriebssystem

 ist ein Programm, das dem Benutzer und Anwendungsprogrammen


elementare Dienste zur Verfügung stellt

 abstrakte Schnittstelle zur Hardware (d.h. Betriebssystem abstrahiert die


Eigenschaften der Hardware)

 Verwaltung der Resourcen des Rechners (Arbeitsspeicher, Zugriff auf E/A-


Geräte, Zentralprozessor)

Graphische Benutzeroberfläche / Fenstersystem

 Bereitstellung einer komfortablen Schnittstelle zur Bedienung von Anwen-


dungsprogrammen und zum Aufruf von Betriebssystemdiensten (Dienste,
welche die Anwendungsprogramme und Dienstprogramme des Betriebssy-
stems nutzen können)

 Bildliche Umsetzung von Betriebssystemdiensten (z.B. Mülleimer, Ver-


schieben mit der Maus)

 Desktop-Metapher (Nachbildung eines Schreibtisches)

4.1.4 Wesentliche Komponenten eines Betriebssystems


 Dateiverwaltung: Transparente Verfügbarmachung von externen Speicher-
medien

 Prozessverwaltung: Aufteilung des Zentralprozessors auf mehrere gleich-


zeitig laufende Aufgaben.

 Speicherverwaltung: Aufteilung des Arbeitsspeichers auf mehrere gleich-


zeitig laufende Aufgaben (Programme)

 Ein/Ausgabegeräte-Verwaltung: Abstraktion der Geräteeigenschaften und


Behandlung konkurrierender Zugriffe

37
Johann Schlichter, TU München 4.2. DATEIVERWALTUNG

4.1.5 Aktuelle Betriebssysteme


 DOS / Windows für Arbeitsplatzrechner/Clients und Arbeitsgruppen-Server

 Unix (Linux, Solaris, HPUX, Irix, ...) für Server (insbes. Web-Server) und
Arbeitsplatzrechner

 MVS (IBM) für Großrechner/Server

 BS2000 (Siemens) für Großrechner/Server

4.2 Dateiverwaltung
Ein Beispiel für die Aufgaben des Betriebssystems ist die Verfügbarmachung
von externen Speichermedien für die laufenden Programme. Damit die
Anwendungsprogrammierer und Benutzer nicht mit Sektoren usw. umgehen
müssen, werden die Speichermedien in Dateien organisiert.

 Dateien haben einen Namen, einen Inhalt und eine Menge von Attributen
(z.B. Zugriffsrechte, Länge, Erzeugungs-/Modifikationszeit)

 Der Inhalt einer Datei ist eine Folge von Bytes, die von einem Programm
interpretiert werden, z.B. als Text, als Zahlen, als Bild oder als Folge von
Maschinenbefehlen

 Typische Operationen mit Dateien sind: Lesen, Schreiben, Ändern


(Editieren), Kopieren, Ändern des Dateinamens, Ändern der Dateiattribute

 Dateisysteme

1. erlauben das Ansprechen von Dateien durch logische Namen (anstatt


durch physikalische Adressen auf der Festplatte).
2. erlauben Verwaltung von Dateien (create, delete, open, close, read,
write, append, copy, move)
3. gruppieren Dateien in Verzeichnissen (Directories); hierarchisches
(baumartiges) Dateisystem, z.B. Windows

38
Johann Schlichter, TU München 4.2. DATEIVERWALTUNG

C: (Wurzel)

Programme Dokumente

Illustrator Photoshop Briefe Quellcode

1999 2000
4. erlauben Spezifikation und Durchsetzung von Zugriffsschutz (z.B.
Einrichtung von Benutzergruppen)
5. Dateien werden verschiedene Informationen zugeordnet, z.B. Name,
Größe, Typ

Name Größe Typ Geändert Attribute


am
progamme Dateiordner 03.07.00
13:31
RN.zip 954 KB WinZip Fi- 24.04.00 A
le 10:01
Recycler Dateiordner 28.11.99 HS
11:29
CColorSD 1 KB Datei 30.10.00 HA
18:33

S Systemdatei
H versteckte Datei (Hidden)
R schreibgeschützte Datei
A zu archivierende Datei

 Physikalische Datei-Speicherung

– Eine Datei wird als eine Folge von Blöcken gespeichert. Jeder Block
besteht wiederum aus einer Folge von Bytes. Die Größe der Blöcke
ist abhängig von dem jeweiligen Datei-/Betriebssystem.

39
Johann Schlichter, TU München 4.3. PROZESSORVERWALTUNG / PROZESSORZUTEILUNG

01000110100101001110101111011000110101001011010111
gesamte Platte
Partition 1 Partition 2 Partition 3

primärer und
sekundärer Wurzelverzeichnis
Bootsektor

FAT

Dateiallokationstabelle Datenblöcke

– Die read-Zugriffsmethode des Betriebssystems liefert dem aufrufen-


den Programm logische Sätze beliebiger Länge. Zwischen Datei- und
Arbeitsspeicher werden aber immer nur physikalische Sätze (Blöcke)
übertragen.
– Bei Festplatten werden Blöcke in den Sektoren gespeichert.
– File Allocation Table (FAT)
Ein zentraler Bereich der Festplatte wird benutzt um die Zuordnung
von Dateien zu Blöcken und die Zustand von Blöcken (belegt oder
nicht belegt) zu speichert. Bei DOS ist dies z.B. der FAT (File
Allocation Table), bei Unix der Superblock eines Filesystems.

FAT
0
1
2 3
3 4
4 -1 Datei A: 2-3-4
5 6
6 8 Datei B: 5 - 6 - 8 - 9 - ...
7 -2
8 9
9

4.3 Prozessorverwaltung / Prozessorzuteilung


Aufgabe der Prozessverwaltung ist die Koordination mehrerer gleichzeitig
laufender Programme.

40
Johann Schlichter, TU München 4.3. PROZESSORVERWALTUNG / PROZESSORZUTEILUNG

4.3.1 Prozesse
Ein Prozess ("process, task") ist ein Ablauf eines Programms, der von dem
Betriebssystem verwaltet wird. Der Ablauf ist bestimmt durch die Befehle und
Daten des Programms.

Eigenschaften

 "Programm in Ausführung" (Folge von Maschinenbefehlen eines Pro-


gramms die gerade durch den Prozessor (CPU) ausgeführt wird)

 hat einen Zustand und wird durch einen Kontext beschrieben (Prozesskon-
trollblock)

 Verwaltungseinheit des Betriebssystems.

 Operiert in einem "eigenen" Teil des Arbeitsspeichers (Prozessadressraum)

 Konkurriert mit anderen Prozessen um Betriebsmittel (z.B. Arbeitsspeicher,


Prozessor, Zugriff auf Festplatte)

 Kommuniziert mit anderen Prozessen über Nachrichten.

 Unterscheidung zwischen

– Benutzerprozessen: vom Benutzer gestartete Programme


– Systemprozessen: erbringen System-Dienste des Betriebsystems,
beispielsweise Drucken.

Zustände eines Prozesses

Im Zustand "laufend" ist dem Prozess die CPU zugeteilt, d.h. er kann Befehle
ausführen. Der Zustand "wartend" tritt ein, wenn der Prozess auf das Ende
der E/A-Übertragung wartet, d.h. während dieser Zeit kann ein anderer Prozess
rechnen.

41
Johann Schlichter, TU München 4.3. PROZESSORVERWALTUNG / PROZESSORZUTEILUNG

laufend
(running)
zuteilen
entziehen
(dispatch)
(interrupt)
bereit anhalten
(ready) (block)

wartend
melden (waiting)
(wake up)

 Nur das "Anhalten" liegt in der Zuständigkeit der Prozesse selbst.


Die anderen Übergänge werden von Betriebssystemkomponenten bewirkt
(Dispatcher, Scheduler).

 Das Betriebssystem verwaltet Listen der Prozesse im Zustand "bereit" oder


"wartend".

 In jedem Zustand kann der Prozess gelöscht, und damit aus dem System
entfernt werden.

4.3.2 Prozessorzuteilung
Laufenden Prozessen ist der Prozessor als exklusives Betriebsmittel zugeteilt.
Bei einem Zeitmultiplexverfahren erhält der Prozess für eine gewisse Zeit den
Prozessor zur Ausführung. Nach Ablauf der Zeitscheibe wird dem Prozess der
Prozessor wieder entzogen.

Swap In Swap Out


Suspendierte Prozesse

starten Warteschlange(n) CPU


rechenbereiter Prozesse zuteilen
(dispatch)

E/A E/A-Warteschlangen

42
Johann Schlichter, TU München 4.3. PROZESSORVERWALTUNG / PROZESSORZUTEILUNG

 In den E/A-Warteschlangen werden alle diejenigen Prozesse eingereiht, die


momentan auf Ein-/Ausgabe warten, d.h. bis das E/A-Gerät fertig ist.
Während dieser Zeit können die Prozesse nicht rechnen und würden die
CPU blockieren, falls sie die CPU zugeteilt bekommen würden. Damit
alle Prozesse einen vernünftigen Anteil an der CPU-Nutzung bekommen,
müssen langrechnende Prozesse gelegentlich suspendiert werden, damit
auch andere Prozesse eine Chance bekommen => Auslagern von Prozesse
auf die Festplatte (Swap-In und Swap-Out)

4.3.3 Prozess-Unterbrechungen (interrupt)


Unterbrechungen dienen dazu, die Prozessausführung aufgrund von Ereignissen
zu stoppen und gegebenenfalls nach Durchführung einer Ereignisbehandlung
fortzusetzen. Beispiele: Rückmeldung eines E/A-Gerätes, Auftreten eines Alarms
(z.B. Division durch 0), Ende einer Zeitscheibe (Taktgeber).

 Unterbrechungen werden durch Hardware generiert (nur im Sonderfall


abhängig von laufendem Prozess, z.B. Division durch 0)

 Ablauf der Unterbrechungsbehandlung

1. Während Prozess A rechnet, tritt eine Unterbrechung auf.


2. Der Prozessor setzt seine Programmausführung im Betriebssystem fort
(Unterbrechungsbehandlung)
3. Der Zustand von Prozess A wird in den Prozess-Kontrollblock
gespeichert
4. Die Unterbrechungsbehandlung wird ausgeführt (falls nötig)
5. Ein neuer (rechenbereiter) Prozess B wird ausgewählt (vom Dispat-
cher)
6. Der Zustand von Prozess B wird geladen
7. Die Bearbeitung von Prozess B wird fortgesetzt (Sprung in den
Programmcode von B)

 Unterbrechungsverarbeitung
Der Interrupt-Handler (Unterbrechungsbehandlungsroutine) identifiziert
den Typ der Unterbrechung und wählt Programm zur Behandlung aus.

43
Johann Schlichter, TU München 4.4. ARBEITSSPEICHERVERWALTUNG

4.4 Arbeitsspeicherverwaltung
Jedem Prozess muß zum Ablauf ein Bereich des Arbeitsspeichers zur Verfügung
gestellt werden.

4.4.1 Linearer Ansatz


Der gesamte Prozess wird in einen zusammenhängenden Teil des Arbeitsspeichers
eingelagert; Zuteilung eines nicht unterbrochenen Teiles des Arbeitsspeicher

Arbeitsspeicher Arbeitsspeicher

nutzbarer
Speicher

Prozess C
Prozess C

Prozess A Prozess A

Prozess B Prozess B

vor der Kompaktifizierung nach der Kompaktifizierung

 Rein statistische Verwaltung führt zu Fragmentierung.


 Kompaktifizierung (Defragmentierung) in gewissen Zeitabständen notwen-
dig
 Enge Kopplung von Arbeitsspeicheradressen an Prozessadressen; Prozess-
adressen sind Adressen des gerade laufenden Programms; Prozessadressen
beziehen sich auf Anweisungen innerhalb des Programms.
 Maximaler Speicherplatz eines einzelnen Prozesses sowie maximale
Anzahl parallel ausführbarer Prozesse ist beschränkt auf die Größe des
vorhandenen Arbeitsspeichers.

44
Johann Schlichter, TU München 4.4. ARBEITSSPEICHERVERWALTUNG

4.4.2 Virtueller Speicher


Mechanismus, der Arbeitsspeicheradressen von Prozessadressen entkoppelt

 Bei virtueller Adressierung darf jeder Prozess alle Adressen (von 0 bis
...FFFF) verwenden. D.h. die Beschränkung des adressierbaren Arbeits-
speichers ergibt sich durch die Größe des Adressteils von Maschinenbefeh-
len; z.B. bei 32 Bit Adressen ist ein Adressraum von 4 GB möglich, auch
wenn der physikalische Arbeitsspeicher erheblich kleiner ist.

 Jeder Prozess hat seinen eigenen virtuellen Adressraum.


 Keine "externe Fragmentierung" mehr, da künstlich zusammenhängende
virtuelle Adressräume.

 Abbildung: virtueller Speicher auf realen Arbeitsspeicher

Realer
Virtueller Speicher
Arbeitsspeicher
100
5 101
6 102
7 103
8 104
9 105
10 106
107
108
Abbildungstabelle 109
110

 Dynamische Umrechnung der Adressen im virtuellen Speicher des


Prozesses in Adressen im Realspeicher (schnelle Hardware erforderlich).
 Aufspaltung des Speichers in Blöcke von 2n Bytes (gebräuchlich sind:
1KB, 2KB, 4KB mit 1KB = 1024 Bytes)

 Blöcke im virtuellen Speicher heissen "Seiten", Blöcke im realen Speicher


heissen "Kacheln". Die Zuordnungstabelle wird Seitentabelle (Seiten-
Kachel-Tabelle) genannt.

 Seitengröße und Kachelgröße sind immer identisch. Die Größe wird vom
Betriebssystem vorgegeben. Die Seitentabelle ist prozessspezifisch.

45
Johann Schlichter, TU München 4.4. ARBEITSSPEICHERVERWALTUNG

4.4.3 Seitenwechsel (Paging)


Da der virtuelle Speicher größer als der dem Prozess verfügbare Arbeitsspeicher
sein kann, kann es passieren, dass eine Seite momentan im Arbeitsspeicher nicht
verfügbar ist, d.h. sie ist auf die Festplatte ausgelagert. In diesem Fall muß ein
Betriebssystemdienst angestoßen werden, der die Seite von der Festplatte liest und
sie in eine freie Kachel kopiert.

Betriebssystem
(1) Referenz
Seitentransportfunktion
(3) Seite in
Hintergrundspeicher
(2) Seitefehltalarm

Seitentabelle externe
(5) Erneuere
Tabelleneintrag Seitentabelle
100
101
102
(4) Lade Seite in
103 freie Kachel
104
105
106 Festplatte
realer
Arbeitsspeicher

 Falls beim Laden einer neuen Seite keine freie Kachel existiert, muss eine
Seite ausgewählt werden, die momentan nicht benötigt wird, und auf den
Hintergrundspeicher ausgelagert werden. Zur Auswahl der auszulagernden
Seite ist eine Seitenverdrängungsstrategie notwendig.

– FIFO: First In First Out (Ausladen der Seite, die sich am längsten im
Speicher befindet)
– LRU: Least Recently Used (Seite, die am längsten nicht mehr benutzt
worden ist)

46
Johann Schlichter, TU München 4.5. NEBENLÄUFIGKEIT

4.5 Nebenläufigkeit
Greifen Prozesse, die gleichzeitig ablaufen, auf gemeinsame Variablen zu, dann
nennt man sie nebenläufig ("concurrency"); nebenläufige Prozesse beeinflussen
sich gegenseitig.

 P1 und P2 sind nebenläufige Prozesse. Die Variable konto ist gemeinsame


Variable.

 Z sei ein Zeitpunkt nach Ausführung von A und B. Welchen Wert hat x zum
Zeitpunkt Z?

 Mögliche Abläufe
Das Ergebnis ist vom zeitlichen Ablauf abhängig. Es sind folgende Fälle
möglich:

1. P1 liest konto=0, erhöht, speichert konto = 1; P2 liest konto=1, erhöht,


speichert konto = 3; Ergebnis ist konto = 3
2. P2 liest konto=0, erhöht, speichert konto = 2; P1 liest konto=2, erhöht,
speichert konto = 3; Ergebnis ist konto = 3
3. P1 und P2 lesen konto=0; P1 erhöht, speichert konto = 1; P2 erhöht,
speichert konto = 2; Ergebnis ist konto = 2
4. P1 und P2 lesen konto=0; P2 erhöht, speichert konto = 2; P1 erhöht,
speichert konto = 1; Ergebnis ist konto = 1.

 Verhinderung des Nichtdeterminismus ist nur dadurch möglich, dass man


garantiert, dass die Veränderung von konto in den beiden Prozessen unter
gegenseitigem Ausschluss (mutual exclusion) erfolgt, d.h. die Prozesse
führen die Veränderung von konto hintereinander aus.

 Synchronisation der Prozesse


Der Zugriff auf gemeinsame Ressourcen, beispielsweise auf gemeinsame
Variablen (Drucker, Dateien, etc), muss koordiniert (synonym: synchroni-
siert) werden. Bei Zugriff auf gemeinsame Variable (die zu einem Zeit-
punkt jeweils exklusiv benutzt werden) wird die Nutzung sequentialisiert.
Die gemeinsame Variable wird in einem kritischen Bereich (critical region)
benutzt.

47
Johann Schlichter, TU München 4.5. NEBENLÄUFIGKEIT

P1:
....
region konto do
konto = konto + 1;
endregion
....
P2:
....
region konto do
konto = konto + 2;
endregion
....
 Koordinationsvariable
Eine Koordinationsvariable (Semaphor) sx, die einer gemeinsamen Res-
source x zugeordnet ist, gibt an, ob der kritische Bereich bezüglich x frei
oder belegt ist. Die Koordinationsvariable ist wiederum eine gemeinsame
Variable.

– Spezielle Operationen
P (sx: semaphor); // belegen der gemeinsamen Ressource
falls (sx = belegt) dann warte; sonst sonst sx :=
belegt;
V (sx: semaphor); // freigeben der gemeinsamen Ressource
sx := frei;
 Beispiel
P1:
sx: semaphore
....
P(sx)
konto = konto + 1;
V(sx)
....
P2:
sx: semaphore
....
P(sx)
konto = konto + 2;
V(sx)
....

48
Kapitel 5

Grundlagen der Programmierung

In diesem Kapitel wird kurz in die "Kunst des Programmierens" eingeführt. Dazu
werden die grundlegenden Aspekte hinsichtlich Datenstrukturen, Programmkon-
strukte sowie Strukturierung von Programmen behandelt.

 Fragestellungen des Abschnitts:

– Was ist ein Algorithmus?


– Welche elementaren Datenstrukturen gibt es?
– Was sind die grundlegenden Konstrukte einer Programmiersprache?
– Was versteht man unter Modularisierung und Rekursion?
– Was ist unter Objekt-orientierter Programmierung zu verstehen?

5.1 Einführung
Programmierung = Vorgang, in dem Anweisungen für den Computer erstellt
werden. Diese Anweisungen werden in Sprachen geschrieben, welche Menschen
verstehen können und werden für den Computer in Maschinensprache übersetzt
oder vom Computer mit Hilfe eines speziellen Interpreterprogramms interpretiert.

5.1.1 Sicht des Programmierers


Aus der Sicht eines Programmierers ergibt sich folgender Ablauf:

49
Johann Schlichter, TU München 5.2. ALGORITHMUS

Übersetzen
Maschinen-
Quellprogramm
programm

Starten
Erstellen

Ausgaben Prozess Eingaben

 Quellprogramm
Quellprogramm ist die Ausgangsform des Programms, z.B. in der
Programmiersprache C

 Übersetzen (Compiler)
zum Erzeugen eines ausführbaren Objektcodes (Maschinenprogramm)

 Objektcode
Objektcode ist die Interndarstellung des Programms, die für den Computer
verständlich ist, d.h. das ausführbare Programm (Maschinencode). Mit ei-
nem sogenannten "Linker" kann der Objektcode aus mehreren Einzelteilen
zusammengesetzt werden: Ausgangspunkt ist ein Quellprogramm, das in
mehreren unterschiedlichen Dateien abgespeichert ist.

 Starten
zum Ausführen eines Objektcodes.

 Prozess
Prozess ist die Ausführung eines Objektcodes; hier werden durch das
Betriebssystem zusätzliche Daten dynamisch erzeugt, z.B. Seitentabelle.

5.2 Algorithmus
Bevor man anfängt ein Programm, also eine Vorschrift zur Lösung einer Aufgabe,
zu schreiben, muss man zuerst das zu lösende Problem genau beschreiben, d.h.
spezifizieren.

50
Johann Schlichter, TU München 5.2. ALGORITHMUS

5.2.1 Spezifikation als Ausgangspunkt für ein Programm


Eine Spezifikation ist eine vollständige, detaillierte und unzweideutige Problem-
beschreibung

 vollständig: alle relevanten Informationen sind berücksichtigt

 detailliert: alle Hilfsmittel und Grundaktionen sind aufgelistet, die zur


Lösung zugelassen sind

 unzweideutig: Festlegung von klaren Kriterien, wann eine Lösung


akzeptabel ist

5.2.2 Begriff des Algorithmus


Nach der Spezifikation eines Problems geht es anschließend darum, einen
Lösungsweg zu entwerfen. Da die Lösung i.a. von einem Rechner ausgeführt
werden soll, muß jeder Schritt exakt vorgeschrieben werden. Dies erfolgt mit
Hilfe eines Algorithmus.

Informelle Charakterisierung eines Algorithmus

Ein Algoritmus ist eine detaillierte und explizite Vorschrift zur schrittweisen
Lösung eines Problems, d.h. eine Vorschrift zur Lösung einer Aufgabe, die

 präzise formuliert,

 in endlicher Form dargestellt und

 effektiv ausführbar ist.

Die Aufgabe kann aus vielen Anwendungsgebieten stammen, z.B. Berechnung


numerischer Werte, Text- und Bildverarbeitung, Handhabung von Objekten
(Robotik), Zuteilung von Ressourcen, Steuerung von Geräten.

Formale Definition (nach H. Kübe):

Ein Algorithmus ist eine in der Beschreibung und Ausführung endliche,


deterministische und effektive Vorschrift zur Lösung eines Problems, die effizient
sein sollte.

51
Johann Schlichter, TU München 5.2. ALGORITHMUS

 Hierin bedeuten:

– endlich: nach einer endlichen Zeit wird der Algorithmus beendet


– deterministisch: eindeutige Bestimmung des nächsten Schrittes
– effektiv: eindeutige Ausführbarkeit der Einzelschritte
– effizient: möglichst geringer Verbrauch an Ressourcen

Formulierung eines Algorithmus

 Formulierung kann in natürlicher oder formaler Sprache vorliegen


 Die Ausführung kann durch Menschen oder eine Machine erfolgen.
Die Ausführung ist effektiv, wenn sie aus einer Folge von elemantaren
Bearbeitungsschritten besteht, die für den beabsichtigten Ausführenden zur
Verfügung stehen.
 Beispiele für Algorithmen

– Nicht maschinell ausführbares Beispiel


Bestimme das Alter der ältesten Person im Raum
1. Gehe zur ersten Person
2. Frage Person nach dem Alter
3. Merke das Alter
4. Solange noch nicht alle Personen gefragt, wiederhole Schritte 4.a
bis 4.c
 a) gehe zur nächsten Person
 b) frage nach dem Alter
 c) wenn das Alter größer als das gemerkte Alter, dann merke
Dir das neue Alter
5. Älteste Person ist "gemerktes Alter" alt
– Maschinell ausführbares Beispiel
Bestimme die größte Zahl aus einer Menge von Zahlen
1. Lies die erste Zahl
2. Initialisiere Platzhalter/Variable z mit der gelesenen Zahl
3. Lies die nächste Zahl
4. Wenn diese Zahl größer z, dann setze z auf diese Zahl
5. Wenn noch Zahlen vorhanden, dann gehe zu Schritt 3
6. Gib den Wert von z aus

52
Johann Schlichter, TU München 5.2. ALGORITHMUS

5.2.3 Komponenten eines Algorithmus


 In ihrer allgemeinsten Form bestehen Algorithmen aus:

– Objekten und
– Anweisungen, die Operationen an Objekten realisieren.

Die Operationen bewirken, dass die Objekte von einem ursprünglichen


Zustand (Anfangs- oder Eingangszustand) über eventuell notwendige
Zwischenzustände in einen Endzustand gebracht werden. (EVA-Prinzip:
Eingabe -> Verarbeitung -> Ausgabe)

 Bei der Beschreibung der Objekte und Operationen ist eine Abstraktion
wichtig. Das bedeutet den Übergang von konkreten Gegebenheiten in eine
allgemein gültige Strukturierung der Algorithmen:

– Die Abbildung der realen Objekte auf Daten und der Operationen auf
einen vorgegebenen Vorrat von Anweisungen und Kontrollstrukturen
(z.B. Abbildung einer Menge von Zahlen auf eine Liste mit den
Operationen Einfügen, Löschen, Sortieren und Suchen).

 Einzelschritte eines Algorithmus


Jeder Algorithmus kann soweit in detaillierte Einzelschritte zerlegt
(verfeinert) werden, bis er nur noch aus folgenden Grundstrukturen für die
Operationen besteht:

– Sequenz: Folge von Anweisungen; Anweisungen können zu Blöcken


zusammengefaßt werden
– Alternative: über eine Bedingung gesteuerte Verzweigung,
– Auswahl (Selektion): Verallgemeinerung der Alternative,
– Iteration: Wiederholung einer Menge von Anweisungen.

Damit können alle Algorithmen beschrieben werden.

 Operationen können zu Blöcken zusammengefasst werden. Damit ist


strukturiertes oder systematisches Programmieren möglich. Für jeden
einzelnen Strukturblock ist nur ein Eingang und nur ein Ausgang
notwendig. Die Klammerung von Operationen kann über spezielle
Schlüsselwörter oder auch durch Klammerung erfolgen, z.B. {} in C oder
Java.

53
Johann Schlichter, TU München 5.2. ALGORITHMUS

5.2.4 Darstellung von Algorithmen


Es gibt eine Reihe unterschiedlicher Darstellungsmethoden für Algorithmen: in-
formelle textuelle Beschreibung, programmiersprachliche Beschreibung, graphi-
sche Beschreibung, z.B. Flussdiagramme oder Nassi-Shneiderman.

Flussdiagramm

Beispiel: Größter gemeinsamer Teiler von M und N

x=M

y=N

ja nein
z=X x==y?

ja nein
x>y?

x=x-y y=y-x

x und y sind Variablen/Platzhalter

Programmiersprachliche Darstellung

x = M;
y = N;
while (x != y)
if (x > y) x = x - y;
else y = y - x;
z = x;

54
Johann Schlichter, TU München 5.3. DATENTYPEN UND AUSDRÜCKE

5.2.5 Algorithmus und Programm


 Der Zusammenhang zwischen einem Algorithmus und einem Programm
läßt sich folgendermaßen beschreiben:

– Ein Programm ist die Formulierung eines Algorithmus in einer


Sprache, die der Computer verstehen und abarbeiten kann .
– Aus der Sicht der "Maschine" ist ein Programm eine abgeschlossene
(also endliche) Folge von ausführbaren Anweisungen.
– Damit ist eine Automatisierung des Algorithmus möglich.
– Programmiersprachen sind ein Hilfsmittel zur Abbildung der Daten-
und Kontrollstrukturen des Algorithmus in die Sprachkonstrukte des
betreffenden Computers (Maschinensprache, Hauptspeicher)
– Ausführbare Programme sind die Abbildung der Daten- und Kontroll-
strukturen in die Interndarstellung des betreffenden Computers. Man
spricht hier von Objektcode. Als Interndarstellung wird die Maschi-
nensprache eines Rechners verwendet; die Maschinensprache ist ab-
hängig von dem jeweiligen Hersteller des Prozessors.

 Zeitlicher Zusammenhang zwischen Algorithmus und Programm

Spezifizieren
Programmieren
Algorithmisieren

Problem Algorithmus Quellprogramm

Mensch

Ausgaben Eingaben Maschine

Maschinen-
Prozess
programm

5.3 Datentypen und Ausdrücke


In diesem und dem folgenden Abschnitt betrachten wir die Grundkonstrukte, die
in allen Programmiersprachen Verwendung finden.

55
Johann Schlichter, TU München 5.3. DATENTYPEN UND AUSDRÜCKE

 Informationen werden auf einem Rechner durch Daten repräsentiert. Die


Umsetzung von Daten in Information wird als Interpretation bezeichnet.

 Allgemeine Eigenschaften von Daten:

1. Es existieren Basisdaten wie Zeichen Wahrheitswerte (true, false),


Zahlen (natürliche Zahlen, ganze Zahlen, Gleitkommazahlen)
2. Daten können angeordnet, miteinander in Beziehung gesetzt werden
werden (z.B. hierarchische Datenstrukturen, Listen)
3. Algorithmen hängen in starkem Maße von der gewählten Datenstruk-
tur ab. Durch geeignete Datenstrukturen können Algorithmen über-
sichtlicher und effizienter werden.

 Elementare Datentypen
Ein Datentyp ist die Zusammenfassung von Werten gleicher Art zu einer
Klasse, z.B. alle ganzen Zahlen, alle Gleitkommazahlen, alle Zeichen.

– Basis-Datentypen
 int: alle ganzen Zahlen (im Rechner darstellbar)
 float: Menge der Gleitkommazahlen
 double: Menge der Gleitkommazahlen mit doppelter Genauig-
keit
 char: Menge der Zeichen
– Datentyp Verbund (struct)
Zusammenfassung von zusammengehörigen Daten unterschiedlicher
Typen.
 Beispiel

Vorname Name Adresse Alter


Fritz Müller Hauptstr. 7 38
Hans Albers Bahnhofstr. 4 63
 Programmiersprachliche Darstellung
struct person {
char vorname[30]
char name[30]
char adresse[100]
int alter
}

56
Johann Schlichter, TU München 5.4. PROGRAMMKONSTRUKTE

 Im Gegensatz zu (Verbund-)Datentypen versteht man unter einer


Datenstruktur den Datentyp zusammen mit der Menge von
Operationen, die auf den Werten dieses Datentyps erlaubt sind.
Beispiele für solche Operationen sind Addition und Substraktion
bei ganzen Zahlen sowie Einfügen und Löschen bei Listen.

5.3.1 Ausdrücke
Ausdrücke dienen dazu, Werte von Datentypen zu berechnen. Sie können aus
Konstanten, Variablen und Operationszeichen aufgebaut werden.

Variable

 Mit Namen versehene Speicherzelle für Datenwerte; Variable können


gelesen und geschrieben werden. Im letzten Fall spricht man auch von
Zuweisen eines Wertes an eine Variable.
 Jeder Bezeichner einer Variablen muss i.a. vor seiner ersten Benutzung
deklariert werden, d.h. jede Variable wird einem Datentyp zugeordnet.

Beispiele für Ausdrücke

 2 + 15 * (10 - 6)
 a + b wobei a und b Variable sind

5.4 Programmkonstrukte
Ein Programm besteht aus einer Menge von Anweisungen, die entweder Werte an
Variable zuweisen oder den Kontrollfluss steueren. Der Kontrollfluss bestimmt die
Folge der Anweisungen, die bei einer Programm-ausführung ausgeführt werden.

5.4.1 Zuweisungen
Zuordnung von Werten an Variable

 Eine Variable entspricht einem Bereich im Hauptspeicher, der über einen


symbolischen Namen angesprochen werden kann. Variablen können Daten
beliebiger Datentypen speichern.

57
Johann Schlichter, TU München 5.4. PROGRAMMKONSTRUKTE

 Beispiele
i = 2;
i = i + 2;
x = x * (y + 1);

5.4.2 Alternativanweisungen
Auswahl von Alternativen abhängig von einer Bedingung

 Beispiel 1
if (a > b)
z = a
else
z = b
 Beispiel 2 (Schachteln von Alternativen)
if (a > b) z = a
else if (a < b) z = b
else z = 0
 Neben einfachen Alternativanweisungen gibt es in den meisten Program-
miersprachen noch das verallgemeinerte Konstrukt der Auswahl (switch,
case).

5.4.3 Schleifen
Wiederholte Ausführung von Anweisungen

 Beispiel 1
for (i = 0; i < N; i++) sum = sum * i
 Beispiel 2
while (i > 0) {
sum = sum * i;
i = i - 1;
}
 Neben der while-Schleife gibt es auch noch andere Konstruktionen, wie
z.B. do-while/repeat-until, die die Bedingungen erst am Ende der zu
wiederholenden Anweisung überprüfen.

58
Johann Schlichter, TU München 5.5. MODULARISIERUNG VON PROGRAMMEN

5.5 Modularisierung von Programmen


5.5.1 Allgemeines
Entwurf von Algorithmen

Beim Entwurf von Algorithmen ist folgende generelle Vorgehensweise sinnvoll:

 Spezifikation der Problemstellung

 Bestimmung der Definitionsbereiche und der Datentypen

 Suche nach / Vergleich mit bekannten Algorithmen, eventuell Erweiterung


oder Anpassung der bekannten Algorithmen

 Anwendung von ad-hoc-Lösungsmethoden (mit anschließender Korrektur)

 Zerlegung des Problems in Teilprobleme ("divide and conquer"-


Vorgehensweise); auf jeder Zerlegungsebene Verwendung von

– Sequenz von Schritten


– Fallunterscheidung (Alternativen)
– Iteration von Schritten (Schleifen)

 Wiederhole diese Vorgehensweise für jedes Teilproblem

Schrittweises Verfeinern von Algorithmen

In vielen Fällen ist es schwierig, direkt und adhoc vorzugehen, da der Umfang des
Problems sehr groß ist und damit auch Lösungen sehr schwierig zu spezifizieren
sind. Bei komplexen Problemen ist es oft auch nicht klar, welche zusätzlichen
Aspekte mitberücksichtigt werden müssen.

 Problem: Unüberschaubarkeit bei komplexen Aufgaben

 Lösung: Zuerst in größeren, gröberen Einheiten denken, dann diese


zerlegen

 Beispiel: Entwicklung eines Autos

59
Johann Schlichter, TU München 5.5. MODULARISIERUNG VON PROGRAMMEN

Fahrwerk

Auto Karosse
Motor
Antrieb
Getriebe

 Übertragung dieses Ansatzes auf die Zerlegung von Algorithmen in kleinere


und überschaubarere Einheiten.

Algorithmen-Zerlegung

Teil-
problem 1
Modul2a
komplexes
Problem Teil- Programmzeile 1
problem 2 Modul2b Programmzeile 2
komplexer Programmzeile 3
Algorithmus Teil-Algorithmus 2
Modul2c
Teil-
problem n

5.5.2 Beispiel
Aufgabenstellung: Ermittle zu einem gegebenen Datum nach dem 1.1.1900
(gegeben als Tag im Monat, Monat im Jahr und Jahr AD) den Wochentag.

Aufteilung der Aufgabe in mehrere Teilaufgaben

 Der 31.12.1899 war ein Sonntag

 Ermittle die Zahl der Tage zwischen dem 31.12.1899 und dem gegebenen
Datum

 Dividiere diese Zahl durch 7 und ermittle den Rest der Division

60
Johann Schlichter, TU München 5.5. MODULARISIERUNG VON PROGRAMMEN

 Wenn der Rest 0 ist, dann ist das Datum ein Sonntag, bei Rest 1 ein Montag,
bei Rest 2 ein Dienstag, ...

Teilaufgabe: Ermittlung der Tage seit dem 31.12.1899

 Setze Zähler auf 0

 Addiere für jedes Jahr seit 1900 die Zahl 365 zum Zähler, wenn Jahr ein
Schaltjahr ist, dann addiere zusätzlich 1

 Addiere für jeden vollendeten Monat im aktuellen Jahr die Zahl der Tage im
Monat zum Zähler, wenn Monat Februar und Jahr Schaltjahr, dann addiere
zusätzlich 1

 Addiere die Zahl der vollendeten oder angebrochenen Tage im aktuellen


Monat zum Zähler

Teilaufgabe: Ermittlung ob Schaltjahr

 Wenn nicht durch 4 teilbar, dann nein

 Wenn nicht durch 100 teilbar, dann ja

 Wenn nicht durch 400 teilbar, dann nein, sonst ja

Beispiel für den 24.12.2000

 Zähler = 0

 Gehe von 1900 bis 1999 und addiere jeweils 365 oder 366 = 36524

 Gehe von Januar bis November und addiere 31, 28+1, 31, 30, 31, 30, 31,
31, 30, 31, 30 = 335

 Addiere 24

 Zähler = 36883

 36883/7 = 3269

 Rest der Division ist 0, also ist der 24.12.2000 ein Sonntag

61
Johann Schlichter, TU München 5.5. MODULARISIERUNG VON PROGRAMMEN

5.5.3 Strukturierung von Algorithmen


Zweck der Strukturierung

 Vereinfachung/Verkürzung der Darstellung eines Algorithmus und dadurch


höhere Lesbarkeit

 Ermöglichung der Wiederverwendung von Teilen des Algorithmus in


anderen Kontexten

 Beispielaufgabe
Zeichnen von zwei konzentrischen Quadraten

– Plotterfunktionen
Gegeben sind folgende Plotter-Grundfunktionen:
 Bewege (x): bewege Zeichenstift um Länge x in aktuelle
Zeichenrichtung
 Links (x): drehe Zeichenrichtung um x Grad nach links
 Rechts (x): drehe Zeichenrichtung um x Grad nach rechts
 Stift heben
 Stift senken
– Es existieren die folgenden beiden Teilaufgaben
B

10cm

20cm

 Position auf A; Quadrat 10 cm zeichnen


 Position auf B; Quadrat 20 cm zeichnen
– Definition eines Moduls

62
Johann Schlichter, TU München 5.5. MODULARISIERUNG VON PROGRAMMEN

Kopf Modul Quadratzeichnen(Größe)

Rumpf Stift senken


wiederhole 4-mal
Bewege (Größe)
Links (90)
Stift heben

– Nutzung des Moduls
Links (45)
Bewege (10cm*1/2* sqrt(2))
Links (135)
Quadratzeichnen (10cm)
Rechts (135)
Bewege ((20cm-10cm)*1/2*sqrt(2))
Links (135)
Quadratzeichnen (20cm)
Rechts (180)
B

10cm

20cm

5.5.4 Module
In vielen Programmiersprachen (z.B. C, C++, Java) existieren Funktionen
(Prozeduren) als Mittel zur Strukturierung von Programmen.

 Jede Funktion hat die Form:

63
Johann Schlichter, TU München 5.5. MODULARISIERUNG VON PROGRAMMEN

ergebnistyp funktionsname (parameterliste)


{
Deklarationen der lokalen Variablen;
Anweisungen
}

 Hauptprogramm bestehend aus Teilmodulen

Hauptprogramm Anwendermodule
main() get_name() {
{ ...
/* berechne Gehalt */ readFromFile()
... ...
}

get_name()
... berechne_netto() {
...
berechne_brutto() abzuege()
... ...
}
berechnet_netto()
...
abzuege() {
gib_aus() ...
... }
}

(Betriebs-)Systemmodule
....

5.5.5 Prozedurales / Objektorientieres Programmieren


Häufig wird zwischen prozeduraler Programmierung und objektorientierter
Programmierung unterschieden.

64
Johann Schlichter, TU München 5.6. REKURSION

Prozedurales Programmieren Objektorientiertes Programmieren

Anweisungen Daten
des Programms
Anweisungen
zu den Daten

Objekte

Daten

Anweisungen
Daten
zu den Daten
Daten Anweisungen
zu den Daten

Anweisungen in Anweisungen jeweils


einem großen bei den zugehörigen
Block (getrennt von Daten
den Daten)

 Prozedurales Programmieren
Computer bekommt eine Sequenz von Anweisungen, die er ausführt, dann
wartet er auf nächste Eingabe. Drei Basiselemente: Sequenz, Auswahl (if-
then-else), Iteration. Trennung von Daten und Anweisungen
 Objektorientiertes Programmieren
Nicht Mengen von Anweisungen, sondern Objekte. Ein Objekt hat Attribu-
te, Methoden und Ereignishandler. Zusammenfassung von (zusammenge-
hörigen) Daten und Anweisungen

5.6 Rekursion
Unter Rekursion versteht man eine spezielle Form der Modularisierung, bei der
das zu definierende Modul auch in der Definition selbst benutzt wird.

 Bei bestimmten Algorithmen und Datenstrukturen ist mit Rekursion eine


"natürlichere" Darstellung möglich.

65
Johann Schlichter, TU München 5.6. REKURSION

 Beispiel ’Fibonacci-Zahlen’

– Definition
fib(n) = fib(n-1) * fib(n-2) für n>2
fib(1) = fib(2) = 1
Wertebereich: n>=1, mit n natürliche Zahl
– Algorithmus
fib(n)
Falls n kleiner 3
dann Ergebnis = 1
sonst Ergebnis = fib(n-1) + fib(n-2)
– Ausführungslauf, z.B. fib(3)
fib(4)
- fib(3)
-- fib(2) = 1
-- fib(1) = 1
- fib(3) = 2
- fib(2) = 1
fib(4) = 3

 Beispiel ’Größter gemeinsamer Teiler’


Gegeben seien zwei Zahlen a, b mit a>0 und b>0. Gesucht ist der größte
gemeinsame Teiler ggT(a, b) der beiden Zahlen. Berechnung mit dem
Algorithmus nach Euklid.

– Algorithmus
ggT(a ,b)
Falls a = b, dann Ergebnis = a
falls a < b dann Ergebnis = ggT(a, b-a)
falls a > b dann Ergebnis = ggT(a-b, b)

 Beispiel ’Türme von Hanoi’


Gegeben sind drei senkrechte Stäbe und n Scheiben verschiedener Größe.
Die Aufgabe lautet: Übertrage Turm von Scheiben von einem Stab auf einen
anderen, wobei stets nur eine Scheibe bewegt wird und nie eine größere
Scheibe auf einer kleineren liegt.

66
Johann Schlichter, TU München 5.6. REKURSION

a (Ziel) b (Quelle) c (Zwischenlager)

– Rekursive Lösung für n Scheiben


übertrage n Scheiben von b nach a:
übertrage n-1 Scheiben von b nach c
letzte Scheibe von b nach a
übertrage n-1 Scheiben von c nach a
 Algorithmus
Turmbewege(n, Quelle, Ziel, Zw)
Falls n = 1
dann bewege Scheibe von Quelle nach Ziel
sonst
Turmbewege(n-1, Quelle, Zw, Ziel);
bewege Scheibe von Quelle nach Ziel;
Turmbewege(n-1, Zw, Ziel, Quelle);
– Aufrufschachtelung für n=3
Aufruf Turmbewege (3, b, a, c) führt zu den nachfolgenden
Rekursionen:
 3bac ( 2bca ( 1bac (b->a); b->c; 1acb (a->c) ); b->a; 2cab ( 1cba
(c->b); c-a; 1bac (b->a) ) )
Æ 3bac entspricht dem Aufruf Turmbewege (3, b, a, c)
Æ b -> a entspricht: bewege Scheibe von b nach c

67
Johann Schlichter, TU München 5.7. OBJEKTORIENTIERTE PROGRAMMIERUNG

a (Ziel) b (Quelle) c (Zwischenlager)


– Zahl der Schritte: 2n-1

5.7 Objektorientierte Programmierung


Bei der objektorientierten Programming (z.B. Sprache Java) wird ein Softwaresy-
stem durch eine Menge von Objekten realisiert, im Gegensatz zur prozeduralen
Programmierung (z.B. Sprache C), wo die Anweisungen im Vordergrund stehen.

 Im objektorientierten Programmieren stehen die Daten im Vordergrund.


Daten werden in Objekten zusammengefasst ("Verkapselung"). Die
Funktionen können lokal zu den Objekten definiert werden.

 Die Funktionen werden Methoden genannt.

 Objekt -Klasse

68
Johann Schlichter, TU München 5.7. OBJEKTORIENTIERTE PROGRAMMIERUNG

Ein Objekt ist ein Exemplar (Instanz) eines Gegenstandes oder Begriffs der
Modellwelt; ein Objekt ist möglichst stark an Gegenstand oder Begriff der
realen Welt angelehnt.

– Objekt
Ein Objekt hat
1. eine Identität, z.B. vom Benutzer vergebene Namen.
2. einen Zustand, definiert durch private Daten ("Instanzvariable"),
3. ein Verhalten, spezifiziert durch eine Menge von Operationen
(Methoden), die auf den privaten Daten agieren und Operationen
anderer Objekte aufrufen können;
4. Beziehungen zu anderen Objekten.
– Klasse
Objekte mit gleichem Verhalten werden zu Klassen zusammengefasst.
Ein Objekt "weiß", zu welcher Klasse es gehört.
 Beispiel: Klassendefinition
public class circle {
public double x, y; // Koordinaten der Kreismitte
public double r; //Radius des Kreises
// Konstruktor für die Erzeugung von Objekten
public circle (double x-coord, double y-coord, double
radius)
{x = x-coord; y = y-coord; r = radius;}
// Methoden, die Umfang und die Fläche als Ergebnis
liefern
public double circumference(){return 2 * 3.14159 * r;}
public double area(){return 3.14159 * r * r;}
}

 Erzeugen eines Objekts


Nach der Spezifikation einer Klasse können beliebig viele Objekte für diese
Klasse erzeugt werden => Erzeugen einer Objektinstanz. Jedes Objekt
hat seine eigenen Variablen, während die Methoden gemeinsam benutzt
werden.

– Beispiel

69
Johann Schlichter, TU München 5.7. OBJEKTORIENTIERTE PROGRAMMIERUNG

circle kreis1, kreis2; // Vereinbarung zweier Variable


double flaeche;
kreis1 = new circle(); // Erzeugen des Objekts kreis1
// Initialisieren von kreis1 mit dem Mittelpunkt (2,2) und
dem Radius 1.0
kreis1.x = 2.0
kreis1.y = 2.0
kreis1.r = 1.0
flaeche = kreis1.area();
// Erzeugen des zweiten Kreises
kreis2 = new circle(4.0, -1.0, 10.0);
........
Objekt kreis1
Klasse circle
x hat Wert 2.0
y hat Wert 2.0
Klassenbeschreibung
r hat Wert 1.0

Objekt kreis2 circumference Code


x hat Wert 4.0
y hat Wert -1.0 area Code
r hat Wert 10.0

privater Teil gemeinsamer Teil

 Vererbung
Vererbung ist ein Werkzeug zum Organisieren und Konstruieren von
Klassen, wobei existierende Klassen wiederverwendet werden können;

– Definition - Vererbung
Seien K und Ki, i = 1,..,n Klassen; Vererbung ist eine Beziehung
zwischen K und den Ki, wobei Struktur und Verhalten von K durch
Struktur und Verhalten der Ki bestimmt wird;
 Vererbung definiert eine Beziehung zwischen Klassen; K heißt
Unterklasse (Subklasse) von Ki; Ki nennt man Oberklasse
(Superklasse) von K;
 Vererbung bewirkt, dass Unterklassen über alle Eigenschaften
(Attribute, Operationen und Beziehungen) der Oberklasse verfü-
gen; Vererbung kann über mehrere Stufen einer Hierarchie hin-
weg erfolgen. Vererbung bezieht sich auf Variable und Methoden;

70
Johann Schlichter, TU München 5.8. PROGRAMMIERSPRACHEN

Klasse Klasse Klasse


Fahrzeug Auto BMW

erbt von
erbt von Auto
Fahrzeug
 Unterscheidung zwischen Einfachvererbung und Mehrfachverer-
bung
Æ Einfachvererbung: eine Klasse hat nur eine direkte Oberklas-
se
Æ Mehrfachvererbung: eine Klasse hat mehrere direkte Ober-
klassen
– Beispiel
public class GraphicCircle extends circle {
// Es werden automatisch die Variablen und Methoden der
Klasse circle geerbt;
// nur die neuen Informationen müssen hier aufgeführt
werden.
color outline, fill;
public void draw(Window dw)
{dw.drawCircle(x, y, r, outline, fill;}
}
Objekt Klasse
GraphicCircle Klasse circle

Werte für x, y, r,
Beschreibung Beschreibung
outline und fill

draw circumference

area

5.8 Programmiersprachen
Bereitstellung von höheren Programmiersprachen, wie z.B. C, Java, die die
Erstellung von Programmen erleichtern
 Programme, die in einer höheren Programmiersprache erstellt wurden, müs-
sen in ein entsprechendes Programm einer Maschinensprache tranformiert
werden

71
Johann Schlichter, TU München 5.8. PROGRAMMIERSPRACHEN

 Interpretierer und Übersetzer

– Ein Interpretierer(Interpreter) ist ein Programmiersystem, das Anwei-


sungen schrittweise zergliedert, daraus zustandähnliche Aktionen ab-
leitet und sofort ausführt (es wird jeweils nur eine Programmanwei-
sung betrachtet, und nicht das gesamte Programm; für jede Anweisung
wird dann ein Maschinensprache-Unterprogramm des Interpretierers
aufgerufen, das der Realisierung der Anweisung entspricht).
– Neben Interpretierern gibt es noch sogenannte Übersetzer oder Com-
piler, welche die Anweisungen eines Programms in einem Durchlauf
analysieren und komplett in Maschinensprache umwandeln.
– Vorteile von Interpretierern
 Interpretierer sind einfacher zu realisieren als Übersetzer (Com-
piler)
 Ermöglicht Quellprogramm-bezogenes, inkrementelles Testen
– Nachteile von Interpretierern
 Ineffizient bei einfachen, häufig benutzten Funktionen
 Fehler, die sonst Übersetzer findet, werden erst zur Laufzeit
entdeckt
– Beispiele für Interpretierer(sprachen)
 Basic
 Kommandosprachen von Betriebssystemen, z.B. Shell in DOS
Eingabefenster
 Skriptsprachen (z.B. JavaScript)

 Scriptsprachen
Scriptsprachen ermöglichen dem Endanwender, innerhalb einer Applikati-
on (z.B. Textsystem) zu programmieren.

– Ziele von Scriptprogrammen


 Anpassen der Applikation an eigene Umgebung
 Definition von Macros zur Erleichterung der Eingabe
Æ
Æ
 zur automatische Aktualisierung, z.B. von Felder in einer
Tabellenkalkulation

72
Johann Schlichter, TU München 5.8. PROGRAMMIERSPRACHEN

 zur Einbettung von Funktionen in Web-Seiten


– Funktionen/Programme erstellt mit Hilfe von Scriptsprachen werden
nicht übersetzt, sondern nach dem Programmaufruf direkt ausgeführt,
d.h. der Programmcode wird Zeile für Zeile gelesen und ausgeführt;
Verwendung von Interpretierer

 Auswahl einer Programmiersprache

– Kriterien für die Auswahl einer Programmiersprache


 Technische Kriterien
Æ Angemessenheit für Problem
Æ Übersichtlichkeit, Strukturiertheit, Selbst-Dokumentation
Æ Unterstützung fortschrittlicher Softwareentwicklungskon-
zepte
Æ Unterstützung/Einbindung von Systemdiensten und System-
strukturen
Æ Qualität und Leistungsfähigkeit des Übersetzers
Æ Vorhandene Entwicklungs- und Testhilfen; vorgefertigte
Routinen
Æ Übertragbarkeit, Wiederverwendbarkeit
 Nicht-technische Kriterien
Æ Verträglichkeit mit vorhandenen Daten und Programmen
Æ Erfahrung der Benutzer
Æ Wünsche des Auftraggebers
Æ Lizenzgebühren und -bedingungen
Æ Güte der Lieferanten-Unterstützung
Æ Standardisierung
Æ Zukünftige Bedeutung der Sprache
– Empfehlungen

73
Johann Schlichter, TU München 5.9. SOFTWARE-ENGINEERING

wenn ... ... dann

Datenbank-Anwendung und (komplexe Logik C, C++ , Java, (oder


oder Portabilität) COBOL)

Datenbank-Anwendung und nicht (komplexe Lo- SQL, Reportgenerator


gik oder Portabilität)

Technisch-wissenschaftliche Anwendung und FORTRAN


einfache E/A-Strukturen und Portabilität

Technisch-wissenschaftliche Anwendung und C, C++, Java


(Datenbank oder komplexe E/A-Strukturen) und
Portabilität

(System-Software oder PC-Anwendung) und C, C++, Pascal, Java


Portabilität
System-Software und Verteidigungsbereich Ada

Künstliche Intelligenz-Anwendung und Portabili- Prolog, LISP


tät

Experimentelle Benutzerschnittstellen Smalltalk, C++, Java

Internet-Anwendung und Portabilität und Sicher- Java


heit

5.9 Software-Engineering
Softwareerstellung als Ingenieurdisziplin.

5.9.1 Software/Engineering - Definition des Ideals


Die Aufstellung und Befolgung guter Ingenieur-Grundsätze und Management-
Praktiken, sowie die Entwicklung und Anwendung zweckdienlicher Methoden
und Werkzeuge, mit dem Ziel, mit vorhersagbaren Mitteln, System- und Software-
Produkte zu erstellen, die hohe, explizit vorgegebene Qualitätsansprüche erfüllen
(nach A. Marco & J. Buxton, 1987)

74
Johann Schlichter, TU München 5.9. SOFTWARE-ENGINEERING

5.9.2 Komplexität von Software-Projekten


Maße für den Umfang von Software

 Zahl der Quelltextzeilen der Programme, aus denen das Softwareprodukt


besteht

 Zeit, die benötigt wird, um eine Programm zu erstellen (Messung in


Bearbeiter-Jahre (BJ))

Klassifikation von Software-Projekten

Projektklasse Quelltext-Zeilen Bearbeitungsaufwand


(LOC) (BJ)
sehr klein 1 - 1.000 0 - 0,2
klein 1.000 - 10.000 0,2 - 2
mittel 10.000 - 100.000 2 - 20
groß 100.000 - 1 Mio. 20 - 200
sehr groß 1 Mio - ... 200 - ...

Hauptanforderungen bei der Softwareentwicklung

 Entwicklung zuverlässiger (fehlerfreier) Software, d.h. Software verhält


sich - relativ zu vorgegebenen Toleranzwerten für Abweichungen - gemäß
den Anforderungen

 Entwicklung so, dass Software später problemlos geändert werden kann


(z.B. wenn Fehler entdeckt werden, neue Anforderungen gestellt werden,
eine andere Hardwareumgebung gewählt wird, ...)

5.9.3 Vorgehensmodelle
Eine zentrale Frage beim Software Engineering betrifft das Vorgehen im Projekt,
das erstens eine Fortschrittskontrolle erlaubt und die Zusammenarbeit mehrere
Entwickler und der Entwickler mit dem Management und dem Kunden erlaubt
und unterstützt.

75
Johann Schlichter, TU München 5.9. SOFTWARE-ENGINEERING

Code and fix-Verfahren

Unsystematische Vorgehensweise in der Frühzeit der Programmiertechnik:


Die Programmentwicklung begann mit dem Schreiben von Code und endete
mit dem langwierigen und mühseligen Austesten und Zusammenfügen der
Programmbausteine.

Wasserfall-Modelle

Einteilung des Entwicklungsprozesses in sequentiell aufeinander folgende


Phasen. Für jede Phase sind Ausgangspunkt und Vorgaben, durchzuführende
Tätigkeiten und Ergebnisse genau festgelegt.

1. Problemanalyse und Anforderungsdefinition

2. Fachlicher Entwurf: Datemodell, Anwendungsmodell

3. Software-technischer Entwurf: Struktur der zu entwickelnden Software

4. Programmierung und Modultest

5. System-Integration und Systemtest

6. Installation, Betrieb und Weiterentwicklung

7.

76
Johann Schlichter, TU München 5.9. SOFTWARE-ENGINEERING

Problemstellung

Problemanalyse Grobplan, Ist-Zustand

System Definition
Pflichtenheft

Systementwurf Datenmodell,
Funktionen

Implementierung

Systemtest

Installation, Betrieb
Wartung

 jede Projektphase endet mit einem Validierungsprozess, in dem die


Ergebnisse der Phase überprüft werden. Das Wasserfallmodell geht
von einem sequentiellen Prozess aus; ein Rücksprung ist nur dann
erlaubt, wenn sich die Ergebnisse der vorhergehenden Phase als
fehlerhaft erweisen. Fatal ist es jedoch, wenn erst beim Systemtest
festgestellt wird, dass die Systemspezifikation fehlerhaft ist.

Prototyping und Spiralmodelle

Systematische Abfolge von aufeinander aufbauenden Prototyp-Entwicklungen.


Lineare Abfolge der Phasen Analyse, Design und Realisierung jeweils mit den
Aktivitäten Zielbestimmung, Bewertung der Alternativen, Prototypentwicklung,
Verifikation

5.9.4 Strukturierte Programmierung


Top-Down-Entwurf: Mit Hilfe einer schrittweisen Verfeinerung wird ein
komplexes, nicht überschaubares Problem in mehrere Teilproblemen. Dies wird
rekursiv fortgesetzt, bis man überschaubare Teilprobleme hat.

77
Johann Schlichter, TU München 5.9. SOFTWARE-ENGINEERING

Eigenschaften

Top-Down-Entwurf ist generelle Vorgehensweise beim Entwurf von Softwaresy-


stemen; man spricht auch gelegentlich von "divide-and-conquer"

 betrachtet zunächst das gesamte Programm global als eine Funktion


(Operation), die nach und nach in Teilfunktionen aufgeteilt (verfeinert)
wird;

 das Problem wird solange zerlegt, bis es beherrschbar wird;

 späte Festlegung der Datendarstellung

Vorteile

 man löst Schnittstellenprobleme zuerst, d.h. Festlegung der Parameter von


Funktionen/Methoden.

 vermeidet dadurch, dass gleichzeitig an verschiedenen Stellen eventuell


widersprechende Schnittstellendefinitionen gemacht werden

 erzwingt klärende Strukturierung des Programms (erleichtert Wartung und


Änderung)

5.9.5 Notationen für Analyse und Entwurf


Für die Analyse des Problems, das gelöst werden soll, und den Entwurf des Soft-
waresystems (vor der Programmierung) existieren eine Reihe unterschiedlicher
Notationen

Prozessmodell

Das Prozessmodell spezifiziert die Aktionen und den Datenfluss zwischen den
Aktionen. Es ergibt sich ein Datenflussdiagramm.

 Beispiel

78
Johann Schlichter, TU München 5.9. SOFTWARE-ENGINEERING

Kunde

Kunden
Nr
Bestätigen
Prüfen Auftrags
daten

Eingabe Auftrags
daten Speichern

Auftrags
daten
Auftragsannahme
Aufträge

Datenmodell

Das Datenmodell bestimmt die im System auftretenden Entitäten, z.B. Kunde,


Auftrag, Kontonummer, Artikel; im Modell werden nur die Entitätstypen
festgehalten, nicht jedoch die Instanzen (d.h. nicht jeder real auftretender Kunde
mit Namen).

 Beispiel

Kunde

erteilt

1 n
Auftrag enthält Artikel

79
Johann Schlichter, TU München 5.9. SOFTWARE-ENGINEERING

 Spezifikation der Beziehungen zwischen den Entitäten

– 1 : 1 Beziehung: eine Entität vom Typ A ist genau mit einer Entität
vom Typ B verbunden und umgekehrt, z.B. ein Studierender hat genau
eine Matrikelnummer
– 1 : n Beziehung: eine Entität vom Typ A ist mit mehreren Entitäten
vom Typ B verbun-den, aber nicht umgekehrt, z.B. ein Kunde kann
mehrere Aufträge erteilen
– n : m Beziehung: jede Entität vom Typ A ist mit mehreren Entitäten
vom Typ B verbun-den und umgekehrt, z.B. n Studierende können auf
m verschiedene Dokumente im In-ternet zugreifen.

Dynamisches Modell

Das dynamische Modell spezifiziert die Zustandsübergänge in dem Softwaresy-


stem. Zustandsübergänge werden durch das Eintreten von Ereignissen ausgelöst,
z.B. Eingang eines neuen Auftrags.

 Beispiel

kein
Auftrag Lieferung

Auftrags
eingang zu liefern

Bestätigung
zu
bestätigen

5.9.6 Software-Qualitätssicherung
Unter Software-Qualitätssicherung (kurz QS) versteht man die Gesamtheit
der vorbereitenden und auf erarbeitete bzw. bereits vorliegende Ergebnisse

80
Johann Schlichter, TU München 5.9. SOFTWARE-ENGINEERING

angewendeten Maßnahmen, die geeignet sind, die geforderte Qualität eines


Softwareprodukts zu erreichen oder zu erhalten.

Qualitätskriterien

 Korrektheit, Zuverlässigkeit
 Modularität, Flexibilität, Interoperabilität
 Testbarkeit, Wartbarkeit
 Effizienz, Wirtschaftlichkeit

 Durchsichtigkeit, Verständlichkeit
 Verwendbarkeit, Dokumentation

Maßnahmen zur Qualtitätssicherung

 Aufstellung eines Qualitäts-Plans, der Anforderungen und Relevanz enthält


 Zeitplan für abzuhaltende Reviews, Inspektionen und sonstige QS-
Maßnahmen

 Richtlinien, Standards und Muster für die zu erstellenden Ergebnisse


verbreiten

 Begleitung und Dokumentation des Entwicklungsprozesses


 Reviews, Inspektionen

Qualitätsnormen und Zertifizierung

Bewertung/Zertifizierung der Qualität des Herstellungsprozesses.

 Reifegrad-Modell (Capability Maturity Model - CMM) des US-


amerikanischen Software Engineering-Instituts (SEI)

– CMM 5 Optimizing: Ständige Prozessverbesserung auf Basis der


ermittelten Parameter und Problemanalysen
– CMM 4 Managed: (Quantitativ) Wichtige Prozessparameter werden
regelmäßig ermittelt und analysiert - Prozessmessung, Problemanaly-
se

81
Johann Schlichter, TU München 5.9. SOFTWARE-ENGINEERING

– CMM 3 Defined: (Qualitativ) Prozesse sind definiert und eingeführt -


Schulung, Review-, Testtechniken
– CMM 2 Repeatable: (Intuitiv) Prozesse sind unter gleichen Bedingun-
gen wiederholbar, hängen aber von einzelnen Personen ab - Projekt-
management, Projektplanung
– CMM 1 Initial: (Ad hoc, chaotisch) Es werden keine spezifischen
Anforderungen an das Unternehmen gestellt

 ISO 9000 Normenserie

82
Kapitel 6

Datenstrukturen und Algorithmen

In diesem Kapitel werden einige Klassen von Algorithmen vorgestellt, insbeson-


dere Suchverfahren und Sortierverfahren.

 Fragestellungen des Abschnitts:

– Welche Möglichkeiten gibt es, Datenmengen im System darzustellen?


– Welche Möglichkeiten gibt es, in Datenmengen zu suchen?
– Welche Möglichkeiten gibt es, Datenmengen zu sortieren?
– Was versteht man unter der Komplexität eines Algorithmus?

6.1 Datenstrukturen
Informationen werden im Rechner als Daten gespeichert. Eine Menge von
Daten eines bestimmten Typs zusammen mit den auf der Menge ausführbaren
Zugriffsoperationen nennt man eine Datenstruktur. Zum Beispiel bilden die
Menge der natürlichen Zahlen zusammen mit den Grundrechenoperationen
(Addition, Subtraktion, ...) eine Datenstruktur. Datenstrukturen sind bei
der Programmierung ein wichtiges Hilfsmittel, die Daten für die maschinelle
Verarbeitung geeignet zu organisieren.

6.1.1 Listen
Eine Liste ist eine Folge von Elementen, die eine Reihenfolge haben (d.h. jedes
Element hat einen Vorgänger und Nachfolger).

83
Johann Schlichter, TU München 6.1. DATENSTRUKTUREN

Anker
Graf Maier Müller

Referenz Referenz

Beispiele

 Wort: Liste von Zeichen.

 Personaldaten: Liste von Datensätzen, wobei jeder Datensatz eine Person


beschreibt.

Operationen auf Listen

Erzeugen einer Liste, Einfügen eines Listenelements, Suchen eines Listenele-


ments mit bestimmten Eigenschaften, Löschen eines Listenelements

Felder (Array)

Ein Array (Feld) ist eine Liste mit bekannter (fester) Zahl von Elementen, wobei
jedes Element eine Nummer hat. Die Nummer der Elemente bestimmt die
Reihenfolge. Alle Elemente sind vom gleichen Typ.
1 Graf
2 Maier
3 Müller

 Deklaration durch: char buffer[500];

Allgemeine Listen

 einfach verkettete Listen


jedes Listenelement beinhaltet neben dem Inhalt auch eine Referenz auf das
nächste Listenelement.

 doppelt verkettete Listen


jedes Listenelement beinhaltet neben dem Inhalt auch eine Referenz auf das
nächste und das vorhergehende Listenelement.

84
Johann Schlichter, TU München 6.1. DATENSTRUKTUREN

class elem {
elem previous;
char content;
elem next;
}

6.1.2 Graphen
Ein Graph ist ein Modell für Beschreibung von Objekten, die in Beziehung
zueinander stehen. Er besteht aus der Menge K von Knoten (Ecken bzw. Punkten)
und der Menge V von Verbindungen (Kanten), die die Knoten verbinden. Die
Knoten haben Namen und können Träger von Werten sein. Ein Graph G wird
durch das Paar (K, V) beschrieben, d.h. G = (K, V).

 gerichteter Graph
jede Kante im Graph hat eine Richtung, d.h. sie führt von einem Knoten
zum selben (Schleife) oder zu einem anderen Knoten

 Weg
Ein Weg in einem Graphen ist eine Folge x = K1, K2, ... Kn = y, wobei
jeweils zwischen den K1 nach K2, K2 nach K3, ... eine Kante besteht.

6.1.3 Bäume
Ein Baum ist eine dynamische Datenstruktur zur Darstellung hierarchischer oder
rekursiver Be-ziehungen. er ist ein zyklenfreier Graph mit einem ausgezeichneten
Knoten (Wurzel), von dem aus man alle anderen Knoten auf genau einem Weg
erreicht.

 Rekursive Definition

– ein einzelner Knoten K ist ein Baum


– sind K1 ... Kn (n > 1) Bäume, dann ist die Struktur die folgende
Struktur ein Baum.
K

K1 K2 Kn

85
Johann Schlichter, TU München 6.2. SUCHVERFAHREN

 Die K1 ... Kn heißen Unterbäume oder Teilbäume von K. Unterbäume, die


nur aus einem Knoten bestehen, heißen Blätter (des Baumes).

 Ein Knoten Ki, der direkt mit anderen Knoten K verbunden ist, heißt Kind
bzw. Vater von K

 Höhe eines Knotens Ki: die Anzahl der Kanten, die auf dem Weg von der
Wurzel K bis zum betreffenden Knoten Ki durchschritten wird.

 Geordneter Baum: Die Reihenfolge der Unterbäume ist wichtig.

6.2 Suchverfahren
Ausgangspunkt ist eine Menge von Datensätzen. Es wird nach einem Datensatz
mit einer bestimmten Eigenschaft gesucht.

 Mengen von Datensätzen


Eine Menge von gleichartigen Datensätzen wird üblicherweise in einem
Array oder einer Liste gespeichert.
Bei den folgenden Such- und Sortierverfahren gehen wir immer davon aus,
dass die Daten in einem Array gespeichert sind.

 Lineare Suche
Die Datenstruktur mit den Datenelementen (das Array) wird der Reihe nach
durchsucht, bis das gewünschte Element gefunden ist.

– Beispiel: Suche nach dem Wert 100


int zahlen[10];
for (i=1; i<10; i++)
if (zahlen[i] == 100) break;
– Im schlimmsten Fall muß die gesamte Menge durchsucht werden.
Bei großen Datenmengen ist diese Vorgehensweise ungünstig und
aufwendig.

 Binäre Suche
Voraussetzung ist eine Ordnung auf den Datenelementen. Die Elemente
werden entsprechend ihrer Ordnung in einem Array gespeichert, d.h. sie
müssen aufsteigend oder absteigend geordnet sein.

– Sei int A[n] ein Array mit n Elementen, das aufsteigend sortiert ist

86
Johann Schlichter, TU München 6.3. SORTIERVERFAHREN

– Sei x das gesuchte Element; gesucht wird x im Bereich A[0] bis A[n-
1]
1. wähle m zwischen 0 und n-1; man wird m ungefähr in der Mitte
zwischen 0 und n-1 wählen
2. wenn A[m] =x, dann sind wir fertig, gib m als Ergebnis aus
3. wenn x < A[m], dann suche weiter im Bereich A[0] bis A[m-1]
4. wenn x > A[m], dann suche weiter im Bereich A[m+1] bis A[n-1]

 Eine Verdopplung der Anzahl der Listenelemente führt bei binärer Suche
zu einem zusätzlichen Vergleich, während es bei linearer Suche im
schlimmsten Fall zu einer Verdopplung des Aufwandes führen kann.

6.3 Sortierverfahren
Ziel ist es, eine Datenmenge entsprechend einem vorgegebenen Ordnungskriteri-
um zu sortieren.

 Sortierverfahren - Beispiel ‘Bubble Sort’


Sortieren durch Vertauschen von Wortpaaren. Jeweils benachbarte
Elemente werden vertauscht, wenn sie nicht wie gewünscht geordnet sind.
Dabei steigt das relativ größte Element wie eine Blase (bubble) im Wasser
auf.

– Vollständiges Sortieren mittels mehrerer Durchgänge. Bei n


Elementen maximal n Durchgänge bis keine Vertauschungen mehr
notwendig sind.
– Beispiel: alphabetisches Sortieren einer Menge von Namen
1. Sortierdurchgang mit jeweils paarweisen Vergleich
Jochen Jochen
Karin Karin Franz
Franz Franz Karin Bernd

Bernd Bernd Karin Karin


Sepp Sepp Sepp Jim
Jim Jim Sepp Maria
Maria Maria Sepp

87
Johann Schlichter, TU München 6.3. SORTIERVERFAHREN

Original nach 1 nach 2 nach 3 nach 4


Schritten
Jochen Jochen Franz Bernd Bernd
Karin Franz Bernd Franz Franz
Franz Bernd Jochen Jim Jim
Bernd Karin Jim Jochen Jochen
Sepp Jim Karin Karin Karin
Jim Maria Maria Maria Maria
Maria Sepp Sepp Sepp Sepp

 Rekursives Sortierverfahren - Beispiel ‘Quicksort’

– Prinzip
Teilen des Arrays, Sortieren der Teilarrays (mit demselben Verfahren,
also rekursiv) und Wiedervereinigen der sortierten Teilarrays
1. wähle ein Element aus dem Array aus
2. teile das Array in zwei Teilarrays, in denen nur Elemente
enthalten sind, die größer bzw. kleiner dem gewählten Element
sind (d.h. kopiere die Elemente so, dass in vorderen Teil des
Arrays alle Elemente kleiner den gewählten Element, im hinteren
Teil des Arrays alle Elemente grösser dem gewählten Element
sind)
3. sortiere das erste Teilarray
4. sortiere das zweite Teilarray
5. (vereinige die beiden Hälften)
– Beispiel

88
Johann Schlichter, TU München 6.4. KOMPLEXITÄT

Karin Jim Bernd Bernd Bernd

Franz Franz Franz Franz Franz

Bernd Bernd Jim Jim Jim

Jochen Jochen Jochen Jochen Jochen

Sepp Sepp Sepp Karin Karin

Jim Karin Karin Sepp Maria

Maria Maria Maria Maria Sepp

– Quicksort läuft schneller und effizienter ab als Bubblesort (weniger


Vergleiche und Vertauschungen).

 Eine Demonstration verschiedener Sortieralgorithmen in Form von Applets


ist auf un-
serer Web-Seite (URL: http://www11.in.tum.de/lehre/vorlesungen/ws2000-
01/einfinfo/sortdemo/) zu finden.

6.4 Komplexität
Nicht alle berechenbaren Verfahren lassen sich mit "vertretbarem" Aufwand be-
rechnen (Grenze der Durchführbarkeit, Praktikabilität). Bei der algorithmischen
Lösung eines gegebenen Problems ist deshalb auch die Effizienz des zu ent-
wickelnden Verfahrens von großer Wichtigkeit.

 Ein Algorithmus ist umso effizienter, je geringer der Aufwand zu seiner


Abarbeitung ist.

 Aufwand bezieht sich auf bestimmte Betriebsmittel (z.B. Rechenzeit,


Speicherplatz, Anzahl der Geräte)

 Nach dem Betriebsmittel richten sich die verschiedenen Komplexitätsmaße.


Am wichtigsten sind dabei Zeitkömplexität, und Speicherplatzkomplexität.

 Zu unterscheiden ist Komplexität eines Verfahrens von Komplexität eines


Algorithmus. Verfahren bezieht sich hier auf das Ziel, das man erreichen
will. Da es für dasselbe Verfahren viele Algorithmen gibt, setzt man

89
Johann Schlichter, TU München 6.4. KOMPLEXITÄT

Komplexität des Verfahrens gleich mit Komplexität des besten bekannten


Algorithmus.

 Algorithmen bewertet man relativ zu ihrer Komplexität

6.4.1 Komplexitätsklassen
Komplexitätsklassen drücken eine relative Größenordnung (abzüglich konstantem
Faktor) aus in Abhängigkeit von Zahl n der Wertelemente. Die Zahl n kann
sich dabei durch den jeweiligen Kontext bestimmt, z.B. n ist die Anzahl der
Eingabeelemente, oder n ist die Anzahl der zu untersuchenden Datenelemente.

 Die Komplexität des Sortierens einer Liste ist beispielsweise abhängig von
der Anzahl der zu sortierenden Element; die Komplexität des Brechens
einer Verschlüsselung üblicherweise von der Länge des Schlüssels.

 Übliche Komplexitätsklassen
Hauptsächlich verwendete Komplexitätsklassen

– logarithmisch O(log n)
– linear O(n)
– überlinear O(n log n)
– quadratisch O(n2)
– polynomial O(nk), k > 2
– exponentiell O(kn), k >= 2
– O steht hier für Ordnung: Wachstum der Laufzeit für einzelne
Komplexitätsklassen, und zwar in Abhängigkeit der Anzahl der
Eingabedaten

90
Johann Schlichter, TU München 6.4. KOMPLEXITÄT

65536
16384 2n
n3
L 4096 n2
a
u 1024
f n log 2 n
z 256
e
i
64 n
t
16

4
log 2 n
1
1 2 4 8 16 32 64 128
Anzahl der Eingabedaten n

 Nicht-polynomiale (oder Nicht-deterministisch-polynomiale) Probleme


gelten als "harte" Probleme, die man nur in kleinen Bereichen lösen kann.

91
Kapitel 7

Grundlagen von Rechnernetzen

 Fragestellungen des Abschnitts:

– Welche Übertragungsmedien gibt es?


– Was ist das Internet? Wie ist es aufgebaut?
– Wie werden Rechner im Internet addressiert?
– Wie sieht das Kommunikationsreferenzmodell für das Internet aus?

7.1 Einführung
 Computersysteme sind in der Regel vernetzt, d.h. sie können mit anderen
Computersystemen Daten austauschen.

 Zur Vernetzung müssen einzelne Computersysteme physikalisch durch


Kabel oder Funk miteinander verbunden werden. Die Kabel- und
Funkstrecken werden in ihrer Gesamtheit als Netz bezeichnet.

 Intranet und Internet

– Intranet verbindet Computersysteme eines Unternehmens


– Internet verbindet weltweit Interanets oder einzelne Computersysteme

 Internet - Übersicht

92
Johann Schlichter, TU München 7.1. EINFÜHRUNG

Datenpakete

Virtuelles Netz
(Netz der Netze)

Router Router

Ethernet DECT ISDN


Token Ring GSM ATM

– Kommunikation zwischen Rechnern über verschiedene Teilstrecken


(Teilnetze)
– Internet = Netz der Netze

 Internet - Entwicklung

– Arpanet (1969)
 Als Möglichkeit zum Zugriff auf einige wenige entfernte Rechner
entwickelt (telnet)
 Tolerant gegenüber Ausfällen, deshalb Übertragung über mehrere
Wege (paketorientierte Datenübertragung)
 Anfangs nur einige Universitäten, Forschungsinstitute und Mili-
täreinrichtungen
– NSFnet, nationale Netze (1980er Jahre)
 Trennung von Forschungs- und Militärnetz
 Entstehung regionaler, nationaler Netze für spezielle Nutzergrup-
pen (z.B. EARN, DFN)
 Übergänge zwischen den Teilnetzen schwierig und nur be-
schränkt möglich
– Internet (1990er Jahre)
 Zusammenschluß von vielen lokalen, nationalen, internationalen
Rechnernetzen zum Internet = "Netz von Netzen"

93
Johann Schlichter, TU München 7.1. EINFÜHRUNG

 nahtloser, transparenter Übergang zwischen den Teilnetzen;


Kommunikation der Rechner mittels eines einheitlichen Proto-
kolls (TCP/IP)
 lokale Verwaltung der Teilnetze
 Kommerzialisierung
– Entwicklung in Zahlen

Arpanet 1969 ein Netz 10 Rechner


NSFnet 1984 wenige Netze einige 100
Rechner
Internet 1990 3000 Netze 200 000 Rech-
ner
Internet 1998 80 000 Netze 40 Mio Rech-
ner
– Zugriff auf Daten - Früher / Heute

....
c:\> ftp 131.159.24.16
ftp:> cd docum/kworld
ftp:> get datei1.gif
ftp:> bye
c:\> showgif datei1.gif

 Internet - Technologie
Unter Internet-Technologie versteht man hauptsächlich Standards (Proto-
kolle), die es ermöglichen, dass Komponenten verschiedener Hersteller mit-
einander kommunizieren können. Darunter fallen sowohl Komponenten für
den Netzbetrieb als auch Anwendungen, zur Realisierung der Dienste für
den Endbenutzer.

– Basisdienste
 E-Mail

94
Johann Schlichter, TU München 7.1. EINFÜHRUNG

Æ elektronische Briefpost, die im Netz hierarchieweise verteilt


wird; Verteilerlisten, Antwortmodus
Æ Adressen: name@informatik.tu-muenchen.de
 File Transfer
Datei-Transfer zwischen verschiedenen Rechnern; "anonymous
ftp"
 Newsgruppen
Diskussionsforen, für die man sich als Teilnehmer einschreibt;
moderierte und unmoderierte Foren
 Telnet
Log-in in entfernte Systeme
 WWW (World-Wide-Web)
Æ Konzept zur Vernetzung von Information und zum einheitli-
chen Zugriff auf Information im Internet; Information kann
sich transparent für den Benutzer über mehrere Rechner und
mehrere Kontinente hinweg erstrecken; Zugriff über Brow-
ser; sehr einfache Bedienung
Æ Unterscheidung zwischen Benutzer-Software (Browser) und
Informationsserver
Æ Information als formatierter Text mit Referenzen zu anderen
Informationen
Æ Strukturierung der Informationsmenge durch Verweisketten
Æ Einheitliche Lokalisierung von Information
Internet aus Nutzersicht

Vernetzung Vernetzung von


von Rechnern Information

früher heute

95
Johann Schlichter, TU München 7.2. ÜBERTRAGUNGSMEDIEN

7.2 Übertragungsmedien
7.2.1 Kriterien zur Kategorisierung
Einteilung der Übertragungsstrecken

verdrillt
elektrisch
Koax

leitungsgebunden Monomode
Lichtwellen-
leiter
Medien Multimode

Funk
Infrarot
leitungsungebunden
Mikrowelle

Akustisch

Übertragungsraten

Die Leistungsfähigkeit einer Verbindung in Rechnernetzen gibt man üblicherwei-


se in Form einer Übertragungsrate an. Übertragungsraten werden in Bit pro Se-
kunde angegeben, d.h. pro Sekunde können über die Verbindung die genannte
Zahl von Bits übertragen werden.

Klassifizierung der Netze nach Datenrate und Entfernung

 LAN ("Local Area Network", lokales Netz) dient zur Verbindung von
Rechnern (PC’s etc) über kurze Entfernungen (Gebäude); Datenraten ab
10Mb/s, 100Mb/s und höher.

 WAN ("Wide Area Network", Weitverkehrsnetz) dient zur Verbindung von


Rechnern oder lokalen Netzen über weite Entfernungen; Datenraten liegen
in einem weiten Bereich zwischen 2400 bps bis 45 Mb/s (bei der Telekom

96
Johann Schlichter, TU München 7.2. ÜBERTRAGUNGSMEDIEN

gibt es bereits bei den Hauptübertragungsstrecken Datenraten von mehr als


622 Mb/s bis hin in den Gigabitbereich)
 MAN ("Metropolitan Area Network", Stadtverkehrsnetz) werden oft als
Brücke zwischen WAN und LAN verwendet; sie überbrücken Entfernungen
bis zu einigen 100km; Datenraten bewegen sich von 45 Mb/s bis zu
mehreren 100 Mb/s

7.2.2 Elektrische Leiter


Umwandlung von Binärdaten in elektrische Signale, z.B. elektrische Spannung
mit +V (=1) und -V (=0).

"Twisted Pair" Kabel (verdrilltes Kabel)

 Masse und Signalleitung sind verdrillt zur Reduzierung der induktiven


Störungen
 Verwendet im Bereich von einigen Metern bis Kilometern (ursprünglich im
Fernsprechnetz)
 Datenrate bis 100 Mbps (bei kurzen Entfernungen)
 Probleme bei der Übertragung

– Dämpfung des Signals (Signalwerte werden bei der Übertragung


kleiner)
– Verzerrung des Signals (Frequenzspektrum wird beim Durchlaufen
einer Nachricht verändert)
– elektromagnetische Ein- bzw. Ausstrahlung (Leiter wirkt als
Empfangs- bzw. Sendeantenne für elektromagnetische Wellen;
besonders störend in der Nähe von Kraftwerken und Sendern)

Koaxialkabel

Aussenleiter
Isolation

Dielektrikum

97
Johann Schlichter, TU München 7.2. ÜBERTRAGUNGSMEDIEN

 Reduzierung der Auswirkungen von elektromagnetischer Ein- bzw. Aus-


strahlung

 Signalleitung verläuft als konzentrischer Leiter innerhalb eines äußeren


zylindrischen Leiters; dazwischen isolierendes Material

 verwendet im Bereich von mehreren Metern bis zu einigen Kilometern

7.2.3 Lichtwellenleiter
Übertragung durch Lichtwellen ist immun gegenüber Störeinflüssen durch
Nebensprechen und elektromagnetischer Strahlung. Damit werden höhere
Datenraten möglich.

Aufbau eines Lichtwellenleiter-Kabels

Glaskern Plastikschutz

Glasmantel

 Glasfaser besteht aus Glaskern für das Signal und Glasmantel; Plastik-
schutz, um es gegen äußere Licheinflüsse zu schützen; Signal breitet sich
im Glaskern aus; mehrere Glasfasern können in einem Kabel zusammenge-
faßt werden, wobei meist ein stabiler Kern und Isolierschutz zwischen den
Glasfasern notwendig ist.

 Glaskern und Glasmantel haben unterschiedliche Lichtbrechungs-Faktoren;


dadurch wird Lichtstrahl im Glaskern gehalten (er wird vom Mantel
zurückreflektiert)

 typische Werte für Kern-/ Manteldurchmesser: von 100/200 Mikrometer


(sogenannte Multimode) bis 5/100 Mikrometer (sogenannte Monomode)

98
Johann Schlichter, TU München 7.3. LOKALE NETZE (LAN)

7.3 Lokale Netze (LAN)


7.3.1 LAN - Netztopologien
Bustopologie

Ethernet

 Beispiel: Ethernet

Ringtopologie

Token-Ring

 Beispiel: Token Ring

99
Johann Schlichter, TU München 7.3. LOKALE NETZE (LAN)

Hub-Topologie

Hub

 Beispiel: Fast Ethernet

7.3.2 Zugriffsverfahren des Ethernet - CSMA/CD


Ausgangspunkt ist ein Übertragungsmedium, das von allen angeschlossenen
Komponenten gemeinsam und in Konkurrenz benutzt wird. Übertragungsmedium
wird jeweils exklusiv von einer Komponente zur Übertragung genutzt.

Bus

 Abkürzungen: CS = Carrier Sense: vor dem Senden Lauschen auf der


Leitung; MA = Multiple Access: mehrere Rechner haben Zugriff; CD
= Collision Detect: Mithören während der Sendung, um Kollisionen zu
entdecken.

 Ablauf des Zugriffsverfahrens

100
Johann Schlichter, TU München 7.4. WAN - WIDE AREA NETWORK

Station
sendebereit

Warten (7)

belegt (3)
Kanal
(1)
abhoeren max ja
(6) Anzahl der
Versuche
frei (2)

Daten senden Kollision Stoersignal


(4) (5)
& Kanal abhoeren senden

keine Kollision

1. Sendewillige Station überwacht Übertragungsmedium


2. Übertragungsmedium frei, dann kann Übertragung beginnen
3. Während der Übertragung wird Kanal simultan abgehört; falls
gesendete Information und abgehörte Information unterschiedlich,
dann wurde eine Kollision festgestellt, d.h. eine andere Station hat
auch mit der Übertragung begonnen
4. Bei Kollision Senden eines Störsignals
5. Warten gemäß Backoff Strategie; Berechnung der Wartezeit abhängig
von der Anzahl der Wiederholungen und von Zufallszahlen

7.4 WAN - Wide Area Network


7.4.1 Internet
Netzstruktur des Internet

101
Johann Schlichter, TU München 7.4. WAN - WIDE AREA NETWORK

Ethernet
Token-Ring
Gateway

Router
Router

Backbone

Zugangsstruktur des Internet

Internet Service Provider

ISP
ISP

ISP

Austauschpunkt
(z.B. CIX)

Propagierung von Nachrichten im Internet

Zerlegung der gesamten Nachricht in einzelne Pakete, die dann einzeln vom
Sender S zum Empfänger E übertragen werden. Auf dem Weg S bis zu E werden
die Pakete über mehrere Übertragungsrechner (Router) übertragen.

 Pakete können unterschiedliche Wege durch das Internet nehmen, und auch
unterschiedlich lange unterwegs sein, d.h. Pakete können in unterschiedli-

102
Johann Schlichter, TU München 7.4. WAN - WIDE AREA NETWORK

cher Reihenfolge ankommen als sie abgeschickt wurden. Der Empfangs-


rechner muß die empfangenen Pakete in der korrekten Reihenfolge zusam-
mensetzen, d.h. jedes Paket braucht eine Sequenznummer.

 In regelmäßigen Abständen werden Informationen über die angeschlosse-


nen Übertragungsstrecken ausgetauscht, d.h. ist Leitung gestört, ist Leitung
überlastet etc. Jeder Router hat eine Tabelle aufgrund der er entscheidet,
welchen weiteren Weg ein Paket zum Empfänger nehmen soll.

Internet
....P3 P2 P1
S R

R
R
R
R R
E

R R

Backbone des Deutschen Wissenschaftsnetzes (B-WIN)

103
Johann Schlichter, TU München 7.4. WAN - WIDE AREA NETWORK

GTS EBone

104
Johann Schlichter, TU München 7.5. REFERENZMODELLE

Protokolle von Nachrichtenläufen (traceroute)


Eine Auswahl von Nachrichtenlaufprotokollen ist unter
http://www11.in.tum.de/lehre/vorlesungen/ws2000-01/einfinfo/traceroute.txt
zu finden.

7.5 Referenzmodelle
7.5.1 TCP/IP Referenzmodell
 Zur Kommunikation zwischen Rechnern über ein Rechnernetz ist ein
Protokoll notwendig. Ein Protokoll besteht aus einer Menge von
Datenstrukturen und Konventionen, wie der Ablauf der Kommunikation
stattfindet und wie die Informationen jeweils zu interpretieren sind, z.B.
Syntax der Nachrichten, Folge von Nachrichten.

 Zur Reduzierung der Komplexität beim Entwurf eines offenen Rechnernet-


zes wird das Netz in aufeinander aufbauende Protokoll-Schichten unterteilt.

 Beispiele sind ISO/OIS Protokollfamilie und TCP/IP Protokollsuite


(Referenzmodell des Internet; de-facto Standard; TCP = Transmission
Control Protocol, IP = Internet Protokoll)

105
Johann Schlichter, TU München 7.5. REFERENZMODELLE

 Prinzipien für Schichtung

– jede Schicht repräsentiert eine Abstraktionsebene


– jede Schicht führt eine wohldefinierte Funktion aus
– schmale Schnittstellen zwischen Schichten, um Informationsfluß zu
minimieren
– Funktion einer Schicht ist aufgrund von international spezifizierten
Standardprotokollen definiert

 Aufbau des Internet-Schichtenmodells

sende E-Mail von P1 nach P2


Anwendung Anwendung
sende (lange) Nachricht von E-Mail
Programm auf A nach E-Mail Programm
Transport auf B Transport

sende
Internet Pakete Internet Internet

sende
Netzzugriff Bits Netzzugriff Netzzugriff

Rechner A Router Rechner B

 Bedeutung der Schichten

– Netzzugriff: bietet eine Übertragungsmöglichkeit einzelner Datenein-


heiten (Bits) unter bestimmten Zeitbedingungen an; Nachrichtenüber-
tragung zwischen zwei benachbarten Rechnern.
 Aufgaben: transparente Übertragung von Bitsequenzen, Berück-
sichtigung der Eigenschaften der Übertragungsmodi, Zusammen-
fassung von Bitsequenzen zu Rahmen (Frames), Fehlererkennung
und Fehlerkorrektur auf Rahmenebene
– Internet: fehlerfreie Übermittlung einer Nachricht von einem
Endrechner, über ein Netz von Vermittlungsrechnern hinweg, bis hin
zum zweiten Endrechner; beinhaltet Routing und Addressierung; fügt
Netzwerk-Header hinzu

106
Johann Schlichter, TU München 7.5. REFERENZMODELLE

 Aufgaben: Zusammenschaltung von Teilstrecken zu einer End-


zu-End Verbindung, Wegewahl und Vermittlung, Transporteinheit
abhängig von der Vermittlungstechnik (bei Paketvermittlung
Verwendung von Paketen)
– Transport: fehlerfreier Transport zwischen zwei kommunizierenden
Prozessen auf zwei Endrechnern; bildet die anwendungs-orientierten
Schichten auf die Netz-abhängigen Schichten ab; fügt Transport-
Header hinzu
 Aufgaben: netzunabhängiger Transport von Nachrichten zwi-
schen zwei Endsystemen; passt die vom Anwendungssystem
geforderte Übertragungsqualität an die vom darunterliegenden
Transportnetz angebotene Übertragungsqualität an
 Beispiele: Transmission Control Protocol (TCP: Intenet), User
Datagram Protocol (UDP: Intenet)
– Anwendung: es sind verschiedene Applikationsdienst-Elemente
festgelegt; deren Auswahl hängt von den ablaufenden Anwendungen
ab, z.B. Dateizugriff (FTP), Fernverarbeitung (Telnet), Elektronische
Post (SMTP), Name Service, WWW (HTTP)

7.5.2 Sicherung gegen Fehler


Eine Sicherung gegen Fehler wird sowohl bei der Speicherung als auch bei
der Übertragung von Daten angewandt. Beim TCP/IP Referenzmodell z.B. in
der Netzzugriffsschicht, welche für die Übertragung zwischen zwei Rechnern
zuständig ist.

Codesicherung durch Redundanz

Nicht jede Bitkombination ist ein gültiges Codewort. Z.B. Wahl des Codes derart,
dass jeder 1-bit-Verlust zu einem ungültigen Codewort führt.

 Ziffernsymbol
0 0000000001
1 0000000010
2 0000000100
3 0000001000
4 0000010000
5 0000100000

107
Johann Schlichter, TU München 7.5. REFERENZMODELLE

Verwendung eines Paritätsbit

Bildung einer binären Quersumme vom Codewort w: qs(w) = Anzahl der


"1" im Codewort w, Paritätsbit(w)=1 falls qs(w)=gerade, Paritätsbit(w)=0 falls
qs(w)=ungerade

 Ziffernsymbol
0 0 0000
1 1 0001
2 1 0010
3 0 0011
4 1 0100
5 0 0101

7.5.3 IP-Adresskonzept
Teil des Internet-Referenzmodells ist die Festlegung der Addressierung von
Rechnern im Netz. Dazu erhält jedes Computersystem eine eindeutige
"Rufnummer", seine IP-Adresse. Eine IP-Adresse besteht aus vier Byte.
Diese werden üblicherweise dezimal durch Punkte getrennt geschrieben, z.B.
131.159.24.30

 Die weltweit eindeutige Vergabe von IP-Adressen übernehmen die NICs


(Network Information Center). In Deutschland ist das beispielsweise das
DE-NIC, das momentan vom Rechenzentrum der Universität Karlsruhe
betrieben wird.

 Adressklassen
IP-Adressen werden in Blöcke zusammengefasst um die Netzverwaltung
zu erleichtern. Die Adresse besteht dazu aus Netz-ID und Host-ID. Nur die
Netz-IDs werden zentral vom Network Information Center vergeben. Die
Klasse gibt an, wie groß der Byte-Anteil der Netz-ID ist.

108
Johann Schlichter, TU München 7.5. REFERENZMODELLE

0 8 16 24 32 Subnetze Hosts

Netz Host-ID 126 16.777.214


A 0

Netz-ID Host-ID 16.382 65.534


B 10

C Netz-ID Host 64.547 254


110

D 1110 Multicast-Adressen

E 11110 reserviert

– Klasse A: Adressbereich 1.0.0.0 - 127.255.255.255


– Klasse B: Adressbereich 128.0.0.0 - 191.255.255.255
– Klasse C: Adressbereich 192.0.0.0 - 223.255.255.255
– Klasse D: Adressbereich 224.0.0.0 - 239.255.255.255 (verwendet
durch Videokonferenzsysteme, z.B. durch die Mbone-Werkzeuge)

– Klasse E: Adressbereich 240.0.0.0 - 247.255.255.255

 Neben den IP-Adressen können Computersysteme noch einen oder mehrere


einfach zu merkende Namen bekommen, wie z.B. www.in.tum.de. Die
möglichen letzten Silben (top level domain) sind global festgelegt, die
zweitletzte Silbe wird von jeweils zuständigen Stellen vergeben (für die .de-
Domäne beispielsweise DE-NIC)

 Durch den Boom des Internet werden die Adressen bereits knapp; deshalb
Erweiterung der IP-Adressen auf 128 Bit (IPv6 Adresskonzept).

109
Kapitel 8

Anwendungen von Rechnernetzen

 Im vorhergehenden Abschnitt wurden bereits einfache Dienste des Internet


beschrieben (E-Mail, WWW). Hier gehen wir näher auf Verteilte
Anwendungen im Allgemeinen und auf das momentan in diesem
Zusammenhang wichtigste Teilgebiet E-Commerce ein. Weiterhin werden
Sicherheitsfragen bei Verteilten Anwendungen behandelt.

 Fragestellungen des Abschnitts:

– Was versteht man unter dem Client/Server-Modell?


– Was ist E-Commerce? Welche verteilten Anwendungen spielen hier
eine Rolle?
– Was versteht man unter Verschlüsselung? Welche grundlegenden
Verfahren gibt es?
– Was versteht man unter digitalen Signaturen?

8.1 Verteilte Anwendungen


Aufteilung einer Anwendung in Verteilungseinheiten (einzelne Programme auf
verschiedenen Rechnern), die miteinander kommunizieren um einen Dienst zu
erbringen.

8.1.1 Entwicklung hin zu verteilten Anwendungen


 Die Zunkunft wird eine weiter fortschreitende Vernetzung von heterogenen
Rechnern bringen. Anwendungen zur gemeinsamen Nutzung von Resour-

110
Johann Schlichter, TU München 8.1. VERTEILTE ANWENDUNGEN

cen, Kommunikation von Informationen (d.h. besserer Informationsfluss)


und zur Koordination von Aktivitäten.

 Enterprise Computing Systeme


Enterprise Computing Systeme sind charakterisiert durch eine enge, direkte
Kopplung von Anwendungen, die auf heterogenen Plattformen in einer
vernetzten Umgebung ablaufen.

– Benutzer sind physisch weit verteilt und interagieren mit einer Vielfalt
von verschiedenen Rechnern und peripheren Geräten.
– Diese Systeme müssen voll integriert und sehr zuverlässig sein, d.h.
Konsistenz der Information, z.B. auch nach Ausfall eines Teiles des
Systems
– Sicherheit und Garantie der Privatsphäre
– vernünftige Antwortzeiten
– Fähigkeit, falsche Eingaben von Geräten und Benutzern zu tolerieren
– autonome Verwaltung der einzelnen Systemteile

8.1.2 Verteilte Systeme


Arten der Verteilung

 Hardwarekomponenten

 Daten (können sowohl partitioniert als auch repliziert gespeichert werden;


Verteilung ist sowohl bei der Generierung als auch bei der Verarbeitung der
Daten innerhalb der Anwendung zu beachten)

 Kontrolle, z.B. verteiltes Betriebssystem

 Verarbeitung, z.B. verteilte Ausführung einer Anwendung (in diesem Fall


besteht eine Anwendung aus mehreren autonomen Teilkomponenten, die
gemeinsam ein Problem/Aufgabe lösen)

Charakterisierung eines verteilten Systems

Ein verteiltes System ist charakterisiert durch folgende Eigenschaften

111
Johann Schlichter, TU München 8.1. VERTEILTE ANWENDUNGEN

 mehrfache Existenz von verschiedenen, autonomen Funktionseinhgeiten


(physikalische, logische); Funktionseinheiten sind Hardwarekomponenten
(z.B. Rechner, Drucker), aber auch Softwareeinheiten (z.B. Dateien,
Anwendungen wie E-Mail)

 räumliche Verteilung von Funktionseinheiten, die mittels eines oder


mehrerer Netze miteinander verbunden sind

 Funktionseinheiten fallen unabhängig voneinander aus

 Funktionseinheiten kommunizieren über Nachrichten miteinander

 Offenheit erforder die Festlegung von standardisierten Schnittstellen zwi-


schen den verschiedenen Ressourcen (Heterogenität und Interoperabilität
bzgl. Plttdormen, Systemen und Anwendungen; Integration neuer und zu-
künftiger Plattformen, Systeme, Anwendungen und Benutzerbedürfnisse)

 Skalierbarkeit, d.h. das System kann wachsen durch Hinzufühen


zusätzlicher Komponenten

Vorteile von verteilten Systemen

Die Vorteile von verteilten Systemen kann man aus zweierlei Perspetiven sehen:
1) im Verhältnis zu einem zentralen Systeme (d.h. Großrechner), 2) im Verhältnis
zu einer Menge von isolierten Arbeitsplatzrechnern

 Vergleich: Verteiltes System - zentrales System

– Wirtschaftlichkeit (Mikroprozessoren haben ein besseres Preis-


Leistungsverhältnis als Großrechner, ein verteiltes System hat zusam-
mengenommen oft mehr Rechnerleistung als ein einzelner Großrech-
ner, meist auch zu einem erheblich billigerem Anschaffungspreis; die
Leistung der Arbeitsplatzrechner steigt schneller als die der Großrech-
ner, der Innovationszyklus ist kürzer)
– Antwortzeiten (Reaktionszeit nach Eingabe von Zeichen durch den
Benutzer)
– inhärente Verteilung (z.B. Roboter am Fließband, Bank-Filialen,
Groupware)
– Zuverlässigkeit (mehrere Kopien von Dateien und damit Verfügbar-
keitsvorteile; kontinuierliche Verfügbarkeit; Teilausfall statt Totalaus-
fall)

112
Johann Schlichter, TU München 8.1. VERTEILTE ANWENDUNGEN

– schrittweise Erweiterbarkeit (Ergänzen statt Ersetzen bei wachsendem


Bedarf an Rechnerleistung)

 Vergleich: Verteiltes System - isolierte PCs

– gemeinsame Nutzung von Ressourcen (Daten, z.B. bei Reservierungs-


systemen in Reisebüros, oder Geräte)
– Kommunikation, z.B. E-Mail, Videoconferencing
– bessere Performanz und Flexibilität von Arbeitsplatzrechnern (z.B.
Berechnung von fotorealistischen Bildern)
– Einfachere Wartung gegenüber vielen einzenen PCs (z.B. Updates,
Backup)

8.1.3 Definition Verteilte Anwendung


Eine verteilte Anwendung ist

 Anwendung, deren Funktionalität in eine Menge von kooperierenden


Teilkomponenten zerlegt ist. Jede Teilkomponente hat internen Zustand.

 Teilkomponenten sind autonome Verarbeitungseinheiten, die auf verschie-


dene Rechner abgebildet werden können. Jede Teilkomponente läuft als
Prozess auf seinem Rechner ab.

 Teilkomponenten tauschen untereinander Informationen mittels des Netzes


aus.

 Programmiersicht
Sei A eine verteilte Anwendung, die aus den Teilkomponenten A1,..., A5
besteht. Die einzelnen Teilkomponenten werden mit Hilfe von Moduln
realisiert; sie können auf unterschiedlichen Rechnern ablaufen.

113
Johann Schlichter, TU München 8.1. VERTEILTE ANWENDUNGEN

A3 A4
exportierte
Schnittstelle

importierte
Schnittstelle

A1 A2 A5

– Spezifikation der Schnittstelle


1. notwendige Parameter (einschließlich deren Typ),
2. Ergebnisse (einschließlich deren Typ),
3. sichtbare Auswirkungen, die Ausführung einer Teilkomponente
auf den Rest des Systems bewirkt, z.B. Eintrag in Datenbank,
4. Auswirkungen einer Operation auf die Ergebnisse von nachfol-
genden Operationen,
5. Einschränkungen hinsichtlich der Sequenz von Operationen,

8.1.4 Client-Server-Modell
Möglichkeit zur Strukturierung von (verteilten) Anwendungen: Server stellen
Dienste zur Verfügung, die von vorher unbekannten Clients in Anspruch
genommen werden können.


Client Server

Anforderung

Antwort

Zeit

114
Johann Schlichter, TU München 8.1. VERTEILTE ANWENDUNGEN

Client ruft Operation eines Servers auf; nach Ausführung der Operation
wird Ergebnis an den Client übergeben; während der Ausführung der
Operation wird der Ablauf des Client meist unterbrochen; leere Antwort
ist möglich, falls Operation kein Ergebnis liefert (z.B. Eintrag einer
Informationseinheit in eine Datenbank)

 Definitionen

– Definition: Client
 Ein Client ist eine Anwendung, die i.a. eine Anforderung initiiert
und den geforderten Dienst von einem Server erhält.
 Clients sind meist a-priori nicht bekannt
– Definition: Server
 Ein Server ist ein Subsystem, das einen bestimmten Dienst für
a-priori unbekannte Clients zur Verfügung stellt.
– Client und Server kommunizieren über Nachrichten, wobei beide
Systeme auf unterschiedlichen Rechnern ablaufen können, die über
ein Netz miteinander verbunden sind.
– Antwort dient als Bestätigung, dass die Anforderung durch den Server
empfangen wurde
– Server sind dedizierte Prozesse, die kontinuierlich folgende Schleife
abarbeiten:
while (true)
receive (empfangsport, anforderung)
führe anforderung aus und erzeuge antwort
send (sendeport, antwort)

8.1.5 Beispiel-Services
Datei-Service

Ein Datei-Service (File Service) stellt entfernte, zentralisierte Datenspeicherung


für Arbeitsplatzrechner zur Verfügung, die über ein Kommunikationsnetz
verbunden sind; zentralisiert aus der Benutzer-Perspektive.

 Beispiel NFS (Network File System)

115
Johann Schlichter, TU München 8.1. VERTEILTE ANWENDUNGEN

Clientmaschine Servermaschine

Client-Prozess
System-
aufruf
virtuelles Dateisystem virtuelles Dateisystem

lokal entfernt

Unix NFS Client NFS Server Unix


Dateisystem Netz Dateisystem
NFS
Protokoll

Namens-Service

Der Namens-Service (Directory-Service) stellt eine entfernte, zentralisierte


Namensverwaltung zur Verfügung. Namen beziehen sich auf Objekte; Beispiele
für Objekte sind Dateien, andere Server, Services, Drucker, aber auch Benutzer

Zeit-Service

Stellt eine synchronisierte Systemzeit für alle Rechner im Kommunikationsnetz


zur Verfügung.

8.1.6 World Wide Web


Das World Wilde Web ist organisiert nach der Client/Server Architektur.
"GET /index.html"
Web- Web-
Browser Server
Web-Seite
Client Server

 Zieladresse wird mit Hilfe einer URL angegeben

116
Johann Schlichter, TU München 8.2. ELECTRONIC COMMERCE

– Beispiel: http://www11.in.tum.de/lehre/vorlesungen/
– http:// gibt das Kommunikationsprotokoll an
– www11.in.tum.de gibt den Web-Server an
– lehre/vorlesungen/ gibt ein Verzeichnis/Dokument innerhalb des Web-
Servers an

 Aufbau einer Web-Seite


Eine Web-Seite besteht aus Tags, Inhalt und auch Skriptprogrammen bzw.
Java Applets.
<HTML>
<HEAD>
<TITLE>Ziel der Vorlesung</TITLE>
</HEAD>
<BODY>
<P>Diese Vorlesung gibt eine Einführung in die
Informatik; Es behandelt Themen wie:</P>
<UL>
<LI>Algorithmen und Datenstrukturen</LI>
<LI>Betriebssysteme</LI>
<LI>Rechnernetze</LI>
</UL>
</BODY>
</HTML>

8.2 Electronic Commerce


Die wichtigste globale Anwendung von Rechnernetzen ist heute Electronic
Commerce und Electronic Business.

8.2.1 E-Commerce und E-Business


Electronic Commerce

Electronic Commerce ist die elektronische Geschäftsabwicklung zwischen einem


Unternehmen und dem Endkunden (Konsumenten) - B2C (Business to Consumer)

 Zur Geschäftsabwicklung können gehören: Werbung, Produktinformation,


Bestellung, Bezahlung, Auslieferung, Support, Kundenbetreuung

117
Johann Schlichter, TU München 8.2. ELECTRONIC COMMERCE

Electronic Business

Im Gegensatz zu Electronic Commerce versteht man unter Electronic Business


meist die elektronische Geschäftsabwicklung zwischen Unternehmen - B2B
(Business to Business)

8.2.2 Verschiedene E-Commerce Stufen


Grundaufbau von E-Commerce-Anwendungen ist immer die Kombination von
normalen Web-Browsern auf Kundenseite mit Server-Anwendungen auf der
Firmenseite.
1. Homepage als elektronische Visitenkarte
 Überblick über das Unternehmen
 Information zur Tätigkeit evtl. mit Preislisten, Produktratgebern
2. Onlinekatalog
 Abbildung der Produkte und Textinformationen
 Suchfunktion
3. Onlineshop mit Bestellmöglichkeit
 Einkaufswagenfunktion
 Kasse
4. Kundenbeziehungsmanagement
 E-Mail-Kontakt
 WWW-Seiten mit personalisierten Inhalten
 Online-Communities

8.2.3 Probleme/Herausforderungen bei E-Commerce


 Auslieferung der Waren ("Bits und Atome") - gutes Logistikmanagement,
Abholstellen in Kundennähe
 Bezahlung der Waren - Kreditkarten, Rechnung, E-Cash
 Fehlen der Kundenbindung - Standortunabhängigkeit, schneller Preisver-
gleich möglich - Shops bieten deshalb häufig Zusatzleistungen (z.B. Web-
miles, besondere Zusatzinformation, Online-Communities)

118
Johann Schlichter, TU München 8.3. SICHERHEIT IN VERTEILTEN SYSTEMEN

8.2.4 Beispiele von Verteilten Anwendungen im E-Commerce


1. Web-Shop mit Zusatzdiensten: siehe Amazon (URL:
http://www.amazon.de)

 Klare Navigation, Suchfunktion, Tipps für Unentschlossene, Top-10


 Einkaufskorb
 Online-Community: Rezensionen von Kunden
 Personalisierte Angebote

2. Meinungs- und Testberichtsite: siehe Dooyoo (URL:


http://www.dooyoo.de)

 Unabhängige Zusammenstellung von Kundenmeinungen und Kunde-


nefahrungen
 Verschiedene Informationen zu den Bewertern (um Qualität der
Meinung einschätzen zu können)
 "Web-of-Trust"

3. Online-Communities

 Hauptziel ist die Unterstützung der Kommunikation zwischen Benut-


zern
 (Neben-)Ziel: Produktinformation, Produktsupport, Produktwerbung
 Beispiele: siehe Milka (URL: http://www.milka.de), Puschkin (URL:
http://www.puschkin.de)

8.3 Sicherheit in verteilten Systemen


Ein wichtiger Aspekt eines Rechnersystems besteht darin, dass Daten nicht
von Unbefugten abgefragt werden können. Bei nicht-vernetzten Systemen läßt
sich dies durch eine Sicherung des physikalischen Zugangs zu den Rechnern
und einfache Passwortsysteme garantieren. Bei verteilten Systemen werden
zusätzliche Dienste benötigt.

119
Johann Schlichter, TU München 8.3. SICHERHEIT IN VERTEILTEN SYSTEMEN

8.3.1 Sicherheitsanforderungen
 Garantierung der Identität eines Absenders (Identitätsprüfung, Authentifi-
zierung)

 Verhinderung von Mithören (Verschlüsselung)

 Sicherstellung der Integrität (Unverfälschtheit) von Nachrichten (Hash-


Werte)

 Verhinderung des Wiedereinspielens von Nachrichten (Integritätssicherung


und Zeitstempel)

8.3.2 Verschlüsselung
Verschlüsselung bedeutet, dass man Daten für die Übertragung oder Speicherung
so codiert, dass sie nur vom beabsichtigten Empfänger wieder in "Klartext"
zurückcodiert werden können. Für alle eventuellen "Mithörer" bleiben die Daten
eine uninterpretierbare Bitfolge.

 Es gibt zwei grundlegende Verfahrensklassen für die Verschlüsselung von


Daten: symmetrische Verschlüsselung und asymmetrische Verschlüsselung.

 Symmetrische Verschlüsselung
Beide Partner (Sender und Empfänger) kennen einen geheimen Schlüssel,
der zum Ver- und zum Entschlüsseln verwendet wird. Eine Kenntniss des
Schlüssels erlaubt Zugriff auf die Daten.
Schlüssel S Schlüssel S

Klartext Chiffre Chiffre Klartext

Sender Empfänger

– Austausch des geheimen Schlüssels über einen anderen, sicheren


Kommunikationskanal (z.B. persönlich, Brief)
– Für jede mögliche Verbindung wird ein eigener Schlüssel benötigt
(Falls derselbe Schlüssel für Nachrichten an B und C benutzt wird,
könnte C Nachrichten an B lesen).
– Beispiele: DES, Tripple DES, IDEA

120
Johann Schlichter, TU München 8.3. SICHERHEIT IN VERTEILTEN SYSTEMEN

Erweiterte Caesar-Chiffre

– Verschlüsselungsanweisung: Ersetze jeden Buchstaben im Original-


text durch den Buchstaben, der n Stellen im Alphabet weiter vorne
(rechts) steht.
– Entschlüsselungsanweisung: Ersetze jeden Buchstaben im verschlüs-
selten Text durch den Buchstaben, der n Stellen im Alphabet weiter
hinten (links) steht.
– Schlüssel: n (natürliche Zahl zwischen 0 und 26)
– Beispiel
 Originaltext: "VENI VIDI VICI", Schlüssel = 3
 verschlüsselter Text: "YHQL YLGL YLFL"

 Asymmetrische Kryptosysteme
Zum Ver- und Entschlüsseln werden verschiedene Schlüssel verwendet.
Es existiert ein personenbezogener privater Schlüssel und ein öffentlicher
Schlüssel, der allgemein zugänglich und jedem bekannt sein darf. Alle
Nachrichten, die mit einem Schlüssel codiert (chiffriert) worden sind,
können mit dem jeweils anderen Schlüssel wieder decodiert (dechiffriert)
werden.
Schlüssel S(Empf,pub) Schlüssel S(Empf, priv)

Klartext Chiffre Chiffre Klartext

Sender Empfänger

– Für sicheren Datenaustausch wird die Nachricht mit dem öffentlichen


Schlüssel des Empfängers verschlüsselt. Dann hat nur der Empfänger
selbst mit seinem privaten Schlüssel Zugang zum Inhalt.
– Geheimer Schlüssel darf nicht aus dem öffentlichen Schlüssel
ableitbar sein.
– Je länger der Schlüssel desto sicherer ist das System (Angriffsmög-
lichkeit durch Ausprobieren aller möglichen Schlüssel).
– Beispiel: RSA (Schlüssellänge für Home: 256 Bit, Standard: 512 Bit,
Militär: 1024 Bit)
– Verschlüsselung mit asymmetrischen Verfahren ist üblicherweise
langsamer als mit symmetrischen Verfahren (RSA etwa um den Faktor

121
Johann Schlichter, TU München 8.3. SICHERHEIT IN VERTEILTEN SYSTEMEN

1000 langsamer als DES). Deshalb werden die Verfahren in der Praxis
oft kombiniert.
– Nutzung des asymmetrischen Kryptoverfahrens zum Austausch des
geheimen Schlüssels

8.3.3 Identitätsprüfung
 Allgemeine Möglichkeiten

– Prüfe etwas, das die Person weiß (z.B. Passwort)


– Prüfe etwas, das die Person besitzt (z.B. Ausweis, Chipkarte)
– Prüfe eine physikalische Charakteristik der Person (z.B. Fingerab-
druck)
– Prüfe Ergebnis einer unbewussten Aktion der Person (z.B. Unter-
schrift)

 Grundproblem bei digitaler Übermittlung von Passworten oder anderen


Identitätsbeweisen in verteilten Systemen ist die Kopierbarkeit. Mögliche
Lösungen sind:

– Verschlüsselte Übermittlung des Passworts (immer noch kopierbar ...)


– Indirekte Übermittlung des Passworts: Verschlüsselung einer Zufalls-
sequenz, die man vom Server bekommt mit dem Passwort
 Eine andere Möglichkeit ist die "digitale Unterschrift".
 Digitale Unterschrift
Durch Senden eines, mit dem privaten Schlüssel verschlüsseltem Datums
kann man sich eindeutig ausweisen (eine Entschlüsselung ist nur mit dem
öffentlichen Schlüssel der Person möglich)

– Digitale Unterschrift = ( Name, [Name, Zeitstempel] mit privatem


Schlüssel verschlüsselt )
– Probleme mit sicherem Austausch von öffentlichen Schlüsseln
– Lösung für das Austauschproblem: Zertifikate
 Zertifikat: öffentlicher Schlüssel mit dem privaten Schlüssel einer
vertrauenswürdigen Stelle (Trust-Center) verschlüsselt
 Zertifikat wird mit digitaler Unterschrift mitgeschickt
 Vorteil: Empfänger muss nur der öffentlichen Schlüssel des Trust-
Centers haben

122
Kapitel 9

Datenbanken und
Informationssysteme

 Fragestellungen des Abschnitts:

– Was unterscheidet Dateisysteme von Datenbanksystemen?


– Wie kann die Struktur der Daten in einem Datenbanksystem
dargestellt werden?
– Was ist die Idee hinter Hypertextsystemen?

9.1 Dateisysteme
Dateisysteme bieten die Möglichkeit, eine Menge von Bytes unter einem
symbolischen Namen (Dateinamen) anzusprechen.

 Neben lokalen Dateisystemen gibt es immer mehr verteilte Dateisysteme,


die es Benutzern von mehreren Rechnern aus (teilweise über Web-Browser)
erlauben, auf dieselbe Menge von Dateien zuzugreifen. Zusatzfunktionen:
Volltextsuche, Notifikation, Workflowunterstützung, ... - Dokumentenma-
nagementsysteme

 Strukturierte Daten können abgelegt werden, indem sie Datensatz für


Datensatz (sequentiell) in die Datei geschrieben werden. Zum Auslesen
muß wieder Datensatz für Datensatz gelesen werden.

 Probleme mit Dateisystemen

123
Johann Schlichter, TU München 9.2. DATENBANKSYSTEME

– Die Interpretation der Inhalte (und der Struktur) bleibt den einzelnen
Anwendungen überlassen (Dateiformate).
 Das Modell für die Struktur ist fest in die benutzende Anwendung
integriert, d.h. die Datenstrukturen sind nicht vom Programm
unabhängig.
 Schwierigkeiten Dateien zwischen unterschiedlichen Anwendun-
gen auszutauschen. Die Anwendung müssen jeweils die interne
Struktur kennen.
 Alle Anwendungen lösen wiederholt die gleichen Aufgaben:
Speicherverwaltung, Änderungsdienst, Lesen und Speichern von
Daten, Zugriffsschutz.
– Neben diesem Hauptproblem mit Dateien ergeben sich besonders bei
der Verwaltung großer Mengen strukturierter Daten weitere Probleme.
 Zugriff und Änderung ist nur ineffizient implementierbar (wegen
Sequentialität der Daten)
 Ein gleichzeitiger Zugriff mehrere Benutzer (Prozesse) auf eine
Datei ist nicht möglich.
 Für das Rücksetzen nach Systemabstürzen (einmal pro Monat
...) stehen nur die Sicherheitskopien der kompletten Datei zur
Verfügung.
 Datenschutz nur auf die gesamte Datei anwendbar (nicht möglich
ist beispielsweise, dass die Sekretärin nur Adressen in den
Mitarbeiterdatensätzen sehen darf, nicht aber das Einkommen)

9.2 Datenbanksysteme
 Problem der Datenspeicherung und -organisation wird zentral (anwen-
dungsübergreifend) gelöst
 Datenbank = Menge von Daten, für die ein globales Modell bzgl. ihrer
Struktur festgelegt ist (Datenbankschema oder Datenmodell)
 Datenbanksystem (DBS) besteht aus einer Sammlung gespeicherter Daten
(Datenbank) sowie der Software, welche Dienste zur Speicherung und zum
Zugriff auf strukturierte Daten bereitstellt.
 Operationen zum Eintragen, Löschen, Suchen und Verknüpfen von Daten.
Wichtig ist die Verwaltung Daten mit langer Lebensdauer sowie der
effiziente Zugriff auf große Mengen von Daten (GBytes, TBytes).

124
Johann Schlichter, TU München 9.2. DATENBANKSYSTEME

 Beispiele

– Universitätsdatenbank
Die Universitätsdatenbank ist die Sammlung aller für die Abwicklung
der an einer Universität anfallenden Verwaltungsaufgaben benötigten
Daten. Eine Universität gliedert sich i.a. in mehrere Fachbereiche,
denen sowohl die Studenten als auch die Professoren und Mitarbei-
ter zugeordnet sind. Die Studenten belegen verschiedene Vorlesun-
gen von Professoren und legen bei ihnen Prüfungen ab. Typische
Anwendungen sind z.B.: Immatrikulation der Studienanfänger, Rück-
meldung der Studenten, Ausfertigen von Studentenausweisen und Stu-
dienbescheinigungen, Stundenplanerstellung und Planung der Raum-
belegung, Ausstellen von (Vor-)diplomzeugnissen, Exmatrikulation,
Statistiken über Hörerzahlen, Raumauslastung, Prüfungsergebnisse,
etc.
– Datenbank einer Fluggesellschaft
Eine Fluggesellschaft fliegt verschiedene Flughäfen an. Auf diesen
Flugstrecken werden Flugzeuge bestimmter Typen mit dafür ausge-
bildetem Personal eingesetzt. Die Piloten haben Flugscheine jeweils
nur für einige wenige Flugzeugtypen. Außer den Piloten gibt es noch
anderes Bord- sowie Bodenpersonal. Die Flugbuchungen der Passa-
giere sowie das Anfertigen der Passagierlisten werden ebenfalls au-
tomatisiert durchgeführt. Typische Anwendungen sind z.B.: Flug-
buchungen von Passagieren, Personaleinsatzplanung, Materialeinsatz-
planung, Flugplanerstellung, Überwachung der wartefristen, Gehalts-
abrechnung.

 Anforderungen an ein DBS

– Kontrolle über Daten


 Alle Daten können/müssen gemeinsam benutzt werden
Æ keine verstreuten privaten Daten
Æ Entwicklung neuer Anwendungen auf der existierenden
Datenbank
Æ Querauswertungen aufgrund inhaltlicher Zusammenhänge
Æ Erweiterung und Anpassung der Datenbank
 Eliminierung der Redundanz, damit Vermeidung von Inkonsisten-
zen
 Datenbankadministrator hat zentrale Verantwortung für Daten

125
Johann Schlichter, TU München 9.2. DATENBANKSYSTEME

– Kontrolle der Datenintegrität


 Automatisierte Zugriffskontrollen (Datenschutz).
 Erhaltung der logischen Datenintegrität, d.h. Überprüfung der
Richtigkeit von Daten.
 Notwendigkeit des kontrollierten Mehrbenutzer-Betriebs, d.h.
die parallel zugreifenden Benutzer sollen sich nicht gegenseitig
in die Quere kommen bzw. gegenseitig behindern (vgl. !
Synchronisation von Prozessen (siehe Seite 47)).
– Leichte Handhabbarkeit der Daten
Darunter fallen einfache Datenmodell zur Beschreibung der logische
Aspekte der Daten (deren bedeutung und Zusammehänge), leicht
erlernbare Sprache zum Zugriff bzw. Speichern von Daten in der
Datenbank (z.B. SQL)
– Datenunabhängigkeit
Darunter versteht man, dass die Anwendungen von der Organisation
und Speicherungen der Daten unabhängig sind.

 Datenbankentwurf / ER-Modell
Für den Entwurf von Datenbanken existieren einige Hilfsmittel. Das
bekannteste davon ist das Entity-Relationship-Modell.
1 N
Kunde Entleihe Buch

Entity Relationship Entity

– Graphisches Hilfsmittel zur sematischen Modellierung eines Anwen-


dungsgebietes, d.h. zum Entwurf einer Datenbank, unabhängig vom
konkreteten DBS
– Dient vor allem zur Kommunikation zwischen DB-Designer und
Auftraggeber.
– Grundidee: Reale Welt läßt sich durch Objekte und Beziehungen
zwischen Objekten beschreiben (Objekte: Entities, Beziehungen:
Relationships)
– Dabei stehen sowohl Entities und Relationships immer für eine
ganze Klasse von Objekten oder Beziehungen und nicht für einzelne
Datenelemente (Objektinstanzen)

126
Johann Schlichter, TU München 9.3. RELATIONALE DATENBANKSYSTEME

– Beispiele: Entities "Bibilotheksbenutzer", "Buch", Relationship "leiht


aus"
– Entities und Relationships können Attribute besitzen, z.B. Attribut
"Name" beim Entity "Bibliotheksbenutzer", "Entleihdatum" bei
Relationship "Entleihe"
– Relationships können verschiedene Typen haben: 1:1, 1:n, m:n
– Beispiele: 1 Kunde kann n Bücher ausleihen; 1 Buch kann nur von
einem Kunden ausgeliehen werden.

9.3 Relationale Datenbanksysteme


Mit Entity-Relationship-Diagrammen läßt sich das logische Modell einer
Datenbank darstellen. Wird diese Datenbank in einem DBS implementiert,
dann ist dieses logische Modell in ein physikalisches Modell zu transformieren.
Ein Beispiel für ein physikalisches Datenbankmodell ist das relationale
Datenbankmodell.

9.3.1 Allgemeine Eigenschaften


 Die Daten werden in einer Menge von Tabellen gespeichert. Normalerweise
eine Tabelle je Entity und eine Tabelle je Relationship (bei manchen 1:1
und 1:n Relationships sind Optimierungen möglich, die ohne eine eigene
Tabelle auskommen).

 Jede Tabelle hat einen Tabellennamen ("Relationenname") sowie Spalten


und Zeilen.

 Jede Zeile repräsentiert einen zusammengehörigen Datensatz; Zeile wird als


Tupel einer Relation aufgefasst; Spalten werden als Attribute bezeichnet.

 Jede Tabelle hat einen Primärschlüssel, durch den eine Zeile eindeutig
identifiziert ist.

 Die Ordnung der Zeilen ist ohne Bedeutung; durch ihre Reihenfolge wird
keine für den Benutzer relevante Information ausgedrückt.

 Die Ordnung der Spalten ist ohne Bedeutung, da sie einen eindeutigen
Namen (Attributnamen) tragen.

127
Johann Schlichter, TU München 9.3. RELATIONALE DATENBANKSYSTEME

 Alle für den Benutzer bedeutungsvolle Informationen sind ausschließlich


als Datenwerte in den Tabellen ausgedrückt.

 Beispiel

– Tabelle Kunde
Die Tabelle Kunde modelliert die Entity Kunde, d.h. jede Zeile
repräsentiert einen Kunden; Primärschlüssel ist die Kundennummer.

Kundennr Vorname Nachname PLZ Ort Strasse

– Tabelle Buch
Die Tabelle Buch modelliert die Entity Buch, d.h. jede Zeile
repräsentiert ein Buch; Primärschlüssel ist die Inventarnummer.

Inventarnr Titel Verlag Preis Erscheinungs-


datum

– Tabelle Entleihe
Die Tabelle Buch modelliert die Relationship "Kunde leiht Buch aus",
d.h. jede Zeile repräsentiert ein von einem Kunden ausgeliehenes
Buch; Primärschlüssel ist das Paar (Kundennummer, Inventarnum-
mer). Kundennr. bzw Inventarnr. sind jeweils Verweise auf Zeilen
in der Tabelle Kunde bzw. Buch.

Kundennr Inventarnr Datum

9.3.2 Abfragesprache SQL


"Structured Query Language": Suche und Ändern von Tabelleneintreigen; seit
1989 international genormt; für fast alle relationalen Datenbanken verfügbar;
Abfrage liefert als Ergebnis alle gefundenen Lösungen (d.h. Mengenorientiert)

Relationen

n-spaltige Tabellen repräsentieren Relationen, d.h. Relationen sind Mengen, auf


denen die Mengenoperationen ausgeführt werden können.

128
Johann Schlichter, TU München 9.3. RELATIONALE DATENBANKSYSTEME

 Mengenoperationen dienen als Basis für die Definition von Zugriffsopera-


tionen auf Datenbanken
Restriktion Projektion Natürlicher Join

a1 b1 b1 c1 a1 b1 c1
a2 b1 b2 c2 a2 b2 c1
a3 b2 b3 c3 a3 b2 c2

Tabelle Tabelle Tabelle

Tabelle Tabelle

 Restriktion: Auswahl von Zeilen einer Tabelle über Prädikate, z.B. Attribute
Ort = ’München’

 Projektion: Auswahl der Spalten einer Tabelle, z.B. aus der Tabelle Kunde
alle Nachnamen

 Natürlicher Join: Gleichverbund über alle gleichen Attribute und Projektion


über die verschiedenen Attribute; Attribute sind durch Übereinstimmungs-
bedingung gegeben

SELECT (Abfrage)

Finde alle Kunden, die in München wohnen:


SELECT Vorname, Nachname, Straße FROM Kunde WHERE Ort =
’München AND Strasse = ’Arcisstrasse’

INSERT (Einfügen)

INSERT INTO Entleihe VALUES (300, 100, ’01/12/97’)

UPDATE (Aktualisierung)

UPDATE Kunde SET PLZ = "80330" WHERE Strasse = ’Arcisstrasse’

9.3.3 Beispielsysteme
Miscrosoft Access, Microsoft SQL Server, Oracle, DB2 (IBM), Sybase, Informix

129
Johann Schlichter, TU München 9.4. HYPERTEXTSYSTEME

9.4 Hypertextsysteme
9.4.1 Definition
Hypertext

Definition nach Nelson: "Hypertext is a combination of natural language text with


the computer’s capacity for interactive branching, or dynamic display ... of a
nonlinear text ... which cannot be printed conveniently on a conventional page."

 Generischer Ansatz zur Konstruktion von nicht-linearen, computergestütz-


ten Material (Informationen); Benutzer kann Information in einer nicht-
linearen Reihenfolge am Bildschirm anzeigen.

 Eigenschaften

– Texteinheiten (Knoten), die durch Zeiger (Links) miteinander verbun-


den sind
– Links können linear sein (hierarchisch strukturierter Text) oder nicht-
linear (zyklisch).
– Verschiedene Link-Semantiken möglich.
– Benutzer (Leser) kann Text entlang den Links durchstöbern; Browsing
und Navigieren
– Links sind im Text erkennbar
– Modularisierung des Informationsraums in Informationseinheiten;
Definition von Verbindungen zwischen Informationseinheiten

Hypermedia

Inhalte sind gemäß dem Hypertextkonzept organisiert; Knoteninhalte beinhalten


verschiedene Medien (Ton, Graphik, Bilder, Video)

9.4.2 Navigation in Hypermedia


Orientierungsproblematik

Die Komplexität der Netzstruktur eines Hypermedia-Dokuments kann zu


folgenden Orientierungsproblemen bei der Navigation im Informationsraum
führen.

130
Johann Schlichter, TU München 9.4. HYPERTEXTSYSTEME

 Orientierungsprobleme

– Unsicherheit, wo man sich gerade - im Verhältnis zur gesamten


Information - im Hypermedia-Netzwerk befindet
– Unsicherheit, wie man zu einem bestimmten Punkt kommt, von dem
man annimmt, dass er im Hypermedia-Netzwerk existiert
– Schwierigkeit, das wiederzufinden, was man schon einmal gesehen hat
– Schwierigkeit, aus einem nicht weiterführenden Bereich zu sinnvollen
Stellen zurückzufinden
– Unsicherheit, ob man am Ende einer Recherche wirklich alles
Relevante gesehen hat

 Orientierungsprobleme haben meist ihren Ursprung in einer fehlerhaften


Konzeption und unzureichenden Modellierung des Hypertext-Netzwerks.

 Ergebnis: "Spagetti-Syndrom" oder "Lost in Hyperspace"

Konventionelle Navigationsmittel

 Direkter Einstieg
Knoten wird direkt angesteuert; Auswahl durch den Benutzer mittels
Kommando, Menu oder bekannte URL bzw. Auswahl aus Hotlist

 Inhaltsverzeichnisse
Erlauben direkte Ansteuerung von Knoten, die im Inhaltsverzeichnis
eingetragen sind; spiegelt meist die hierarchische Struktur der Information
im Hypermedia-Netzwerk wieder.

Hypermedia-spezifische Navigationsmittel

 Graphische Übersichten

– Abbildungstechnik zur graphischen Darstellung der Beziehungen zwi-


schen Informationseinheiten in Form einer Netz- oder Baumstruktur
(globalen Orientierung)
– Auf höherer Ebene können Ausschnitte vergrößert werden ("Zoo-
ming"); durch vergrößerung werden Knoten und Verknüpfungen im
Details sichtbar (lokale Orientierung)

131
Johann Schlichter, TU München 9.4. HYPERTEXTSYSTEME

 Bereitstellung von Pfaden (Guided Tours)

– Der Autor des Hypermedia-Dokuments spezifiziert vordefinierte


Pfade durch den Informationsraum, denen der Leser folgen kann
– Unterscheidung zwischen
 sequentielle Pfade: geordnete Reihenfolge von Knoten, die
thematisch zusammengehören
 verzweigende Pfade: Leser muß selbst bei der Auswahl von
Verzweigungsmöglichkeiten mitwirken
 bedingte Pfade: System entscheidet auf der Basis von Tests,
welche Richtung das System eingeschlagen werden soll.
– Pfade können an den temporalen Kontext des Benutzers angepasst
werden

 Rückverfolgung (Backtracking)

– System verwaltet Liste der n zuletzt erreichten Knoten (Historie)


– Listeneinträge können Identifikatoren der Knoten oder retrospektive
Übersicht des Knotenlayouts sein (Erscheinungsbild; appelliert an
visuelles Gedächtnis des Lesers)

 Markierung (Bookmarks)

– Benutzer markiert besuchte Knoten, die in einer separaten Liste


verwaltet werden; Leser definiert Fixpunkte im Informationsraum
– Liste kann über mehrere Sitzungen bestehenbleiben

132