This commit is contained in:
David Schirrmeister 2024-05-03 10:10:46 +02:00
parent b64113f451
commit f6531d7b5d
3 changed files with 113 additions and 0 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 270 KiB

View File

@ -11,6 +11,7 @@
<toc-element topic="04_Betriebssystemkerne.md"/> <toc-element topic="04_Betriebssystemkerne.md"/>
<toc-element topic="05_prozesszustaende.md"/> <toc-element topic="05_prozesszustaende.md"/>
<toc-element topic="06_prozessstruktur.md"/> <toc-element topic="06_prozessstruktur.md"/>
<toc-element topic="07_Prozesssynchronisation.md"/>
</toc-element> </toc-element>
<toc-element toc-title="OOAD"> <toc-element toc-title="OOAD">
<toc-element topic="IntroductionOOAD.md"/> <toc-element topic="IntroductionOOAD.md"/>

View File

@ -0,0 +1,112 @@
# 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](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_
```c++
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
```c++
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](06_prozessstruktur.md#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