Masterkurs Parallele und Verteilte Systeme

Masterkurs Parallele und Verteilte Systeme Günther Bengel  Christian Baun  Marcel Kunze  Karl-Uwe Stucky Masterkurs Parallele und Verteilte Syst...
Author: Lothar Schmitz
1 downloads 0 Views 316KB Size
Masterkurs Parallele und Verteilte Systeme

Günther Bengel  Christian Baun  Marcel Kunze  Karl-Uwe Stucky

Masterkurs Parallele und Verteilte Systeme Grundlagen und Programmierung von Multicore-Prozessoren, Multiprozessoren, Cluster, Grid und Cloud 2., erweiterte und aktualisierte Auflage

Günther Bengel Fakultät für Informatik Hochschule Mannheim Mannheim, Deutschland

Marcel Kunze Steinbuch Centre for Computing (SCC) Karlsruhe Institut für Technologie (KIT) Eggenstein-Leopoldshafen, Deutschland

Christian Baun Fachbereich Informatik Fachhochschule Frankfurt am Main Frankfurt, Deutschland

Karl-Uwe Stucky Institut für Angewandte Informatik (IAI) Karlsruher Institut für Technologie (KIT) Eggenstein-Leopoldshafen, Deutschland

ISBN 978-3-8348-1671-9 DOI 10.1007/978-3-8348-2151-5

ISBN 978-3-8348-2151-5 (eBook)

Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar. Springer Vieweg © Springer Fachmedien Wiesbaden 2008, 2015 Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt. Jede Verwertung, die nicht ausdrücklich vom Urheberrechtsgesetz zugelassen ist, bedarf der vorherigen Zustimmung des Verlags. Das gilt insbesondere für Vervielfältigungen, Bearbeitungen, Übersetzungen, Mikroverfilmungen und die Einspeicherung und Verarbeitung in elektronischen Systemen. Die Wiedergabe von Gebrauchsnamen, Handelsnamen, Warenbezeichnungen usw. in diesem Werk berechtigt auch ohne besondere Kennzeichnung nicht zu der Annahme, dass solche Namen im Sinne der Warenzeichen- und Markenschutz-Gesetzgebung als frei zu betrachten wären und daher von jedermann benutzt werden dürften. Der Verlag, die Autoren und die Herausgeber gehen davon aus, dass die Angaben und Informationen in diesem Werk zum Zeitpunkt der Veröffentlichung vollständig und korrekt sind. Weder der Verlag noch die Autoren oder die Herausgeber übernehmen, ausdrücklich oder implizit, Gewähr für den Inhalt des Werkes, etwaige Fehler oder Äußerungen. Gedruckt auf säurefreiem und chlorfrei gebleichtem Papier. Springer Fachmedien Wiesbaden GmbH ist Teil der Fachverlagsgruppe Springer Science+Business Media (www.springer.com)

Günther Seit dem Wintersemester 1988/89 arbeitete Günther Bengel als Professor an der Hochschule Mannheim und lehrte dort bis zuletzt die Fachgebiete Betriebssysteme, Multiprozessoren und Verteilte Systeme an der Fakultät für Informatik. Die Vermittlung seiner Schwerpunkte als Hochschullehrer war ihm nicht nur Beruf, sondern Herzensangelegenheit. Dazu gehörte für ihn nicht bloß die Präsentation der Inhalte, sondern auch das Schreiben gut verständlicher Lehrbücher. Bereits 1990 erschien sein erstes Lehrbuch zum Thema Betriebssysteme. Weitere Lehrbücher über parallele und verteilte Systeme sollten folgen. Dass 2008 die erste Auflage dieses Werkes erschien, ging maßgeblich auf seine Initiative zurück. Mit großer Begeisterung arbeitete er auch an der zweiten Auflage. Er ist der Autor der meisten Kapitel und koordinierte unsere Beiträge und das Zusammenfügen des Manuskripts. Leider verstarb Günther am 26.12.2014 kurz nach der inhaltlichen Vollendung des Manuskripts nach langer und schwerer Krankheit. Günther war ein lebensfroher Familienmensch und voller Tatendrang für neue Projekte. Wir haben einen guten Freund verloren.

Vorwort

