5.1 KiB
Prozesssynchronisation
Warum überhaupt Synchronisation?
-
mehrere Prozesse arbeiten in einem System koordiniert und in einer bestimmten Reihenfolge/zeitlichen Abfolge
-
Multitasking- /Multiprozessor-System
- mehrere Prozesse gleichzeitig / parallel
- Prozesse interagieren miteinander
- Zugriff auf gemeinsame Ressourcen
- mehrere Prozesse gleichzeitig / parallel
-
Warten auf Operationen (Wait and Signal)
-
Kritischer Abschnitt (Critical Section)
-
Rennbedingungen (Race Conditions)
-
Mutex (Mutex Lock)
-
Semaphore
-
Deadlocks und Ressourcenkonflikte
-
Interprozesskommunikation (IPC)
Signale
- dienen als Mechanismus für die Kommunikation
- zwischen Prozessen
- zwischen Betriebssystem und Prozessen
- Signal ist eine Benachrichtigung and ein Prozess, dass Ereignis aufgetreten ist
Zweck
-
Behandlung von Ausnahmen
-
Kommunikation von Ereignissen
-
Steuerung von Prozessen
-
Ermöglicht
- Implementierung von asynchronen Benachrichtigungen
- Behandlung von außergewöhnlichen Ereignissen
Beispiel
Signalhandler
- Funktion/Codeabschnitt, welcher onSignal ausgeführt wird
Was passiert beim Aufruf eines Signalhandlers
- Prozess wird bei Eintreffen eines Signals angehalten
- Prozesszustand wird gesichert
- Signalhandler wird aufgerufen
- darf beliebige Systemaufrufe veranlassen (sollte sie aber nicht)
- Bei Beendigung des Signalhandlers
- Prozess läuft weiter wo er unterbrochen wurde
Warten
Aktives Warten (Polling)
- Prozess prüft ob Bedingung erfüllt ist
- bspw. in Schleifenstrukturen
while (!Bedingung){
//aktives Warten
}
Passives Warten
- Prozess wird in Wartezustand versetzt
- wird reaktiviert, wenn Bedingung erfüllt wurde
- währenddessen können andere Prozesse auf der CPU laufen
wait_for_condition(); //Prozess geht in Wartezustand
//Irgendwann Reaktivierung
resume_execution();
Sperren
- Koordiniert Zugriff auf gemeinsame Ressourcen durch mehrere Prozesse oder Threads
- Nur ein Prozess/Thread gleichzeitig
- Dateninkonsistenzen oder Rennbedingungen werden vermieden
- Nur ein Prozess/Thread gleichzeitig
Mutex (Mutual Exclusion)
- Sperre, welche exklusiven Zugriff auf Ressource steuert
- Prozess sperrt/entsperrt vor/nach Zugriff auf Ressource
Nutzung
- Dateizugriffe
- Netzwerkkommunikation
- Zugriff auf gemeinsam genutzte Datenstrukturen
- Hardware
Semaphores
- Ähnlich wie Mutex, nur zusätzlich mit Kommunikation durch Signale
Mutex vs Semaphore
Befehle mit POSIX API
Mutex
- pthread_mutex_t Datentyp für Mutex
- pthread_mutex_init Erzeugen eines Mutexobjekts
- pthread_mutex_unlock Entsperren
- pthread_mutex_lock Sperren
- pthread_mutex_trylock Versuchendes Sperren
- pthread_mutex_destroy Löschen des Mutexobjekts
Semaphore
- sem_t Datentyp für Semaphor
- sem_init Initialisieren eines Semaphors (notwendig)
- sem_post up Operation: Semaphor um 1 erhöhen
- sem_wait down Operation: Semaphor um 1 vermindern oder blockieren
- sem_trywait wie sem_wait, aber Aufruf kehrt zurück, falls sem_wait blockieren würde
- sem_timedwait wie sem_wait, aber mit time-out, falls blockiert
- sem_getvalue Wert des Semaphors auslesen
- sem_destroy Löschen eines Semaphors
Was nimmt man jetzt?
Hängt von Anforderungen und Charakteristiken des spezifischen Anwendungsfalls ab
Es ist wichtig, Synchronisationsmechanismen sorgfältig zu verwenden,
um sicherzustellen, dass kritische Abschnitte effizient und sicher koordiniert werden
Praktisches Anwendungsbeispiel: Siehe Praktikum 4
Deadlock
(Stillstand / Blockade) ist eine Situation, bei der zwei oder mehr Prozesse auf unbestimmte Weise blockiert sind, weil sie auf die Freigabe von Ressourcen warten
Entstehungsbedingungen von Deadlocks
- Gegenseitiger Ausschluss
- Mindestens eine Ressource muss exklusiv für immer nur einen Prozess sein
- Warte-Zustand
- Prozess hält eine Ressource und wartet bis er die nächste kriegt
- Nicht-Preemption
- Ressourcen können nicht zwangsweise (sondern nur freiwillig) von Prozess/Thread entzogen werden
- Zyklus in den Wartebeziehungen
- Kette von Prozessen/Threads
- P1 wartet auf Ressource von P2, P2 auf P3, ..., PN auf P1
Erkennung von Deadlocks
Betriebsmittelgraf (Ressource Allocation Graph)
- Modelliert Zuteilung und Freigabe von Ressourcen zwischen Prozessen
- Falls es mehrere Instanzen einer Ressource gibt
- matrizen-basiertes Verfahren
- Ressourcenvektor
- Belegungsmatrix
- Anforderungsmatrix
- Ressourcenrestvektor
- matrizen-basiertes Verfahren
Beispiel Erkennung von Deadlocks
Livelock
- Form der Blockierung von 2 oder mehr Prozessen, welche aber ständig zwischen mehreren Zuständen wechseln und ihnen nicht entkommen können
- Bspw.:
- 2 Personen kommen sich auf dem Gang entgegen und weichen die ganze Zeit in die gleiche Richtung aus
- Deadlock:
- Personen stehen gegenüber und warten bis der andere beiseite geht, was nicht passiert
- Deadlock:
- 2 Personen kommen sich auf dem Gang entgegen und weichen die ganze Zeit in die gleiche Richtung aus