Interprozesskommunikation (IPC)



Ähnliche Dokumente
Tafelübung zu BS 4. Interprozesskommunikation

FILE *fp; char fname[100];... fp = fopen (fname, rb ); if( fp == NULL ) { perror( fopen );... } // Fehlernachricht auf letzten Fehler, der aufkam

1.) Nennen Sie Aufgaben und mögliche Dienste der Transportschicht (Transport Layer) des ISO/OSI-Schichtenmodells.

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

Transmission Control Protocol (TCP)

Lösung Übungszettel 6

2. Prozesssynchronisation

OP-LOG

WinVetpro im Betriebsmodus Laptop

Computer and Communication Systems (Lehrstuhl für Technische Informatik) Socket-Programmierung

Lexware professional und premium setzen bis einschließlich Version 2012 den Sybase SQL-Datenbankserver

Dienstspezifikation nach RFC

Man liest sich: POP3/IMAP

Handbuch. timecard Connector Version: REINER SCT Kartengeräte GmbH & Co. KG Goethestr Furtwangen

Virtueller Seminarordner Anleitung für die Dozentinnen und Dozenten

Logging, Threaded Server

Einrichten eines Postfachs mit Outlook Express / Outlook bis Version 2000

Loggen Sie sich in Ihrem teamspace Team ein, wechseln Sie bitte zur Verwaltung und klicken Sie dort auf den Punkt Synchronisation.

Um ein solches Dokument zu erzeugen, muss eine Serienbriefvorlage in Word erstellt werden, das auf die von BüroWARE erstellte Datei zugreift.

FOPT 5: Eigenständige Client-Server-Anwendungen (Programmierung verteilter Anwendungen in Java 1)

Betriebssystem Windows - SSH Secure Shell Client

Step by Step Webserver unter Windows Server von Christian Bartl

Konfigurationsanleitung Access Control Lists (ACL) Funkwerk. Copyright Stefan Dahler Oktober 2008 Version 1.0.

Anwendungsprotokolle: HTTP, POP, SMTP

Socket-Details für Linux Admins

Powermanager Server- Client- Installation

Netzwerk-Programmierung in C

teamsync Kurzanleitung

ICS-Addin. Benutzerhandbuch. Version: 1.0

MSXFORUM - Exchange Server 2003 > Konfiguration NNTP unter Exchange 2003

FAQ IMAP (Internet Message Access Protocol)

Verbessertes Konzept: Monitore

Dieses Dokument erläutert die Einrichtung einer VPN-Verbindung zwischen einem LANCOM Router (ab LCOS 7.6) und dem Apple iphone Client.

trivum Multiroom System Konfigurations- Anleitung Erstellen eines RS232 Protokolls am Bespiel eines Marantz SR7005

Erfahrungsbericht Installation von OpenOffice.org2 auf Terminalservern mit Citrix Metaframe

Formular»Fragenkatalog BIM-Server«

Leitfaden einrichtung Outlook Stand vom:

How-to: Webserver NAT. Securepoint Security System Version 2007nx

Ein Hinweis vorab: Mailkonfiguration am Beispiel von Thunderbird

Rechnernetze II SS Betriebssysteme / verteilte Systeme rolanda.dwismuellera@duni-siegena.de Tel.: 0271/ , Büro: H-B 8404

Service & Support. Was sind die Vorraussetzungen für einen Client-Server-Betrieb mit Simatic WinCC (<V5 & V5)? WinCC.

FuxMedia Programm im Netzwerk einrichten am Beispiel von Windows 7

Adressen der BA Leipzig

Folgende Einstellungen sind notwendig, damit die Kommunikation zwischen Server und Client funktioniert:

How to install freesshd

Version 0.3. Installation von MinGW und Eclipse CDT

Anbindung des eibport an das Internet

Um dies zu tun, öffnen Sie in den Systemeinstellungen das Kontrollfeld "Sharing". Auf dem Bildschirm sollte folgendes Fenster erscheinen:

HTBVIEWER INBETRIEBNAHME

