updatet
This commit is contained in:
parent
6d0b0a212a
commit
21fcb18ed4
BIN
Writerside/images/image_160.png
Normal file
BIN
Writerside/images/image_160.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 55 KiB |
@ -111,7 +111,16 @@ Befehle mit [POSIX API](06_prozessstruktur.md#posix-api)
|
|||||||
> Es ist wichtig, Synchronisationsmechanismen sorgfältig zu verwenden,
|
> Es ist wichtig, Synchronisationsmechanismen sorgfältig zu verwenden,
|
||||||
> um sicherzustellen, dass kritische Abschnitte effizient und sicher koordiniert werden
|
> um sicherzustellen, dass kritische Abschnitte effizient und sicher koordiniert werden
|
||||||
|
|
||||||
**Praktisches Anwendungsbeispiel: Siehe Praktikum 4**
|
- **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
|
## 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
|
(Stillstand / Blockade) ist eine Situation, bei der zwei oder mehr Prozesse auf unbestimmte Weise blockiert sind, weil sie auf die Freigabe von Ressourcen warten
|
||||||
|
@ -27,13 +27,13 @@
|
|||||||
- [Shared Memory](#shared-memory)
|
- [Shared Memory](#shared-memory)
|
||||||
- [Dateien](#dateien)
|
- [Dateien](#dateien)
|
||||||
- [Message Queues](#message-queues)
|
- [Message Queues](#message-queues)
|
||||||
- Pipes
|
- [Pipes](#pipes)
|
||||||
- Promises (Futures)
|
- [Promises (Futures)](#promises-futures)
|
||||||
- Sockets
|
- [Sockets](#sockets)
|
||||||
- [Semaphoren](07_Prozesssynchronisation.md#semaphores)
|
- [Semaphoren](07_Prozesssynchronisation.md#semaphores)
|
||||||
- [Mutexe](07_Prozesssynchronisation.md#mutex-mutual-exclusion)
|
- [Mutexe](07_Prozesssynchronisation.md#mutex-mutual-exclusion)
|
||||||
- Condition Variables
|
- [Condition Variables](#condition-variables)
|
||||||
- Remote Procedure Call (RPC)
|
- [Remote Procedure Call (RPC)](#remote-procedure-call-rpc)
|
||||||
|
|
||||||
### Shared Memory
|
### Shared Memory
|
||||||
- ermöglicht mehreren Prozessen auf denselben _physischen Speicherbereich_ zuzugreifen
|
- ermöglicht mehreren Prozessen auf denselben _physischen Speicherbereich_ zuzugreifen
|
||||||
@ -55,4 +55,99 @@
|
|||||||
- Zugriffsrechte korrekt setzen um Sicherheit zu gewährleisten
|
- Zugriffsrechte korrekt setzen um Sicherheit zu gewährleisten
|
||||||
- geeignete [Synchronisationsmechanismen](07_Prozesssynchronisation.md#mutex-vs-semaphore) nutzen
|
- geeignete [Synchronisationsmechanismen](07_Prozesssynchronisation.md#mutex-vs-semaphore) nutzen
|
||||||
|
|
||||||
## Message Queues
|
### Message Queues
|
||||||
|
- besonders nützlich, wenn strukturierte Daten zwischen Prozessen ausgetauscht werden
|
||||||
|
- Struktur muss zwischen Prozessen vereinbart werden
|
||||||
|
- Verwendung von [Semaphoren](07_Prozesssynchronisation.md#semaphores) kann erforderlich sein, damit Zugriff auf Queue ordnungsgemäß funktioniert
|
||||||
|
|
||||||
|
#### Linux-Systemaufrufe Message Queues
|
||||||
|
- **msgget** - MQ erzeugen / auf bestehende zugreifen
|
||||||
|
- **msgsnd** - Nachricht in MQ schicken
|
||||||
|
- **msgrcv** - Nachricht aus MQ empfangen
|
||||||
|
- **msgctl** - Status einer MQ abfragen/ändern/löschen
|
||||||
|
|
||||||
|
|
||||||
|
### Pipes
|
||||||
|
- ermöglichen, dass Output eines Prozesses direkt als Input eines anderen Prozesses dient
|
||||||
|
- sind unidirektional
|
||||||
|
- gibt Möglichkeiten 2 Pipes zu erstellen → bidirektionale Kommunikation
|
||||||
|
- haben begrenzte Puffergröße
|
||||||
|
- zu viele Daten in der Pipe
|
||||||
|
- blockieren des Schreibprozesses
|
||||||
|
- arbeiten nach FIFO Prinzip (_First In First Out_)
|
||||||
|
|
||||||
|
#### Erstellung von Pipes mit [POSIX API](06_prozessstruktur.md#posix-api)
|
||||||
|
- **pipe** - Pipe mit zwei Endpunkten erzeugen
|
||||||
|
|
||||||
|
- **popen** - Prozess starten (benutzt [fork](08_Threads.md#fork)) und Pipe zum Prozess öffnen
|
||||||
|
- **pclose** - Mit popen geöffnete Pipe schließen
|
||||||
|
|
||||||
|
- **mkfifo** - Named Pipe erzeugen
|
||||||
|
- **open** - Named Pipe öffnen
|
||||||
|
|
||||||
|
- **close** - (Named) Pipe schließen
|
||||||
|
- **read** - aus (Named) Pipe lesen
|
||||||
|
- **write** - in (Named) Pipe schreiben
|
||||||
|
|
||||||
|
#### Pipes in der Shell
|
||||||
|
- werden verwendet um 2 oder mehr Befehle zu kombinieren
|
||||||
|
- Ausgabe eines Befehls fungiert als Eingabe für anderen Befehl
|
||||||
|
- Ausgabe dessen = Eingabe für den nächsten ...
|
||||||
|
- Kann temporäre Verbindung zwischen 2 oder mehr Befehlen/Programmen/Prozessen sein
|
||||||
|
- _Filter_
|
||||||
|
- Kommandozeilenprogramme, die weitere Verarbeitung übernehmen
|
||||||
|
|
||||||
|
- "I" - anonyme Pipe
|
||||||
|
- bspw. _ps ax | less_
|
||||||
|
- ">" - benannte Pipe
|
||||||
|
- bspw. _mkfifo myPipe ls > myPipe_
|
||||||
|
|
||||||
|
|
||||||
|
### Promises (Futures)
|
||||||
|
- Konzept für _asynchrone Programmierung_
|
||||||
|
- Programm wartet auf Ergebnis/Rückmeldung einer asynchronen Operation
|
||||||
|
- blockiert dabei NICHT Haupt-Thread
|
||||||
|
- Wird oft verwendet in
|
||||||
|
- JavaScript
|
||||||
|
- Python
|
||||||
|
- Frameworks wie Javas CompletableFuture
|
||||||
|
- 
|
||||||
|
|
||||||
|
### Sockets
|
||||||
|
- Verwendung geeignet, wenn
|
||||||
|
- Kommunikation zwischen verschiedenen Rechnern erforderlich ist
|
||||||
|
- verbindungsorientierte Kommunikation (_bspw. TCP_) erwünscht ist
|
||||||
|
- Falls über Internet
|
||||||
|
- Sicherheitsaspekte müssen berücksichtigt werden
|
||||||
|
- bspw. Verschlüsselung
|
||||||
|
|
||||||
|
#### Erstellung von Sockets mit [POSIX API](06_prozessstruktur.md#posix-api)
|
||||||
|
- **socket** - Socket erzeugen
|
||||||
|
- **socketpair** - Zwei Sockets erzeugen, ähnlich [pipe](#pipes)
|
||||||
|
- **read, recv** - Aus Socket lesen
|
||||||
|
- **write, send** - In Socket schreiben
|
||||||
|
- **close** - Socket schließen
|
||||||
|
|
||||||
|
- **select** - warten auf Socketaktivität
|
||||||
|
- **poll** - warten auf Socketaktivität
|
||||||
|
|
||||||
|
- _send_ und _recv_ können beliebig lange dauern
|
||||||
|
- können Prozesse/Threads blockieren
|
||||||
|
|
||||||
|
→ Einsetzen von _select_
|
||||||
|
- Dient als [Multiplexer](MU0Rechner.md#multiplexer) für mehrere Sockets (_File-Descriptors: fdts_)
|
||||||
|
|
||||||
|
[](https://www.youtube.com/watch?v=Y6pFtgRdUts)
|
||||||
|
|
||||||
|
|
||||||
|
### Condition Variables
|
||||||
|
- Dienen Synchronisation von Threads in einem Multithreading-Kontext
|
||||||
|
- Threads werden informiert, dass Bedingung erfüllt / Ressource verfügbar ist
|
||||||
|
- Normalerweise auf Threads innerhalb desselben Prozesses beschränkt
|
||||||
|
- nicht direkt für IPC zwischen verschiedenen Prozessen nutzbar
|
||||||
|
|
||||||
|
### Remote Procedure Call (RPC)
|
||||||
|
- Programm kann Funktion/Prozedur auf einem entfernten Rechner/Adressraum ausführen, als wäre sie lokal vorhanden
|
||||||
|
- abstrahiert Netzwerkkommunikation
|
||||||
|
- ermöglicht Entwicklern sich auf Logik ihrer eigenen Anwendungen zu konzentrieren
|
||||||
|
- Verschiedene Implementierungen von TPC existieren für verschiedene Plattformen / Programmiersprachen
|
Loading…
x
Reference in New Issue
Block a user