Frage

ein wenig über das Thema gelernt hat, kann jemand sagen, was der wirkliche Unterschied zwischen POSIX Shared Memory (shm_open) und POSIX-Mapped-Dateien (mmap)?

Beide scheinen den / dev / tmpfs-Subsystem, dann eher älteren IPC-Mechanismus zu verwenden.

So ist es ein Vorteil, mmap Datei über Shared-Memory?

Danke.

War es hilfreich?

Lösung

Die Unterscheidung ist nicht immer klar. Gemeinsam genutzter Speicher kann über Memory-Mapped-Dateien implementiert werden. Eine ausgezeichnete Schreib dazu finden Sie hier (wie C / C ++ angewandt Programmierung).

Andere Tipps

Mein Verständnis ist, dass das Shared Memory oben auf Mapped-Dateien erstellt wird, aber Diese Seite , dass die Fähigkeit zur Verwendung Speicher, um anzuzeigen, scheint Mapped-Dateien als Shared Memory abhängig ist.

  

Die Verwendung der mmap () Funktion wird durch den QSHRMEMCTL Systemwert beschränkt. Wenn dieses System Wert 0 ist, kann die mmap () Funktion nicht eine gemeinsame Zuordnung mit mit PROT_WRITE Fähigkeit schaffen. Im Wesentlichen Dies verhindert, dass die Schaffung einer Speicherkarte, die den Inhalt der Stream-Datei abgebildet wird, verändern könnte. Wenn die Parameter Flags MAP_SHARED angegeben, sind die Prot Parameter PROT_WRITE und die QSHRMEMCTL Systemwert 0 ist, dann ist die mmap () Funktionen fehlschlagen und eine Fehlernummer von EACCES Ergebnisse.

Im Prinzip Shared Memory ist eine Form von IPC.The gemeinsamen Region wird in / dev / shm erstellt, die nur im Speicher erzeugt wird (RAM) und es erfordert keine Plattenoperationen, daher ist es eine schnellere Methode von IPC.Although IPC kann mit Plattendatei getan wird und dann auch mit mmap, aber es wäre comparetively slow.Alternatively Sie immer MAP_ANONYMOUS mit mmap verwenden können, die mit jeder Plattendatei nicht sichern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top