Table Of ContentErnst A. Heinz
Parallele Programmierung
mit Modula-2
___ Aus dem Bereich
Computerliteratur
Microsoft QuickBASIC - Toolbox für Programmierer
von J. C. Craig - Ein Microsoft Press/Vieweg-Buch
Turbo Pascal 5.0/5.5 Units und Utilites
von A. Liebetrau - Vieweg Software
Turbo Pascal 5.5 von A ... Z
von AI Liebetrau
Turbo Pascal Wegweiser
Grundkurs· Aufbaukurs . Kompaktkurs
von E. Kaier
Effektiv Programmieren in C
von D. Herrmann
Effektiv Programmieren mit Turbo Pascal 5.0/5.5
von eh. Emmanuilidis und Sp. Alexakis
Das Modula-2 Umsteigerbuch
Von Turbo Pascal zu TopSpeed Modula-2
von R. Abdelhamid
Paralelle Programmierung mit Modula-2
von E. A. Heinz
Top Speed Modula-2 griffbereit
von A. Liebetrau
_______ Vieweg __________________
Ernst Ä. Heinz
PARALLELE
PROGRAMMIERUNG
MIT
MODULA·2
11
vleweg
CIP-Titelaufnahme der Deutschen Bibliothek
Heinz, Ernst A.:
Parallele Programmierung mit MODULA-2/ Ernst A. Heinz. -
Braunschweig; Wiesbaden; Vieweg, 1990
ISBN 978-3-663-01985-5
ISBN 978-3-663-01985-5 ISBN 978-3-663-01984-8 (eBook)
DOI 10.1007/978-3-663-01984-8
Das in diesem Buch enthaltene Programm-Material ist mit keiner Verpflichtung oder Garantie irgend
einer Art verbunden. Die Autoren und der Verlag übernehmen infolgedessen keine Verantwortung und
werden keine daraus folgende oder sonstige Haftung übernehmen, die auf irgendeine Art aus der
Benutzung dieses Programm-Materials oder Teilen davon entsteht.
Der Verlag Vieweg ist ein Unternehmen der Verlagsgruppe Bertelsmann International.
Alle Rechte vorbehalten
© Friedr. Vieweg & Sohn Verlagsgesellschaft mbH, Braunschweig 1990
Softcover reprint ofthe hardcover 1s t edition 1990
Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede
Verwertung außerhalb der engen Grenzen des Urheberrechtsgesetzes ist ohne
Zustimmung des Verlags unzulässig und strafbar. Das gilt insbesondere für
Vervielfältigungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung
und Verarbeitung in elektronischen Systemen.
Umschlaggestaltung: Schrimpf + Partner, Wiesbaden
Druck und buchbinderische Verarbeitung: Lengericher Handelsdruckerei, Lengerich
ISBN 978-3-663-01985-5
v
Vorwort
Schon seit geraumer Zeit beherrschen parallele Architekturen die Szene der
leistungsfähigsten Supercomputer unserer Welt. Angesichts der theoretischen
Leistungsgrenzen der zur Chip-Herstellung einsetzbaren Technologien werden
zukünftige Steigerungen der Rechenleistung von Computersystemen mehr und
mehr abhängig sein von innovativen Konzepten zur Regelung des Zusammen
spiels der einzelnen Systemkomponenten. Die Parallelisierung der Programm
abarbeitung avanciert in diesem Zusammenhang zur Grundlage jeglicher
Überlegungen.
Die oben angesprochene Entwicklung im Hardware-Bereich erweist sich als
eine natürliche Konsequenz der mannigfaltigen Parallelisierungsbemühungen
bei der Software-Erstellung, die sich bis zum Anfang des Computerzeitalters
zurückverfolgen lassen. Um die vorhandenen Rechner bestmöglichst auszunut
zen, boten Betriebssysteme bereits sehr früh (um 1960) die Möglichkeit, meh
rere Programme gleichzeitig auf nur einem einzigen Zentralprozessor ablaufen
zu lassen. Diese Quasi-Parallelverarbeitung beruht auf einem allgemeinen Pro
zeßkonzept, das die Informatik inzwischen gut im Griff hat. Bei der Erstellung
parallel arbeitender Programme spielt es jedoch keine Rolle, ob das betreffende
System echte Parallelverarbeitung seitens der Hardware unterstützt oder ledig
lich Quasi-Parallelverarbeitung auf Softwarebasis bietet.
Obwohl Parallelverarbeitung und parallele Programmierung laut der obigen
Ausführungen also hochaktuelle und zukunfsträchtige Themen sind, besteht für
die Allgemeinheit bisher kaum eine Chance, sich damit in der Praxis aktiv aus
einanderzusetzen. Denn zur Zeit wird Parallelverarbeitung nur auf ganz weni
gen Mikrocomputern der Personal- und Homecomputer-Klasse unterstützt.
Aber auch Computerbegeisterten, die Zugang zu größeren Systemen haben,
fällt der Einstieg ins Gebiet der Parallelverarbeitung oft schwer, weil her
kömmliche Programmiersprachen wie Cobol, Fortran, Pascal oder C die par
allele Programmierung meist nicht unterstützen.
Hier setzt nun das vorliegende Buch an. Ihm liegt die Idee zugrunde, die wich
tigsten Begriffe, Techniken und Probleme der parallelen Programmierung an
hand solcher Möglichkeiten zu vermitteln, die in einer weit verbreiteten Stan
dardprogrammiersprache gegebenen sind. Warum zu diesem Zweck ausge
rechnet Modula-2 gewählt wurde, erfahren Sie in der "Einleitung und Einfüh
rung" .
Der Intention des Werks entspricht sowohl die absichtlich lockere Formulie
rung, die gerade schwierige Sachverhalte leichter verständlich macht, als auch
VI Vorwort
die starke Praxisorientierung sämtlicher Kapitel. Es wird insbesondere darauf
Wert gelegt, daß der Leser selbst soviel eigene Praxiserfahrung wie möglich
sammelt. Die Behandlung des nötigen theoretischen Hintergrunds ist dabei eine
Selbstverständlichkeit. Allerdings wird auf ein tieferes theoretisches Eindrin
gen in den meisten Fällen verzichtet. Diesbezügliche Anregungen mit entspre
chenden Literaturangaben finden sich jedoch in allen Kapiteln.
Der beschriebene Verzicht auf tiefgreifende theoretische Untersuchungen hat
den Vorteil, daß in den einzelnen Kapiteln eine breit angelegte Vielfalt spe
zieller Themen behandelt werden kann. Diese reicht von zellulären Automaten
und dem Problem der stabilen Heirat in Kapitell, über parallele Matrizenmul
tiplikation und einen Virusprozeß in Kapitel 3 bis hin zu Handlern und einem
eigenen kleinen Betriebssystemrumpf in Kapitel 6. Weiterfiihrende Anregun
gen fiir eigene praktische Arbeiten wie Z.B. der parallelen Implementation neu
ronaler Netze findet der Leser am Ende eines jeden Kapitels.
Bei der Gestaltung des Buchs habe ich besonderen Wert darauf gelegt, niemals
Langeweile aufkommen zu lassen und sämtliche Themen derartig aufzuberei
ten, daß sie sowohl fiir Informatiker als auch fiir Fachfremde von Nutzen und
Interesse sind.
Ihnen, lieber Leser, wünsche ich viel Freude und Erkenntnis bei der Lektüre
meines Buchs!
Karlsruhe, im Dezember 1989
Ernst A. Heinz
VII
Inhaltsverzeichnis
1 Coroutine ............................................................................ 7
1.1 Coroutinen und die Quasi-Nebenläufigkeit .............................. 7
1.1.1 Das Coroutinen-Konzept .......................................... 8
1.1.2 Die Coroutinen ...................................................... 8
1.2 Coroutinen-Variablen und ihre Verwaltung ............................ 10
1.2.1 Die dynamische Erzeugung von Coroutinen .................. l0
1.2.2 Der Arbeitsspeicher und Kontrollblock ....................... 11
1.2.3 Die Übergabe der Ablaufkontrolle ............................. 12
1.3 Einfache Beispielprogramme mit Coroutinen .......................... 13
1.3.1 Das erste Coroutinenprogramm ................................. 14
1.3.2 Erste Ausnutzung der Feinheiten von 1RANSFER .......... 18
1.4 Coroutinen und Parameterübergabe ..................................... 20
1.4.1 Informationsaustausch mittels globaler Variablen ........... 21
1.4.2 Die Quasi-Parameterübergabe an Coroutinen ................ 21
1.5 Coroutinen als zelluläre Automaten ..................................... 25
1.5.1 Ein wenig Automatentheorie .................................... 26
1.5.2 Die parallele Simulation von zellulären Automaten ......... 27
1.5.3 Ein paralleles Life-Programm auf Coroutinenbasis ......... 28
1.5.4 Die Berechnung des nächsten Life-Zustands ................. 34
1.6 Coroutinen als Alternative zur Rekursion .............................. 35
1.6.1 Das Problem der stabilen Heirat ................................ 36
1.6.2 Ein rekursiver Lösungsansatz ................................... 36
1.6.3 Implementation einer Lösung auf Coroutinenbasis .......... 37
1.6.4 Die speziellen Coroutinen für Männer und Frauen .......... 45
1.7 Coroutinen als Objektmanager .......................................... .47
1.7.1 Das Grundkonzept eines Objektmanagers ..................... 47
1.7.2 Ein Bibliotheksmodul für einen Stapelmanager .............. 48
1.8 Zusammenfassung .......................................................... 60
1.9 Anregungen und Aufgaben ................................................ 61
2 Prozess .............................................................................. 63
2.1 Der Prozeßbegriff ........................................................... 63
2.1.1 Coroutinen als Prozesse .......................................... 63
2.1.2 Der allgemeine Prozeßbegriff ................................... 64
2.2 Die Koordination der Prozeßausführung ................................ 65
2.2.1 Die Prozeßzustände und Zustandsübergänge ................. 66
2.2.2 Deadlocks und die Fairness der Kontrollvergabe ............ 68
2.2.3 Dispatching und das Zeitscheibenverfahren .................. 69
VIII Inhaltsverzeichnis
2.3 Das Problem der Prozeßsynchronisation ............................... 70
2.3.1 Die verschiedenen Synchronisationsmaßnahmen ............ 71
2.4 Das Problem der Prozeßkooperation .................................... 73
2.4.1 Kommunikationskanäle ........................................... 74
2.4.2 Die Abhängigkeiten kooperierender Prozesse ................ 74
2.5 Zusammenfassung .......................................................... 76
3 Zentrales Dispatchen ............................................................. 77
3.1 Das Prinzip des zentralen Dispatchens .................................. 77
3.1.1 Das Zeitscheibenmodell .......................................... 77
3.2 Implementation eines zentralen Dispatchers ........................... 79
3.2.1 Das Definitionsmodul des "CentralDispatcher" ............. 80
3.2.2 Das Implementationsmodul des "CentralDispatcher" ...... 84
3.2.3 Die Dispatcher-Coroutine ....................................... 92
3.2.4 Deadlock durch Löschen des letzten Prozesses .............. 95
3.3 Prozeßfutter für den "CentralDispatcher" .............................. 95
3.3.1 Das erste Programm mit· echten Prozessen .................... 96
3.3.2 Ein vermehrungswütiger Virusprozeß ....................... 101
3.3.3 Parallele Multiplikation von Matrizen ....................... 103
3.4 Synchronisation durch Prozeßblockade ............................... 107
3.4.1 Nutzen und Nachteile der Prozeßblockade .................. 108
3.4.2 Integritätsüberprüfung für Systemdatenstrukturen ........ 109
3.5 Synchronisation durch autorisierten Datenzugriff. .. ..... . . .. . . . . . .. 114
3.5.1 Das Sperren von Datenstrukturen ............................ 115
3.5.2 Die Simulation einer Software-Uhr .......................... 116
3.6 Zusammenfassung ........................................................ 120
3.7 Anregungen und Aufgaben .............................................. 121
4 Signale ............................................................................. 123
4.1 Funktion und Bedeutung von Signalen ................................ 123
4.1.1 Die Struktur von Signalen ..................................... 124
4.1.2 Die Übertragung von Signalen ................................ 125
4.1.3 Signale als Kommunikationsmittel ........................... 125
4.2 Der abstrakte Datentyp SIGNAL ....................................... 126
4.2.1 Operationen auf Objekten vom Typ SIGNAL. .............. 126
4.2.2 Die Semantik des Sendens von Signalen .................... 127
4.3 Implementation eines Signal-gesteuerten Prozeßsystems .......... 130
4.3.1 Das Definitionsmodul des "SignalSystem" .................. 130
4.3.2 Die Prozeßliste des "SignalSystem" .......................... 134
4.3.3 Das Implementationsmodul des "SignalSystem" ........... 136
4.3.4 Signalwarteschlangen und die Prozeßliste .................. 146
4.3.5 Der Prozeß für das Hauptmodul .............................. 149
4.3.6 Die Funktionsweise der exportierten Prozeduren .......... 150
4.3.7 Deadlocksituationen unter dem "SignalSystem" ........... 153
Inhaltsverzeichnis IX
4.4 Beispielprogramme zur Anwendung des Signalsystems ........... 154
4.4.1 Simulation eines zentralen Dispatchers ...................... 154
4.4.2 Handler und ihre Implementation ............................. 159
4.4.3 Mehrere Handler und Prozesse im Zusammenspiel ....... 166
4.4.4 Paralleles Suchen in Folgen ................................... 170
4.4.5 Ein Puffermonitor aufSignalbasis ............................ 173
4.5 Das Konsument-Produzent Modell .................................... 177
4.6 Zusammenfassung ........................................................ 182
4.7 Anregungen und Aufgaben .............................................. 182
S Semaphore ........................................................................ 184
5.1 Die Funktion und Handhabung von Semaphoren ................... 184
5.1.1 Die Bedeutung der Operationen P und V.................... 185
5.1.2 Semaphore und gegenseitiger Ausschluß .................... 186
5.2 Implementation von Semaphoren aufSignalbasis ................... 188
5.2.1 Das Definitionsmodul fiir "Semaphores" ................... 188
5.2.2 Das Implementationsmodul fiir "Semaphores" ............. 189
5.3 Zusammenfassung ........................................................ 192
5.4 Anregungen und Aufgaben .............................................. 192
6 Botschaften ....................................................................... 193
6.1 Die Funktion und Bedeutung von Botschaften ....................... 193
6.1.1 Die Struktur von Botschaften .................................. 193
6.1.2 Der Austausch von Botschaften ............................... 194
6.2 Prozeßkommunikation mittels Botschaften ........................... 196
6.2.1 Synchroner und asynchroner Botschaftsaustausch ......... 196
6.2.2 Kommunikationskanäle und Pipelines ....................... 197
6.2.3 Handler auf Botschaftsbasis ................................... 198
6.3 Irnplementation eines Botschaftssystems .............................. 200
6.3.1 Das Definitionsmodul fiir "Messages" ....................... 200
6.3.2 Die Mailboxen und Ports von "Messages" .................. 203
6.3.3 Das Implementationsmodul fiir "Messages" ................ 204
6.3.4 Botschaftsempfang durch "busy waiting" ................... 216
6.4 Beispielprogramme zur Anwendung des Botschaftssystems ...... 218
6.4.1 Ein erweitertes Konsument-Produzent Modell ............. 218
6.4.2 Der Rumpf eines kleinen Betriebssystems .................. 224
6.5 Zusammenfassung ........................................................ 233
6.6 Anregungen und Aufgaben .............................................. 234
x Inhaltsverzeichnis
Schlußwort ............................................................................. 235
Anhang A .. Das neue Bibliotheksmodul "Coroutines ••••••••••••••••••••••• 236
Anhang B - Die Begleitdiskette zum Buch ••••••••••••••••••••••••••••••••••••• 238
Abbildungsverzeichnis .............................................................. 239
Verzeichnis der Programme ....................................................... 241
Sachwortverzeichnis ................................................................. 242