Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process...
-
Upload
kinge-geidel -
Category
Documents
-
view
108 -
download
0
Transcript of Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process...
![Page 1: Vs2.41 2.4 Kommunikationsdienste des Betriebssystems Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix HW BS Prozesse Kommunizierende.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/1.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/2.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/3.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/4.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/5.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/6.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/7.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/8.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/9.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/10.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/11.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/12.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/13.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/14.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/15.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/16.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/17.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/18.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/19.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/20.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/21.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/22.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/23.jpg)
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.](https://reader035.fdocuments.net/reader035/viewer/2022062622/55204d6349795902118b8eed/html5/thumbnails/24.jpg)
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.