Einrichtung von VPN-Verbindungen unter Windows NT

System-Update Addendum

TCP/UDP. Transport Layer

PRAXISMANAGEMENT FÜR DIE ZAHNARZTPRAXIS, MKG - CHIRURGIE UND KLINIK PRO X DENT MKG ZMK UMSTELLUNG DER INSTALLATION AUF NETZLAUFWERK

Aufgaben: (dazugehörige Kapitel / Seitenangaben in Kursiv: Kapitel Seite Seitennummern)

Installation OMNIKEY 3121 USB

Binäre Bäume. 1. Allgemeines. 2. Funktionsweise. 2.1 Eintragen

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Würfelt man dabei je genau 10 - mal eine 1, 2, 3, 4, 5 und 6, so beträgt die Anzahl. der verschiedenen Reihenfolgen, in denen man dies tun kann, 60!.

Meine ZyXEL Cloud. Tobias Hermanns V0.10

Diese Anleitung enthält Anweisungen, die nur durch erfahrene Anwender durchgeführt werden sollten!

Stecken Sie Ihren USB Stick oder Ihre externe USB Festplatte in den USB Steckplatz des Sinus 154 DSL SE.

Unterprogramme. Funktionen. Bedeutung von Funktionen in C++ Definition einer Funktion. Definition einer Prozedur

CONVEMA DFÜ-Einrichtung unter Windows XP

Websites mit Dreamweaver MX und SSH ins Internet bringen

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

# Socketprogrammierung

Benutzeranleitung (nicht für versierte Benutzer) SSH Secure Shell

Rechnernetzwerke. Rechnernetze sind Verbünde von einzelnen Computern, die Daten auf elektronischem Weg miteinander austauschen können.

Whitepaper. Produkt: combit address manager / combit Relationship Manager. Datenabgleich zwischen Notebook und Desktop-PC / Server

Übersicht... 2 Dateiupload... 3 Administratorfunktionen... 4

Nutzung des Retain-Archivs

Synchronisierung. Kommunikationstechnik, SS 08, Prof. Dr. Stefan Brunthaler 73

Lizenzen auschecken. Was ist zu tun?

INHALT. Troubleshooting Netzwerkinstallation

Dieses HowTo darf nicht vervielfältigt oder veröffentlich werden ohne Einverständnis des Erstellers. Alle Angaben ohne Gewähr.

Autor: Uwe Labs Stand: PuTTY in der paedml 3.0 Novell...1

Cisco AnyConnect VPN Client - Anleitung für Windows7

4. Network Interfaces Welches verwenden? 5. Anwendung : Laden einer einfachen Internetseite 6. Kapselung von Paketen

Dokumentenverwaltung. Copyright 2012 cobra computer s brainware GmbH

DVD Version 9.1. Netzwerkinstallation + VDE-Admin-Tool.

Anleitung für den Datenaustausch mit mobile.de

Das Handbuch zu KNetAttach. Orville Bennett Übersetzung: Thomas Bögel

So nutzen Sie die HiDrive App mit Ihrem Android Smartphone

Anleitung zum Anlegen und Bearbeiten einer News in TYPO3 für

Kurzanleitung zur Softwareverteilung von BitDefender Produkten...2

Systemprogrammierung I - Aufgaben zur Erlangung der Klausurzulassung für Informatiker und Wirtschaftsinformatiker

Anleitung zum erstellen einer PDF-Datei aus Microsoft Word

Leitfaden einrichtung Outlook Stand vom:

Transkript:

