Vogt | Nebenläufige Programmierung | E-Book | sack.de
E-Book

E-Book, Deutsch, 266 Seiten

Vogt Nebenläufige Programmierung

Ein Arbeitsbuch mit UNIX/Linux und Java
1. Auflage 2012
ISBN: 978-3-446-43201-7
Verlag: Hanser, Carl
Format: PDF
Kopierschutz: Adobe DRM (»Systemvoraussetzungen)

Ein Arbeitsbuch mit UNIX/Linux und Java

E-Book, Deutsch, 266 Seiten

ISBN: 978-3-446-43201-7
Verlag: Hanser, Carl
Format: PDF
Kopierschutz: Adobe DRM (»Systemvoraussetzungen)



In Computern und verteilten Systemen werden Programme meist nebenläufig, also zur selben Zeit ausgeführt. Dieses Lehr- und Übungsbuch vermittelt die bei der nebenläufigen Programmierung wichtigen Aspekte: Realisierung nebenläufiger Aktivitäten durch Prozesse und Threads, Synchronisation, Kommunikation und Kooperation. Es bietet ein leicht verständliche, praktische Einführung in die Programmierung nebenläufiger Anwendungen. Leserinnen und Leser werden mit der Begriffswelt und den Techniken der Nebenläufigkeit vertraut gemacht und in die Lage versetzt, entsprechende Probleme praktisch zu lösen - sowohl allgemein als auch mit UNIX/Linux-C und mit Java.
Das Buch beschränkt sich bewusst auf die Programmierung nebenläufiger Software mit den Mitteln, die weit verbreitete Sprachen wie C unter UNIX/Linux oder Java bereitstellen. Hardware-Nebenläufigkeit wird daher nur sehr knapp behandelt. In vier Hauptkapiteln werden Begriffe, Techniken, Probleme und Lösungen bei der Erstellung nebenläufiger Programme behandelt. Die Themen werden zunächst unabhängig von einer bestimmten Programmiersprache diskutiert und dann am Beispiel der C-Schnittstelle von UNIX/Linux sowie von Java in die Programmierpraxis umgesetzt. Jedem der Hauptkapitel ist eine umfangreiche Sammlung von Aufgaben zugeordnet, von denen ein Teil unter http://www.fh-koeln.de/nebenlaeufigkeit zu finden ist.
Vogt Nebenläufige Programmierung jetzt bestellen!

Autoren/Hrsg.


Weitere Infos & Material