Die Entwicklung von Computern steht heute an einem Wendepunkt. Nach Jahrzehnten stetiger Steigerung der Rechengeschwindigkeit baut heute kein Hardware-Hersteller mehr schnellere sequentielle Prozessoren. Ein klarer Trend zu Computer-Architekturen, die parallele Abläufe unterstützen, und zur Parallelisieren von Programmen ist erkennbar. So sind beispielsweise Multicore-Chips zu erwarten, die bis 2009 bis zu 64 und bis 2015 bis zu 128 integrierte Prozessoren aufweisen. Zusammen mit der Weiterentwicklung von Cluster-Architekturen in homogener und heterogener Rechnerlandschaft sowie mit dem rasch voranschreitenden Ausbau von Grids mit heterogener Zusammensetzung ist hier eine klare Richtung vorgegeben. Die neuen Architekturen können aber nur dann sinnvoll genutzt werden, wenn die Software den angebotenen Parallelismus auch nutzt, wobei heute noch die Hardware die Entwicklungsgeschwindigkeit vorgibt und der Softwareentwicklung vorauseilt. Parallele Architekturen und deren Programmierung verlassen damit ihre bisherige Nische des Hochleistungsrechnens und werden zukünftig zum Standard. Sie erweitern unsere vernetzte Welt und bieten etwa Wissenschaftlern Zugriff auf nahezu unbegrenzte Rechenleistung und Speicherkapazität. Im kommerziellen Bereich, um mit IBM’s Zauberformel „Business on demand“ zu argumentieren, wird IT-Dienstleistung an jedem Ort und zu jeder Zeit mit beliebig großen Rechen- und Speicheranforderungen verfügbar. Kaum ein Bereich, in dem heute schon Rechner eingesetzt werden, wird von der allgegenwärtigen Vielfalt an Rechenressourcen ausgenommen bleiben. Derzeit bahnt sich High Performance Computing (HPC) rasch einen Weg über die Grenzen von Hochschulen und Forschungseinrichtungen hinaus. Die neuen, schlüsselfertigen HPC-Systeme ermöglichen nun auch (fast) jeder Forschungseinrichtung und jedem Unternehmen den Betrieb von enorm leistungsstarken Rechnersystemen. Diese besitzen eine offene Architektur, die sich von einzelnen Racks auf Cluster im Petascale-Bereich ausdehnen lässt. In Grids erfolgt der Rechnerverbund sogar domänenübergreifend, also mit Ressourcen, die verschiedenen Organisationen zugeordnet sind. Ein weltweites Supercomputing in einer zuvor nie gekannten Größenordnung wird Realität. Peer-to-Peer-Computing (P2P) spielt im Bereich des Hochleistungsrechnens und der Leistungssteigerung durch Parallelität kaum eine Rolle und hat nur wenig Einfluss auf das Cluster- und Grid-Computing. Der ursprüngliche Plan, das P2P-Computing mit in dieses VII

VIII

Vorwort

Werk aufzunehmen, wurde aus diesem Grund und zu Gunsten einer größeren Tiefe des übrigen Stoffes aufgegeben. Der Aufbau des Buches orientiert sich nach einer Einleitung mit Historie und einem allgemeinen Überblick zunächst an der führenden Rolle der Hardwareentwicklung, die der Software-Entwicklung in der Regel immer vorauseilt. Schon 1987 hat Greg Papadopoulos, heute Chief Technology Officer und Executive Vice President of Research and Development bei Sun Microsystems, Inc., das Hinterherhinken der Software gegenüber der parallelen Hardware folgendermaßen charakterisiert: „It appears to be easier to build parallel machines than to use them.“1 Und Sutter und Larus äußern sich folgendermaßen: „The concurrency revolution is primarily a software revolution. The difficult problem is not building multicore hardware, but programming it in a way that lets mainstream application benefit from the continued exponential growth in CPU performance.“2 Kapitel 2 beschreibt zunächst die Grundlagen der parallelen Hardware für Einprozessorsysteme und die Rechnerarchitekturen für den Aufbau von Multiprozessoren. Wir starten mit dem Instruction Level Parallelismus und Thread-Level Parallelismus und führen hin zum Simultaneous Multithreading. Bei Multiprozessoren unterscheiden wir zwischen Architekturen mit gemeinsamem Speicher (eng gekoppelten Multiprozessoren) und verteiltem Speicher (lose gekoppelten Multiprozessoren). Bei den eng gekoppelten Multiprozessoren betrachten wir die Cachekohärenzprotokolle, die Architektur und die Thread-Programmierung von Multicoreprozessoren. Anschließend gehen wir auf die Organisation von Multiprozessorbetriebssystemen und hauptsächlich auf das Symmetrische Multiprocessing ein. Schwergewicht bei den Multiprozessorbetriebssystemen sind die parallelen Prozesse und deren Synchronisation. Die Synchronisationsverfahren umfassen die hardwarenahen Locksynchronisationsverfahren bis hin zu den klassischen Semaphoren, aber auch das neuere Verfahren des Transactional Memory. Bei den lose gekoppelten Multiprozessoren zeigen wir, nach der Darstellung von deren Architektur, wie durch die Implementierung eines verteilten gemeinsamen Speichers die lose gekoppelte Architektur in die eng gekoppelte Architektur überführbar ist. Als Beispiel für ein lose gekoppeltes System dient das Load Balancing und High Throughput Cluster Google. Gemäß der zuvor gemachten Aussage, dass die Software der parallelen Hardware hinterherhinkt und bei der Software ein Nachholbedarf besteht, sind die Programmiermodelle für parallele Architekturen von zentraler Bedeutung und nehmen mit Kap. 3 den größten Umfang des Werkes ein. Die Unterteilung von Kap. 2 in eng gekoppelte und lose gekoppelte Multiprozessoren gibt die Unterteilung der Programmiermodelle in Kap. 3 vor. Der erste Teil befasst sich mit dem Client-Server-Modell, das auf die Hardwarearchitektur keine Rücksicht zu nehmen braucht. Eine Einführung in service-orientierte Architekturen, 1

Papadopoulos G.: The new dataflow architecture being built at MIT. In: Proceedings of the MITZTI-Symposium on Very High Parallel Architectures, November 1987. 2 Sutter H., Larus J.: Software and the concurreny revolution. ACM Queue, Vol. 3, No. 7, 2005.

Vorwort

IX