Gliederung 1. Einführung und Übersicht 2. Prozesse und Threads 3. Interrupts Interprozesskommunikation (IPC) 4. Scheduling 5. Synchronisation 6. Interprozesskommunikation 7. Speicherverwaltung IPC Cl. Schnörr / HM 1 Gliederung Cl. Schnörr / HM 2 Interprozesskommunikation (IPC) Übersicht: Übersicht von IPC-Möglichkeiten Charakteristika von IPC-Mechanismen Basis-Mechanismen: Übersicht an IPC-Möglichkeiten Welche Möglichkeiten zur Interprozeßkommunikation gibt es? Prozessdaten sind vor Zugriff anderer Prozesse geschützt Mechanismen zur Interprozesskommunikation (IPC) ermöglichen Datenaustausch! technische Möglichkeiten: (Signale -> Kap.2) (Synchronisation prozessübergreifend -> Kap.5) Pipes Sockets Shared-Memory Tips zur praktischen Anwendung Basismechanismen in Linux/Unix: Signale (siehe Kap.2 + Praktikum 3) Synchronisation prozessübergreifend Pipes Sockets Shared-Memory aufsetzende Middleware-Lösungen (u.a.): synchrone Kommunikation: - Remote-Porcedure-Calls (RPC) - Java Remote Method Invocation (RMI) - CORBA asynchron: - SmartSockets - MqSeries Messaging - Java Message Service (JMS) IPC Cl. Schnörr / HM 3 IPC Cl. Schnörr / HM 4

Charakteristika von IPC-Mechanismen Posix Semaphore Welche Eigenschaften weisen IPC- Mechanismen auf? Kommunikationsmodell: Punkt-zu-Punkt (verbindungsorientiert) publish-subscribe (verbindungslos) broadcast-kommunikation Übertragungsrichtung: simplex / uni-direktional duplex / bi-direktional Synchronizität: synchron / blockierend asynchron / nicht-blockierend / Nachrichtenbasiert weitere Eigenschaften: Plattformunabhängigkeit Portierbarkeit Reichweite: systemgebunden über Rechnergrenzen hinweg Posix Semaphore: auch prozeßübergreifend System-Calls: #include <semaphore.h> int sem_init( sem_t *sem, int pshared, unsigned int value ); int sem_wait( sem_t * sem ); int sem_trywait( sem_t * sem ); int sem_post( sem_t * sem ); int sem_getvalue( sem_t * sem, int * sval ); int sem_destroy( sem_t * sem ); nicht zu verwechseln mit Unix-SysV Semaphoren: ipc(), semctl(), semop(); IPC Cl. Schnörr / HM 5 Cl. Schnörr / HM 6 Pipes (1) Pipes (2) Pipes: Schnittstellen zum Aufbau eines lokale Kommunikationskanals Eigenschaften: FIFO-Prinzip: Datenaustausch als Byte-Stream (keine Satz- oder Bachrichtenstruktur) kein Protokoll unidirektional blockierend (schreiben in volle / lesen aus leerer Pipe) weitere Eigenschaften: nicht plattformübergreifend / nicht rechnerübergreifend / portierbar unter Unix-Derivaten... Pipes werden über Dateideskriptoren angesprochen System-Calls: int pipe( int filedes[2] ); - zwei File-Deskriptoren werden erzeugt (Lesen / Schreiben) - Lesen und Schreiben entsprechend wie bei Dateien #include <stdio.h> FILE * popen( const char * command, const char * type ); int p( FILE * stream ); Bsp: fd = popen( "ls -tr1", 'r' ) typischerweise in Verbindung mit fork() o.ä. (verwandte Prozesse) Cl. Schnörr / HM 7 Cl. Schnörr / HM 8

