Ernst 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