Heim  >  Artikel  >  Betrieb und Instandhaltung  >  Klassische Techniken für die Linux-Interprozesskommunikation

Klassische Techniken für die Linux-Interprozesskommunikation

WBOY
WBOYnach vorne
2022-02-09 17:38:571819Durchsuche

Dieser Artikel vermittelt Ihnen relevantes Wissen über die Kommunikation zwischen Prozessen unter Linux, einschließlich Pipes, anonymen Pipes, gemeinsam genutztem Speicher und anderen verwandten Themen. Ich hoffe, dass er für alle hilfreich ist.

Klassische Techniken für die Linux-Interprozesskommunikation

·Interprozesskommunikation: Die vom Betriebssystem für das System bereitgestellte Methode zur Implementierung der Interprozesskommunikation

Prozesse können nicht direkt kommunizieren, da jeder Prozess über einen unabhängigen virtuellen Adressraum verfügt und auf seinen eigenen zugreift Virtuelle Adresse, daher ist der Prozess unabhängig und kann nicht direkt kommunizieren

·Pipeline

Eigenschaften: Halbduplex-Kommunikation – Einwegkommunikation mit der Richtung, die Sie wählen können

Essenz: Öffnen Sie einen Puffer im Kernel (ein Stück Speicher im Kernelraum) Prinzip: Mehrere Prozesse kommunizieren, indem sie auf den Puffer im selben Kernel zugreifen (Kopieren des Operationshandles des Puffers)

Kategorie: Anonyme Pipe: Der Puffer hat keine Kennung und kann nur für die Kommunikation zwischen Prozessen mit Affinität verwendet werden

Benannte Pipe: Die Puffer hat eine Kennung und kann für jede prozessübergreifende Kommunikation auf demselben Host verwendet werden

Unter Linux ist alles eine Datei – alles wird als Datei betrieben (einschließlich Pipes), und der Zugriff auf die Pipe erfolgt über E/A-Operationen

·Anonyme Pipeline

Rückgabewert: Erfolgreich gibt 0 zurück; Fehler gibt -1 zurück Funktionen: Kann nur für die Kommunikation zwischen Prozessen mit verwandten Beziehungen verwendet werden.

Anonyme Pipes haben keine Kennungen und können von anderen Prozessen nicht gefunden werden Übergeordneter Prozess über den untergeordneten Prozess Erhalten Sie das Operationshandle über den Prozess, um eine Kommunikation zu erreichen

Lese- und Schreibfunktionen: Wenn sich keine Daten in der Pipe befinden, blockiert das Lesen

                                          mithilfe von ‐ ‐ ‐                        ’ ’ s ‐ down ‐   ‐ ‐                                                 , was zum Absturz des Prozesses führt Exit

                                                                wird mit dem Schreiben der Enden aller Pipes geschlossen. Wenn Sie mit dem Lesen fortfahren, wird nach dem Lesen der Daten 0 zurückgegeben und es wird nicht mehr blockiert.

                                           Sobald die Richtung ausgewählt ist, endet das ungenutzte Ende sollte geschlossen sein.

·

Named Pipe:

Im Wesentlichen handelt es sich um einen Puffer im

Kernel mit einer Kennung, die von anderen Prozessen gefunden werden kann, sodass sie für jede prozessübergreifende Kommunikation auf demselben verwendet werden kann host

Named Pipe Der Bezeichner ist eine Pipe-Typ-Datei, die im Dateisystem sichtbar ist Funktionsoperation :int mkfifo(const char *pathname, mode_t mode);

Pfadname: Dateiname; Modus: Erstellungsberechtigung Rückgabewert: 0 wird bei Erfolg zurückgegeben; Die Essenz der Pipeline: Ein Puffer im Kernelraum Prinzip: Mehrere Prozesse erreichen die Datenübertragung durch Zugriff auf denselben Puffer

Kategorie: anonyme Pipes, benannte Pipes

Anonyme Pipes: können nur für die Kommunikation zwischen Prozessen verwendet werden mit Verwandtschaftsbeziehungen

Benannte Pipes: können für jede prozessübergreifende Kommunikation auf demselben Host verwendet werden

Funktionen: ① Halbduplex-Kommunikation – Einwegkommunikation mit der Richtung, die Sie wählen können

Byte-Stream-Übertragungsdienst bereitstellen: bestellt , zuverlässig, verbindungsbasiert Eine Art Streaming-Übertragung

