Nebenläufigkeit. Fakultät für Informatik der Technischen Universität München. Echtzeitsysteme Lehrstuhl Informatik VI Robotics and Embedded Systems



Ähnliche Dokumente
Verbessertes Konzept: Monitore

Verbessertes Konzept: Monitore

Klausur WS06/07 Nebenläufigkeit Lösung

Message Queues in POSIX

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

Betriebssysteme Teil 11: Interprozess-Kommunikation

Prozessrechner-Praktikum Echtzeitsysteme

Threads Einführung. Zustände von Threads

Vorlesung Betriebssysteme II

Systemnahe Programmierung in C/C++

Drucken und Löschen von angehaltenen Druckaufträgen

Lösung von Übungsblatt 10. (Kommunikation von Prozessen)

Fakultät für Informatik der Technischen Universität München. Probleme

Drucken und Löschen von angehaltenen Druckaufträgen

Interprozesskommunikation IPC

7.4 Kommunikation. großzügige Pufferung, sowohl Auftragsbeziehungen als auch Nachrichten- oder Byte-Ströme, sowohl lokal als auch übers Netz

Inhaltsverzeichnis. Carsten Vogt. Nebenläufige Programmierung. Ein Arbeitsbuch mit UNIX/Linux und Java ISBN:

Themen. Flußkontrolle. Stefan Szalowski Rechnernetze Sicherungsschicht

Klausur Betriebssysteme I

Interaktionsdiagramme in UML

Systemnahe Programmierung in C/C++

Filesystemserver. SDI Gruppe Juni Till Schuberth / Victor van Santen. Filesystemserver: Till Schuberth und Victor van Santen SDI6

Real- Time Systems. Part 6: Concurrency. Fakultät für Informa0k der Technischen Universität München

librtipc - Bibliothek für echtzeitfähige Interprozesskommunikation

Kommunikation von Prozessen und Threads

Zugriff auf die Modul-EEPROMs

Betriebssysteme. Kommunikation von Prozessen und Threads. Sommersemester Prof. Dr. Peter Mandl. Seite 1. Prof. Dr. Peter Mandl.

Task Queues und Thread Pools

PThreads. Pthreads. Jeder Hersteller hatte eine eigene Implementierung von Threads oder light weight processes

Übung zu Grundlagen der Betriebssysteme. 10. Übung

8. Arbeiten mit Dateien

Programmieren von UNIX-Netzen

Kommunikationsmuster (T) Interprozesskommunikation (T) Kommunikation über Pipes (P) Parserspezifikation und -generierung (P)

Vorlesung "Verteilte Systeme" Sommersemester Verteilte Systeme. Adreßraum. Rechner. Verteilte Systeme, Sommersemester 1999 Folie 19.

Wechselseitiger Ausschluss in verteilten Systemen / Elektionsalgorithmen. Özden Urganci Ulf Sigmund Ömer Ekinci

Literatur. VA SS Teil 5/Messages

11. Die PC-Schnittstelle

Domänenmodell: Fadenkommunikation und -synchronisation

Pthreads. David Klaftenegger. Seminar: Multicore Programmierung Sommersemester

Hans-Georg Eßer, FH München Betriebssysteme I, WS 2006/07, 2007/01/24 Zusammenfassung (2/2) Folie 2

(Prof. Dr. J. Schlichter, WS 2011 / 2012) Übungsleitung: Dr. Wolfgang Wörndl

d) Welche Aussage zum Thema Adressräume ist richtig?

Programmieren 2 12 Netzwerke

high level I/O/ low level I/O

Zusammenfassung für CS-Prüfung 3 Seite 1. CS-Zusammenfassung für Prüfung 3 vom Im Beispiel gibt es 3 Deadlocks

Übungen zu Systemprogrammierung 1 (SP1)

Architektur Verteilter Systeme Teil 6: Interprozess-Kommunikation

Klausur Betriebssysteme und Sicherheit,

2.3 Prozessverwaltung

Verhaltensbeschreibung und Spezifikationssprachen

Real- Time Systems. Part 6: Concurrency. Fakultät für Informa0k der Technischen Universität München

Konzepte von Betriebssystemkomponenten. Gerätetreiber. Mario Körner

Synchronisation und Kommunikation über Nachrichten

I/O-Hardware Grundlagen. Ein- und Ausgabe. Memory-Mapped I/O. Device Controller

Betriebssysteme (BTS)

Einführung in die Objektorientierte Programmierung Vorlesung 18: Lineare Datenstrukturen. Sebastian Küpper

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

Verteilte Systeme - Java Networking (Sockets) 2 -

Interprozesskommunikation

