suchen
HeimSystem-TutorialLINUXSo teilen Sie Speicher zwischen Linux-Prozessen

So teilen Sie Speicher zwischen Linux-Prozessen

Jun 02, 2024 am 09:18 AM
linuxlinux教程红帽linux系统linux命令Linux-ZertifizierungRed Hat LinuxLinux-Video

Shared-Memory-IPC-Prinzip

Der prozessübergreifende Kommunikationsmechanismus des gemeinsam genutzten Speichers wird hauptsächlich zum Übertragen großer Datenmengen zwischen Prozessen verwendet. Die folgende Abbildung zeigt ein schematisches Diagramm der Verwendung des gemeinsam genutzten Speichers zum Übertragen großer Datenmengen zwischen Prozessen:

So teilen Sie Speicher zwischen Linux-Prozessen

Gemeinsamer Speicher ist ein Speicherplatz, der separat im Speicher geöffnet wird. Dieser Speicherplatz verfügt über eine eigene einzigartige Datenstruktur, einschließlich Zugriffsberechtigungen, Größe und aktueller Zugriffszeit. Die Datenstruktur ist wie folgt definiert:

from /usr/include/linux/shm.h

struct shmid_ds {
struct ipc_perm shm_perm; /* operation perms 操作权限 */
int shm_segsz; /* size of segment (bytes) 段长度大小 */
__kernel_time_t shm_atime; /* last attach time 最近attach时间 */
__kernel_time_t shm_dtime; /* last detach time 最近detach时间 */
__kernel_time_t shm_ctime; /* last change time 最近change时间 */
__kernel_ipc_pid_t shm_cpid; /* pid of creator 创建者pid */
__kernel_ipc_pid_t shm_lpid; /* pid of last operator 最近操作pid */
unsigned short shm_nattch; /* no. of current attaches */
unsigned short shm_unused; /* compatibility */
void *shm_unused2; /* ditto - used by DIPC */
void *shm_unused3; /* unused */
};

Bevor zwei Prozesse diesen gemeinsam genutzten Speicherplatz nutzen, müssen sie eine Verbindung zwischen dem Prozessadressraum und dem gemeinsam genutzten Speicherplatz herstellen, dh den gemeinsam genutzten Speicherplatz in den Prozess einbinden.

Das System erlegt dem gemeinsam genutzten Speicher folgende Einschränkungen auf:

#define SHMMAX 0x2000000 /* max shared seg size (bytes) 最大共享段大小 */
#define SHMMIN 1 /* min shared seg size (bytes) 最小共享段大小 */
#define SHMMNI 4096 /* max num of segs system wide */
#define SHMALL (SHMMAX/getpagesize()*(SHMMNI/16))
#define SHMSEG SHMMNI /* max shared segs per process */
Linux-Shared-Memory-Verwaltung
1. Gemeinsame Erinnerung schaffen
#include <sys> #include <sys></sys></sys>

/*
* Der erste Parameter ist der Schlüsselwert, der im Allgemeinen von der Funktion ftok() generiert wird
* Der zweite Parameter ist die Größe des zu erstellenden Shared-Memory-Segments (in Bytes)
* Der dritte Parameter wird verwendet, um die Erstellungskennung des gemeinsam genutzten Speichersegments zu identifizieren
*/

int shmget(key_t key, size_t size, int shmflg);
2. Gemeinsame Speichersteuerung
#include <sys> #include <sys></sys></sys>

/*
* Der erste Parameter ist die gemeinsam genutzte Speicherkennung, die betrieben werden soll
* Der zweite Parameter ist der auszuführende Vorgang
* Der dritte Parameter sind die temporären Shared-Memory-Variableninformationen der shmid_ds-Struktur
*/

int shmctl(int shmid, int cmd, struct shmid_ds *buf);
3. Gemeinsam genutzte Speicherobjekte zuordnen

Die Systemaufruffunktion shmat() ordnet ein gemeinsam genutztes Speichersegment dem Datensegment des aufrufenden Prozesses zu und gibt die erste Adresse des Speicherbereichs zurück. Ihre Funktion wird wie folgt deklariert:

#include <sys>
#include <sys>
</sys></sys>

/*
* Der erste Parameter ist die gemeinsam genutzte Speicherkennung, die betrieben werden soll
* Der zweite Parameter wird verwendet, um die zugeordnete Adresse des gemeinsam genutzten Speichers anzugeben. Wenn er nicht 0 ist, wird dieser Parameter vom System zugewiesen
* Der dritte Parameter wird verwendet, um die Zugriffsberechtigungen und Zuordnungsbedingungen des gemeinsam genutzten Speichersegments anzugeben
*/

void *shmat(int shmid, const void *shmaddr, int shmflg);
4. Gemeinsam genutzte Speicherobjekte trennen

Nachdem Sie den gemeinsam genutzten Speicherplatz genutzt haben, müssen Sie ihn mit dem Funktionsaufruf shmdt() vom aktuellen Prozess trennen. Die Funktionsdeklaration lautet wie folgt:

#include <sys>
#include <sys>
</sys></sys>

/*
* Der Parameter ist die erste Adresse des zugewiesenen gemeinsam genutzten Speichers
*/

int shmdt(const void *shmaddr);
Die Konvention, gefolgt von der gemeinsamen Erinnerung zwischen Eltern- und Kindprozessen

1. Nachdem Sie die Funktion fork() zum Erstellen eines untergeordneten Prozesses verwendet haben, erbt der Prozess den vom übergeordneten Prozess bereitgestellten gemeinsamen Speicher.

2. Wenn exec() aufgerufen wird, um ein neues Programm auszuführen, wird der gesamte bereitgestellte gemeinsam genutzte Speicher automatisch deaktiviert.

3. Wenn die Funktion „exit()“ in einem Prozess aufgerufen wird, wird der gesamte bereitgestellte gemeinsam genutzte Speicher vom aktuellen Prozess getrennt.

Programmbeispiel

Bewerben Sie sich für einen gemeinsam genutzten Speicher. Der übergeordnete Prozess speichert eine Ganzzahl an der ersten Adresse und der untergeordnete Prozess liest sie aus.

#include
#include <sys>
#include <sys>
#include <sys>
#include
#include

#define SHM_SIZE 1024

int main()
{
int shm_id, pid;
int *ptr = NULL;
</sys></sys></sys>

/* Shared Memory beantragen */

shm_id = shmget((key_t)1004, SHM_SIZE, IPC_CREAT | 0600);

/* Gemeinsamen Speicher dem Prozessadressraum zuordnen */

ptr = (int*)shmat(shm_id, 0, 0);

printf("Attach addr is %p \n", ptr);

*ptr = 1004;

printf("The Value of Parent is : %d \n", *ptr);

if((pid=fork()) == -1){
perror("fork Err");
exit(0);
}
else if(!pid){
printf("The Value of Child is : %d \n", *ptr);
exit(0);
}else{
sleep(1);

/* Zuordnung aufheben */

shmdt(ptr);

/* Gemeinsamen Speicher löschen */

shmctl(shm_id, IPC_RMID, 0);
}

return 0;
}

Ausgabeergebnis:

So teilen Sie Speicher zwischen Linux-Prozessen

Das obige ist der detaillierte Inhalt vonSo teilen Sie Speicher zwischen Linux-Prozessen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Was sind die Unterschiede in der Benutzerkontoverwaltung zwischen Linux und Windows?Was sind die Unterschiede in der Benutzerkontoverwaltung zwischen Linux und Windows?May 02, 2025 am 12:02 AM

Der Hauptunterschied zwischen Linux und Windows in der Benutzerkontoverwaltung ist das Berechtigungsmodell- und Verwaltungswerkzeug. Linux verwendet UNIX-basierte Berechtigungsmodelle und Befehlszeilen-Tools (z. B. UserAdd, Usermod, UserDel), während Windows ein eigenes Sicherheitsmodell und sein Grafical User Interface (GUI) -Management-Tools verwendet.

Wie macht die Befehlszeilenumgebung von Linux es mehr/weniger sicher als Windows?Wie macht die Befehlszeilenumgebung von Linux es mehr/weniger sicher als Windows?May 01, 2025 am 12:03 AM

Linux'scommandlinecanBemoresecurethanWindowsifManagedCorrecty, ButRequiresmoreuser Knowledge.1) Linux-Soopen-SourcenatureAllowsforquickSecurityUpdates.2) Fehlkonfigurationskanleadtovulierungen