Basierend auf der Verbindung: Wenn alle Leseenden geschlossen sind, ist das Schreiben abnormal; wenn alle Schreibenden geschlossen sind, wird 0 zurückgegeben ② Kommt mit Synchronisation und gegenseitigem Ausschluss:

Synchronisierung: Der einzige Zugriff auf kritische Ressourcen über denselben Prozess zur gleichen Zeit. Erzielen Sie sichere Zugriffsvorgänge.                                                                                                                                                    implementiert.对 Die Verkörperung des gegenseitigen Ausschlusses: Die Größe des Schreibvorgangs der Pipeline überschreitet nicht PIPE_BUF-4096 und stellt dann die Atomizität des Vorgangs sicher. Der Lebenszyklus folgt dem Prozess: ohne menschliches Eingreifen, nach allen Prozessen, die den Pipe-Ausgang öffnen , der Pipe-Puffer wird freigegeben

·Gemeinsamer Speicher:

Wird verwendet, um den Datenaustausch zwischen Prozessen zu realisieren

Essenz: ein Stück physischer Speicher Prinzip: Öffnen Sie einen physischen Speicherraum, dem mehrere Prozesse denselben Block zuordnen ihren eigenen virtuellen Adressraum und greifen direkt über die virtuelle Adresse darauf zu, wodurch der Datenaustausch realisiert wird

Funktionen: Die schnellste Methode zur Kommunikation zwischen Prozessen, der Lebenszyklus folgt dem Kernel

              Eingreifen in , , , , , , , , , , , und , zwei Datenkopiervorgänge weniger

Hinweis: Beim Betrieb von Shared Memory müssen Sicherheitsaspekte beachtet werden Adresse Führen Sie verschiedene Speicheroperationen aus

④Entfernen Sie die Zuordnung der Zuordnungsbeziehung

⑤Löschen Sie den gemeinsam genutzten Speicher int shmget(key_t key, size_t size, int shmflg);

key: Bezeichner (mehrere Prozesse öffnen denselben gemeinsam genutzten Speicher über denselben Bezeichner) ​​

size: Die Größe des beim Erstellen geöffneten Speicherplatzes (im Speicher). Seiten)

                                                                                                

void *shmat(int shmid, const void *shmaddr, int shmflg); Zugriffsmethode; SHM_RDONLY -Read-only;                                                                                                 kann die zugeordnete erste Adresse zurückgeben;      -1                                    

int shmdt(const void *shmaddr);

int shmctl(int shmid, int cmd, struct shmid_ds *buf); buf: Für IPC_RMID erfolgreich 0 zurückgeben, bei Fehler -1 zurückgeben

·Nachrichtenwarteschlange

Essenz: Eine Prioritätswarteschlange im Kernel. Mehrere Prozesse greifen auf dieselbe Warteschlange zu und fügen Knoten zur Warteschlange hinzu oder erhalten sie, um eine Blockübertragung zwischen Prozessen zu erreichen. Funktionen: Mit Synchronisierung und gegenseitigem Ausschluss folgt der Lebenszyklus dem Kernel Essenz: Ein Zähler in der Kernel- und Leiterplatten-Warteschlange

Funktion: Wird verwendet, um eine Synchronisierung zwischen Prozessen zu erreichen. Koordinieren Sie mit gegenseitigem Ausschluss den Zugriff des Prozesses auf kritische Ressourcen

P-Operation: Zähler -1, beurteilen Sie, ob die Anzahl kleiner als 0 ist. Blockieren Sie den Prozess

V-Operation: Zähler +1, aktivieren Sie einen blockierten Prozess

Verwenden Sie seinen eigenen Zähler, um auf Ressourcen zuzugreifen. Es wird gezählt, um festzustellen, ob die Ressourcenbeschaffung des Prozesses angemessen ist. Wenn dies nicht angemessen ist, wird er blockiert . Nachdem Sie darauf gewartet haben, dass eine Ressource generiert wird, aktivieren Sie den blockierten Prozess eine Ressource, bevor der Prozess auf die Ressource zugreift. Führen Sie die P-Operation aus und führen Sie nach Abschluss des Besuchs die V-Operation aus

Verwandte Empfehlungen: „Linux-Video-Tutorial

Das obige ist der detaillierte Inhalt vonKlassische Techniken für die Linux-Interprozesskommunikation. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:csdn.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen