Общая память - Shared memory
В Информатика, Общая память является объем памяти к которым могут одновременно обращаться несколько программ с целью обеспечить связь между ними или избежать дублирования копий. Общая память - эффективное средство передачи данных между программами. В зависимости от контекста программы могут работать на одном процессоре или на нескольких отдельных процессорах.
Использование памяти для связи внутри одной программы, например среди множества потоки, также называется общей памятью.
В аппаратном обеспечении
В компьютерном оборудовании Общая память относится к (обычно большому) блоку оперативная память (RAM), к которой могут обращаться несколько разных центральные процессоры (ЦП) в многопроцессорная компьютерная система.
Системы с общей памятью могут использовать:[1]
- единый доступ к памяти (UMA): все процессоры равномерно распределяют физическую память;
- неравномерный доступ к памяти (NUMA): время доступа к памяти зависит от расположения памяти относительно процессора;
- архитектура только кэш-памяти (COMA): локальная память для процессоров на каждом узле используется как кэш, а не как фактическая основная память.
Систему с общей памятью относительно легко программировать, поскольку все процессоры совместно используют единое представление данных, а обмен данными между процессорами может осуществляться так же быстро, как и доступ к памяти в одном и том же месте. Проблема с системами с общей памятью заключается в том, что многим процессорам требуется быстрый доступ к памяти, и они, вероятно, будут кэш-память, который имеет два осложнения:
- Ухудшение времени доступа: когда несколько процессоров пытаются получить доступ к одной и той же области памяти, это вызывает конфликт. Попытка получить доступ к соседним ячейкам памяти может вызвать ложный обмен. Компьютеры с общей памятью не могут хорошо масштабироваться. У большинства из них десять или меньше процессоров;
- отсутствие согласованности данных: всякий раз, когда один кэш обновляется информацией, которая может использоваться другими процессорами, изменение необходимо отразить на других процессорах, в противном случае разные процессоры будут работать с несогласованными данными. Такой согласованность кеша протоколы могут, когда они хорошо работают, обеспечивать чрезвычайно высокопроизводительный доступ к общей информации между несколькими процессорами. С другой стороны, они иногда могут быть перегружены и стать узким местом для производительности.
Такие технологии, как поперечные переключатели, Омега сети, Гипертранспорт или же фронтальный автобус может использоваться для ослабления эффекта «узкого места».
В случае Гетерогенная системная архитектура (архитектура процессора, которая объединяет различные типы процессоров, например Процессоры и GPU, с общей памятью), блок управления памятью (MMU) ЦП и блок управления памятью ввода-вывода (IOMMU) графического процессора должны иметь общие характеристики, например общее адресное пространство.
Альтернативы разделяемой памяти: распределенная память и распределенная разделяемая память, у каждого из которых одинаковый набор проблем.
В программном обеспечении
В компьютерном программном обеспечении Общая память либо
- метод межпроцессного взаимодействия (IPC), то есть способ обмена данными между программами, работающими одновременно. Один процесс создаст область в баран какие другие процессы могут получить доступ;
- метод экономии пространства памяти путем направления доступа к тому, что обычно было бы копией части данных, вместо этого к одному экземпляру, используя виртуальная память сопоставления или с явной поддержкой рассматриваемой программы. Это чаще всего используется для общие библиотеки и для Выполнить на месте (XIP).
Поскольку оба процесса могут обращаться к общей области памяти, как и к обычной рабочей памяти, это очень быстрый способ связи (в отличие от других механизмов IPC, таких как именованные каналы, Доменные сокеты Unix или же CORBA ). С другой стороны, он менее масштабируемый, так как, например, взаимодействующие процессы должны выполняться на одном компьютере (из других методов IPC только сокеты домена Интернета, а не сокеты домена Unix, могут использовать компьютерная сеть ), и необходимо соблюдать осторожность, чтобы избежать проблем, если процессы, совместно использующие память, выполняются на отдельных процессорах, а базовая архитектура не работает. кэш согласованный.
IPC с общей памятью используется, например, для передачи изображений между приложением и X сервер в системах Unix или внутри объекта IStream, возвращаемого CoMarshalInterThreadInterfaceInStream в библиотеках COM под Windows.
Динамические библиотеки обычно хранятся в памяти один раз и отображаются на несколько процессов, и только страницы, которые должны были быть настроены для отдельного процесса (потому что символ там разрешен по-разному), дублируются, обычно с помощью механизма, известного как копирование при записи который прозрачно копирует страницу при попытке записи, а затем позволяет успешно выполнить запись в частной копии.
Поддержка Unix-подобных систем
POSIX предоставляет стандартизированный API для использования общей памяти, Общая память POSIX. Здесь используется функция shm_open
из sys / mman.h.[2] Межпроцессное взаимодействие POSIX (часть POSIX: XSI Extension) включает функции совместно используемой памяти. шмат
, shmctl
, шмдт
и шмгет
.[3][4] Unix System V также предоставляет API для общей памяти. Это использует shmget из sys / shm.h. Системы BSD предоставляют «анонимную отображаемую память», которая может использоваться несколькими процессами.
Общая память, созданная shm_open
настойчив. Он остается в системе до тех пор, пока не будет явно удален процессом. У этого есть недостаток: если процесс выйдет из строя и не сможет очистить разделяемую память, он останется до завершения работы системы.
POSIX также предоставляет mmap
API для отображения файлов в память; отображение может быть общим, что позволяет использовать содержимое файла в качестве общей памяти.
Дистрибутивы Linux, основанные на ядре 2.6 и более поздних версиях, предлагают / dev / shm в качестве общей памяти в виде RAM-диск, более конкретно как каталог с возможностью записи всем (каталог, в котором каждый пользователь системы может создавать файлы), который хранится в памяти. Оба Красная шляпа и Debian дистрибутивы на основе включают его по умолчанию. Поддержка этого типа RAM-диска в ядре не является обязательной. конфигурационный файл.[5]
Поддержка в Windows
В Windows можно использовать CreateFileMapping
и MapViewOfFile
функции для отображения области файла в память в нескольких процессах.[6]
Кросс-платформенная поддержка
Некоторые библиотеки C ++ предоставляют переносимый и объектно-ориентированный доступ к функциям общей памяти. Например, Способствовать росту содержит библиотеку Boost.Interprocess C ++[7] и Qt предоставляет класс QSharedMemory.[8]
Поддержка языков программирования
Кроме C / C ++, имеется встроенная поддержка общей памяти и в других языках программирования. Например, PHP обеспечивает API для создания общей памяти, подобной POSIX функции.[9]
Смотрите также
- Распределенная память
- Распределенная разделяемая память
- Общая графическая память
- Гетерогенная системная архитектура
- Глобальная переменная
- Нано-нити
- Выполнить на месте
- Общий реестр
- Общие объекты снимков
- Узкое место в архитектуре фон Неймана
Рекомендации
- ^ Эль-Ревини, Хешам; Абд-эль-Барр, Мостафа (2005). Расширенная компьютерная архитектура и параллельная обработка. Wiley-Interscience. С. 77–80. ISBN 978-0-471-46740-3.
- ^ Документация shm_open из единой спецификации Unix
- ^ Роббинс, Кей А .; Роббинс, Стивен (2003). Системное программирование Unix: связь, параллелизм и потоки (2-е изд.). Prentice Hall PTR. п.512. ISBN 978-0-13-042411-2. Получено 2011-05-13.
Межпроцессное взаимодействие (IPC) POSIX является частью POSIX: XSI Extension и берет свое начало в межпроцессном взаимодействии Unix System V.
- ^ Общая память из спецификации Single Unix.
- ^ Кристоф Роланд; Хью Дикинс; KOSAKI Motohiro. "tmpfs.txt". kernel.org. Получено 2010-03-16.
- ^ Создание именованной общей памяти из MSDN.
- ^ Библиотека Boost.Interprocess C ++
- ^ "Описание класса QSharedMemory".
- ^ Функции общей памяти в PHP-API
внешняя ссылка
- IPC: общая память Дэйв Маршалл
- Общая память Введение, Гл. 12 из книги Ричарда Стивенса «Сетевое программирование UNIX, том 2, второе издание: межпроцессное взаимодействие».
- SharedHashFile, Хеш-таблица с общей памятью с открытым исходным кодом.