Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

2.4 Kommunikationsdienste des Betriebssystems

Ähnliche Präsentationen


Präsentation zum Thema: "2.4 Kommunikationsdienste des Betriebssystems"—  Präsentation transkript:

1 2.4 Kommunikationsdienste des Betriebssystems
Interprozesskommunikation (inter-process communication, IPC) am Beispiel Unix Prozesse Kommunizierende Threads BS BS HW HW 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 vs2.4

3 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. vs2.4

4 Socket = Duplex-Port (Senden und Empfangen)
Sockets (socket = Steckdose) Socket = Duplex-Port (Senden und Empfangen) für lokale und netzweite IPC mit 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 vs2.4

5  Erzeugung eines – ungebundenen – Socket:
int socket(int family, int type, int protocol) prozeßlokale Protokoll- Dienst Protokoll Port-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 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 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 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); 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) ) vs2.4

10 Java unterstützt das Arbeiten mit Sockets durch Bibliotheksklassen
ServerSocket, DatagramSocket, MulticastSocket, ..... siehe java.net.* vs2.4

11 Verbindungsbearbeitung/
Nichtsequentielle Server Beachte: Server operiert in nichtsequentieller Umgebung Verbindungsbearbeitung/ Auftragsbearbeitung sequentiell, exklusiv (Prozess  Monitor!) nichtsequentiell, überlappend je Verbindung je Verbindung ein Prozess ein Thread 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 vs2.4

13 auf Verbindungsanforderungen über mehrere Sockets
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 vs2.4

14 bei Hardware-Heterogenität
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 a a a+1 vs2.4

15 Ad-hoc-Umwandlung, z.B. „receiver makes it right“
2 Alternativen: Ad-hoc-Umwandlung, z.B. „receiver makes it right“ 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) ] 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); 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 ... 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 vs2.4

19 „Parallel Virtual Machine“
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 vs2.4

20 „Message Passing Interface“
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. 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 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 vs2.4

23 Pufferung ist systemspezifisch/wählbar
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 !) vs2.4

24 Alle n beteiligten Rechner erhalten und starten eine Kopie eines
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. vs2.4


Herunterladen ppt "2.4 Kommunikationsdienste des Betriebssystems"

Ähnliche Präsentationen


Google-Anzeigen