Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Bs-7.41 7.4 Kommunikation Kommunikation zwischen Benutzerprozessen (IPK) stellt andere Anforderungen als auftragsorientierte Kommunikation in mikrokernbasierten.

Ähnliche Präsentationen


Präsentation zum Thema: "Bs-7.41 7.4 Kommunikation Kommunikation zwischen Benutzerprozessen (IPK) stellt andere Anforderungen als auftragsorientierte Kommunikation in mikrokernbasierten."—  Präsentation transkript:

1 bs 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 bs Pipes Zur Erinnerung (2.4 ): Pipe = Byte-Puffer fester Größe,2.4 erzeugt mit pipe(channel), benutzt mit read(channel[0]) für das Empfangen von Bytes (kann blockieren), benutzt mit read(channel[1]) für das Senden von Bytes (kann blockieren!), eingesetzt für Byteströme zwischen verwandten Prozessen.

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

4 bs 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 bs-7.45 Benutzung z.B. so: >: mkfifo buffer >: ls -l prw 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 bs-7.46 Beachte: mit benannten Pipes lassen sich nicht nur Pipelines, sondern beliebige Datenflußgraphen aufsetzen ! >: 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 a d c b f e g

7 bs 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 bs-7.48 Senden und Empfangen: fd = msgsnd(msqid,&buffer,length,flag) buffer ist vom Typ struct msgbuf {long mtype; char mtext[1]; } msgrcv(msqid,&buffer,length,type,flag)

9 bs Sockets 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 (socket = Steckdose) Socket 1 Socket 2 Prozess PProzess Q

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

11 bs Familie Dienst PF_UNIX PF_INET PF_NS SOCK_STREAM TCPSPP SOCK_DGRAM UDP IDP SOCK_RAW IP Erzeugung eines – ungebundenen – Socket: int socket(int family, int type, int protocol) prozeßlokaleProtokoll- Dienst Protokoll Socket-NummerFamilie (i.d.R. 0 [Null]) (file descriptor!)

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

13 bs SOCK_DGRAM fü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 bs SOCK_STREAM fü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 bs 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); ( Statt write/read auch send/recv(.,.,.,flags) ! )

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

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

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

19 bs 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 bs Beachte: Streams sind auch bei Pipes einsetzbar, erlauben dynamisches Einfügen von Treibern ! Systemaufruf in Unix: wiederum ioctl(channel,command,arg) mit typischen command -Werten I_PUSH Einfügen eines Moduls hinter dem stream head I_POP Entfernen......


Herunterladen ppt "Bs-7.41 7.4 Kommunikation Kommunikation zwischen Benutzerprozessen (IPK) stellt andere Anforderungen als auftragsorientierte Kommunikation in mikrokernbasierten."

Ähnliche Präsentationen


Google-Anzeigen