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.
·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önnenEssenz: Ö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 PipelineRü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 imKernel 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 realisierenEssenz: 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!