die hauptsächlich auf verteilten Rechnern basieren, enthält der zweite Teil. Der dritte Teil behandelt die Programmiermodelle für gemeinsamen Speicher und der vierte Teil die Modelle und Programmierverfahren für verteilten Speicher. Es wurde versucht, nicht nur die beiden vorherrschenden Modelle OpenMP für gemeinsamen Speicher und das Message Passing Interface (MPI) für verteilten Speicher zu besprechen, sondern auch die älteren Verfahren und ganz neue Entwicklungen zu behandeln, die gerade im Entstehen und in der Entwicklung sind. Ältere Programmiermodelle für gemeinsamen Speicher sind Unix mit den fork- und join-Systemaufrufen, Threads und das Ada-Rendezvous. Neuere Modelle sind in Programmiersprachen wie Unified Parallel C und Fortress realisiert. Ältere Programmiermodelle für verteilten Speicher sind bei den nebenläufigen Modellen Occam und der Parallel Virtual Machine (PVM) zu finden. Weitere ältere kooperative Modelle sind die TCP/IP-Sockets. Nicht ganz so alt sind der Java Message Service (JMS) und für die entfernten Aufrufe der Remote Procedure Call (RPC), die Common Object Request Broker Architecture (CORBA) und die Remote Method Invocation (RMI). Neuere Entwicklungen sind das .NET-Remoting und die Service Oriented Architecture (SOA) und deren Implementierungsbasis, die Web-Services und der XML-RPC. Zur Illustration der Programmierverfahren wurde, wo es vom Umfang her möglich und für das Programmiermodell angepasst war, das Erzeuger-Verbraucher-Problem gewählt. Kapitel 4 beschreibt den parallelen Softwareentwurf und definiert die Leistungsmaße und Metriken für Parallele Programme. Die eingeführten Leistungsmaße führen zu einer Bewertung der nachfolgend besprochenen Parallelisierungstechniken und -verfahren. Das Werk legt den Schwerpunkt auf die Darstellung der Parallelität und der parallelen Prozesse. Dass die parallelen Prozesse weltweit auf die Rechner verteilt werden ist dabei nur ein Nebenaspekt. Deshalb erläutert Kap. 5 (Verteilte Algorithmen) nur die mit den verteilten Algorithmen auftretende Problematik des Fehlens von Gemeinsamkeiten. Zur Lösung oder Umgehung dieser Problematik werden die grundlegenden und somit wichtigsten verteilten Basisalgorithmen vorgestellt. Besonderes Gewicht legen wir mit Kap. 6 auf das Thema Rechenlastverteilung. Die Beschreibung der statischen Lastverteilung erläutert das Scheduling-Problem, gibt einen Überblick über verschiedene Jobmodelle einschließlich Workflows und diskutiert Beispiele für Verfahren. Der Abschnitt zur dynamischen Lastverteilung unterscheidet zwischen zentralen und dezentralen Verfahren und erläutert die Migration, die Unterbrechung und Verschiebung bereits laufender Prozesse. Den Abschluss bildet eine Einführung in das Grid Scheduling, das auf Besonderheiten der domänenübergreifenden Architektur Rücksicht nehmen muss und für das erste Lösungen verfügbar sind. Kapitel 7 geht auf Virtualisierungstechniken ein, mit denen das Problem des Ressourcenmanagements in verteilten Systemen elegant gelöst werden kann. Oftmals werden Ressourcen wie CPU und Speicher nicht optimal genutzt, und die Virtualisierung bietet hier ein großes Potenzial zur Effizienzsteigerung. Alle modernen Prozessoren bieten heute entsprechende Funktionen. Anwendungsvirtualisierung hilft darüber hinaus bei der

X

Vorwort

Verwaltung von Software und bei der aus Kostengründen immer häufiger diskutierten Rezentralisierung von IT-Services. Kapitel 8 beschreibt die Entwicklung des Cluster-Computing. Besonderes Gewicht hat die Klassifikation der unterschiedlichen Arten von Clustern mit ihren typischen Einsatzgebieten, sowie die Beschreibung der eingesetzten Technologien. Kapitel 9 definiert den Begriff des Grid-Computing und klassifiziert die Unterscheidungsmöglichkeit von verschiedenen Grid-Systemen. Die populärsten Grid MiddlewareSysteme mit ihren notwendigen Protokollen und Diensten werden vorgestellt. Zusätzlich beschreibt Kap. 9 die Grid-Softwarepakete, welche die Verwaltung eines Grid und die Arbeit damit vereinfachen. Von Kap. 1 bis Abschn. 6.1 ist Prof. Bengel der Autor, Abschn. 8.1.1.3 bis zum Ende von Kap. 6 verfasste Dr. Stucky, Kap. 7 hat sich Dr. Kunze vorgenommen, Kap. 8 hat C. Baun erstellt und Kap. 9 wurde in Zusammenarbeit von C. Baun und M. Kunze erstellt. Der Stoff wurde so umfassend wie möglich dargestellt. Dies betrifft besonders die parallelen Programmiermodelle in Kap. 3, dem vom Umfang her mächtigsten Abschnitt des Werkes. Dadurch eignet sich das Buch sehr gut als Einstiegs- und Nachschlagewerk. Die tiefe Untergliederung der einzelnen Abschnitte und die systematische Darstellung des Stoffes unterstützen dies. Die Vielzahl von Literaturhinweisen erleichtert dem Leser den noch tieferen Einstieg in die Thematik und die selbstständige Vertiefung des Stoffes. Dadurch ist das Werk auch sehr gut zum Selbststudium geeignet. Das Buch ist eher forschungsorientiert ausgelegt, und die einzelnen Abschnitte sind in sich abgeschlossen. Durch das Umfassende und den großen Umfang des Werkes konnte in den einzelnen Abschnitten eine große Tiefe erreicht werden. Dadurch lassen sich prinzipiell wie aus einem Modulkasten auch mehrere Masterkurse mit verschiedener Ausrichtung auf dem Gebiet der Parallelen und Verteilten Systeme zusammenstellen und konzipieren. Einzelne Abschnitte oder Teile davon können aber auch in Vorlesungen oder Seminare im Bachelor-Studiengang einfließen. Vom Forschungszentrum Karlsruhe vom Institut für wissenschaftliches Rechnen danken wir Frau Dr. Jie Tao für die kritische Durchsicht der Hardwarerealisierung von ClientServer-Systemen und die Verbesserung und Richtigstellung des MESI-Protokolls. Hr. Dipl.-Phys. Klaus-Peter Mickel (komm. Leiter des Instituts für Wissenschaftliches Rechnen) danken wir für die Bereitstellung von Ressourcen und Unterstützung während der Erstellung des Werkes. Herr Prof. Dr. Georg Winterstein, Dekan der Fakultät für Informatik, Hochschule Mannheim und dem Rektor Prof. Dr. Dietmar v. Hoyningen-Huene dankt Prof. Bengel für die Genehmigung eines Forschungsfreisemesters im Sommersemester 2007 am Forschungszentrum Karlsruhe. Ohne dieses Forschungssemester und der Unterstützung durch Herrn Klaus-Peter Mickel wäre dieses Werk in solchem Umfang und Tiefe nicht möglich gewesen. Vielen Dank an Anja Langner, die das Zeichnen einiger Abbildungen in diesem Buch übernommen hat und den Abbildungen ein professionelleres Aussehen gegeben hat.

