Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

C Tutorium – Semaphoren –

Ähnliche Präsentationen


Präsentation zum Thema: "C Tutorium – Semaphoren –"—  Präsentation transkript:

1 C Tutorium – Semaphoren –
Knut Stolze

2 Semaphoren Mittel zur Synchronisation mehrerer Prozesse
Zugriff auf Dateien, Shared Memory, … Werden vom Betriebssystem verwaltet Können zur Implementierung von Sperren verwendet werden Verschiedene Variantionen System V Semaphoren Posix Semaphoren

3 Semaphoren (2) Funktionalität Operationen auf Semaphoren sind atomar
Setze Semaphore Warte bis Semaphore frei Warte bis Semaphore frei und dann setze Operationen auf Semaphoren sind atomar Ganz oder gar nicht ausgeführt

4 Erzeugen von Semaphoren
Ein Prozess legt Set (Menge) von Semaphoren an int semget(key, num_sems, flags) key: Schlüssel für den Semaphoren-Set; üblicherweise mittels “ftok” generiert; Auch IPC_PRIVATE möglich num_sems: Anzahl der Semaphoren im Set flags: IPC_CREAT – Set erzeugen IPC_EXCL – zu erzeugender Set darf noch nicht existieren; sonst Fehler Zugriffsrechte auf Set (wie bei Dateien) Ergebnis: ID des Semaphoren-Set (oder –1 bei Fehler)

5 Modifizieren von Semaphoren
Ändern des Zustandes einer oder mehrerer Semaphoren eines Sets atomar int semop(id, ops, num_ops) id: ID des Semaphoren-Sets (von “semget”) ops: Array mit den Operationen auf dem Semaphoren-Set Jedes Element im Array beschreibt eine Operation, z.B. “test auf 0” num_ops: Anzahl der Elemente in “ops”

6 semop Beschreibung einer einzelnen Operation:
sem_num: Nummer der Semaphore im Semaphoren-Set (Start bei 0) sem_op: > 0  erhöhe Zähler der Semaphore um angegebenen Wert; Prozess wird nie geblockt < 0  reduziere Zähler der Semaphore um angegebenen Wert; Prozess wartet gegebenenfalls bis Zähler der Semaphore >= dem angegebenen Wert ist = 0  Prozess wartet bis Zähler der Semaphore 0 wird

7 semop (2) sem_flg: SEM_UNDO: Änderungen des aktuellen Prozesses auf der Semaphore werden beim Ende des Prozesses zurückgesetzt SEM_NOWAIT: Sofortiger Fehler falls die Operation nicht ausgeführt werden kann (kein Blockieren des Prozesses)

8 Implementierung einer Sperre
3 Semaphoren in einem Set Zähler für Leser (S-Sperre) Flag für Schreiber (X-Sperre) Blockieren neuer Leser, wenn ein anderer Prozess bereits eine X-Sperre angefordert hat Starvation verhindern

9 Implementierung einer Sperre (2)
Initialisierung: Zähler für Lese- und Schreibsemaphore auf 0 Flag für Blockieren neuer Leser auf 1 Inverse Logik Schreibsperre anfordern: Zähler für “blockierte Leser” um 1 reduzieren (warten bis Zähler > 0) damit keine neuen Leser oder Schreiber hinzukommen können Zähler für Schreiber muss 0 sein Zähler für Leser muss 0 sein Zähler für Schreiber 1 erhöhen

10 Implementierung einer Sperre (3)
Lesesperre anfordern: Zähler für blockierte Leser um 1 reduzieren (warten bis Zähler > 0) Zähler für Leser um 1 erhöhen Zähler für blockierte Leser um 1 erhöhen (Rücksetzen von Schritt 1) Zähler für Schreiber muss 0 sein (redundant mit Schritt 1 + 3)

11 Implementierung einer Sperre (4)
Schreibsperre freigeben: Zähler für blockierte Leser um 1 erhöhen (Leser oder neue Schreiber zugelassen) Zähler für Schreiber um 1 reduzieren Lesesperre freigeben: Zähler für Leser um 1 reduzieren

12 Semaphoren zerstören Semaphoren-Set wird zerstört
int semctl(id, semnum, cmd, …) id: ID des Semaphoren-Set (Ergebnis von “semget”) Cmd: Kommando auf dem Semaphoren-Set IPC_RMID – Set zerstören IPC_STAT – Informationen über Set zurückgeben IPC_SET – Setze Semaphore GETALL – Gib Zähler aller Semaphoren des Sets zurück

13 Probleme bei Semaphoren
Erzeugen (“semget”) und Initialisieren (“semctl”) von Semaphoren ist nicht atomar Konkurrierendes Erzeugen von Semaphoren kann ein Problem sein dedizierter Prozess zum Anlegen der Semaphoren hilfreich

14 Kommandozeile (Unix) Liste alle IPC-Resources (Message Queues, Semaphore, Shared Memors Segmente) $ ipcs Lösche eine IPC-Resource $ ipcrm Beispiel um alle Resources des aktuellen Nutzers zu löschen: $ ipcs | grep `user` | awk ‘{ print “ipcrm –”$1,$2 } | sh -e


Herunterladen ppt "C Tutorium – Semaphoren –"

Ähnliche Präsentationen


Google-Anzeigen