Informatik. Pointer (Dynamisch) Vorlesung. 17. Dezember 2018 SoSe 2018 FB Ing - SB Umwelttechnik und Dienstleistung - Informatik Thomas Hoch 1

Klausur Betriebssysteme I

G 5. Übung. G-1 Überblick. Besprechung 3. Aufgabe. Infos zur Aufgabe 5: fork, exec. Rechenzeiterfassung. Ü SoS I G.1

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

Tafelübung zu BS 4. Interprozesskommunikation

PROGRAMMIEREN MIT UNIX/LINUX-SYSTEMAUFRUFEN

Übungen zu Systemprogrammierung 1 (SP1)

Betriebssysteme. G: Parallele Prozesse. (Teil B: Klassische Problemstellungen, Mutual Exclusion, kritische Regionen)

Einführung in die Informatik: Programmierung und Software-Entwicklung, WS 11/12 1. Kapitel 11. Listen. Listen

Betriebssystem-basierte Virtualisierung

Prozessrechner-Praktikum Echtzeitsysteme

Datentypen. strukturierte. elementare. skalare reelle statische dynamische int. list. real float. set. record. inhomogen. homogen

Szenario 3: Service mit erweiterter Schnittstelle

Systemsoftware (SYS) Fakultät für Informatik WS 2007/2008 Christian Baun. Übungsklausur

Einführung in die Programmiersprache C

Leser-Schreiber-Realisierung mit Semaphoren

Systemprogrammierung.: unter Linux :.

Klausur Systemprogrammierung I Februar Klausur Systemprogrammierung I Februar 2001

Organisatorisches. Folien (u.a.) auf der Lva-Homepage Skriptum über MU Online

DBUS Interprozess-Kommunikation für Embedded-Plattformen

Kommunikation von Prozessen: Signale und Pipes

Beispiel für einen IPC-Server, der seinen Dienst über den Global Name Service im Netzwerk bekannt gibt. Header-Dateien einbinden

Ausführen eines Makros beim Starten von OpenOffice.org

Präsenzübung 10. Konzepte und Methoden der Systemsoftware. Sommersemester vom bis

Induktion nach der Länge n von x

Fakultät für Informatik der Technischen Universität München. Kapitel 3. Nebenläufigkeit

ebeihilfe Der Beihilfeberechtigte startet ebeihilfe über den auf Ihrer Internet- bzw. Intranetseite hinterlegten Link.

Psi unter Ubuntu-Linux benutzen

E.1 Allgemeine Konzepte (3) E.1 Allgemeine Konzepte (2) E.1 Allgemeine Konzepte. Datei. Einordnung. Katalog / Verzeichnis

Übungsbesprechung Blatt 3 Vorlesung Betriebssysteme I (WS 2018/19) Operating Systems And Middleware Group

Gesamtdokumentation. Autoren: Thomas Merkel (19868) Janik Lemcke (19865) Arkadiusz Rawa (19893) Letzte Änderung: Freitag, 28.

Aufgabenblatt 6 Musterlösung

Aufgabe 6: palim rekursive, parallele Suche nach einer Zeichenkette

Dynamisches Speichermanagement

Rechner muß unterschiedliche Geräte bedienen können. zeichenorientierte Geräte (character devices, unstructured devices)

7.4 Kommunikation. Nachrichten- oder Byte-Ströme,

Ganze Arrays von Semaphoren können auf einmal angelegt werden. In einer Operation können mehrere Semaphore auf einmal modifiziert werden.

Ein-/Ausgabe, Dateisystem. Kapitel 9: Ein-/Ausgabe. Programmieren in C für Elektrotechniker. Programmieren in C. Dateisystem. Programmieren in C

Organisatorisches. Folien (u.a.) gibt's auf der Lva-Homepage zum Download

Transkript:

Nebenläufigkeit Interprozesskommunikation (IPC) 197

Interprozesskommunikation Notwendigkeit der Interprozesskommunikation Prozesse arbeiten in unterschiedlichen Prozessräumen oder sogar auf unterschiedlichen Prozessoren. Prozesse benötigen evtl. Ergebnisse von anderen Prozessen. Zur Realisierung von wechselseitigen Ausschlüssen werden Mechanismen zur Signalisierung benötigt. Klassifikation der Kommunikation synchrone vs. asynchrone Kommunikation pure Ereignisse vs. wertbehaftete Nachrichten 198

