Grundlagen der Betriebssysteme

Praktische Einführung mit Virtualisierung

Stefan Bosse

Universität Koblenz - FB Informatik

1 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen ::

Kommunikation und Synchronisaztion von Prozessen

Lernziele

  • Sie beurteilen die Eignung nachrichten- und speicherbasierter Verfahren zur Kommunikation zwischen parallelen Abläufen.
  • Sie analysieren Anwendungsprobleme von Unix-Pipes.
  • Sie unterscheiden zwei Implementierungsarten von Monitoren.
  • Sie erläutern das Grundprinzip eines Rendezvous paralleler Prozesse.
  • Sie entwickeln eigene Programme, die Berkeley-Sockets bzw. RPC zur rechnerübergreifenden Datenverarbeitung nutzen.
2 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen :: Taxonomie

Taxonomie

Wie können Prozesse kommunizieren? Kommunikation ist örtlich, temporal und zustandsbasiert mit Daten.

  • IPC: Interprocess Communication
  • Ein Prozess wartet auf die Terminierung eines anderen (Eltern-Kind Gruppe);
  • Ein Prozess wartet auf Daten von einem anderen; Beispiel: Anforderung von Daten eines Web Servers über HTTP (remote) oder ein Prozess waretet auf Daten einer Datenbank; → Kooperation
  • Prozesse wollen quasi gleichzeitig (oder zeitlich sehr nahe beiandner) einen gemeinsamen Punkt im Programmfluss erreichen; Barriere
  • Prozesse greifen auf geteilte Ressourcen qusi parallel zu und der Zugriff muss sequenzialisiert werden; Wettbewerb
  • Prozesse warten auf zeitliche Ereignisse (ist es der gleiche Timer und mehrere Prozesse warten darauf dann ist das IPC)
3 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen :: Taxonomie

Taxonomie

  1. Synchrone versa asynchrone Kommunikation (mit Signalen oder Nachrichten)
    • Synchron bedeutet dass auf eine Antwort oder Bestätigung gewartet wird (mit Prozessblockierung und Prozesswechsel)
    • Asynchron bedeutet dass der Prozess nicht wartet und ggf. später durch eine Rückruffunktion (ähnlich Interruptbetrieb) eine Antwort erhält
  2. Wir unterscheiden Signale (Events) und Nachrichten mit Daten; beide können zu einer Synchronisation von Prozessen führen;
  3. Synchronisation kann Daten enthalten - aber kein Muss.
  4. Es gibt eine Vielzahl von IPC Objketen. Auch eine Datei kann dazu gehören (Schreib/Lese Sperren)
    • Geteilte Speicherbereiche
    • Dateien, Pipes (Warteschlangen über das Dateisystem)
    • Semaphore
    • Nachrichten
  5. Synchronisation führt i.A. zur Prozessblockierung und Prozesswechsel bzw. Warten.
4 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen :: Taxonomie

Taxonomie

Prozesse und Threads können lokal auf dem gleichen Rechner oder mithilfe der Netzwerksoftware des Betriebssystems in einer verteilten Umgebung kommunizieren.

bsdp Überblick über Synchronisation und Kommunikation

5 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen :: Taxonomie

Taxonomie

  • Es wird unterschieden zwischen den zwei Gruppen »Synchronisation« und »Kommunikation«.
  • Bei der Kommunikation wird weiter unterteilt in »speicherbasierte Verfahren« und »nachrichtenbasierte Verfahren«.
  • Die Kommunikation unterscheidet sich von der Synchronisation, indem explizit Daten zwischen den Prozessen ausgetauscht werden und nicht nur eine Koordination im zeitlichen Ablauf oder Ressourcenzugriff realisiert wird.

IPC-Verfahren aus Sicht der Programmierung

6 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen :: Taxonomie

Taxonomie

  • Mit der Eigenschaft »systemgebunden« ist gemeint, dass das Verfahren als Funktionsaufruf der Betriebssystem-Programmierschnittstelle zur Verfügung steht.
  • Mit der Eigenschaft »sprachgebunden« wird der Fall umschrieben, bei dem ein Funktionsaufruf des Laufzeitsystems der Programmiersprache bzw. der Sprachbibliothek zur Verfügung steht.
  • Jedes der Programmierkonzepte weist bezüglich einer bestimmten Problemklasse seine Vorzüge auf.
  • Wesentlich ist jedoch, dass alle Konzepte funktional äquivalent sind, d.h., jedes Konzept kann in seiner Wirkungsweise durch jedes andere nachgebildet werden.
7 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen :: Nachrichtenbasierte Verfahren

Nachrichtenbasierte Verfahren

Unter nachrichtenbasierten Verfahren fassen wir alle Mechanismen zusammen, die einen Datenaustausch zwischen Prozessen und Threads mithilfe von Systemfunktionen bewerkstelligen.

Allgemeine Aspekte

Datenabgrenzung bei der Kommunikation