Vorwort

XI

Frau Dipl.-Bibl. Maria Klein von der Hochschulbibliothek der Hochschule Mannheim möchten wir unseren Dank aussprechen für die schnelle Beschaffung der aktuellsten Neuerscheinungen, sowie der für dieses Werk notwendigen großen Anzahl von Literatur. Mit dem Buch steht auch ein kostenloser Online-Service zur Verfügung. Die InternetAdresse der Web-Seiten ist http://www.pvs.hs-mannheim.de Die folgenden Informationen können auf den Web-Seiten gefunden werden:  Informationen über die Autoren mit E-Mail-Adresse, die zum Senden von Anmerkungen, Kommentaren und Berichtigungen verwendet werden kann.  Alle Abbildungen des Buches zum Herunterladen; sie lassen sich in der Lehre einsetzen und wiederverwenden.  Alle Programmbeispiele des Buches zum Herunterladen. Sie sollen den Leser ermuntern, die Programme auszuprobieren und dienen zur Gewinnung von praktischer Erfahrung mit den Techniken der parallelen und verteilten Programmierung.  Ein Erratum, d. h. Korrekturen zu Fehlern, die erst nach der Drucklegung des Buches gefunden wurden.  Aktuelle Informationen zu Weiter- und Neuentwicklungen bzgl. der im Buch beschriebenen Technologien. Die Web-Seiten werden kontinuierlich weiterentwickelt und ausgebaut. Zum Schluss noch eine Zukunftsvision: In einer total vernetzten Welt sind Rechenleistung, Speicherkapazität und andere Ressourcen als Dienste von jedem Computer aus zugreifbar. Der Einsatz von Rechnern in täglich genutzten Geräten sowie die mobile Verfügbarkeit von Internetzugängen ermöglichen sogar den Zugriff von buchstäblich jedem beliebigen Ort aus3 . Durch diese Technologien erhält der Mensch eine nahezu unbegrenzte Vielfalt von Möglichkeiten, sein Leben, seine Arbeit und Freizeit sowie seine Umgebung zu gestalten. Gleichzeitig sind sie aber auch eine Herausforderung, da sie in völlig neuer Art und Weise und in bisher unbekanntem Umfang in das Leben jedes Einzelnen eingreifen. Wir hoffen, dieses Werk hilft Ihnen bei der aktiven und verantwortungsvollen Mitgestaltung dieser Zukunftsvision. Altrip, Mannheim, Karlsruhe im Dezember 2007

3

Günther Bengel Christian Baun Marcel Kunze Karl-Uwe Stucky

Siehe hierzu auch Mattern F. (Hrsg.): Total vernetzt. Szenarien einer informatisierten Welt. Springer Verlag 2003.

Vorwort zur 2. Auflage

