IPC steht für Interprozesskommunikation.
Diese Technik ermöglicht es den Prozessen, miteinander zu kommunizieren.
Da jeder Prozess seinen eigenen Adressraum und eindeutigen Benutzerraum hat, wie kommunizieren die Prozesse miteinander?
Die Antwort ist Kernel, das Herzstück des Linux-Betriebssystems, das Zugriff auf den gesamten Speicher hat. So können wir den Kernel auffordern, den Speicherplatz zuzuweisen, der für die Kommunikation zwischen Prozessen verwendet werden kann.
Der Prozess kann auch kommunizieren, indem er eine Datei hat, auf die beide Prozesse zugreifen können. Prozesse können die Datei öffnen und lesen/schreiben, was viele E/A-Operationen erfordert, die Zeit in Anspruch nehmen.
Verschiedene Arten von IPCS
Es gibt verschiedene IPCs, die es einem Prozess ermöglichen, mit anderen Prozessen zu kommunizieren, entweder auf demselben Computer oder auf verschiedenen Computern im selben Netzwerk.
- Rohre – Bietet Prozessen die Möglichkeit, durch den Austausch von Nachrichten miteinander zu kommunizieren. Named Pipes bieten Prozessen, die auf verschiedenen Computersystemen laufen, die Möglichkeit, über das Netzwerk zu kommunizieren.
- Gemeinsamer Speicher – Prozesse können im Shared Memory Werte austauschen. Ein Prozess erstellt einen Teil des Speichers, auf den andere Prozesse zugreifen können.
- Nachrichtenwarteschlange – Es ist eine strukturierte und geordnete Liste von Speichersegmenten, in denen Prozesse Daten speichern oder abrufen.
- Semaphoren – Bietet einen Synchronisierungsmechanismus für Prozesse, die auf dieselbe Ressource zugreifen. Bei einem Semaphor werden keine Daten übergeben; es koordiniert einfach den Zugriff auf gemeinsam genutzte Ressourcen.
10 IPCS-Befehlsbeispiel
ipcs ist ein UNIX/Linux-Befehl, der verwendet wird, um die Informationen über die Kommunikation zwischen Prozessen aufzulisten
IPC-Beispiel 1:Alle IPC-Einrichtungen auflisten
Der Befehl ipcs mit der Option -a listet alle IPC-Einrichtungen auf, die für den aktuellen Prozess Lesezugriff haben. Es liefert Details über Message Queue, Semaphor und Shared Memory.
# ipcs -a ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0xc616cc44 1056800768 oracle 660 4096 0 0x0103f577 323158020 root 664 966 1 0x0000270f 325713925 root 666 1 2 ------ Semaphore Arrays -------- key semid owner perms nsems 0x0103eefd 0 root 664 1 0x0103eefe 32769 root 664 1 0x4b0d4514 1094844418 oracle 660 204 ------ Message Queues -------- key msqid owner perms used-bytes messages 0x000005a4 32768 root 644 0 0
Alle IPC-Einrichtungen haben eindeutige Schlüssel und Kennungen, die zur Identifizierung einer IPC-Einrichtung verwendet werden.
IPCS-Beispiel 2:Alle Nachrichtenwarteschlangen auflisten
ipcs mit Option -q listet nur Nachrichtenwarteschlangen auf, für die der aktuelle Prozess Lesezugriff hat.
$ ipcs -q ------ Message Queues -------- key msqid owner perms used-bytes messages 0x000005a4 32768 root 644 0 0
IPCS-Beispiel 3. Alle Semaphoren auflisten
Die Option ipcs -s wird verwendet, um die zugänglichen Semaphoren aufzulisten.
# ipcs -s ------ Semaphore Arrays -------- key semid owner perms nsems 0x0103eefd 0 root 664 1 0x0103eefe 32769 root 664 1 0x4b0d4514 1094844418 oracle 660 204
IPCS-Beispiel 4. Alle gemeinsam genutzten Speicher auflisten
Die Option ipcs -m mit dem Befehl ipcs listet die gemeinsam genutzten Erinnerungen auf.
# ipcs -m ------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0xc616cc44 1056800768 oracle 660 4096 0 0x0103f577 323158020 root 664 966 1 0x0000270f 325713925 root 666 1 2
IPCS-Beispiel 5. Detaillierte Informationen über eine IPC-Einrichtung
Die Option ipcs -i liefert detaillierte Informationen über eine IPC-Einrichtung.
# ipcs -q -i 32768 Message Queue msqid=32768 uid=0 gid=0 cuid=0 cgid=0 mode=0644 cbytes=0 qbytes=65536 qnum=0 lspid=0 lrpid=0 send_time=Not set rcv_time=Not set change_time=Thu Aug 5 13:30:22 2010
Option -i mit -q liefert Informationen über eine bestimmte Nachrichtenwarteschlange. Option -i mit -s liefert Semaphor-Details. Option -i mit -m liefert Details zu einem Shared Memory.
IPCS-Beispiel 6. Listet die Grenzwerte für die IPC-Einrichtung auf
Die Option ipcs -l gibt die Systemgrenzen für jede IPC-Einrichtung an.
# ipcs -m -l ------ Shared Memory Limits -------- max number of segments = 4096 max seg size (kbytes) = 67108864 max total shared memory (kbytes) = 17179869184 min seg size (bytes) = 1
Der obige Befehl gibt die Grenzen für gemeinsam genutzten Speicher an. -l kann mit -q und -s kombiniert werden, um die Grenzwerte für Nachrichtenwarteschlangen bzw. Semaphoren anzuzeigen.
Die einzelne Option -l gibt die Grenzen für alle drei IPC-Einrichtungen an.
# ipcs -l
IPCS-Beispiel 7. Ersteller- und Eigentümerdetails für die IPC-Einrichtung auflisten
Die Option ipcs -c listet Benutzer-ID und Gruppen-ID des Erstellers sowie Benutzer-ID und Gruppen-ID des Eigentümers auf. Diese Option kann mit -m, -s und -q kombiniert werden, um die Erstellerdetails für bestimmte IPC-Einrichtungen anzuzeigen.
# ipcs -m -c ------ Shared Memory Segment Creators/Owners -------- shmid perms cuid cgid uid gid 1056800768 660 oracle oinstall oracle oinstall 323158020 664 root root root root 325713925 666 root root root root
IPCS-Beispiel 8. Prozess-IDs, die kürzlich auf die IPC-Einrichtung zugegriffen haben
Die Option ipcs -p zeigt die Ersteller-ID und die Prozess-ID an, die vor kurzem auf die entsprechende IPC-Einrichtung zugegriffen haben.
# ipcs -m -p ------ Shared Memory Creator/Last-op -------- shmid owner cpid lpid 1056800768 oracle 16764 5389 323158020 root 2354 2354 325713925 root 20666 20668
-p kann auch mit -m, -s oder -q kombiniert werden.
IPCS-Beispiel 9. Zeit des letzten Zugriffs
Die Option ipcs -t zeigt die letzte Betriebszeit in jeder IPC-Einrichtung an. Diese Option kann auch mit -m, -s oder -q kombiniert werden, um für einen bestimmten Typ von IPC-Einrichtung zu drucken. Für die Nachrichtenwarteschlange zeigt die Option -t die zuletzt gesendete und empfangene Zeit an, für den gemeinsam genutzten Speicher zeigt sie den zuletzt angeschlossenen (Teil des Speichers) und den getrennten Zeitstempel an und für die Semaphore zeigt sie die letzte Operation und geänderte Zeitdetails an.
# ipcs -s -t ------ Semaphore Operation/Change Times -------- semid owner last-op last-changed 0 root Thu Aug 5 12:46:52 2010 Tue Jul 13 10:39:41 2010 32769 root Thu Aug 5 11:59:10 2010 Tue Jul 13 10:39:41 2010 1094844418 oracle Thu Aug 5 13:52:59 2010 Thu Aug 5 13:52:59 2010
IPCS-Beispiel 10. Status der aktuellen Nutzung
ipcs mit dem Befehl -u zeigt die aktuelle Nutzung für alle IPC-Einrichtungen an. Diese Option kann mit einer spezifischen Option kombiniert werden, um den Status für eine bestimmte IPC-Einrichtung anzuzeigen.
# ipcs -u ------ Shared Memory Status -------- segments allocated 30 pages allocated 102 pages resident 77 pages swapped 0 Swap performance: 0 attempts 0 successes ------ Semaphore Status -------- used arrays = 49 allocated semaphores = 252 ------ Messages: Status -------- allocated queues = 1 used headers = 0 used space = 0 bytes