Geteilte Erinnerung

Eine Abbildung eines gemeinsamen Speichersystems von drei Prozessoren.

Im Informatik, geteilte Erinnerung ist Erinnerung Dies kann gleichzeitig von mehreren Programmen zugegriffen werden, die beabsichtigt, unter ihnen Kommunikation zu gewährleisten oder redundante Kopien zu vermeiden. Der gemeinsame Speicher ist ein effizientes Mittel, um Daten zwischen den Programmen zu übergeben. Abhängig vom Kontext können Programme auf einem einzelnen Prozessor oder auf mehreren separaten Prozessoren ausgeführt werden.

Verwenden von Speicher für die Kommunikation innerhalb eines einzelnen Programms, z. unter seinem vielfältigen Themen, wird auch als gemeinsam genutzter Speicher bezeichnet.

In Hardware

HSA definiert einen Sonderfall der Speicherfreigabe, wo die MMU der CPU und der Iommu der GPU haben einen identischen, vorsichtigen virtuellen Adressraum.

In Computerhardware, geteilte Erinnerung bezieht sich auf einen (typisch großen) Block von Arbeitsspeicher (RAM), auf die mehrere verschiedene zugegriffen werden können Zentrale Verarbeitungseinheiten (CPUs) in a Multiprozessor -Computersystem.

Shared Memory Systems können verwendet werden:[1]

Ein gemeinsames Speichersystem ist relativ einfach zu programmieren, da alle Prozessoren eine einzige Ansicht von Daten teilen und die Kommunikation zwischen den Prozessoren so schnell sein kann wie Speicherzugriff auf denselben Ort. Das Problem mit gemeinsamen Speichersystemen ist, dass viele CPUs einen schnellen Zugriff auf den Speicher benötigen und wahrscheinlich wahrscheinlich Cache-Speicher, was zwei Komplikationen hat:

  • Zugriffszeitverschlechterung: Wenn mehrere Prozessoren versuchen, auf denselben Speicherort zuzugreifen, verursacht dies Streitigkeiten. Der Versuch, auf den Speicherstandorten in der Nähe zuzugreifen, kann verursachen Falsche Teilen. Shared Memory Computers können nicht sehr gut skalieren. Die meisten von ihnen haben zehn oder weniger Prozessoren;
  • Mangel an Datenkohärenz: Immer wenn ein Cache mit Informationen aktualisiert wird, die von anderen Prozessoren verwendet werden können, muss die Änderung den anderen Prozessoren widerspiegelt werden, da sonst die verschiedenen Prozessoren mit inkohärenten Daten arbeiten. Eine solche Cache -Kohärenz Protokolle können, wenn sie gut funktionieren, einen extrem leistungsstarken Zugriff auf gemeinsame Informationen zwischen mehreren Prozessoren bieten. Andererseits können sie manchmal überladen werden und ein Engpass für die Leistung werden.

Technologien wie Querlatte, Omega -Netzwerke, Hypertransport oder Frontbus Kann verwendet werden, um die Engpässe zu dämpfen.

Im Falle von a Heterogene Systemarchitektur (Prozessorarchitektur, die verschiedene Arten von Prozessoren integriert, wie z. CPUs und GPUS, mit gemeinsamem Speicher), die Speicherverwaltungseinheit (MMU) der CPU und der Eingabe -Output -Speicherverwaltungseinheit (Iommu) der GPU müssen bestimmte Merkmale wie einen gemeinsamen Adressraum teilen.

Die Alternativen zum gemeinsamen Gedächtnis sind Verteilter Speicher und verteilter gemeinsamer Speicher, jeweils eine ähnliche Reihe von Problemen.

In Software

In Computersoftware, geteilte Erinnerung entweder

Da beide Prozesse wie das reguläre Arbeitsspeicher auf den gemeinsam genutzten Speicherbereich zugreifen können, ist dies eine sehr schnelle Kommunikationsmethode (im Gegensatz zu anderen Mechanismen von IPC wie z. B. benannte Pfeifen, UNIX -Domain -Sockets oder Corba). Andererseits ist es weniger skalierbar, da beispielsweise die Kommunikationsprozesse auf derselben Maschine ausgeführt werden müssen (anderer IPC Computernetzwerk), und es muss darauf geachtet werden, Probleme zu vermeiden, wenn Prozessesaustauschspeicher auf separaten CPUs ausgeführt werden und die zugrunde liegende Architektur nicht ist Cache kohärent.

IPC nach gemeinsamem Speicher wird zum Beispiel verwendet, um Bilder zwischen der Anwendung und der zu übertragen X Server auf UNIX -Systemen oder im iStream Fenster.

Dynamische Bibliotheken werden im Allgemeinen einmal im Speicher gehalten und auf mehrere Prozesse abgebildet, und nur Seiten, die für den individuellen Prozess angepasst werden mussten Kopieren auf dem Schreiben Das kopiert die Seite transparent, wenn ein Schreiben versucht wird, und lässt dann das Schreiben in der privaten Kopie erfolgreich sein.