Die vorliegende zweite Auflage des Masterkurses Parallele und Verteilte Systeme bringt einige neue Themen, die in den zurückliegenden sechs Jahren seit Erscheinen der ersten Auflage auf diesem Gebiet an Bedeutung gewonnen haben oder neu hinzugekommen sind. Die aktuelle Entwicklung von Multicore-Prozessoren hin zu Manycore-Prozessoren hat die Aufnahme neuer Techniken und Architekturen wünschenswert gemacht. Dementsprechend finden sich in diesem Werk nun Beschreibungen von einerseits General-purpose Graphics Processing Units (GPGPUs) sowie andererseits von den noch teilweise im Experimentierstadium befindlichen Tile-Architekturen wie der Single-Chip Cloud Computer (SCC) von Intel oder der Tile-Prozessor von der Firma Tilera. Verbunden mit GPGPU ist die von Nvidia angebotene Plattform Compute Unified Device Architecture (CUDA). Auf der Programmiersprachenseite gewinnen in letzter Zeit die funktionalen Sprachen immer mehr an Bedeutung. Entscheidend ist die einfache Verteilbarkeit der Funktionen auf Threads oder Prozessoren. Dies bedingte den Einschluss der Systemprogrammiersprache Google Go, der bei Ericsson eingesetzten Telekommunikationssprache Erlang und der Java-basierten Sprache Scala. Da von Oracle im Juli 2012 die Entwicklung an der Programmiersprache Fortress eingestellt wurde, wurde der Fortress-Abschnitt entfernt, so dass nun mehr Raum für die funktionalen Sprachen zur Verfügung steht. Auf der Systemseite ist durch die Virtualisierung der Rechner, Programmierumgebungen und Software-Services das Cloud Computing heute in aller Munde. Christian Baun hat dazu einen weiteren kompletten Abschnitt über Clouds am Ende des Werkes hinzugefügt. Durch die vorgenommenen Erweiterungen ist das Werk sehr umfangreich geworden, hat jetzt aber auch einen hoch aktuellen Stand bezüglich paralleler Prozessoren und deren paralleler Programmierung erreicht. Den Lesern und Leserinnen gelingt damit leicht der Einstieg zu neuesten Entwicklungen auf dem Gebiet der Parallelen Prozesse. Altrip, Frankfurt am Main, Karlsruhe im Dezember 2014

Günther Bengel Christian Baun Marcel Kunze Karl-Uwe Stucky XIII

Inhaltsverzeichnis

1

Einführung und Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . 1.1 Historische Entwicklung der Rechensysteme . . . . . . . . . . . . . 1.2 Technologiefortschritte . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.2.1 Leistungsexplosion und Preisverfall der Hardware . . . . . . 1.2.2 Fortschritte bei lokalen Netzen . . . . . . . . . . . . . . . . . . 1.2.3 Aufkommen von Funkverbindungen und mobilen Geräten . 1.2.4 Übernetzwerk Internet . . . . . . . . . . . . . . . . . . . . . . . 1.3 World Wide Web (WWW) . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.1 Web 2.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.2 Web 3.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.3 Web 4.0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.3.4 E-World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1.4 Selbstorganisierende Systeme . . . . . . . . . . . . . . . . . . . . . . . 1.4.1 On Demand Computing . . . . . . . . . . . . . . . . . . . . . . 1.4.2 Autonomic Computing . . . . . . . . . . . . . . . . . . . . . . 1.4.3 Organic Computing . . . . . . . . . . . . . . . . . . . . . . . . . 1.5 Parallele versus Verteilte Verarbeitung . . . . . . . . . . . . . . . . . 1.5.1 Parallele Verarbeitung . . . . . . . . . . . . . . . . . . . . . . . 1.5.2 Nebenläufige Prozesse . . . . . . . . . . . . . . . . . . . . . . . 1.5.3 Kooperierende Prozesse . . . . . . . . . . . . . . . . . . . . . . 1.5.4 Verteilte Verarbeitung . . . . . . . . . . . . . . . . . . . . . . . Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . .

1 1 4 5 6 8 10 11 11 16 17 18 20 20 22 22 23 23 24 24 25 30

2

Rechnerarchitekturen für Parallele und Verteilte Systeme . . . . . . . . 2.1 Eng gekoppelte Multiprozessoren und Multicore-Prozessoren . . . . . 2.1.1 Simultaneous Multithreading . . . . . . . . . . . . . . . . . . . . . 2.1.2 Architektur von eng gekoppelten Multiprozessoren . . . . . . . 2.1.3 Programmierung von Multicore-Architekturen . . . . . . . . . . 2.1.4 Multiprozessorbetriebssysteme . . . . . . . . . . . . . . . . . . . 2.2 General Purpose Computation on Graphic Processing Unit (GPGPU) 2.3 Many-Core-Prozessoren und Tile-Prozessor-Architekturen . . . . . . .

. . . . . . . .

. . . . . . . .

33 34 35 39 54 55 70 73 XV

XVI

Inhaltsverzeichnis

2.3.1 Intel Single-chip Cloud Computer (SCC) . . . . . . . . 2.3.2 Tile-CPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4 Lose gekoppelte Multiprozessoren und Cluster . . . . . . . . . 2.4.1 Architektur von lose gekoppelten Multiprozessoren . . 2.4.2 Verteilter gemeinsamer Speicher . . . . . . . . . . . . . . 2.4.3 Multicomputer . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.4 Leistungs-Effizienzmetriken . . . . . . . . . . . . . . . . 2.4.5 Load Balancing und High Throughput Cluster Google Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. 73 . 76 . 80 . 80 . 82 . 93 . 94 . 96 . 101

3

Client-Server-Modell und Web-Services . . . . . . . . . . . . . . . 3.1 Client-Server-Modell . . . . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Fehlersemantik . . . . . . . . . . . . . . . . . . . . . . . . 3.1.2 Serverzustände . . . . . . . . . . . . . . . . . . . . . . . . 3.1.3 Client-Server versus Verteilt . . . . . . . . . . . . . . . . 3.2 Service-orientierte Architekturen (SOA) . . . . . . . . . . . . . 3.2.1 Bestandteile eines Dienstes (Service) . . . . . . . . . . . 3.2.2 Eigenschaften eines Dienstes (Service) . . . . . . . . . . 3.2.3 Servicekomposition, -management und -überwachung 3.2.4 Enterprise Service Bus (ESB) . . . . . . . . . . . . . . . Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

. . . . . . . . . . .

107 108 109 114 117 118 119 120 122 125 126