Synchron vs. Asynchron Synchrone Kommunikation Asynchrone Kommunikation Sender Empfänger Sender Empfänger t 1 t 1 t 2 t 2 t 3 t 3 t 4 t 4 t 5 t 1 : Empfänger wartet auf Nachricht t 2 : Sender schickt Nachricht und blockiert t 3 : Empfänger bekommt Nachricht, die Verarbeitung startet t 4 : Verarbeitung beendet, Antwort wird gesendet t 5 : Sender empfängt Nachricht und arbeitet weiter t 1 : Sender schickt Nachricht an Zwischenspeicher und arbeitet weiter t 2 : Empfänger liest Nachricht t 3 : Empfänger schreibt Ergebnis in Zwischenspeicher t 4 : Sender liest Ergebnis aus Zwischenspeicher (Nicht eingezeichnet: zusätzliche Abfragen des Zwischenspeichers und evtl. Warten) 199

Übermittlung von Datenströmen: direkter Datenaustausch Pipes IPC Mechanismen Nachrichtenwarteschlangen (Message Queues) Signalisierung von Ereignissen: Signale Semaphore Synchrone Kommunikation Barrieren/Rendezvous Kanäle wie z.b. Occam Funktionsaufrufe: RPC Corba 200

Nebenläufigkeit IPC: Kommunikation durch Datenströme 201

Direkter Datenaustausch Mit Semaphoren und Monitoren geschützte Datenstrukturen eignen sich sehr gut für den Austausch von Daten: schnelle Kommunikation, da auf den Speicher direkt zugegriffen werden kann. Allerdings kann die Kommunikation nur lokal erfolgen und zudem müssen die Prozesse eng miteinander verknüpft sein. Programmiersprachen, Betriebssysteme, sowie Middlewareansätze bieten komfortablere Methoden zum Datenaustausch. Grundsätzlich erfolgt der Austausch über das Ausführen von Funktionen send(receiver address, &message) und receive(sender address, &message). 202

Fragestellungen beim Datenaustausch Nachrichtenbasiert oder Datenstrom? Lokale oder verteilte Kommunikation? Kommunikationsparameter: mit/ohne Bestätigung Nachrichtenverluste Zitit Zeitintervalle Reihenfolge der Nachrichten Adressierung Authentifizierung Performance Sicherheit (Verschlüsselung) In diesem Kapitel vor allem lokale Kommunikation, echtzeitfähige Protokolle zur Kommunikation in eigenem Kapitel 203

Pipes Die Pipe bezeichnet eine gepufferte, unidirektionale Datenverbindung zwischen zwei Prozessen nach dem First In First Out (FIFO )Prinzip. Über den Namen der Pipe (ähnlich h einem Dateinamen) Dti )können Prozesse unterschiedlichen Ursprungs auf eine Pipe lesend oder schreibend zugreifen. Zur Kommunikation zwischen Prozessen gleichen Ursprungs (z.b. Vater, Kindprozess) können auch anonyme Pipes verwendet werden. Die Kommunikation erfolgt immer asynchron. 204

Pipes in Posix POSIX (Portable Operating System Interface) versucht durch Standardisierung der Systemaufrufe die Portierung von Programmen zwischen verschiedenen Betriebssystemen zu erleichtern. POSIX.1 definiert folgende Funktionen für Pipes: int mkfifo(char *name, int mode); /*Erzeugen einer benannten Pipe*/ int unlink ( char *name ); /*Loeschen einer benannten Pipe*/ int open ( char *name, int flags); /*Oeffnen einer benannten Pipe*/ int close ( int fd ); /*Schliessen des Lese- oder Schreibendes einer Pipe*/ int read ( int fd, char *outbuf, unsigned bytes ); /*Lesen von einer Pipe*/ int write ( int fd, char *outbuf,unsigned bytes ); /*Schreiben an eine Pipe*/ int pipe ( int fd[2] ); /*Erzeugen eine unbenannte Pipe*/ 205

Nachteile von Pipes Pipes bringen einige Nachteile mit sich: Pipes sind nicht nachrichtenorientiert (keine Bündelung der Daten in einzelne Pakete (Nachrichten) möglich). Daten sind nicht priorisierbar. Der für die Pipe notwendige Speicherplatz wird erst während der Benutzung angelegt. Wichtig für die Implementierung: Es können keine Daten aufgehoben werden. Beim Öffnen blockiert der Funktionsaufruf, bis auch das zweite Zugriffsende geöffnet wird (Verhinderung durch O_NDELAY Flag). Lösung: Nachrichtenwartschlangen 206

Nachrichtenwarteschlangen (message queues) Nachrichtenschlangen (Message Queues) sind eine Erweiterung von Pipes. Im Folgenden werden Nachrichtenwarteschlangen, h hl wie in POSIX 1003.1b 1b (Echtzeiterweiterung von POSIX) definiert, betrachtet. Eigenschaften der POSIX MessageQueues: Beim Anlegen einer MessageQueue wird der benötigte Speicher reserviert. Speicher muss nicht erst beim Schreibzugriff angelegt werden. Die Kommunikation erfolgt nachrichtenorientiert. Die Anzahl der vorhandenen Nachrichten kann dadurch abgefragt werden. Nachrichten sind priorisierbar Es können leichter Zeitgarantien gegeben werden. 207

