Общая память

редактировать
Иллюстрация системы с общей памятью из трех процессоров.

В информатике, Общая память - это память, к которой могут одновременно обращаться несколько программ с намерением обеспечить обмен данными между ними или избежать дублирования копий. Общая память - эффективное средство передачи данных между программами. В зависимости от контекста программы могут работать на одном процессоре или на нескольких отдельных процессорах.

Использование памяти для связи внутри одной программы, например среди его множества потоков также называется разделяемой памятью.

Содержание

  • 1 Аппаратное обеспечение
  • 2 Программное обеспечение
    • 2.1 Поддержка в Unix-подобных системах
    • 2.2 Поддержка в Windows
    • 2.3 Межплатформенная поддержка
    • 2.4 Поддержка языков программирования
  • 3 См. Также
  • 4 Ссылки
  • 5 Внешние ссылки

В аппаратном обеспечении

HSA определяет особый случай разделения памяти, когда MMU ЦП и IOMMU графического процессора имеют идентичное выгружаемое виртуальное адресное пространство.

В компьютерном оборудовании общая память относится к (обычно большому) блоку оперативной памяти (RAM), которая может быть доступ к ним осуществляется несколькими различными центральными процессорами (ЦП) в многопроцессорной компьютерной системе.

Системы с общей памятью могут использовать:

Систему с разделяемой памятью относительно легко программировать, поскольку все процессоры совместно используют единое представление данных, а обмен данными между процессорами может быть таким же быстрым, как и доступ к одной и той же области памяти. Проблема с системами с общей памятью заключается в том, что многим процессорам требуется быстрый доступ к памяти, и они, вероятно, будут иметь кэш-память, что имеет две сложности:

  • снижение времени доступа: когда несколько процессоров пытаются получить доступ к одному и тому же участку памяти, он вызывает раздор. Попытка получить доступ к соседним ячейкам памяти может вызвать ложное совместное использование. Компьютеры с общей памятью не могут хорошо масштабироваться. Большинство из них имеют десять или меньше процессоров;
  • отсутствие согласованности данных: всякий раз, когда один кэш обновляется информацией, которая может использоваться другими процессорами, это изменение необходимо отразить на других процессорах, в противном случае - на разных процессорах будет работать с несогласованными данными. Такие протоколы согласованности кэша могут, когда они хорошо работают, обеспечивать чрезвычайно высокопроизводительный доступ к общей информации между несколькими процессорами. С другой стороны, они иногда могут быть перегружены и стать узким местом для производительности.

Такие технологии, как переключающие панели, сети Omega, HyperTransport или Внешняя шина может использоваться для смягчения эффекта «узкого места».

В случае гетерогенной системной архитектуры (архитектура процессора, объединяющая различные типы процессоров, например CPU и GPU, с общей памятью), блок управления памятью (MMU) центрального процессора и блок управления памятью ввода-вывода (IOMMU) графического процессора должны иметь общие характеристики, такие как общее адресное пространство.

Альтернативами общей памяти являются распределенная память и распределенная разделяемая память, каждая из которых имеет аналогичный набор проблем.

В программном обеспечении

В компьютерном ПО разделяемая память - это либо

  • метод межпроцессного взаимодействия (IPC), то есть способ обмена данными между программами. работает одновременно. Один процесс создаст область в RAM, к которой могут получить доступ другие процессы;
  • метод экономии пространства памяти путем направления доступа к тому, что обычно было бы копиями части данных в один экземпляр вместо этого, используя сопоставления виртуальной памяти или с явной поддержкой рассматриваемой программы. Чаще всего это используется для разделяемых библиотек и для Выполнить на месте (XIP).

Поскольку оба процесса могут получить доступ к общей области памяти, как и к обычной рабочей памяти, это очень быстрый способ связи (в отличие от других механизмов IPC, таких как именованные каналы, сокеты домена Unix или CORBA ). С другой стороны, он менее масштабируем, так как, например, взаимодействующие процессы должны выполняться на одном компьютере (из других методов IPC только сокеты домена Интернета, а не сокеты домена Unix, могут использовать компьютерную сеть ), и следует проявлять осторожность, чтобы избежать проблем, если процессы, совместно использующие память, выполняются на отдельных ЦП, а базовая архитектура не является согласованной с кешем.

IPC с общей памятью используется, например, для передачи изображений между приложением и X-сервер в системах Unix или внутри объекта IStream, возвращаемого CoMarshalInterThreadInterfaceInStream в библиотеках COM в Windows.

Динамические библиотеки обычно хранятся в памяти один раз и отображаются на несколько процессов, и только страницы, которые должны были быть настроены для отдельного процесса (потому что символ там разрешался по-разному), дублируются, обычно с помощью механизма, известного как copy-on-write, который прозрачно копирует страницу при попытке записи, и затем пусть запись будет успешной d на частной копии.

Поддержка в Unix-подобных системах

POSIX предоставляет стандартизированный API для использования общей памяти, POSIX Shared Memory. Здесь используется функция shm_openиз sys / mman.h. Межпроцессное взаимодействие POSIX (часть POSIX: XSI Extension) включает функции совместно используемой памяти shmat, shmctl, shmdtи shmget. Unix System V также предоставляет API для общей памяти. Это использует shmget из sys / shm.h. Системы BSD предоставляют «анонимную отображаемую память», которая может использоваться несколькими процессами.

Общая память, созданная shm_open, является постоянной. Он остается в системе до тех пор, пока не будет явно удален процессом. У этого есть недостаток: если процесс выйдет из строя и не сможет очистить разделяемую память, он останется до завершения работы системы.

POSIX также предоставляет API mmap для отображения файлов в память; отображение может быть общим, что позволяет использовать содержимое файла в качестве общей памяти.

Дистрибутивы Linux, основанные на ядре 2.6 и более поздних версиях, предлагают / dev / shm в качестве общей памяти в форме RAM-диска, а точнее, в качестве каталога с возможностью записи всем (каталог, в котором каждый пользователь системы может создавать файлы), которые хранятся в памяти. Оба дистрибутива на основе RedHat и Debian включают его по умолчанию. Поддержка этого типа RAM-диска совершенно необязательна в файле конфигурации ядра .

Поддержка в Windows

В Windows можно использовать CreateFileMappingи MapViewOfFileдля отображения области файла в память в нескольких процессах.

Межплатформенная поддержка

Некоторые библиотеки C ++ обеспечивают переносимый и объектно-ориентированный доступ к функциям разделяемой памяти. Например, Boost содержит библиотеку Boost.Interprocess C ++, а Qt предоставляет класс QSharedMemory.

Поддержка языков программирования

Имеется встроенная поддержка для разделяемая память также в языках программирования, помимо C / C ++. Например, PHP предоставляет API для создания разделяемой памяти, аналогично функциям POSIX.

См. Также

Ссылки

Внешние ссылки

  • IPC: Shared Memory Дэйв Маршалл
  • Введение в общую память, гл. 12 из книги Ричарда Стивенса «Сетевое программирование UNIX, том 2, второе издание: межпроцессное взаимодействие».
  • SharedHashFile, хеш-таблица с общей памятью с открытым исходным кодом.
Последняя правка сделана 2021-06-08 03:44:50
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте