zusammenfassungen/Writerside/topics/BS/07_Prozesssynchronisation.md
David Schirrmeister 21fcb18ed4 updatet
2024-05-10 13:01:34 +02:00

5.5 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
  • 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

Terminalbefehl - man signal
image_83.png

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

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
    • Postverteilungszentrum bestückt Verteiler der Post
      • Konfliktsituationen:
        • wer wird jetzt grad bestückt?
        • wie viele kann man gleichzeitig bedienen?
        • Wann ist ein Verteiler voll?
        • Welcher Postbote darf zuerst an den Briefkasten dran?
          • Mutex - Briefkasten freigegeben / gesperrt
        • Muss geklingelt werden (bspw. Einschreiben)
          • Semaphore - weil es muss benachrichtigt werden

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

image_84.png

  • Falls es mehrere Instanzen einer Ressource gibt
    • matrizen-basiertes Verfahren
      • Ressourcenvektor
      • Belegungsmatrix
      • Anforderungsmatrix
      • Ressourcenrestvektor

Beispiel Erkennung von Deadlocks

image_85.png
image_86.png

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