Pipes (3) Sockets (1) Named Pipes: auch bidirektional verwendbar zwischen beliebigen Prozessen, nur Kenntnis der Namen notwendig: Beispiel: Sockets: Netzwerkschnittstellen zum Aufbau eines Kommunikationskanals Eigenschaften: mehrere IP-Protokolle (TCP, UDP, IPX, u.a.) mknod( pipenamefrom, S_IFIFO 0666, 0 ); mknod( pipenameto, S_IFIFO 0666, 0 ); pcreatelp( "/usr/toppic/src/servpgm", "servpgm", pipenameto, pipenamefrom, (char *)0); pipetos = open( pipenameto, O_WRONLY ); pipefroms = open( pipenamefrom, O_RDONLY ); unlink( pipenameto ); unlink( pipenamefrom ); //Pipe1 erzeugen //Pipe2 erzeugen //ServerPgm starten //pcreate() ähnlich fork+exec //Pipes öffnen //Dateien aus Verzeichnis, //da temporär, entfernen Kommunikationsmodelle: je nach Protokoll und Adressierung alle Modelle bidirektional / duplex sowohl blockierend als auch asynchron möglich weitere Eigenschaften: plattformübergreifend / portierbar / rechnerübergreifend Cl. Schnörr / HM 9 Cl. Schnörr / HM 10 Sockets (2) Sockets (3)... Verbindungslose Kommunikation über Datagramme / UDP-Protokoll Kommunikationsarten: Nachrichten-orientiert: recvmsg() / sendmsg(), oder Client Server Bytestrom-orientiert: sendto() / recvfrom(), read(), write() gethostbyname Standard-Pufferung: 8 kb (kann optional eingestellt werden): - Senden blockiert bei umfangreicheren Daten, bis Gegenstelle gelesen hat - nichtblockierendes (asynchrones) Verhalten kann optional eingestellt werden Sockets werden in Unix auf Dateideskriptoren abgebildet: viele SystemCalls wie für Dateien (read(), write() ()) viele Flags wie für Dateien sendto recvfrom bind read write Cl. Schnörr / HM 11 Cl. Schnörr / HM 12

Sockets (4) Sockets (5) Verbindungsorientierte Kommunikation über Streams / TCP-Protokoll... Client Server Adressierung, z.b. gethostbyname lokal (AF_UNIX): Pfadname connect write read bind listen accept read write Netzadresse (AF_INET): host+port - lokal über AF_INET: host = 'localhost' oder 127.0.0.1 Zuverlässigkeit: reliable, verbindungsorientiert (z.b. TCP-Protokoll): fehlerfreie Zustellung: - keine Verluste - keine Duplikate - korrekte Reihenfolge unreliable, verbindungslos (z.b. UDP-Protokoll / Datagramm) Anm.: C-Beispiele für eigene Experimente am Ende Cl. Schnörr / HM 13 Cl. Schnörr / HM 14 Shared Memory (1) Shared Memory (2) Shared-Memory: #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> int mode; const int SHM_SIZE = 1024; //1 kb Region Erzeugen eines eindeutigen Identifikations-Keys: key_t key = ftok( "shmdemo.c", 'R' ); Erzeugen einer neuen oder Erhalt der Identifikation einer bestehenden Shared-Memory Region: int shmid = shmget( key, SHM_SIZE, flags ); flags: Zugriffsrechte, und ob neu zu erzeugen, z.b. 0644 IPC_CREAT... Verknüpfen (attach) einer Shared-Memory Region mit einem Prozeß: char * data = shmat( shmid, (void *)0, flags ); flags: Zugriffsrechte, und ob Adresse vom Kernel gerundet werden soll nun Verwendung des Datenpointers... Lösen (detach) der Shared-Memory Region vom Prozess: shmdt( data ); Eine Shared-Memory Region wird nicht gelöscht, wenn kein Prozeß mehr mit ihr verknüpft ist, außer sie wurde zuvor von einem prozeß freigegeben Freigabe einer Shared-Memory Region: shmctl( shmid, IPC_RMID, 0 ); IPC / SharedMem Cl. Schnörr / HM 15 IPC / SharedMem Cl. Schnörr / HM 16

