1 / 20

7.4 Kommunikation

7.4 Kommunikation. Kommunikation zwischen Benutzerprozessen (IPK) stellt andere Anforderungen als auftragsorientierte Kommunikation in mikrokernbasierten Betriebssystemen, vor allem  großzügige Pufferung ,  sowohl Auftragsbeziehungen als auch Nachrichten- oder Byte-Ströme ,.

Download Presentation

7.4 Kommunikation

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 7.4 Kommunikation • Kommunikation zwischen Benutzerprozessen (IPK) stellt • andere Anforderungen als auftragsorientierte Kommunikation • in mikrokernbasierten Betriebssystemen, vor allem •  großzügige Pufferung, •  sowohl Auftragsbeziehungen als auch • Nachrichten- oder Byte-Ströme, •  sowohl lokal als auch übers Netz • Ein/Ausgabe !

  2. 7.4.1 Pipes Zur Erinnerung (2.4): Pipe = Byte-Puffer fester Größe,  erzeugt mitpipe(channel),  benutzt mitread(channel[0]) für das Empfangen von Bytes (kann blockieren),  benutzt mitread(channel[1]) für das Senden von Bytes (kann blockieren!),  eingesetzt für Byteströme zwischen „verwandten“ Prozessen.

  3. read write • Gepufferte Repräsentation: • - typischerweise 0 – 4 KB, • - entweder in anonymer Datei fester Größe, die durchpipe • eingerichtet wird, • - oder desgl. auf „RAM disk“ (da nicht notwendig persistent) • - oder in speziellem Arbeitsspeicherbereich; • - channel[0] undchannel[1] verweisen auf zwei • Iteratoren mir unabhängigen Lese- bzw. Schreibzeigern, • die zyklisch durch den Puffer wandern.

  4. 7.4.2 Benannte Pipes (named pipes, fifo special files, fifos)  sind Zwitter zwischen Dateien und Pipes,  erlauben IPK zwischen beliebigen Prozessen,  typischerweise mit Pufferkapazität 0. Erzeugung: mknod(path,(mode&0777)|S_IFIFO,0)* oder mkfifo(path,mode) oder Befehl mkfifo [–m mode] path

  5. Benutzung z.B. so: >: mkfifo buffer >: ls -l prw------- 1 lohr institut 0 Jul 10 11:08 buffer >: process input1 >buffer & >: process input2 >buffer & >: more buffer zeigt gemischte Ausgabe  Kapazität 0: Sender wartet, bis Empfänger übernimmt  Empfänger erhält EOF, wenn jeder Sender seinen Kanal geschlossen hat

  6. Beachte: mit benannten Pipes lassen sich nicht nur Pipelines, sondern beliebige Datenflußgraphen aufsetzen ! c 2 4 f a 1 d 6 b g 3 5 e >: mkfifo a b c d e f g >: 1 a b & 2 a c & 3 b d e & 4 c d f & 5 e g & 6 f g

  7. 7.4.3 Message Queues (Unix) •  werden im Arbeitsspeicher gehalten, •  sind unabhängig von den Lebensdauern ihrer Benutzer, •  übertragen Einzelnachrichten, •  werden durch einen Schlüssel (Typ key_t) identifiziert. • msqid = msgget(key,msgflag) • erzeugt und/oder öffnet die M.Q. key • mit Zugriffsrechten gemäßmsgflag

  8. Senden und Empfangen: • fd = msgsnd(msqid,&buffer,length,flag) • bufferist vom Typ • struct msgbuf {long mtype; • char mtext[1]; • } • msgrcv(msqid,&buffer,length,type,flag)

  9. 7.4.3 Sockets („socket“ = Steckdose) • dienen vorwiegend der Kommunikation im Netz • (aber auch lokal einsetzbar, dann ähnlich wie Pipes) • Socket = Duplex-Kanalanschluss (Senden und Empfangen) • mit unterschiedlich wählbaren Semantiken Prozess P Prozess Q   Socket 1 Socket 2

  10. 7.4.3.1 Benutzung von Sockets 1. Erzeugung 2. Namensgebung 3. Binden an anderen Socket 4. Duplex-Kommunikation über den so entstandenen Kanal Alternative Semantiken:  zuverlässiger Byte-Strom oder  Einzelnachrichten ohne Reihenfolgegarantie, ohne Schutz gegen Verlust

  11. Erzeugung eines – ungebundenen – Socket: int socket(int family, int type, int protocol) prozeßlokale Protokoll- Dienst Protokoll Socket-Nummer Familie (i.d.R. 0 [Null]) (file descriptor!)

  12. Benennung eines Socket • mit netzweit eindeutigem Namen, bestehend aus •  Internet-Adresse des Rechners (IP address) •  Port-Nummer (lokal) int bind(int socket, struct sockaddr *address, int addrlen) (Protokollfamilie, Port-Nummer , Internet-Adresse)

  13. SOCK_DGRAMfür Internet: 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 deren Absender Pufferung der Nachrichten teils beim Sender, hauptsächlich aber beim Empfänger

  14. SOCK_STREAMfür Internet: • zuverlässiger Byte-Strom mit TCP • Orientierung an Szenario Auftraggeber/Auftragnehmer : • 1. Klient stellt Verbindung mit Server her; • 2. sodann Nachrichtenaustausch • mittels • (Klient) (Server) • write(s1,request,length); • read(s3,request,length); • ... • write(s3,reply,length); • read(s1,reply,length);

  15. Herstellung der Verbindung: (Klient) (Server) s1 = socket(...); s2 = socket(...); [bind(s1,..); ]bind(s2,&local,l); listen(s2, qlength); connect(s1,&dst,l); s3 = accept(s2,&src,&l); write(s1,..); read(s3,..); ... ... close(s1); close(s3); ( Stattwrite/readauchsend/recv(.,.,.,flags) ! )

  16. Java unterstützt das Arbeiten mit Sockets durch Bibliotheksklassen Socket, ServerSocket, DatagramSocket, MulticastSocket, ..... siehejava.net.*

  17. 7.4.3.2 Implementierung von Sockets • Protokollfamilie PF_UNIX: wie Pipes • Protokollfamilie PF_INET: • Transportsystem des Internet, bestehend aus • Treiber des Netzanschlusses (network interface) • + Internet-Kommunikationsprotokolle:

  18. Protokollhierarchie: Software ist in Schichten strukturiert • Anwendung (application) • Darstellung (presentation) • Sitzung (session) • Transport (transport) • Vermittlung (network) • Sicherung (data link) • Bitübertragung (physical !) • ISO OSI Anwendungsprotokolle: TELNET, FTP, HTTP, . . . TCP, UDP IP (Netztreiber) Internet (Systemschnittstelle - Sockets) Anwendungssystem Transportsystem

  19. Protokollstapel (protocol stack) ist •  entweder fest eingebaut •  oder dynamisch modifizierbar durch • Einziehen/Löschen von Schichten: • Streams, • bestehend aus einer Folge von Modulen, existieren • zwischen Benutzerprozess und Netzanschluss • stream head • nimmt socket-bezogene Systemaufrufe entgegen

  20. Beachte: Streams  sind auch bei Pipes einsetzbar,  erlauben dynamisches Einfügen von Treibern ! • Systemaufruf in Unix: wiederum • ioctl(channel,command,arg) • mit typischencommand-Werten • I_PUSH Einfügen eines Moduls • hinter dem stream head • I_POP Entfernen ... • ...

More Related