Die Datenabgrenzung bei der Kommunikation hängt von der Form der ausgetauschten Daten ab. Diese ist bestimmend für mögliche Lösungen der Datenabgrenzung.

  1. Datenaustausch mittels Nachrichten (message passing)
  2. Datenaustausch mittels Datenströmen (streaming)
  3. Datenaustausch mittels Paketen (packeting)
8 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen :: Nachrichtenbasierte Verfahren

  • Beim Datenaustausch mittels Nachrichten haben wir eine abgegrenzte Datenmenge bei der Kommunikation in Form der Meldung (message).
    • Die Meldungsgröße kann systemabhängig fest oder variabel sein.

Nachrichtenbasierte Verfahren

  • Kommen hingegen für den Datenaustausch Datenströme zur Anwendung, so ist die Nachrichtengrenze für den Sender und den Empfänger unsichtbar.
    • Die übertragbare Datenmenge ist theoretisch unbeschränkt.
    • Typischerweise werden die Dateisystemfunktionen read() und write() für eine stromartige Datenübertragung genutzt.

E/A ist auch Kommunikation, aber zunächst nur zwischen Prozessen und Geräten.

Beim Datenaustausch mittels Paketen kommen feste, oft standardisierte Datenformate zum Einsatz.

9 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen :: Nachrichtenbasierte Verfahren

Nachrichtenbasierte Verfahren

  • Sie sind im Rahmen von Kommunikationsprotokollen definiert (z.B. IP-Paketformat).
    • Für die Applikationsprogrammierung sind die Pakete nicht sichtbar (transparent).
    • Beim Übertragen der Pakete kann eine Fragmentierung (= Aufteilung in Teilpakete) und eine Defragmentierung (= Zusammensetzen aus Teilpaketen) stattfinden.
    • Dies wird versteckt (hidden) durch die Netzwerksoftware realisiert.
  • Der Datenaustausch mittels Paketen ist ein Thema der Computernetze und wird daher hier nicht weiter berücksichtigt. Die zwei verbleibenden Arten des Datenaustauschs wollen wir jedoch anhand von Realisierungsformen kennenlernen.

Synchronität bei der Kommunikation

Unter einer synchronen Kommunikation versteht man den Fall, dass der Sender warten muss, bis der Empfänger zur Entgegennahme der Daten bereit ist (Rendezvous). Bei der asynchronen Kommunikation läuft der Sender hingegen weiter, auch wenn der Empfänger gerade nicht für den Datenempfang bereit ist.

10 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen :: Nachrichtenbasierte Verfahren

Synchronität bei der Kommunikation

  • Bei der synchronen Kommunikation muss entweder der Sender (A1) oder der Empfänger (A2) warten, wenn nicht gerade das Senden und Empfangen zeitlich zusammenfallen.
  • Bei der asynchronen Kommunikation (B) kann hingegen das Senden sofort erfolgen, auch wenn der Empfänger nicht gerade für den Empfang bereit ist. Es ist also ein Puffer für die Zwischenlagerung von Daten, ein sogenannter Nachrichtenpuffer, notwendig.

Synchrone und asynchrone Kommunikation

11 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen :: Nachrichtenbasierte Verfahren

Synchronität bei der Kommunikation

  • Die asynchrone Kommunikation entkoppelt den Ablauf des Senders und des Empfängers und hilft, Geschwindigkeitsunterschiede in der Datenverarbeitung auszugleichen.
    • Genau genommen läuft bei der asynchronen Kommunikation der Sender erst dann weiter, wenn die Nachricht vollständig in einen Zwischenspeicher kopiert wurde.
    • Dies ist in der Abbildung durch die schräg verlaufenden Pfeile angedeutet und gilt auch für den Nachrichtenempfang.
send (destination, &message);
receive (source, &message);

Programmierschnittstelle für die synchrone und asynchrone Nachrichtenkommunkation. Bei einer synchronen Art können beide Funktionen den Prozess blockieren. Ein Nachrichtenpuffer message trägt eine Identifikation (Textname, Deskriptor, Handle o.Ä.).

12 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen :: Nachrichtenbasierte Verfahren

Synchrone versa Asynchone Kommunikation

bsdp Vergleich von synchroner und asynchroner Kommunikation

Bei der synchronen Kommunikation übergibt der Sender die Nachricht direkt an den Empfänger. Typischerweise wird der Datenaustausch in dieser Situation in der Art eines Rendezvous erledigt. Nur wenn sowohl Sender als auch Empfänger bereit sind, kann die Datenübertragung stattfinden.

13 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen :: Nachrichtenbasierte Verfahren

Synchrone versa Asynchone Ein- und Ausgabe

  • Auch bei der Grerätekommunikation kann A. vs S. unterschieden werden.

    • Bei der S. Kommunikation muss beim Lesen und Schreiben der Prozess warten bis die Operation ausgeführt wurde (und beim Lesen die Daten verfügbar sind).
    • Bei der A. Kommunikation kann der Prozess eine E/A Operation starten aber mit der Programmausführung fortsetzen. Der Prozess kann auch mehrere E/A Operationen starten.
    • Nur dann ist die Frage wie er mitbekommt wann E/A Operationen ausgeführt wurden (also auch Daten verfügbar sind).
  • Viele Programmiersprachen sind vom Paradigma her strikt sequenziell. Es ist nicht möglich mehrer Operationen parallel auszuführen.

  • A. E/A ist daher in Virtuellen Maschinen eine gängige Möglichkeit auf der Programmierebene das strikt sequenzielle Paradigma aufrecht zu erhalten und unter der Motorhaube E/A Operationen mit Threads parallel auszuführen.
  • Mittels Callback Funktionen können dann erfüllte Operationen ihr Ergebnis wieder an das Programm übermitteln.
14 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen :: Nachrichtenbasierte Verfahren

Synchrone versa Asynchone Ein- und Ausgabe

function callback(status,data) {
if (!status) print("Error:",status)
else if (data) processData(data)
}
send('edu-9.de','mymessage1',callback) // Time 1
send('ag-0.de','mymessage2',callback) // Time 2
receive('edu-9.de',callback) // Time 3
receive('ag-0.de',callback) // Time 4
print('I am finished with my computation. Waiting for I/O completion')
// Time 10: callback(...)
// Time 12: callback(...)

Asynchone E/A mit Callback Funktionen am Beispiel von JavaScript

  • Das Problem: Die Callbackhölle, Verschachtelung, und schwierige Fehlerbehandlung.
  • Z.B. wenn die zweite Send Operation auf Daten von der ersten Receive Operation warten muss ist eine Verlegung der Send Operation in den Callback Handler notwendig!
15 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen :: Vergleich von Kommunikationsverfahren

Vergleich von Kommunikationsverfahren

bsdp Vergleich von Kommunikationsverfahren: Speicherbasiert versa nachrichtenbasiert.

Ein Datenaustausch mittels Speicher kann mithilfe von Systemfunktionen erfolgen oder in Selbstverwaltung, nachdem ein gemeinsamer Speicherbereich eingerichtet wurde.

  • Bei der Selbstverwaltung muss in der Regel mittels Semaphoren die Koordinierung der beteiligten Threads bzw. Prozesse sichergestellt werden.
  • Somit stellt der Einsatz gemeinsamen Speichers meist eine Mischform dar, die sich für den schnellen Transfer großer Datenmengen besonders anbietet.
16 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen :: Vergleich von Kommunikationsverfahren

Geteilter Speicher

Threads besitzen ein inherentes geteiltes Specihermodell und können somit unmittelbar ohne weitere System- und Hilfsfunktionen über getilte Speichervariablen kommunizieren, anders als isolierte Prozesse.

  • Prozesse können sich über das Betriebssystem einen Speicherbereich teilen.
    • Dieser ist aber nur ein Bytepuffer ohne Datentyp.
    • Ein sinnvoller Datentyp kann mit C durch Typecasting erstellt werden.
17 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen :: Vergleich von Kommunikationsverfahren

Geteilter Speicher

void* create_shared_memory(size_t size) {
// Our memory buffer will be readable and writable:
int protection = PROT_READ | PROT_WRITE;
// The buffer will be shared (meaning other processes can access it), but
// anonymous (meaning third-party processes cannot obtain an address for it),
// so only this process and its children will be able to use it:
int visibility = MAP_SHARED | MAP_ANONYMOUS;
// The remaining parameters to `mmap()` are not important for this use case,
// but the manpage for `mmap` explains their purpose.
return mmap(NULL, size, protection, visibility, -1, 0);
}
...
void* shmem = create_shared_memory(16);
int * counter = (int*)&shmem[0];
*counter=0;
int pid = fork();
if (pid == 0) { // child process
*counter++;
} else { // parent process
*counter--;
}

SHM für zwei Prozesse, hier als "Vererbung" durch das Forking vpn Kindprozessen

18 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen :: Vergleich von Kommunikationsverfahren

Geteilter Speicher

Welchen Wert hat die Zählervariable am Ende? Gibt es Gebote? Wir nehmen einen Mehrkernrechner an.

19 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen :: Vergleich von Kommunikationsverfahren

Geteilter Speicher

Welchen Wert hat die Zählervariable am Ende? Gibt es Gebote? Wir nehmen einen Mehrkernrechner an.

Keine Ahnung. Die möglichen Ergebniswerte von counter können {-1,0,1} sein. Das Ergebnis ist nicht deterministisch.

  • Und das ist das Problem bei SHM Kommunikation: Es gibt keine Programmflusssteuerung! Diese muss dann zusätzlich z.B. mit Semaphoren erfolgen.
20 / 51

Stefan Bosse - Grundlagen der Betriebssysteme - Modul Y Kommunikation und Synchronisaztion von Prozessen :: Vergleich von Kommunikationsverfahren

Vergleich von Kommunikationsverfahren

Andrew Forney