1;Vorwort;6
2;Inhalt;8
3;1 Einführung;14
4;2 Basistechniken;20
4.1;2.1 Formen der Nebenläufigkeit;21
4.1.1;2.1.1 Hard- und Software – eine Kurzeinführung;21
4.1.1.1;2.1.1.1 Computer-Hardware;21
4.1.1.2;2.1.1.2 Computer-Software;22
4.1.2;2.1.2 Nebenläufigkeit in Hardware;23
4.1.3;2.1.3 Nebenläufigkeit in Software;25
4.2;2.2 Die Rolle des Betriebssystems;26
4.2.1;2.2.1 Systemarchitekturen;26
4.2.1.1;2.2.1.1 Aufgaben und Schnittstellen;26
4.2.1.2;2.2.1.2 Virtualisierung;29
4.2.1.3;2.2.1.3 Netzdienste und verteilte Systeme;31
4.2.2;2.2.2 Betriebsarten;33
4.2.3;2.2.3 Prozesse und Threads;35
4.2.3.1;2.2.3.1 Prozesse;35
4.2.3.2;2.2.3.2 Threads;37
4.2.3.3;2.2.3.3 Der Lebenszyklus;38
4.2.4;2.2.4 Implementierungsaspekte;40
4.2.4.1;2.2.4.1 Buchführung;40
4.2.4.2;2.2.4.3 Scheduling;41
4.3;2.3 Prozesse und Threads in UNIX/Linux;43
4.3.1;2.3.1 Kommandos der Benutzerschnittstelle;43
4.3.2;2.3.2 Grundlegende API-Funktionen für Prozesse;46
4.3.2.1;2.3.2.1 Die Funktion fork();47
4.3.2.2;2.3.2.2 Weitere Funktionen;49
4.3.2.3;2.3.2.3 Programmbeispiele;51
4.3.3;2.3.3 Grundlegende API-Funktionen für Threads;56
4.3.3.1;2.3.3.1 Pthreads: pthread_create(), pthread_exit();56
4.3.3.2;2.3.3.2 Pthreads: pthread_join(), pthread_cancel();59
4.3.3.3;2.3.3.3 vfork() und clone();60
4.4;2.4 Threads in Java;61
4.4.1;2.4.1 Die Klasse Thread;61
4.4.1.1;2.4.1.1 run() und start();62
4.4.1.2;2.4.1.2 join();64
4.4.1.3;2.4.1.3 Weitere Methoden;65
4.4.2;2.4.2 Grundlegende Programmiertechniken;65
4.4.2.1;2.4.2.1 Zugriff auf gemeinsame Variablen;65
4.4.2.2;2.4.2.2 Beenden von Threads;66
4.5;2.5 Zusammenfassung und Ausblick;68
5;2A Basistechniken: Aufgaben;70
5.1;2A.1 Wissens- und Verständnisfragen;70
5.2;2A.2 Sprachunabhängige Anwendungsaufgaben;72
5.3;2A.3 Programmierung unter UNIX/Linux;74
5.4;2A.4 Programmierung in Java;76
6;3 Synchronisation;80
6.1;3.1 Synchronisationsbedingungen;80
6.1.1;3.1.1 Elementare Bedingungen;80
6.1.1.1;3.1.1.1 Wechselseitiger Ausschluss;81
6.1.1.2;3.1.1.2 Reihenfolgebedingung;82
6.1.2;3.1.2 Komplexere Probleme;83
6.1.2.1;3.1.2.1 Erzeuger-Verbraucher-Problem;84
6.1.2.2;3.1.2.2 Leser-Schreiber-Problem;84
6.1.2.3;3.1.2.3 Philosophenproblem;85
6.2;3.2 Einfache Synchronisationsmechanismen;85
6.2.1;3.2.1 Grundlegende Eigenschaften;86
6.2.2;3.2.2 Interruptsperren;86
6.2.3;3.2.3 Spinlocks;87
6.2.4;3.2.4 Signale und Events;91
6.3;3.3 Synchronisation durch Semaphore;92
6.3.1;3.3.1 Arbeitsprinzip von Semaphoren;92
6.3.1.1;3.3.1.1 Datenstrukturen und Operationen;92
6.3.1.2;3.3.1.2 Semaphoroperationen in Bild und Notation;94
6.3.1.3;3.3.1.3 Varianten und Erweiterungen;96
6.3.2;3.3.2 Einsatz bei Standardproblemen;97
6.3.2.1;3.3.2.1 Wechselseitiger Ausschluss;97
6.3.2.2;3.3.2.2 Reihenfolgebedingung;98
6.3.2.3;3.3.2.3 Erzeuger-Verbraucher-Problem;99
6.3.2.4;3.3.2.4 Leser-Schreiber-Problem;100
6.3.2.5;3.3.2.5 Philosophenproblem;102
6.3.3;3.3.3 Systematische Lösung von Problemen;103
6.3.4;3.3.4 Fehlerquellen;106
6.3.4.1;3.3.4.1 Deadlocks: Problematik;107
6.3.4.2;3.3.4.2 Deadlocks: Lösungen;108
6.3.4.3;3.3.4.3 Missachtung der Atomarität;109
6.3.4.4;3.3.4.4 Einsatz von sleep();110
6.3.4.5;3.3.4.5 Mangelnde Fairness;110
6.4;3.4 Synchronisation durch Monitore;111
6.4.1;3.4.1 Grundprinzip von Monitoren;111
6.4.1.1;3.4.1.1 Definition des Monitorbegriffs;111
6.4.1.2;3.4.1.2 Beispiel: Einfacher Ringpuffer mit Überschreiben;112
6.4.2;3.4.2 Bedingungsvariablen;113
6.4.2.1;3.4.2.1 Zweck und Einsatz;113
6.4.2.1.1;3.4.2.2 Beispiel: Ringpuffer für Erzeuger/Verbraucher;115
6.4.2.2;3.4.2.2 Beispiel: Ringpuffer für Erzeuger/Verbraucher;115
6.4.3;3.4.3 Lösung weiterer Standardprobleme;116
6.4.3.1;3.4.3.1 Reihenfolgebedingung;116
6.4.3.2;3.4.3.2 Leser-Schreiber-Problem;117
6.4.3.3;3.4.3.3 Philosophenproblem;118
6.5;3.5 Mechanismen in UNIX/Linux;119
6.5.1;3.5.1 Signale;119
6.5.2;3.5.2 Lock-Dateien;121
6.5.3;3.5.3 Semaphore;122
6.5.3.1;3.5.3.1 Erzeugen von Semaphorgruppen;122
6.5.3.2;3.5.3.2 Initialisieren und Löschen;124
6.5.3.3;3.5.3.3 P- und V-Operationen;126
6.5.3.4;3.5.3.4 Programmstrukturen und -beispiele;128
6.5.4;3.5.4 Mutexe mit Bedingungsvariablen;133
6.5.4.1;3.5.4.1 Mutexe;133
6.5.4.2;3.5.4.2 Bedingungsvariablen;133
6.5.4.3;3.5.4.3 Beispiel: Erzeuger-Verbraucher mit Ringpuffer;134
6.6;3.6 Mechanismen in Java;136
6.6.1;3.6.1 Atomare Operationen;136
6.6.1.1;3.6.1.1 Basistypen;136
6.6.1.2;3.6.1.2 Collections;137
6.6.2;3.6.2 Semaphore;137
6.6.2.1;3.6.2.1 Die Klasse Semaphore;137
6.6.2.2;3.6.2.2 Beispiel: Reihenfolgebeziehung;138
6.6.3;3.6.3 Monitore;139
6.6.3.1;3.6.3.1 synchronized;139
6.6.3.2;3.6.3.2 wait() und notify();141
6.6.3.3;3.6.3.3 Die Interfaces Lock und Condition;143
6.6.4;3.6.4 Weitere Mechanismen;144
6.7;3.7 Zusammenfassung und Ausblick;145
7;3A Synchronisation: Aufgaben;148
7.1;3A.1 Wissens- und Verständnisfragen;148
7.2;3A.2 Sprachunabhängige Anwendungsaufgaben;151
7.3;3A.3 Programmierung unter UNIX/Linux;156
7.4;3A.4 Programmierung in Java;159
8;4 Kommunikation;162
8.1;4.1 Grundlegende Begriffe;162
8.1.1;4.1.1 Arten der Kommunikation;162
8.1.2;4.1.2 Sender-Empfänger-Beziehungen;164
8.1.2.1;4.1.2.1 Ein oder mehrere Sender und Empfänger;164
8.1.2.2;4.1.2.2 Direkte vs. indirekte Kommunikation;165
8.1.2.3;4.1.2.3 Enge vs. lose zeitliche Kopplung;166
8.1.3;4.1.3 Kommunikation in Rechnernetzen;167
8.1.3.1;4.1.3.1 Schnittstellen: Sockets;167
8.1.3.2;4.1.3.2 Protokolle und Protokollstacks;168
8.1.3.3;4.1.3.3 Der Protokollstack des Internets;170
8.2;4.2 Techniken in UNIX/Linux;171
8.2.1;4.2.1 Shared Memory;172
8.2.1.1;4.2.1.1 API-Funktionen;172
8.2.1.2;4.2.1.2 Programmbeispiel: Erzeuger-Verbraucher-System;174
8.2.2;4.2.2 Pipes;175
8.2.2.1;4.2.2.1 Benannte Pipes;176
8.2.2.2;4.2.2.2 Unbenannte Pipes;177
8.2.3;4.2.3 Message Queues;178
8.2.3.1;4.2.3.1 API-Funktionen: Erzeugen und Löschen;178
8.2.3.2;4.2.3.2 API-Funktionen: Senden und Empfangen;179
8.2.3.3;4.2.3.3 Programmbeispiel: Erzeuger-Verbraucher-System;182
8.2.4;4.2.4 Sockets;183
8.2.4.1;4.2.4.1 Domains und Typen;183
8.2.4.2;4.2.4.2 API-Funktionen: Übersicht;184
8.2.4.3;4.2.4.3 API-Funktionen: Erzeugen und Schließen;186
8.2.4.4;4.2.4.4 API-Funktionen: Verbinden und Kommunizieren;188
8.2.4.5;4.2.4.5 Programmbeispiel: Stream-Sockets;189
8.2.4.6;4.2.4.6 Programmbeispiel: Datagram-Sockets;192
8.3;4.3 Techniken in Java;194
8.3.1;4.3.1 Übersicht;194
8.3.2;4.3.2 Piped Streams;195
8.3.3;4.3.3 Sockets;197
8.3.3.1;4.3.3.1 Stream-Sockets;198
8.3.3.2;4.3.3.2 Datagram-Sockets;201
8.4;4.4 Zusammenfassung und Ausblick;203
9;4A Kommunikation: Aufgaben;206
9.1;4A.1 Wissens- und Verständnisfragen;206
9.2;4A.2 Sprachunabhängige Anwendungsaufgaben;209
9.3;4A.3 Programmierung unter UNIX/Linux;210
9.4;4A.4 Programmierung in Java;214
10;5 Kooperation;218
10.1;5.1 Modelle und Techniken;218
10.1.1;5.1.1 Das Client-Server-Modell;218
10.1.1.1;5.1.1.1 Grundlegende Struktur;219
10.1.1.2;5.1.1.2 Zeitliche Abläufe;219
10.1.1.3;5.1.1.3 Implementierungsaspekte;221
10.1.2;5.1.2 Das Peer-to-Peer-Modell;222
10.1.3;5.1.3 Programmiertechniken;223
10.1.3.1;5.1.3.1 Prozedurorientierte Kooperation;223
10.1.3.2;5.1.3.2 Objektorientierte Kooperation;225
10.1.3.3;5.1.3.3 Webbasierte Kooperation;226
10.2;5.2 Techniken in UNIX/Linux;227
10.2.1;5.2.1 Kooperation über Sockets;227
10.2.2;5.2.2 Remote Procedure Call (RPC);229
10.2.2.1;5.2.2.1 Komponenten und ihr Zusammenspiel;229
10.2.2.2;5.2.2.2 Schritte der Programmierung;231
10.3;5.3 Techniken in Java;235
10.3.1;5.3.1 Remote Method Invocation (RMI);235
10.3.1.1;5.3.1.1 Komponenten und ihr Zusammenspiel;235
10.3.1.2;5.3.1.2 Schritte der Programmierung;236
10.3.2;5.3.2 Dynamische Webseiten;239
10.3.2.1;5.3.2.1 Applets;239
10.3.2.2;5.3.2.2 Servlets und Java Server Pages;241
10.3.3;5.3.3 Web Services;242
10.4;5.4 Zusammenfassung;244
11;5A Kooperation: Aufgaben;246
11.1;5A.1 Wissens- und Verständnisfragen;246
11.2;5A.2 Sprachunabhängige Anwendungsaufgaben;248
11.3;5A.3 Programmierung unter UNIX/Linux;250
11.4;5A.4 Programmierung in Java;251
12;Literatur und Internet;254
12.1;Internet-Quellen;255
13;Index;256


