IPC Inter Process Communication Flashcards
Was ist Interprozesskommunikation (IPC)?
Interprozesskommunikation (IPC) bezeichnet Verfahren des Informationsaustauschs zwischen Prozessen eines Systems, entweder speicherbasiert oder nachrichtenbasiert.
Was ist der Unterschied zwischen speicherbasierter und nachrichtenbasierter Kommunikation bei IPC?
Speicherbasierte Kommunikation verwendet gemeinsamen Speicher wie Shared Memory, während nachrichtenbasierte Kommunikation über Nachrichtenaustausch erfolgt, z.B. mit Pipes oder Message Queues.
Was sind Signals in der Interprozesskommunikation?
Signals sind numerische Systemnachrichten, die Prozesse oder das Betriebssystem an laufende Prozesse senden, um Ereignisse wie Interrupts oder Fehler zu signalisieren.
Wie können Signale in Linux gesendet werden?
Signale können mit dem Befehl kill
oder mit der Systemfunktion kill(pid_t pid, int sig)
gesendet werden. Ein Prozess kann sich auch selbst Signale senden mit raise(int sig)
.
Was passiert, wenn ein Signal gesendet wird?
Das laufende Programm wird unterbrochen, der Signal-Handler wird ausgeführt, und anschließend wird das Programm von der Stelle fortgesetzt, an der es unterbrochen wurde.
Was ist ein Signal-Handler?
Ein Signal-Handler ist eine benutzerdefinierte Funktion, die ausgeführt wird, wenn ein bestimmtes Signal an einen Prozess gesendet wird. Beispiel: sigaction()
registriert einen neuen Signal-Handler.
Was sind Pipes in der Interprozesskommunikation?
Pipes sind unidirektionale Datenströme, die zwei Prozesse miteinander verbinden. Daten fließen vom Schreib-Ende zum Lese-Ende der Pipe.
Wie wird eine Pipe in C erstellt?
Eine Pipe wird in C mit der Funktion pipe(int pipefd[2])
erstellt, wobei pipefd[0]
das Lese-Ende und pipefd[1]
das Schreib-Ende der Pipe repräsentiert.
Wie werden Pipes typischerweise verwendet?
Pipes werden häufig mit fork()
verwendet, um Daten zwischen einem Eltern- und einem Kindprozess zu übertragen. Der Kindprozess erbt die Dateideskriptoren der Pipe.
Was ist eine Named Pipe (FIFO)?
Eine Named Pipe (FIFO) ist eine Pipe, die einen Namen im Dateisystem hat und es nicht-verwandten Prozessen ermöglicht, über einen persistenten Datenstrom zu kommunizieren.
Wie wird eine Named Pipe erstellt?
Eine Named Pipe wird mit dem Befehl mkfifo
oder der Systemfunktion mkfifo(const char *pathname, mode_t mode)
erstellt. Sie erscheint als Datei im Dateisystem.
Was ist der Unterschied zwischen Named und Unnamed Pipes?
Unnamed Pipes existieren nur während der Lebensdauer der beteiligten Prozesse und können nur zwischen verwandten Prozessen genutzt werden, während Named Pipes im Dateisystem existieren und von beliebigen Prozessen verwendet werden können.
Wie funktioniert der Datenaustausch über eine Pipe?
Daten werden vom Schreib-Ende der Pipe in den Puffer geschrieben und vom Lese-Ende ausgelesen. Beide Enden müssen geöffnet sein, sonst blockiert der Prozess.
Was ist der Shell-Befehl für Pipes?
In der Shell wird das Pipe-Symbol |
verwendet, um die Ausgabe eines Programms als Eingabe für ein anderes zu verwenden, z.B. ls -lha | sort | wc -w
.
Was sind die Vorteile von Named Pipes?
Named Pipes ermöglichen die Kommunikation zwischen nicht-verwandten Prozessen und bleiben als Datei im Dateisystem bestehen, auch nach Beendigung der beteiligten Prozesse.