Общая память

В информатике , общая память - это память которая может быть одновременно доступна несколькими программами с намерением обеспечить связь между ними или избежать избыточных копий. Общая память является эффективным средством передачи данных между программами. В зависимости от контекста, программы могут работать на одном процессоре или на нескольких отдельных процессорах.
Использование памяти для связи внутри одной программы, например, среди ее нескольких потоков , также называется общей памятью.
В оборудовании
[ редактировать ]
В компьютерном оборудовании общая память относится к (обычно большому) блоку случайного доступа памяти (ОЗУ), к которому можно получить доступ к нескольким различным центральным обработчивым единицам (процессорами) в многопроцессорной компьютерной системе .
Общие системы памяти могут использовать: [ 1 ]
- Единый доступ к памяти (UMA): все процессоры имеют одинаково физическую память;
- Нео универсальный доступ к памяти (NUMA): время доступа к памяти зависит от местоположения памяти относительно процессора;
- Архитектура памяти только кэша (COMA): локальные воспоминания для процессоров в каждом узле используются в качестве кэша, а не как фактическая основная память.
Система общей памяти относительно легко программировать, поскольку все процессоры имеют одно представление о данных, и связь между процессорами может быть таким же быстрым, как доступ к памяти в одно и то же место. Проблема с общими системами памяти заключается в том, что многим процессорам нужен быстрый доступ к памяти и, вероятно, будет кэшировать память , которая имеет два осложнения:
- Унижение времени доступа: когда несколько процессоров пытаются получить доступ к тому же местоположению памяти, он вызывает споры . Попытка получить доступ к близлежащим местам памяти может привести к ложному обмену . Общие компьютеры памяти не могут очень хорошо масштабироваться. У большинства из них есть десять или меньше процессоров;
- Отсутствие когерентности данных: всякий раз, когда один кэш обновляется информацией, которая может использоваться другими процессорами, изменение должно быть отражено для других процессоров, в противном случае различные процессоры будут работать с некогерентными данными. Такие протоколы когерентности кэша могут, когда они работают хорошо, обеспечивать чрезвычайно высокопроизводительный доступ к общей информации между несколькими процессорами. С другой стороны, они иногда могут перегружаться и стать узким местом для производительности.
Технологии, такие как переключатели поперечной полосы , сети омега , гипертранспортный или передняя автобуса, могут использоваться для ослабления узких мест.
В случае архитектуры гетерогенной системы которая интегрирует различные типы процессоров, такие как процессоры и графические процессоры , с общей памятью), память (архитектура процессора , управления блок GPU должен делиться определенными характеристиками, такими как общее адресное пространство.
Альтернативами общей памяти являются распределенная память и распределенная общая память , каждая из которых имеет аналогичный набор проблем.
В программном обеспечении
[ редактировать ]В компьютерном программном обеспечении общая память либо
- Метод межпроцессной связи (IPC), то есть способ обмена данными между программами, работающими одновременно. Один процесс создаст область в оперативной памяти , к которой могут получить доступ к другим процессам;
- Метод сохранения пространства памяти путем направления доступа на то, что обычно будет копиями части данных в один экземпляр вместо этого, с использованием сопоставлений виртуальной памяти или с явной поддержкой рассматриваемой программы. Это чаще всего используется для общих библиотек и для выполнения (XIP).
Поскольку оба процесса могут получить доступ к области общей памяти, такой как обычная рабочая память, это очень быстрый способ общения (в отличие от других механизмов МПК, таких как названные трубы , сокеты домена Unix или Corba ). С другой стороны, это менее масштабируемо, так как, например, процессы связи должны работать на одной и той же машине (других методов IPC, только гнезда интернет -домена, а не гнезда Unix Domain - могут использовать компьютерную сеть ), а осторожность должна быть Принимая во внимание, чтобы избежать проблем, если процессы, разделяющие память, работают на отдельных процессорах, а базовая архитектура не является согласованной кэшем .
МПК от общей памяти используется, например, для передачи изображений между приложением и X -сервером в системах UNIX или внутри объекта ISTERAM, возвращаемого ComarShalThreathReadInterIntStream в библиотеках COM в Windows .
Динамические библиотеки обычно удерживаются в памяти один раз и отображаются с несколькими процессами, и только страницы, которые должны были быть настроены для индивидуального процесса (потому что символ, разрешенный по-разному), дублируются, обычно с механизмом, известным как копия на записи, который прозрачно прозрачно Копирует страницу, когда будет предпринята попытка записи, а затем позволяет записи преуспеть в частной копии.
По сравнению с операционными системами с несколькими адресами. Обмен памятью-особенно процедуры обмена или структуры на основе указателей- проще в однозначных операционных системах . [ 2 ]
Поддержка в Unix-подобных системах
[ редактировать ]POSIX предоставляет стандартизированный API для использования общей памяти, POSIX Shared Memory . Это использует функцию shm_open
от Sys/Mman.h. [ 3 ] POSIX Межпроцессная связь (часть POSIX: XSI расширение) включает в себя функции общей памяти shmat
, shmctl
, shmdt
и shmget
. [ 4 ] [ 5 ] System V UNIX V обеспечивает API для общей памяти. Это использует Shmget от Sys/Shm.h. Системы BSD предоставляют «анонимную отображенную память», которая может использоваться несколькими процессами.
Общая память, созданная shm_open
настойчив. Он остается в системе до явного удаления процессом. Это имеет недостаток в том, что, если процесс вылетает и не сможет очистить общую память, он останется до отключения системы; этого ограничения не присутствует в специфической для андроиде реализации, названной ashmem
. [ 6 ]
POSIX также предоставляет mmap
API для отображения файлов в память; Сопоставление может быть обмен, что позволяет использовать содержимое файла в качестве общей памяти.
Распределения Linux, основанные на ядре 2.6, а затем и предлагаете /DEV /SHM в качестве общей памяти в виде диска оперативной памяти , в частности, в качестве всемирного каталога (каталог, в котором каждый пользователь системы может создавать файлы), который хранится в памяти. как Redhat , так и Debian Распределения включают его по умолчанию. Поддержка этого типа оперативной памяти является совершенно необязательной в файле конфигурации ядра . [ 7 ]
Поддержка в Windows
[ редактировать ]В окнах можно использовать CreateFileMapping
и MapViewOfFile
Функции для картирования области файла в память в нескольких процессах. [ 8 ]
Кроссплатформенная поддержка
[ редактировать ]Некоторые библиотеки C ++ предоставляют портативный и объектно-ориентированный доступ к общей функциональности памяти. Например, Boost содержит библиотеку Boost.InterProcess C ++ [ 9 ] и QT предоставляет класс QsharedMemory. [ 10 ]
Поддержка языка программирования
[ редактировать ]Для языков программирования с привязками POSIX (скажем, C/C ++), можно создать и доступ общие области памяти, вызывая функции, предоставленные операционной системой. Другие языки программирования могут иметь свои собственные способы использования этих операционных средств для аналогичного эффекта. Например, PHP предоставляет API для создания общей памяти, аналогично функциям POSIX . [ 11 ]
Смотрите также
[ редактировать ]- Распределенная память
- Распределенная общая память
- Общая графическая память
- Гетерогенная архитектура системы
- Глобальная переменная
- Нано-трюки
- Выполнить на месте
- Общий регистр
- Общие объекты снимка
- Фон Нейман Архитектура узкое место
Ссылки
[ редактировать ]- ^ Эль-Сурини, Хешам; Абд-Эль-Барр, Мостафа (2005). Усовершенствованная компьютерная архитектура и параллельная обработка . Wiley-Interscience. С. 77–80. ISBN 978-0-471-46740-3 .
- ^ Джеффри С. Чейз; Генри М. Леви; Майкл Дж. ФИЛИ; и Эдвард Д. Ласовский. «Обмен и защита в одной операционной системе пространства адреса» . Два : 10.1145/195792.195795 1993. П.
- ^ Документация SHM_OPEN из одной спецификации UNIX
- ^ Роббинс, Кей А.; Роббинс, Стивен (2003). Программирование систем UNIX: коммуникация, параллелизм и потоки (2 изд.). Prentice Hall Ptr. п. 512 . ISBN 978-0-13-042411-2 Полем Получено 2011-05-13 .
Коммуникация Posix Interprocess (IPC) является частью расширения POSIX: XSI и имеет свое происхождение в System V System V System V.
- ^ Общая память из отдельной спецификации UNIX.
- ^ «Особенности ядра Android» . elinux.org . Получено 12 декабря 2022 года .
- ^ Кристоф Рохланд; Хью Дикинс; Косаки Мотохиро. "Tmpfs.txt " Kernel.org Получено 2010-03-1
- ^ Создание названной общей памяти из MSDN.
- ^ Boost.InterProcess C ++ Библиотека
- ^ «Ссылка на класс QSharedMemory» .
- ^ Общие функции памяти в PHP-API
Внешние ссылки
[ редактировать ]- МПК: общая память Дейва Маршалла
- Общее введение памяти , гл. 12 Из книги Ричарда Стивенса "Unix Network Programming, том 2, второе издание: межпроцессная связь".
- Sharedhashfile , открытый исходный код, общая хеш -таблица памяти.