Im Vergleich zu mehreren Adressraumbetriebssystemen ist die Speicherfreigabe-insbesondere von Teilen von Verfahren oder Zeigerbasierten Strukturen-einfacher in Einzeladressraum Betriebssysteme.[2]

Unterstützung bei Unix-ähnlichen Systemen

Posix Bietet eine standardisierte API für die Verwendung gemeinsamer Speicher. POSIX Shared Memory. Dies verwendet die Funktion shm_open von sys/mman.h.[3] POSIX Interprocess Communication (Teil der POSIX: XSI-Erweiterung) enthält die gemeinsam genutzten Funktionen Shmat, SHMCTL, shmdt und Shmget.[4][5] UNIX System V bietet auch eine API für gemeinsam genutzten Speicher. Dies verwendet Shmget von sys/shm.h. BSD -Systeme liefern "anonyme zugeordnete Speicher", das von mehreren Prozessen verwendet werden kann.

Der gemeinsame Speicher von erstellt von shm_open ist hartnäckig. Es bleibt im System, bis es explizit durch einen Prozess entfernt wird. Dies hat einen Nachteil, dass der Prozess, wenn der Prozess abstürzt und den gemeinsamen Speicher nicht beseitigt, bis zum Herunterfahren des Systems bleibt.

POSIX liefert auch die MMAP API zum Zuordnen von Dateien in den Speicher; Eine Zuordnung kann gemeinsam genutzt werden, sodass der Inhalt der Datei als gemeinsamer Speicher verwendet werden kann.

Linux -Verteilungen basierend auf dem 2.6 Kernel und später Angebot /Dev /SHM als gemeinsamer Speicher in Form von a Widderscheibe, genauer gesagt als weltweit haltbares Verzeichnis (ein Verzeichnis, in dem jeder Benutzer des Systems Dateien erstellen kann), das im Speicher gespeichert wird. Beide Roter Hut und Debian Basierte Verteilungen umfassen es standardmäßig. Die Unterstützung für diese Art von RAM -Festplatte ist im Kernel vollständig optional Konfigurationsdatei.[6]

Unterstützung unter Windows

Unter Windows kann man gebrauchen CreateFilemapping und MapViewoffile Funktionen, um eine Region einer Datei in mehreren Prozessen in den Speicher zuzuordnen.[7]

Plattformübergreifende Unterstützung

Einige C ++-Bibliotheken bieten einen tragbaren und objektorientierten Zugriff auf gemeinsame Speicherfunktionen. Zum Beispiel, Schub Enthält die boost.interprocess c ++ bibliothek[8] und Qt Bietet die QsharedMemory -Klasse.[9]

Programmiersprache Unterstützung

Für Programmiersprachen mit POSIX -Bindungen (z. B. C/C ++) können gemeinsame Speicherregionen erstellt und zugegriffen werden, indem die vom Betriebssystem bereitgestellten Funktionen aufgerufen werden. Andere Programmiersprachen haben möglicherweise ihre eigenen Möglichkeiten, diese Betriebsmöglichkeiten für ähnliche Effekte zu verwenden. Zum Beispiel, Php Bietet an API Shared Memory zu erstellen, ähnlich wie Posix Funktionen.[10]

Siehe auch

Verweise

  1. ^ El-Wrewini, Hesham; Abd-El-Barr, Mostafa (2005). Erweiterte Computerarchitektur und parallele Verarbeitung. Wiley-Interscience. S. 77–80. ISBN 978-0-471-46740-3.
  2. ^ Jeffrey S. Chase; Henry M. Levy; Michael J. Feeley; und Edward D. Lazowska."Teilen und Schutz in einem einzigen Adressraum Betriebssystem".doi:10.1145/195792.195795 1993. p. 3
  3. ^ Dokumentation von shm_open aus der einzelnen Unix -Spezifikation
  4. ^ Robbins, Kay A.; Robbins, Steven (2003). UNIX Systems Programmierung: Kommunikation, Parallelität und Fäden (2 ed.). Prentice Hall PTR. p.512. ISBN 978-0-13-042411-2. Abgerufen 2011-05-13. Die POSIX Interprocess Communication (IPC) ist Teil der POSIX: XSI -Erweiterung und hat ihren Ursprung in UNIX System V Interprocess Communication.
  5. ^ Shared Memory Facility Aus der einzelnen Unix -Spezifikation.
  6. ^ Christoph Rohland; Hugh Dickins; Kosaki Motohiro. "tmpfs.txt". kernel.org. Abgerufen 2010-03-16.
  7. ^ Erstellen von Shared Memory erstellen von msdn.
  8. ^ Boost.Interprocess C ++ Bibliothek
  9. ^ "QsharedMemory Class Referenz".
  10. ^ Gemeinsame Speicherfunktionen in PHP-API

Externe Links