4

Programmiermodelle für gemeinsamen Speicher . 4.1 Überblick . . . . . . . . . . . . . . . . . . . . . . . 4.2 Parallelisierende Compiler . . . . . . . . . . . . . 4.3 Unix . . . . . . . . . . . . . . . . . . . . . . . . . . 4.3.1 fork()/join()-Parallelismus . . . . . . . . 4.3.2 Dynamische Prozesse . . . . . . . . . . . 4.3.3 Gemeinsamer Speicher . . . . . . . . . . 4.3.4 Semaphore . . . . . . . . . . . . . . . . . . 4.3.5 Erzeuger-Verbraucher (Pipe) . . . . . . . 4.3.6 Pipes in Unix . . . . . . . . . . . . . . . . 4.3.7 Warteschlange (Queue) . . . . . . . . . . 4.4 Threads . . . . . . . . . . . . . . . . . . . . . . . . 4.4.1 Threads versus Prozesse . . . . . . . . . . 4.4.2 Implementierung von Threads . . . . . . 4.4.3 Pthreads . . . . . . . . . . . . . . . . . . . . 4.5 OpenMP . . . . . . . . . . . . . . . . . . . . . . . . 4.5.1 Parallel Pragma . . . . . . . . . . . . . . . 4.5.2 Gültigkeitsbereiche von Daten . . . . . . 4.5.3 Lastverteilung unter Threads . . . . . . . 4.5.4 Synchronisation . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

129 129 133 134 134 136 136 137 137 138 139 140 140 141 145 156 157 158 158 161

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . .

Inhaltsverzeichnis

XVII

4.5.5 Barrieresynchronisation . . . . . . . . . . . . . . . . . . . . . Unified Parallel C (UPC) . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.1 Identifier THREADS und MYTHREAD . . . . . . . . . . . 4.6.2 Private und Shared Data . . . . . . . . . . . . . . . . . . . . . 4.6.3 Shared Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.4 Zeiger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.5 Lastverteilung unter Threads, upc_forall . . . . . . . . . . . 4.6.6 Sperrfunktionen . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6.7 Barrieresynchronisation . . . . . . . . . . . . . . . . . . . . . 4.7 CUDA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.7.1 Host und Device . . . . . . . . . . . . . . . . . . . . . . . . . 4.7.2 Kernels, Thread, Block, Grid . . . . . . . . . . . . . . . . . . 4.8 Ada . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.8.1 Ada-Rendezvous . . . . . . . . . . . . . . . . . . . . . . . . . 4.8.2 Selektive Ada-Rendezvous . . . . . . . . . . . . . . . . . . . 4.8.3 Erzeuger-Verbraucher (Pipe) mit selektivem Rendezvous 4.8.4 Geschützte Objekte . . . . . . . . . . . . . . . . . . . . . . . . Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . .

162 162 162 163 164 164 165 166 166 167 167 168 171 171 174 175 177 178

Programmiermodelle für verteilten Speicher . . . . . . . . . . . . 5.1 Überblick nebenläufige Modelle . . . . . . . . . . . . . . . . . . 5.1.1 Nachrichtenbasierte Modelle . . . . . . . . . . . . . . . . 5.1.2 Datenparallelität ausnutzende Modelle . . . . . . . . . . 5.2 Überblick kooperative Modelle . . . . . . . . . . . . . . . . . . . 5.2.1 Lokalisierung des Kooperationspartners (Broker) . . . 5.2.2 Datenrepräsentation auf unterschiedlichen Maschinen 5.2.3 Nachrichtenbasierte Modelle . . . . . . . . . . . . . . . . 5.2.4 Entfernte Aufruf-Modelle . . . . . . . . . . . . . . . . . . 5.3 Message Passing Interface (MPI) . . . . . . . . . . . . . . . . . . 5.3.1 Dynamische Prozesse . . . . . . . . . . . . . . . . . . . . 5.3.2 Schreib- und Lesefunktionen . . . . . . . . . . . . . . . . 5.3.3 Implementationen von MPI . . . . . . . . . . . . . . . . . 5.3.4 MPJ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.5 Initialisieren und Beenden von Prozessen . . . . . . . . 5.3.6 Kommunikator und Rang . . . . . . . . . . . . . . . . . . 5.3.7 Blockierendes Senden und Empfangen . . . . . . . . . . 5.3.8 Nichtblockierendes Senden und Empfangen . . . . . . 5.3.9 Persistente Kommunikation . . . . . . . . . . . . . . . . . 5.3.10 Broadcast . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.3.11 Barrierensynchronisation . . . . . . . . . . . . . . . . . . 5.3.12 Weitere kollektive Kommunikationsfunktionen . . . . . 5.3.13 Kommunikator und Gruppenmanagement . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

181 181 182 189 191 191 192 194 196 199 199 199 200 201 201 202 203 206 208 209 210 210 211

4.6

5

. . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . .

XVIII

Inhaltsverzeichnis

5.4

5.5

5.6

5.7

5.8

5.9