Praxis: Übersicht Pipes auf der Shell Sockets: Datagram-Server + -Client verbindungsorientiert: Server- + Client Praxisbeispiele mögliche Probleme IPC Cl. Schnörr / HM 17 IPC / Praxis Cl. Schnörr / HM 18 Praxis: Pipes auf Shell Praxis: mögliche Probleme bei Sockets Beispiel: Sortieren einer Datei und Ausgabe der ersten 30 Sätze: ohne Pipe: sort < datei > temp head -30 < temp rm temp mit Pipe: sort < datei head -30 stdout des 1. Kommandos wird mit stdin des 2. Kommandos mit durch Pipe verbunden Beispiel2: Suche nach 'deprecated' auch in stderr (make 2>&1) grep deprecated //Umleitung von stderr nach stdout + grep stdout mögliche Probleme: Port schon belegt: lsof ( list of open files and s ) Port noch belegt : setzen der LINGER-Option bspw. nach Stoppen des Servers, noch falls Daten anhängig sind Nachrichtengrenzen: bleiben ggf. nicht erhalten: z.b. send( 170 Byte ) + send( 230 Byte ) --> reveive( 400 Byte ) asynchrones Verhalten: API-Funktionen erlauben optional auch nicht-blockierendes Verhalten IPC / Praxis / Pipes Cl. Schnörr / HM 19 Cl. Schnörr / HM 20

Praxis: Datagram-Server Praxis: Datagram-Client const short port = 5242; int n, sockfd; char buf[256]; struct sockaddr_in serv_addr; // sockaddr_in, INADDR_ANY int main() { //UDP_Socket if ((sockfd = ( AF_INET, SOCK_DGRAM, 0 )) < 0) perror( opening datagram ); // Create name with wildcards serv_addr.sin_addr.s_addr = INADDR_ANY; serv_addr.sin_family = AF_INET; serv_addr.sin_port = htons( port ); if ( bind( sockfd, (sockaddr *)&serv_addr, sizeof(serv_addr) )!= 0 ) perror( binding to address ); n = read( sockfd, buf, sizeof(buf) ); printf( Received: %s\n, buf ); #include <sys/param.h> #include <netdb.h> // sockaddr_in, AF_INET // MAXHOSTNAMELEN // gethostbyname() const short port = 5242; char hostname[maxhostnamelen+1] = server ; int sockfd; struct sockaddr_in peer_addr; int main() { //UDP_Socket if ((sockfd = ( AF_INET, SOCK_DGRAM, 0 )) < 0) perror( opening datagram ); struct hostent * hp = gethostbyname( hostname ); bcopy( hp->h_addr, (char *)&peer_addr.sin_addr, hp->h_length ); peer_addr.sin_family = AF_INET; peer_addr.sin_port = htons( port ); if ( sendto( sockfd, Hello World, 11, 0, (sockaddr *)&peer_addr, sizeof(peer_addr) ) < 0 ) perror( sending data ); Cl. Schnörr / HM 21 Cl. Schnörr / HM 22 Praxis: Server verbindungsorientiert Praxis: Client verbindungsorientiert const short port = 5242, waitqueuelen = 1; int n, sockfd, con; char buf[256]; struct sockaddr_in serv_addr; // sockaddr_in, INADDR_ANY int main() { //TCP_Socket if ((sockfd = ( AF_INET, SOCK_STREAM, 0 )) < 0) perror( opening stream ); serv_addr...; if ( bind( sockfd, (sockaddr *)&serv_addr, sizeof(serv_addr) )!= 0 ) perror( binding to address ); if ( listen( sockfd, waitqueuelen )!= 0 ) perror( listening to address ); if ( ( con = accept( sockfd, (sockaddr *)&peer_addr, sizeof(serv_addr) ) < 0 ) perror( accepting client ); n = read(con, buf, sizeof(buf)); printf( Received: %s\n, buf); write(con, buf, n); ( con ); #include <sys/param.h> #include <netdb.h> // sockaddr_in, AF_INET // MAXHOSTNAMELEN // gethostbyname() const short port = 5242; char hostname[maxhostnamelen+1] = server ; int sockfd; struct sockaddr_in peer_addr; int main() { //TCP_Socket if ((sockfd = ( AF_INET, SOCK_STREAM, 0 )) < 0) perror( opening datagram ); peer_addr...; if ( connect( sockfd, (sochaddr *)&peer_addr, sizeof(peer) )!= 0 ) perror( connecting server ); write( sockfd, Hello World, 11 ); read( sockfd, buf, sizeof(buf)); printf( Received: %s\n, buf); Cl. Schnörr / HM 23 Cl. Schnörr / HM 24