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,
|
||||
> 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
|
||||
(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)
|
||||
- [Dateien](#dateien)
|
||||
- [Message Queues](#message-queues)
|
||||
- Pipes
|
||||
- Promises (Futures)
|
||||
- Sockets
|
||||
- [Pipes](#pipes)
|
||||
- [Promises (Futures)](#promises-futures)
|
||||
- [Sockets](#sockets)
|
||||
- [Semaphoren](07_Prozesssynchronisation.md#semaphores)
|
||||
- [Mutexe](07_Prozesssynchronisation.md#mutex-mutual-exclusion)
|
||||
- Condition Variables
|
||||
- Remote Procedure Call (RPC)
|
||||
- [Condition Variables](#condition-variables)
|
||||
- [Remote Procedure Call (RPC)](#remote-procedure-call-rpc)
|
||||
|
||||
### Shared Memory
|
||||
- ermöglicht mehreren Prozessen auf denselben _physischen Speicherbereich_ zuzugreifen
|
||||
@ -55,4 +55,99 @@
|
||||
- Zugriffsrechte korrekt setzen um Sicherheit zu gewährleisten
|
||||
- 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