5.3.14 Prozessgruppen . . . . . . . . . . . . . . . . . . . . . . . . Occam . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.1 SEQ- versus PAR-Konstrukt . . . . . . . . . . . . . . . . 5.4.2 Kommunikation mit ! und ? . . . . . . . . . . . . . . . . . 5.4.3 ALT-Konstrukt mit Wächter (Guard) . . . . . . . . . . . 5.4.4 IF- WHILE- Konstrukt, SEQ- und PAR-Zählschleifen 5.4.5 Prozeduren . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.4.6 Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . Parallel Virtual Machine (PVM) . . . . . . . . . . . . . . . . . . 5.5.1 Dämon-Prozesse . . . . . . . . . . . . . . . . . . . . . . . 5.5.2 Task Erzeugung und Start . . . . . . . . . . . . . . . . . . 5.5.3 Hinzufügen und Entfernen von Rechnern . . . . . . . . 5.5.4 Taskkommunikation . . . . . . . . . . . . . . . . . . . . . 5.5.5 Gruppen . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.5.6 Barrieresynchronisation und Broadcast . . . . . . . . . . Google Go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6.1 Modularisierung und Import von Paketen . . . . . . . . 5.6.2 Deklarationen . . . . . . . . . . . . . . . . . . . . . . . . . 5.6.3 Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6.4 Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6.5 Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6.6 Map . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6.7 Channel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.6.8 Kontrollstrukturen . . . . . . . . . . . . . . . . . . . . . . 5.6.9 Anwendungsbeispiel Echo-Server . . . . . . . . . . . . . 5.6.10 Ausnahmebehandlung . . . . . . . . . . . . . . . . . . . . Erlang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.7.1 Module und Funktionen . . . . . . . . . . . . . . . . . . . 5.7.2 Variablen, Atome, Tupel, Listen . . . . . . . . . . . . . . 5.7.3 if, case, loop . . . . . . . . . . . . . . . . . . . . . . . . . . 5.7.4 Funktionale Objekte . . . . . . . . . . . . . . . . . . . . . 5.7.5 Nebenläufigkeit und Nachrichtenaustausch . . . . . . . Scala . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.8.1 Semikolon . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.8.2 Hallo Welt! . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.8.3 Modularisierung mit Paketen . . . . . . . . . . . . . . . . 5.8.4 Import von Paketen . . . . . . . . . . . . . . . . . . . . . . 5.8.5 Typen, Variablen und Funktionen . . . . . . . . . . . . . 5.8.6 Objektorientierung . . . . . . . . . . . . . . . . . . . . . . 5.8.7 Traits . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . TCP/IP-Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.9.1 Domänen und Socketadressen . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

212 214 215 215 216 217 218 219 219 220 220 222 222 225 225 226 226 227 232 235 236 237 238 240 242 243 243 243 244 245 248 248 253 253 253 256 256 257 260 262 262 263

Inhaltsverzeichnis

XIX

5.9.2 Adressierungsstruktur . . . . . . . . . . . . . . . . . . . . . . . . 5.9.3 Umwandlungsfunktionen . . . . . . . . . . . . . . . . . . . . . . 5.9.4 Sockettypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.9.5 Datagram-Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . 5.9.6 Stream-Sockets . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.10 Java Message Service (JMS) . . . . . . . . . . . . . . . . . . . . . . . . 5.10.1 Message API . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.10.2 Producer-Consumer API . . . . . . . . . . . . . . . . . . . . . . 5.10.3 Anwendungsbeispiel Erzeuger-Verbraucher-Problem (Pipe) . 5.10.4 JMS-Provider . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.11 Kooperative Modelle mit entfernten Aufrufen . . . . . . . . . . . . . . 5.11.1 Ablauf von entfernten Aufrufen . . . . . . . . . . . . . . . . . . 5.11.2 Abbildung des entfernten Aufrufes auf Nachrichten . . . . . . 5.11.3 Remote Procedure Calls (ONC RPCs, DCE RPCs, DCOM) . 5.11.4 Entfernte Methodenaufrufe (CORBA) . . . . . . . . . . . . . . 5.11.5 Remote Method Invocation (RMI) . . . . . . . . . . . . . . . . 5.11.6 Entfernte Komponentenaufrufe (.NET) . . . . . . . . . . . . . . 5.11.7 Entfernte Serviceaufrufe (Web Services) . . . . . . . . . . . . . Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . .

263 264 265 266 272 279 279 280 291 296 297 297 297 301 302 309 320 325 332

6

Parallelisierung . . . . . . . . . . . . . . . . . . . . . . . . . 6.1 Leistungsmaße für parallele Programme . . . . . . . 6.1.1 Laufzeit . . . . . . . . . . . . . . . . . . . . . . . 6.1.2 Speedup . . . . . . . . . . . . . . . . . . . . . . . 6.1.3 Kosten und Overhead . . . . . . . . . . . . . . 6.1.4 Effizienz . . . . . . . . . . . . . . . . . . . . . . 6.1.5 Amdahls Gesetz . . . . . . . . . . . . . . . . . . 6.1.6 Gustafsons Gesetz . . . . . . . . . . . . . . . . 6.1.7 Karp-Flatt-Metrik . . . . . . . . . . . . . . . . . 6.2 Parallelisierungstechniken . . . . . . . . . . . . . . . . 6.2.1 Inhärenter Parallelismus . . . . . . . . . . . . . 6.2.2 Zerlegungsmethoden . . . . . . . . . . . . . . . 6.2.3 Weitere parallele Verfahren und Algorithmen Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

. . . . . . . . . . . . . .

339 339 339 340 341 342 343 344 345 346 346 347 354 354

7

Verteilte Algorithmen . . . . . . . . . . . 7.1 Verteilt versus zentralisiert . . . . . . 7.2 Logische Ordnung von Ereignissen 7.2.1 Lamport-Zeit . . . . . . . . . . 7.2.2 Vektoruhren . . . . . . . . . . 7.3 Auswahlalgorithmen . . . . . . . . . 7.3.1 Bully-Algorithmus . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

