Version [22459]
Dies ist eine alte Version von BSys05Kommunikation erstellt von RonnyGertler am 2013-03-26 19:14:13.
Betriebssysteme (Betriebssystemtheorie) - Kapitel 5 - Kommunikation
Inhalte von Dr. E. Nadobnyh
Definition und Überblick
Eine Kommunikation ist ein expliziter Datenaustausch zwischen kooperierenden Prozessen.
Kommunikation und Synchronisation
Eine Synchronisation ist eine Koordination von Prozessen im zeitlichen Ablauf oder beim Ressourcen-Zugriff.
1) Bei der Kommunikation über gemeinsame Speicherobjekte (speicherbasierte Kommunikation) greifen Prozesse direkt auf
die Speicherobjekte (Speicher, Dateien) und deswegen brauchen Prozesse für die Synchronisation zusätzliche Mittel, z.B.
Semaphoren.
2) Beim Nachrichtenaustausch (nachrichtenbasierte Kommunikation) rufen Prozesse Systemfunktionen auf und werden vom Betriebssystem automatisch synchronisiert.
5.1. Shared Memory
Definition und Eigenschaften
Shared Memory ist ein Hauptspeicherbereich, der:
- mittels der Systemaufrufe eingerichtet wird,
- für mehrere Prozesse sichtbar ist.
Eigenschaften:
- Der eigentliche Datenaustausch kann ohne weitere Systemhilfe durchgeführt werden.
- Ein gegenseitiger Ausschluss ist nicht garantiert.
- Der gemeinsame Speicher wird als eine speicherbasierte Datei gestaltet.
Eine Speicherbasierte Datei (Pseudodatei, memory mapped file, MMF) ist eine Abbildung einer ganzen Datei oder ihren Teil im Hauptspeicher. Daher können Dateiinhalte durch den üblichen Zeiger effizient gelesen und gespeichert werden.
Typische Systemaufrufe
Schritte | Windows | Unix |
Öffnen und Schliessen |
CreateFileMapping(...); CloseHandle(...); |
shm_open(...); shm_unlink(...); |
Einblenden und Ausblenden |
... p =MapViewOfFile(...); //p-Pointer UnmapViewOfFile(...); |
... p =mmap(...); close(...); |
Speicher- Zugriff durch Zeiger | *p=...; | *p=...; |
Bemerkungen:
1) Beim Einblenden liefert das Betriebssystem dem Prozess die Startadresse des gemeinsamen Speichers.
2) Beim Ausblenden wird diese Startadresse ungültig gemacht.
⇒ Demo 1.
5.2. Nachrichtenaustausch
Definition
1) Beim Nachrichtenaustausch (Message Passing ) werden zwei Grundfunktionen (Systemaufrufe) vom System bereitgestellt:
send(empfänger, &nachricht);
receive(sender, &nachricht);
Bemerkung: & ist ein Adressoperator (C-Schreibweise).
2) Die gesendeten, aber noch nicht empfangenen Nachrichten (Botschaften) werden automatisch vom Betriebssystem im Nachrichtenpuffer zwischengespeichert.
3) Die empfangenen Nachrichten werden in den Empfänger-Speicherbereich gespeichert und aus dem Nachrichten-puffer entfernt.
Eigenschaften
1) Der Nachrichtenpuffer entkoppelt den Ablauf des Senders und des Empfängers und hilft, Geschwindigkeitsunterschiede auszugleichen. Mit dem Puffer arbeiten Sender und Empfänger asynchron.
2) Die beteiligten Prozesse werden synchronisiert:
- Ein Empfänger wird bei leerem Zwischenspeicher blockiert.
b )Ein Sender wird bei vollem Zwischenspeicher blockiert.
3) Nachrichtenaustausch ist gut geeignet für kleinere Datenmengen, weil die Verwendung von Systemfunktionen mit zeitlichem Aufwand verbunden ist. Ein Datenaustausch von großen Datenmengen kann über einen gemeinsamen Speicher effizienter umgesetzt werden.
Nachrichtenaustausch und Erzeuger-Verbraucher-Problem
Die Lösung des Problems durch Nachrichtenaustausch enthält keine zusätzlichen Synchronisationsmechanismen und sieht deswegen kompakt aus.
Message Queue und Pipe
Diese klassische Formen des Nachrichtenaustausches sind ähnlich:
1) Eine Message Queue (Nachrichtenschlange) ist eine geordnete Liste von Nachrichten.
Eigenschaften:
- Queues erlauben es einem Prozess, beliebige Nachrichten zu anderen Prozessen zu schicken.
- Die Nachrichten können in Queue nach Priorität sortiert werden.
2) Eine Pipe ist ein unidirektionaler Kanal zwischen zwei Prozessen.
Eigenschaften:
- Ein Prozess schreibt in den Kanal einen Strom von Bytes, den der andere Prozess lesen soll.
- Alle Bytes werden nach FIFO-Prinzip (First In First Out) gepuffert, d.h. die Reihenfolge von Bytes bleibt erhalten.
Der wichtige Unterschied zwischen Message Queue und Pipe ist der Umgang mit den Nachrichtengrenzen:
a) bei Queue sind die Nachrichtengrenzen klar definiert,
b) bei Pipe sind die Nachrichtengrenzen unsichtbar.
Eine Nachricht kann durch eine Pipe z.B. in zwei Teilen gesendet und in drei Teilen empfangen werden.
5.3. Pipes
CategoryBSys
Diese Seite wurde noch nicht kommentiert.