Zusammenfassung
Ein Programm kann als eine auf einem Prozessor ablaufende Problemlösung verstanden werden. Es wird durch sequentiell ausführbare Instruktionen beschrieben, wobei die sequentielle Ausführung durch Sprungbefehle durchbrochen sein kann. Prozeduren und Prozesse bilden die Bausteine von Problemlösungen. Prozeduren — auf einem höheren Abstraktionsniveau realisierte Operatoren — stellen eine Zerlegung eines Programms dar, sind damit Ausdrucksform der hierarchischen Strukturierung des Programms, des “zeitlichen Ineinanders” (Wettstein 1987). Im Gegensatz dazu ist ein Prozeß eine funktionelle Einheit, die aus einem zeitlich invarianten Programm, einem Satz von Eingangsdaten, mit denen der Prozeß initialisiert wird, und einer zeitlich Varianten Belegung von Variablen besteht (Ungerer 1989). Der Prozeßbegriff bezeichnet damit ein potentiell oder tatsächlich auf einem Prozessor ablaufendes Programm bzw. einen selbständig ablauffahigen Teil eines Programms. Der Unterschied von Prozedur und Prozeß besteht darin, daß eine Prozedur in jedem Fall die Kontrolle an das aufrufende Programm zurückgibt, während nach einem Prozeßaufruf der aufgerufene Prozeß “eine vom aufrufenden Prozeß unabhängige Lebensdauer” (Ungerer 1989) hat. Der Prozeß ist somit eine Ausdrucksform des “zeitlichen Nebeneinanders” (Wettstein 1987) von Programmen.
This is a preview of subscription content, log in via an institution.
Buying options
Tax calculation will be finalised at checkout
Purchases are for personal use only
Learn about institutional subscriptionsPreview
Unable to display preview. Download preview PDF.
Referenzen
Für die Datenkopplung findet auch der Begriff Kooperation Verwendung, der in dieser Arbeit jedoch in einem weiteren Sinn als Zusammenarbeit zwischen Prozessen benutzt wird.
Vgl. fork-Konzept unter UNIX.
Vgl. zu formalen Definitionen von Prozessen auch Richter (1985).
Im Kap. 4.1 wurde die Aktionsfunktion mit Operatorsequenz bezeichnet. Manche Autoren verwenden auch einfach das Wort Programm (Vgl. Tanenbaum 1994).
Es wird hier der Begriff Prozeßstatus bzw. der von Siegert (1989) verwendete Begriff Arbeitsstatus benutzt, um die Unterscheidung zum allgemeineren Begriff Zustand, der in Kap. 4.1 eingeführt wurde, zu ermöglichen. Zur Abbildung Vgl. Siegert (1989, S. 49).
Vgl. Kap. 5.1.3.
Ungerer (1989) verwendet das Begriffspaar explizite, implizite Parallelität genau umgekehrt.
Ebenso können Terme kommutativer Operationen parallel berechnet werden. Ein einfaches Beispiel ist die gleichzeitige Auswertung der beiden Klammerausdrücke bei der kommutativen Multiplikation: (a+b) * (c + d/f).
Eine ausführliche Diskussion unterschiedlicher Strategien der Prozeß — Prozessorzuordnung findet sich bei Heiss (1994).
Vgl. hierzu ausführlich Heiss (1994).
Die Mindestanforderung einer zeitlichen Abstimmung beinhalten den Start, das Beenden eines parallelen Systems sowie das Herstellen einer gültigen Sicht des Systemzustandes. Auf diese Problematik wird in Kap. 5.3 bzw. 5.5 eingangen.
Wie die Synchronisation zwischen den Prozessen mit Hilfe von Nachrichten realisiert werden kann, wird in Kap. 5.3 gezeigt.
Insofern kann die Synchronisation von Prozessen unter die Kommunikation subsumiert warden (Wettstein 1987).
Vgl. Kap. 5.2.
Vgl etwa Kober (1988), Bräunl (1993).
Bsp.: verteilte Prozeßdatenverarbeitung, Flugbuchungssysteme.
Vgl. etwa Ungerer (1989), Quinn (1988). Demnach wäre es billiger, einen Rechner doppelter Leistung zu kaufen, als zwei Rechner der gleichen Leistung zu koppeln.
Die Geschwindigkeit der Informationsübertragung ist durch die Lichtgeschwindigkeit (max. 3* 109km/sek im Vakuum) begrenzt. Ein Chip von 3 cm im Durchmesser, kann bei heutiger Technologie, die eine maximale Signalgeschwindigkeit von ungefähr 3 *1010 mm/sek zuläßt, ein Signal in ungefähr einer Nanosekunde fortpflanzen. Wird mit jedem Signal eine Gleitkommaoperation ausgeführt, lassen sich bestenfalls 109 Gleitkommaoperationen in der Sekunde verarbeiten. Selbst bei Supraleitfähigkeit eines Chips läßt sich dieser Wert nur noch um eine Zehnerpotenz steigern.
Vgl. Amdahl (1967), Heiss (1994). Harel (1992) führt hierfür das anschauliche Beispiel der 100 Arbeiter, die ein ein Meter tiefes Loch graben sollen, an.
Vgl. Harel (1992) bzw. Kap. 6.2.1.2.
Vgl. hierzu die Ergebnisse in Kap. 7.5.
Heiss (1994) postuliert den theoretischen Idealfall in einem linearen ‘speed up’.
Das hier dargestellte FORK-Konzept entspricht der Implementierung in Smalltalk. Dort wird durch ein FORK ein Prozeß erzeugt, der eine Sequenz von Anweisungen des aufrufenden Prozesses übernimmt (Vgl. Kober 1988). Bei der UNIX-Implementierung dagegen wird durch ein fork() eine Kopie des Vaterprozesses erzeugt. Die Unterscheidung zwischen dem Vater und dem Sohnprozeß liefert die als Ergebnis des fork()-Aufrufs erzeugte Prozeßnummer; die explizite Vereinbarung des JOIN ist nicht vorgesehen.
Auch moderne PC-Betriebssyteme (z.B. OS/2 in dem ‘thread’-Konzept) besitzen die Möglichkeit des Prozeßaufrufs, teilweise stehen sogar Laufzeitroutinen für die Verwaltung dynamischer Prozeßmengen zur Verfügung.
Unter Topologie wird hier die technologische Anordnung der Kommunikationsverbindungen (‘processor interconnections’) verstanden.
Vgl. Mattern (1989).
Unter dem Begriff ‘pipelining’ versteht man die Zerlegung einer Maschinenoperation in mehrere Suboperationen, die dann hintereinandergeschachtelt taktsynchron von mehreren Verarbeitungseinheiten bearbeitet werden. Da verschiedene Phasen der Befehlsausführung in aufeinanderfolgende Instruktionen aufgeteilt werden, die in verschiedenen Taktzyklen abgearbeitet werden, wird auch der Begriff der vertikalen Aufteilung verwendet.
Beispielsweise verschwimmen die Grenzen zwischen Vektorrechnern und Multiprozessorsystemen, wenn jeder Prozessor eines Multiprozessorsystems eine Pipeline für die Verarbeitung von Gleitkommavektoren besitzt (sogenannte MIMD/SIMD-Maschinen).
Eine an diesen Kriterien orientierte Taxonomie wird auch von Ungerer (1989) vorgestellt, der außerdem auf weitergehende Taxonomien von Hockney und Mahle eingeht.
Im Gegensatz zu der allgemein gebräuchlichen Unterscheidung spricht Quinn (1988) von stark gekoppelten Prozessoren, wenn alle Prozessoren mit einem zentralen Schaltmechanismus zusammenarbeiten, um den gemeinsamen Speicher zu erreichen.
Die Gleichsetzung von Workstation mit Prozessor ist ungenau, da eine Workstation selbst mehrere Prozessoren aufweisen kann.
Durch das Einschalten von sogenannte Routern/Bridges ist auch eine Verbindung zwischen Netzwerken mit unterschiedlichen Protokollen möglich.
Vgl. weitere Ausführungen in Kap. 5.5.
In heutigen PC-Betriebssystemen (Windows-Familie, OS/2) sind Schnittstellen (API ‘application Programm interfaces’) zu Netzwerkdiensten integriert. Weiterhin stehen eine Vielzahl von Programm-Bibliotheken für Hochsprachen (z.B. Novells ‘software development kit’) zur Verfügung, die eine Integration von Protokollservices oder serverbasierten Netzwerkdiensten in Anwendungsprogramme zulassen. Die Verfügbarkeit der SDK’s für verschiedene Betriebssystemplattformen (DOS, Windows, OS/2, UNIX) ermöglichen im hohen Maße die Portierbarkeit und somit die Integration inhomogener Betriebssysteme.
Die Technologie der RPC (‘remote procedure calls’), wie sie in der DCE-Spezifikation (‘distributed computing environment’) der OSF beschrieben sind, erlaubt es Prozeduraufrufe aus einem Anwendungsprogramm über Rechnergrenzen hinweg durchzuführen, ohne daß der Programmierer direkt auf der Basis der Transportdienste für die Kommunikation sorgen müßte (Vgl. etwa Xtrain 1991, Schill 1993). In Verteilten Objektsysteme werden standardisierte Mechanismen bereitgestellt, um verteilten Objekten zu ermöglichen, Methoden anderer Objekte (auf anderen Rechnern) aufzurufen und Ergebnisse zu empfangen. Es existieren unterschiedliche Standards, z.B. CORBA der OMG, DSOM von IBM, DCOM von Microsoft; zu CORBA Vgl. OMG (1992), Hansen (1995).
PVM ist ein ursprünglich am Oak Ridge National Laboratory entwickeltes ‘message passing’ System, das auf dem Internet-Protokoll TCP/IP aufsetzt und daher besonders für heterogene Umgebungen geignet ist. Es ist im UNIX-Bereich für eine Vielzahl von Rechnermodellen (frei) erhältlich und wird in der UNIX-basierten universitären Forschung zur Implementierung verteilter paralleler Anwendungen im Netzwerk eingesetzt (Vgl. Sunderman 1990, Thiemann 1994, Pleier und Stellner 1994).
Parset stellt Sprachkonstrukte zur Implemtierung paralleler Anwendungen zur Verfügung; Vgl. Joshi und Ram (1995).
Eine (zeitliche) Synchronisation kann in verteilten Systemen simuliert werden, indem jeder Prozeß jeweils nach einer festgelegten Zeitscheibe in Interaktion mit anderen Prozessen tritt. Die Überwachung des Zeitintervalls kontrolliert hierbei jeder Prozeß selbst mit Hilfe einer lokalen Uhr. Entsprechend ist von vornherein im gesamten System ein Zeitintervall vorzugeben, innerhalb dessen die längste aller Teilaufgaben vom langsamsten Prozessor gelöst werden kann. Aus diesem Vorgehen resultieren regelmäßig Wartezeiten, die einen hohen Anteil an der Gesamtrechenzeit ausmachen können. Daher wird hier auf diese Möglichkeit nicht weiter eingegangen.
Es wird hier nicht weiter auf die Grundlagen des objektorientierten Ansatzes eingegangen. Hierzu sei auf die vorhandene Literatur hingewiesen (z.B.: Coad und Yourdan (1994a,b) Coad aund Nicola (1993), Rumbaugh u.a. 1993). Je nach Herkunft, Methode oder zugrundegelgter Programmiersprache wird eine Vielzahl von Begriffen in der objektorientierten Modellierung verwendet, die sich auf einige grundlegende Begriffe einschränken lassen. Die Ausführungen lehnen sich an die von Coad und Yoardan (1994a,b) vorgestellte Methode an.
Generalisierung/Spezialisierung bei Coad und Yoardan (1994a,b).
Instanzverbindung bei Coad und Yourdan (1994a,b).
Whole-Part-Struktur bei Coad und Yoardan (1994a,b).
Methoden oder auch “Service” (Coad und Yoardan 1994a,b).
Eine Formulierung des Semaphorkonzepts, die unabhängig von Betriebssystemimplementierungen ist, wurde in dem von Brinch Hansen (1973) eingeführten Monitorkonzept vorgestellt. Ein Monitor ist ein abstrakter Datentyp, in dem Koordinationsvariablen sowie die darauf ausführbaren Operationen gekapselt sind. Vgl. auch Hoare (1974).
Dijkstra (1965) bezeichnete die elementaren Operationen auf einer Koordinationsvariablen mit P(s) bzw. V(s). P(s) steht hierbei für Passieren des kritischen Abschnitts und V(s) für Verlassen des kritischen Abschnitts. Da die Symbole hier bereits anders belegt sind, werden mehr sprechende Prozedurvariablen verwendet.
Vgl. Ben-Ari (1984, Seite 73).
Geeignete Vorgehensweisen zur Verklemmungsanalyse finden sich bei Ben-Ari (1984), Wettstein (1987), Tanenbaum (1994).
Auch ‘message passing’-Bibliotheken wie PVM weisen diesen Aufbau auf und basieren auf Kommunikationsprimitiven zum Senden und Empfangen. Da für das verfügbare Rechnernetz eine einsatzfähige Version von PVM nicht zur Verfügung stand, waren die entsprechenden Konzepte in dieser Arbeit zu entwickeln.
In verschiedenen Betriebssystemen (OS/2, Windows NT) sind derartige asynchrone Kommunikationskänale, die Nachrichten in einer Warteschlange verwalten, bis sie vom Empfänger abgeholt werden, realisiert; sie werden als Pipe bezeichnet, ‘named pipes’ sind Kanäle, die mit symbolischen Namen angesprochen werden können. In den genannten CORBA-Ansätzen (OMG 1992) erfüllt der ORB (‘object request broker’) die Funktion des Kommunikationsobjekts; der ORB wird selbst aktiv und übergibt die erhaltene Nachricht an das Objekt B weiter.
Diese Synchronisation erfolgt einmal mit der Binärvariablen status, die angibt, ob eine Nachricht gesendet oder bereits empfangen wurde. Versucht das Objekt B eine Nachricht zu empfangen und zeigt die Variable status = ‘empfangen’ an, daß keine Nachricht vorliegt, so erhält das Empfängerobjekt den Rückgabewert 0. Andernfalls wird die wartende Nachricht empfangen und der Nachrichtenzähler (zähler) zurückgegeben.
Werden eine Menge von Kanälen (KommObj) zwischen einer Prozeßmenge eingesetzt, so erleichtern die Zähler das Überprüfen, ob alle gesendeten Nachrichten auch empfangen wurden. Insbesondere gilt dies bei Kanälen, die mehrere Nachrichten aufnehmen können.
Wird eine Prozeßinstanz auf einer Workstation ausgeführt, auf der mehrere Prozesse ablaufen (z.b. OS/2, Windows), gibt es auf dem lokalen Rechner natürlich Routinen zur Prozeßkontrolle. Aber diese Routinen umfassen nur das lokale System. Diese Betrachtung erfolgt aus der Sicht eines verteilten parallelen Systems, in der die Prozesse selbst und nicht die Betriebssysteme beteiligter Rechner miteinander kommunizieren.
Prozeß-Objekte sind in objektorientierten Konzepten nicht selbstverständlich. In der objektorientierten Programmiersprache Smalltalk wurde ein Prozeßbegriff eingeführt, um nebenläufige Aktivitäten unabhängiger Objekte zu unterstützen. Allerdings ist der Prozeßbegriff in Smalltalk zusätzlich zu dem Objektbegriff vorhanden. Eine integrierte Sicht der objektorientierten und prozeßorientierten Programmierung ist bisher wenig entwickelt. Broer, Uphoff u.a. (1991) stellen eine Erweiterung des Objektkonzepts von Smalltalk vor, indem sie die Dienstanforderungen an eine Prozedur puffern (‘Nachrichtensekretariat’) bzw. die Ergebnisse in Containern ablegen. Bekannt wurde auch das sogenannte Aktor-Modell für lose gekoppelte parallele Prozesse, die asynchron miteinander kommunizieren (Vgl. Agha und Hewitt 1987). In anderen objektorientierten Programmiersprachen (z.b. C++) wird die Verbindung von Objekt und Prozeß derzeit nicht unterstützt. Einen weitergehenden Ansätze, in dem im (heterogenen) Netz verteilte Objekte Methoden anderer Objekte (auf anderen Rechnern) aufrufen und Ergebnisse empfangen können, stellen die sog. ‘object request broker’ dar. Hierbei haben sich unterschiedliche Standards herausgebildet: Im DSOM (‘distributed system object modell’) von IBM werden allgemeine Schnittstellen für verschiedene Betriebssysteme sowie für unterschiedliche Programmiersprachen zur Verfügung gestellt; Microsoft versucht mit dem eigenen DCOM-Standard Anschluß zu finden. Die OMG bemüht sich um die Weiterentwicklung des CORBA-Standards (Vgl. OMG 1992). Bei der Entwicklung dieser Arbeit war für die eingesetzte Netzwerkumgebung eine entsprechende Unterstützung durch ‘object request broker’ noch nicht verfügbar.
Bspw. Mailbox bzw. Blackboard (vgl. Kap. 5.4).
Auf die explizite Spezifikation der zugrundegelegten Typen (Klassen) Auftrag und Ereignis wird verzichtet.
Statt des hier dargestellten “Polling”-Prinzips können natürlich elegantere Lösungen zum Signalempfang eingesetzt werden. Diese erfordern jedoch, daß Systemdienste für Prozeß-Objekte vorhanden sind.
Der Bully-Algorithmus geht auf Gracia-Molina (1982) zurück, er wird hier nach Tanenbaum (1994) zitiert.
Zu Abb. 5.11 Vgl. Weikum (1988). Zu Implementierungsvarianten des 2-Phasen-Commit-Protokolls bzw. zu Recovery-Strategien bei verteilten Transaktionen sei verwiesen auf Weikum (1988) Ceri und Pelagatti (1984), Reinwald und Wedekind (1994).
Die Definition wird nach Mattern (1989) angegeben. Chandy und Misra (1989) fordern für die Termination eines verteilten Systems, daß alle Prozesse inaktiv und ihre Ausgangskanäle leer sind. Folgt man dieser Definition, so sind andere Vorgehensweisen zur Überprüfung notwendig, die bei gepufferter Nachrichtenübertragung ungeeignet erscheinen.
Eine Numerierung der Nachrichten wurde bereits bei der Einführung des Kommunikationskanals berücksichtigt.
Vgl. Kap. 5.3.5.1.
Mattern (1989) stellt mit dem differenziertes Zählen, der Vektormethode, dem Doppelzählverfahren bzw. dem Zeitzonenverfahren weitere geeignete Vorgehensweisen vor.
Vgl. Kap. 5.3.3.
Beide Formen, das Broadcasting sowie das Multicasting sind in der Regel in einem Server-basierten Netzwerkbetriebssystem sowohl auf der Ebene des Netzwerkprotokolls als auch auf Dateiebene realisierbar.
Da aufgrund der Erhöhung des Zugangszählers immer — auch beim Lesen — verändernde Operationen vorliegen, ist es sinnvoll, mehrere Operationen in einem kritischen Bereich zusammenzufassen. Durch das Zusammenfassen von Lese- und Empfangsoperationen verliert das Vorgehen die allgemeine Verwendbarkeit.
Vgl. Mattern (1989). Ebenso kann ein modifiziertes Schnappschußverfahren eingesetzt werden. Dabei wird mit einem Wahlalgorithmus ein Koordinator bestimmt, der über die Termination der Maximumsuche entscheidet.
Vgl. Kap. 5.3.6.4.
Das optimistische Vorgehen des einfachen Sperrens kann zu ‘deadlock’-Situationen führen, wenn beispeilsweise zwei Clients C1 und C2 die Dienste eines File-Servers beanspruchen , um ihre Daten in einer gemeinsamen zentralen Datei comfile des File-Servers zu verwalten und einer der beiden Clientprozesse “abstürzt”, während er die Datei gesperrt hält.
Andere Bezeichnungen lauten Master-Worker-Modell bzw. Modell der replizierten Arbeiter (‘replicated workers’, Heiss (1994)).
Prozeßzuteilungsalgorithmen in verteilten Systemen werden beispielsweise bei Tanenbaum (1994) angegeben.
Der Begriff Dämon findet Verwendung für einfache Prozesse, die zyklisch wiederkehrend das Vorhandensein einer Nachricht, Datei oder eines Ereignisses prüfen, gegebenenfalls eine einfache Aktionsfolge ausführen und danach wieder ‘einschlafen’, bis sie vom nächsten Zeitsignal geweckt werden.
Ein Master kann mehrere Probleme in Folge verarbeiten, daher wird eine verteilte Berechnung durch die Kombination aus MasterID und einer eindeutigen ProblemID gekennzeichnet.
Vgl. Haug (1995).
Rights and permissions
Copyright information
© 1997 Springer Fachmedien Wiesbaden
About this chapter
Cite this chapter
Schütz, G. (1997). Parallele und verteilte Konzepte. In: Verteilt-parallele Ansätze zur Distributionsplanung. Deutscher Universitätsverlag, Wiesbaden. https://doi.org/10.1007/978-3-663-09109-7_5
Download citation
DOI: https://doi.org/10.1007/978-3-663-09109-7_5
Publisher Name: Deutscher Universitätsverlag, Wiesbaden
Print ISBN: 978-3-8244-6441-8
Online ISBN: 978-3-663-09109-7
eBook Packages: Springer Book Archive