zusammenfassungen/Writerside/topics/BS/07_Prozesssynchronisation.md
David Schirrmeister f6531d7b5d update
2024-05-03 10:10:46 +02:00

3.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

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

Deadlock