24
vs2.4 1 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW HW BS BS Prozesse Kommunizierende Threads

Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

Embed Size (px)

Citation preview

Page 1: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 1

2.4 Kommunikationsdienste des Betriebssystems

Interprozesskommunikation (inter-process communication, IPC)

am Beispiel Unix

HW HW

BS BS

Prozesse

KommunizierendeThreads

Page 2: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 2

Interprozesskommunikation ist sprachunabhängig:

- Nachrichten sind ungetypt, d.h. Bytes oder Byte-Folgen,

- nackte Semantik ohne syntaktischen Zucker,

- u.U. verschiedene Semantiken zur Auswahl.

Pipes, Named Pipes, Message Queues, ... für lokale IPC

Sockets für netzweite IPC

Page 3: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 3

2.4.1 Pipes

Pipe = Simplex-Kanal (Solaris: Duplex!)verbunden mit einem Eingabe- und einem Ausgabe-Port(typischerweise verschiedener Prozesse)

Senden: int write(int port, char *buffer, int length)

Empfangen: int read(int port, char *buffer, int length)

Adressierung: portbezogen

Konfigurierung: dynamisch durch Programm:Erzeugung von Prozessen und Pipes,Vererben von Ports bei Prozesserzeugung

Semantik: zuverlässiger Byte-Strom mit begrenzter Pufferung;read erfolgreich, sobald mindestens 1 Byte vorliegt;write erfolgreich, sobald length Bytes frei;auch nichtblockierende Versionen.

Page 4: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 4

2.4.2 Sockets

(socket = Steckdose)

Socket = Duplex-Port (Senden und Empfangen)

für lokale und netzweite IPCmit unterschiedlich wählbaren Semantiken

Adressierung: portbezogen

Konfigurierung: dynamisch durch Programm:

Erzeugung lokaler Sockets,

Binden an Sockets anderer Prozesse

Semantik: zuverlässiger Byte-Strom

oder Einzelnachrichten ohne Reihenfolge- garantie und Schutz gegen Verlust

Page 5: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 5

Erzeugung eines – ungebundenen – Socket:

int socket(int family, int type, int protocol)

prozeßlokale Protokoll- Dienst ProtokollPort-Nummer Familie (i.d.R. 0 [Null])

Familie

Dienst PF_UNIX PF_INET PF_NS .......

SOCK_STREAM TCP SPP

SOCK_DGRAM UDP IDP

SOCK_RAW IP .......

Page 6: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 6

Benennung eines Socket mit netzweit gültiger Adresse:

int bind(int socket, struct sockaddr *address, int addrlen)

(Protokollfamilie, stationslokale Socket-Nummer , Stationsadresse)

z.B. PF_INET, a-16-bitPortNumber, a-32-bitHostId

Page 7: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 7

Dienst SOCK_DGRAM für Internet:

verbindungslose, unzuverlässige Nachrichtenübertragung mit UDP

int sendto(int socket, char *buffer, int length, int flags, struct sockaddr *to, int addrlen)

Absender socket sendet an Adressat to

int recvfrom(int socket, char *buffer, int length, int flags, struct sockaddr *from, int *addrlen)

socket empfängt an ihn gesendete Nachricht sowie Absender

Page 8: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 8

Dienst SOCK_STREAM für Internet:

verbindungsorientiert - zuverlässiger Byte-Strom mit TCP

Konfigurierung ist an Szenario Auftraggeber/Auftragnehmer orientiert:

Initiative geht von einem Klienten aus !

Nach erfolgreich hergestellter Verbindung Nachrichtenaustausch mittels

(Klient) (Server)

write(s1,request,length);read(s3,request,length);...write(s3,reply,length);

read(s1,reply,length);

Page 9: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 9

Herstellung der Verbindung:

(Klient) (Server)

s1 = socket(...); s2 = socket(...);

[ bind(s1,..); ] bind(s2,&local,l);

listen(s2, qlength);

connect(s1,&dest,l); s3 = accept(s2,&source,&l);

write(s1,...); read(s3,...);

... ...

close(s1); close(s3);

( Statt write/read auch send/recv(.,.,.,flags) )

Page 10: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 10

Java unterstützt das Arbeiten mit Sockets durch Bibliotheksklassen

Socket,

ServerSocket,

DatagramSocket, MulticastSocket,

.....

siehe java.net.*

Page 11: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 11

2.4.3 Nichtsequentielle Server

Beachte: Server operiert in nichtsequentieller Umgebung

Verbindungsbearbeitung/Auftragsbearbeitung

sequentiell,exklusiv

(Prozess Monitor!)

nichtsequentiell,überlappend

je Verbindung je Verbindungein Prozess ein Thread

Page 12: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 12

Server kann auch mehrere Dienste anbieten,

z.B. für jeden Dienst ein eigener Port !

a) sequentiell: disjunktives Warten auf Verbindungswünsche

b) nichtsequentiell: je Port ein (statischer) Thread

c) nichtsequentiell: disjunktives Warten + (dynamische) Threads

d) nichtsequentiell: disjunktives Warten + Prozesse

Page 13: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 13

2.4.4 Disjunktives Warten