Basistechniken - Grundlegende Techniken der NebenläufigkeitSynchronisation - gegenseitige Abstimmung von Prozessen und ThreadsKommunikation - Übertragung von Daten zwischen Prozessen und ThreadsKooperation - Zusammenarbeit von Prozessen


Dr. Carsten Vogt ist Professor am Institut für Nachrichtentechnik der Fachhochschule Köln. Er lehrt dort Programmierung in Java und C, Betriebssysteme / Verteilte Systeme sowie Mobilgeräteprogrammierung.



Ihre Fragen, Wünsche oder Anmerkungen
Vorname*
Nachname*
Ihre E-Mail-Adresse*
Kundennr.
Ihre Nachricht*
Lediglich mit * gekennzeichnete Felder sind Pflichtfelder.
Wenn Sie die im Kontaktformular eingegebenen Daten durch Klick auf den nachfolgenden Button übersenden, erklären Sie sich damit einverstanden, dass wir Ihr Angaben für die Beantwortung Ihrer Anfrage verwenden. Selbstverständlich werden Ihre Daten vertraulich behandelt und nicht an Dritte weitergegeben. Sie können der Verwendung Ihrer Daten jederzeit widersprechen. Das Datenhandling bei Sack Fachmedien erklären wir Ihnen in unserer Datenschutzerklärung.