20
bs-7.4 1 7.4 Kommunikation munikation zwischen Benutzerprozessen (IPK) stellt ere Anforderungen als auftragsorientierte Kommunika 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 !

7.4 Kommunikation

Embed Size (px)

DESCRIPTION

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 ,. - PowerPoint PPT Presentation

Citation preview

Page 1: 7.4  Kommunikation

bs-7.4 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 !

Page 2: 7.4  Kommunikation

bs-7.4 2

7.4.1 Pipes

Zur Erinnerung (2.4): Pipe = Byte-Puffer fester Größe,

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.

Page 3: 7.4  Kommunikation

bs-7.4 3

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

Page 4: 7.4  Kommunikation

bs-7.4 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

Page 5: 7.4  Kommunikation

bs-7.4 5

Benutzung z.B. so:

>: mkfifo buffer

>: ls -lprw------- 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

Page 6: 7.4  Kommunikation

bs-7.4 6

Beachte: mit benannten Pipes lassen sich nicht nur Pipelines,

sondern beliebige Datenflußgraphen aufsetzen !

1

3

2

6

5

4

>: 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

eg

Page 7: 7.4  Kommunikation

bs-7.4 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

Page 8: 7.4  Kommunikation

bs-7.4 8

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)

Page 9: 7.4  Kommunikation

bs-7.4 9

7.4.3 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 P Prozess Q

Page 10: 7.4  Kommunikation

bs-7.4 10

7.4.3.1 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

Page 11: 7.4  Kommunikation

bs-7.4 11

Familie

Dienst PF_UNIX PF_INET PF_NS .......

SOCK_STREAM TCP SPP

SOCK_DGRAM UDP IDP

SOCK_RAW IP .......

Erzeugung eines – ungebundenen – Socket:

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

prozeßlokale Protokoll- Dienst ProtokollSocket-Nummer Familie (i.d.R. 0 [Null])(file descriptor!)

Page 12: 7.4  Kommunikation

bs-7.4 12

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)

Page 13: 7.4  Kommunikation

bs-7.4 13

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

Page 14: 7.4  Kommunikation

bs-7.4 14

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);

Page 15: 7.4  Kommunikation

bs-7.4 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);

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

Page 16: 7.4  Kommunikation

bs-7.4 16

Java

unterstützt das Arbeiten mit Sockets durch Bibliotheksklassen

Socket,

ServerSocket,

DatagramSocket, MulticastSocket,

.....

siehe java.net.*

Page 17: 7.4  Kommunikation

bs-7.4 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:

Page 18: 7.4  Kommunikation

bs-7.4 18

Protokollhierarchie: Software ist in Schichten strukturiert

7 Anwendung (application)

6 Darstellung (presentation)

5 Sitzung (session)

4 Transport (transport)

3 Vermittlung (network)

2 Sicherung (data link)

1 Bitübertragung (physical !)

ISO OSI

Anwendungsprotokolle: TELNET, FTP, HTTP, . . .

TCP, UDP

IP

(Netztreiber)

Internet

Transportsystem

Anwendungssystem (Systemschnittstelle - Sockets)

Page 19: 7.4  Kommunikation

bs-7.4 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

Page 20: 7.4  Kommunikation

bs-7.4 20

Beachte: Streams sind auch bei Pipes einsetzbar,

erlauben dynamisches Einfügenvon 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 ...

...