357 357 359 359 362 364 364

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

. . . . . . .

XX

Inhaltsverzeichnis

7.3.2 Ring-Algorithmus . . . . . . . . . . Übereinstimmungsalgorithmen . . . . . . . 7.4.1 Unzuverlässige Kommunikation . . 7.4.2 Byzantinische fehlerhafte Prozesse Literatur . . . . . . . . . . . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

367 368 369 371 372

8

Rechenlastverteilung . . . . . . . . . . . . . . . . 8.1 Statische Lastverteilung . . . . . . . . . . . 8.1.1 Jobmodelle . . . . . . . . . . . . . . . 8.1.2 Lösungsverfahren . . . . . . . . . . . 8.2 Dynamische Lastverteilung . . . . . . . . . 8.2.1 Zentrale Lastverteilungssysteme . . 8.2.2 Dezentrale Lastverteilungssysteme 8.3 Grid Scheduling . . . . . . . . . . . . . . . . Literatur . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

. . . . . . . . .

373 375 377 381 385 391 393 402 405

9

Virtualisierungstechniken . . . . . . . . . . . . . . 9.1 Betriebssystemvirtualisierung . . . . . . . . . 9.1.1 Vollvirtualisierung . . . . . . . . . . . 9.1.2 Containervirtualisierung . . . . . . . . 9.1.3 Paravirtualisierung . . . . . . . . . . . 9.2 Virtuelle Maschine . . . . . . . . . . . . . . . 9.2.1 Java Virtuelle Maschine (JVM) . . . 9.2.2 Common Language Runtime (CLR) 9.3 Softwarevirtualisierung . . . . . . . . . . . . . 9.3.1 Services . . . . . . . . . . . . . . . . . . 9.3.2 Anwendungen . . . . . . . . . . . . . . 9.4 Hardware-Virtualisierung . . . . . . . . . . . 9.4.1 Prozessor . . . . . . . . . . . . . . . . . 9.4.2 Hauptspeicher . . . . . . . . . . . . . . 9.4.3 Datenspeicher . . . . . . . . . . . . . . 9.4.4 Netzwerke . . . . . . . . . . . . . . . . Literatur . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . .

411 412 413 415 415 416 416 417 418 418 419 419 420 421 422 425 426

10

Cluster . . . . . . . . . . . . . . . . . . . . . . . . . 10.1 Historische Entwicklung der Cluster . . . . 10.2 Definition Cluster . . . . . . . . . . . . . . . 10.2.1 Vor- und Nachteile von Clustern . . 10.2.2 Single System Image . . . . . . . . . 10.2.3 Aufstellungskonzepte von Clustern 10.3 Klassifikationen von Clustern . . . . . . . . 10.3.1 Hochverfügbarkeits-Cluster . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

. . . . . . . .

429 429 430 431 431 432 433 435

7.4

. . . . . . . .

Inhaltsverzeichnis

XXI

10.3.2 High Performance-Cluster . . . . 10.3.3 Cluster für hohen Datendurchsatz 10.3.4 Skalierbare-Cluster . . . . . . . . . 10.4 Zugangs-Konzepte . . . . . . . . . . . . . . Literatur . . . . . . . . . . . . . . . . . . . . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

. . . . .

439 442 442 442 445

11

Grid-Computing . . . . . . . . . 11.1 Definition Grid . . . . . . . 11.2 Unterscheidung von Grids 11.3 Grid Middleware-Systeme 11.3.1 Globus Toolkit . . . 11.3.2 gLite . . . . . . . . . 11.3.3 Unicore . . . . . . . 11.4 Weitere Grid Software . . 11.4.1 GridSphere . . . . . 11.4.2 Shibboleth . . . . . 11.4.3 VOMS . . . . . . . . 11.4.4 SRB . . . . . . . . . 11.4.5 SRM/dCache . . . . 11.4.6 OGSA-DAI . . . . 11.4.7 GAT . . . . . . . . . Literatur . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

447 447 449 450 450 451 452 454 454 455 455 455 456 456 457 457

12

Cloud-Computing . . . . . . . . . . . . . . . . . . . . . . . . . . 12.1 Organisation von Cloud-Systemen . . . . . . . . . . . . . 12.1.1 Public Cloud . . . . . . . . . . . . . . . . . . . . . . 12.1.2 Private Cloud . . . . . . . . . . . . . . . . . . . . . 12.1.3 Hybrid Cloud . . . . . . . . . . . . . . . . . . . . . 12.2 Kategorien von Cloud-Diensten . . . . . . . . . . . . . . 12.2.1 Softwaredienste (Software as a Service) . . . . . 12.2.2 Plattformdienste (Platform as a Service) . . . . . 12.2.3 Infrastrukturdienste (Infrastructure as a Service) 12.3 Ausgewählte Cloud-Dienste und -Lösungen . . . . . . . 12.3.1 Amazon Elastic Block Store (EBS) . . . . . . . . 12.3.2 Amazon Simple Storage Service (S3) . . . . . . 12.3.3 Google App Engine . . . . . . . . . . . . . . . . . 12.3.4 Eucalyptus . . . . . . . . . . . . . . . . . . . . . . . 12.4 Herausforderungen beim Cloud Computing . . . . . . . Literatur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

459 460 460 461 461 461 462 463 464 464 467 468 468 469 472 472

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . .

Sachverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475