So erstellen Sie automatisch eine USB -Laufwerkshalterung unter LinuxSo erstellen Sie automatisch eine USB -Laufwerkshalterung unter LinuxApr 30, 2025 am 10:04 AM

In diesem Leitfaden wird erläutert, wie Sie ein USB -Laufwerk auf dem Boot in Linux automatisch montieren und Ihnen Zeit und Mühe sparen. Schritt 1: Identifizieren Sie Ihr USB -Laufwerk Verwenden Sie den Befehl LSBLK, um alle Blockgeräte aufzulisten. Ihr USB -Laufwerk wird wahrscheinlich mit /dev /sdb1, /dev /sdc1 usw. gekennzeichnet.

Beste plattformübergreifende Apps für Linux, Windows und Mac im Jahr 2025Beste plattformübergreifende Apps für Linux, Windows und Mac im Jahr 2025Apr 30, 2025 am 09:57 AM

Über plattformübergreifende Anwendungen haben die Softwareentwicklung revolutioniert und ermöglicht nahtlose Funktionen über Betriebssysteme wie Linux, Windows und MacOS. Dadurch wird die Notwendigkeit beseitigt, Apps basierend auf Ihrem Gerät zu wechseln, und bietet konsistente Erfahrungen

Beste Linux -Tools für KI und maschinelles Lernen im Jahr 2025Beste Linux -Tools für KI und maschinelles Lernen im Jahr 2025Apr 30, 2025 am 09:44 AM

Künstliche Intelligenz (KI) verändert schnell zahlreiche Sektoren, von Gesundheitswesen und Finanzen bis hin zu kreativen Bereichen wie Kunst und Musik. Linux hat sich mit seinen Open-Source-Natur-, Anpassungs- und Leistungsfähigkeiten als führender Platfo entwickelt

5 Beste leichte Linux -Distributionen ohne GUI5 Beste leichte Linux -Distributionen ohne GUIApr 30, 2025 am 09:38 AM

Suchen Sie nach einer schnellen, minimalen und effizienten Linux -Verteilung ohne grafische Benutzeroberfläche (GUI)? Leichte, gitorlose Linux-Distributionen eignen sich perfekt für ältere Hardware oder spezielle Aufgaben wie Server und eingebettete Systeme. Sie konsumieren weniger res

So installieren Sie Wein 10.0 in Redhat -VerteilungenSo installieren Sie Wein 10.0 in Redhat -VerteilungenApr 30, 2025 am 09:32 AM

Wine 10.0 Stable Version Release: Ausführen von Windows -Anwendungen auf Linux auf einer höheren Ebene Wine, diese Open Source und kostenlose Anwendung ermöglicht es Linux -Benutzern, Windows -Software und Spiele auf UNIX/Linux -Betriebssystemen auszuführen und die Veröffentlichung der 10.0 -stabilen Version zu leiten! Diese Version wurde mit Quellcode und Binärpaket -Downloads versehen und unterstützt verschiedene Verteilungen wie Linux, Windows und Mac. Diese Ausgabe verkörpert ein Jahr harter Arbeit und über 8.600 Verbesserungen, wodurch viele aufregende Verbesserungen erzielt werden. Zu den wichtigsten Highlights gehören: Verbesserte Unterstützung für Bluetooth -Geräte. Verbesserung der Unterstützung für HID -Eingabereiche. Optimierte Leistung von 32-Bit- und 64-Bit-Anwendungen.

So installieren und konfigurieren Sie SQL Server auf RHELSo installieren und konfigurieren Sie SQL Server auf RHELApr 30, 2025 am 09:27 AM

Dieses Tutorial führt Sie durch die Installation von SQL Server 2022 unter RHEL 8.x oder 9.x, eine Verbindung über das SQLCMD-Befehlszeilen-Tool, die Datenbankerstellung und die grundlegende Abfrage. Voraussetzungen Stellen Sie vor Beginn sicher: Eine unterstützte RHEL -Version (RHEL 8 oder 9). Sudo

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

SecLists

SecLists

SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Dreamweaver Mac

Dreamweaver Mac

Visuelle Webentwicklungstools