auf Verbindungsanforderungen über mehrere Sockets

- allgemein: auf Empfangs/Sende-Möglichkeit über Kanäle !

Alternativen:

wiederholtes nichtblockierendes Senden/Empfangen („polling“)

nichtblockierendes Senden/Empfangen mit Signalisierung durch

Software-Unterbrechung (Unix: signal SIGIO) - mühsam !

disjunktives Warten mit Systemaufruf (Unix:) select

Page 14: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 14

2.4.5 Datenkonvertierung

bei Hardware-Heterogenität

Byte-Reihenfolge, z.B. für 16-Bit-Ganzzahlen:

„little-endian“ (Intel,..)

„big-endian“ (Motorola,..)

Zeichen: ASCII, EBCDIC, ...

Gleitkommazahlen: IEEE-Standard, ...

a+1 a

a a+1

Page 15: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 15

2 Alternativen:

1. Ad-hoc-Umwandlung, z.B. „receiver makes it right“

2. Verwendung einer kanonischen Darstellung auf dem Netz

(external data representation)

Auch Felder, Verbunde, Objekte, ... behandeln !

Bezug zu: - Typsystem der Programmiersprache

- vom Übersetzer gewählte interne Darstellung

- evtl. Sprachheterogenität !

(Wir kommen in einem späteren Kapitel darauf zurück.)

[ Zuständig gemäß OSI-Referenzmodell: Presentation Layer (6) ]

Page 16: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 16

Für Internet Unterstützung durch Bibliotheksroutinen:

in C für Ganzzahlen:

u_long htonl(u_long number); „host to network long“

u_short htons(u_short number);

u_long ntohl(u_long number);

u_short ntohs(u_short number);

Page 17: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 17

Java: automatische Umcodierung bei Benutzung von Socket-Objekten

OutputStream os = mySocket.getOutputStream();

ObjectOutput out = new ObjectOutputStream(os);

out.writeInt(i);

out.writeFloat(f);

out.writeBoolean(b);

...

out.writeObject(o); // o must be Serializable or ...

Entsprechend für Eingabe ...

Page 18: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 18

2.5 Kommunikationsplattformen

- in C, Fortran, ... über Bibliotheken benutzbar

Ziele:

Nachrichtendienst unabhängig von Betriebssystem und Netz

automatische Typkonversion für übertragene Daten

komfortable Prozessverwaltung

und damit Eignung für Parallelprogrammierung im Netz

Plattform

BS

HW . . . . . . .

. . . . . . .

Page 19: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 19

2.5.1 PVM

„Parallel Virtual Machine“

gepufferte, blockierende, reihenfolgetreue Übertragung von Einzelnachrichten

prozeßbezogene Adressierung, auch Rundsendungen

Unterstützung von Packen/Entpacken von Nachrichten (marshaling)

Dynamische Erzeugung von Prozessen im Netz

interaktive Steuerung der Konfiguration

Page 20: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 20

2.5.2 MPI

„Message Passing Interface“

Entwickelt für Parallelrechner mit verteiltem Speicher(Mehrrechnersystem, multicomputer)

Erweitert für Workstation Clusters und Rechnernetze

Unterstützung für SPMD – Single Program, Multiple Data:

Jeder Prozess(or) arbeitet mit gleichen Programm,

aber auf jeweils eigenem Fragment der Daten,

mit Interaktion über Nachrichten.

Page 21: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 21

Adressierung ist prozessbezogen:

int MPI_Send(void* message, int count, MPI_Datatype elemType, int destProc, int tag, MPI_Comm communicator)

entspricht send message to destProc(Feld-Typ)

int MPI_Recv(void* message, int count, MPI_Datatype elemType, int srcProc, int tag, MPI_Comm communicator, MPI_Status* status)

entspricht recv message from srcProc

srcProc kann auch MPI_ANY_SOURCE sein,

status enthält Prozessnummer des Senders

Page 22: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 22

Adressierung auch prozessgruppenbezogen möglich:

int MPI_Bcast(void* message, int count, MPI_Datatype elemType, int root, MPI_Comm communicator)

Falls ausführender Prozeß = root ,

Senden der Rundsendung (multicast) message

an die Mitglieder der Gruppe communicator

Sonst Empfangen einer Rundsendung

Page 23: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 23

Semantik:

Pufferung ist systemspezifisch/wählbar

Empfangsfolge: zuverlässig reihenfolgetreue Nachrichten

Synchronisation: blockierend, aber auch nichtblockierende Varianten:

int MPI_Isend(..., MPI_Request* request)

int MPI_Irecv(..., MPI_Request* request)

( I für immediate) und Synchronisation mittels

int MPI_Wait(MPI_Request* request, MPI_Status* status)

(statt über Software-Unterbrechungen !)

Page 24: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende

vs2.4 24

Konfigurierung

Alle n beteiligten Rechner erhalten und starten eine Kopie eines

MPI-basierten Programms;

die n gestarteten Prozesse verhalten sich ähnlich, aber nicht

identisch (abhängig von ihrer Identität!),

operieren auf jeweils auf einer Teilmenge der Daten

und interagieren dabei über Nachrichten.