update
This commit is contained in:
parent
b64113f451
commit
f6531d7b5d
BIN
Writerside/images/image_83.png
Normal file
BIN
Writerside/images/image_83.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 270 KiB |
@ -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"/>
|
||||||
|
112
Writerside/topics/BS/07_Prozesssynchronisation.md
Normal file
112
Writerside/topics/BS/07_Prozesssynchronisation.md
Normal 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**
|
||||||
|

|
||||||
|
|
||||||
|
### 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
|
Loading…
x
Reference in New Issue
Block a user