Nachrichtenwarteschlangen Schreibzugriff in Standardsystemen: Der schreibende/sendende Prozess wird nur dann blockiert werden, falls der Speicher der Datenstruktur bereits voll ist. Alternative in n: Fehlermeldung ohne Blockade. Lesezugriff in Standardsystemen: Beim lesenden/empfangenden Zugriff auf einen leeren Nachrichtenspeicher wird der aufrufende Prozess blockiert bis eine neue Nachricht eintrifft. Alternative: Fehlermeldung ohne Blockade. Ein anschauliches Beispiel für den Einsatzbereich ist der Spooler eines Druckers: dieser nimmt die Druckaufträge der verschiedenen Prozesse an und leitet diese der Reihe nach an den Drucker weiter. Spooler 208

Message Queues in POSIX POSIX definiert folgende Funktionen für Nachrichtenwartschlangen: mqd_t mq_open(const char *name, int oflag,...); /*Oeffnen einer Message Queue*/ int mq_close(mqd_t mqdes); /*Schliessen einer Message Queue*/ int mq_unlink(const char *name); /*Loeschen einer Nachrichtenwarteschlange*/ int mq_send(mqd_t mqdes, const char *msg_ptr, size_t msg_len, unsigned int msg_prio); size_t mq_receive(mqd_t mqdes, char *msg_ptr, /*Senden einer Nachricht*/ size_t msg_len, unsigned int *msg_prio); /*Empfangen einer Nachricht*/ ht*/ int mq_setattr(mqd_t mqdes, const struct mq_attr *mqstat, struct mq_attr *mqstat); int mq_g getattr(mqd _ t mqdes, struct mq_attr *mqstat); int mq_notify(mqd_t mqdes, const struct sigevent *notification); /*Aendern der Attribute*/ /*Abrufen der aktuellen Eigenschaften*/ /*Anforderung eines Signals bei Nachrichtenankunft*/ 209

Nebenläufigkeit IPC: Kommunikation durch Ereignisse 210

Signale Signale werden in Betriebssystemen typischerweise zur Signalisierung von Ereignissen an Prozessen verwendet. Signale können verschiedene Ursachen haben: Ausnahmen, z.b. Division durch Null (SIGFPE) oder ein Speicherzugriffsfehler (SIGSEGV) Reaktion auf Benutzereingaben (z.b. Ctrl / C ) Signal von anderem Prozess zur Kommunikation Signalisierung von Ereignissen durch das Betriebssystem, z.b. Ablauf einer Uhr, Beendigung einer asynchronen I/O Funktion, Nachrichtankunft an leerer Nachrichtenwarteschlange (siehe mq_notify()) 211

Prozessreaktionen auf Signale Der Prozess hat drei Möglichkeiten auf Signale zu reagieren: 1. Ignorierung der Signale 2. Ausführen einer Signalbehandlungsfunktion 3. Verzögerung des Signals, bis Prozess bereit für Reaktion ist Zudem besteht die Möglichkeit mit der Standardreaktion auf das bestimmte Signal zu reagieren. Da aber typischerweise die Reaktionauf auf Signaledie Beendigung des Empfängerprozesses ist, sollte ein Programm über eine vernünftige Signalbehandlung verfügen, sobaldeinauftreten von Signalen wahrscheinlich wird. 212

Semaphore zur Vermittlung von Ereignissen Semaphore können neben der Anwendung des wechselseitigen Ausschlusses auch zur Signalisierung von Ereignissen verwendet werden. Es it ist zulässig, dass Prozesse (Erzeuger) Semaphore andauernd dfreigeben und andere Prozesse (Verbraucher) Semaphore dauern konsumieren. Es können auch benannte Semaphoren erzeugt werden, die dann über Prozessgrenzen hinweg verwendet werden können. Notwendige Funktionen sind dann: sem_open(): zum Erzeugen und / oder Öffnen eines benannten Semaphors sem_unlink(): zum Löschen eines benannten Semaphors 213

Signalisierung durch Semaphore: Beispiel Beispiel: ein Prozeß Worker wartet auf einen Auftrag (abgespeichert z.b. in einem char Array job) durch einen Prozess Contractor, bearbeitet b diesen und wartet im Anschluß auf den nächsten Auftrag: Worker*: while(true) { down(sem); /*wait for next job*/ execute(job); } Contractor*:... job=... /*create new job and save address in global variable*/ up(sem); /*signal new job*/... * sehr stark vereinfachte Lösung, da zu einem Zeitpunkt nur ein Job verfügbar sein darf 214