Jump to content

Общая память

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

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

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

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

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

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

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

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

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

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

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

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

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

[ редактировать ]

В компьютерном программном обеспечении общая память либо

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

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

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

По сравнению с операционными системами с несколькими адресными пространствами, совместное использование памяти - особенно процедур совместного использования или структур на основе указателей - проще в операционных системах с одним адресным пространством . [ 2 ]

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

[ редактировать ]

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

Общая память, созданная shm_open является настойчивым. Он остается в системе до тех пор, пока не будет явно удален процессом. Недостаток этого подхода заключается в том, что если процесс выйдет из строя и не удастся очистить разделяемую память, он останется до завершения работы системы; это ограничение отсутствует в реализации для Android, получившей название ashmem. [ 6 ]

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

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

Поддержка в Windows

[ редактировать ]

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

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

[ редактировать ]

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

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

[ редактировать ]

Для языков программирования с привязками POSIX (например, C/C++) области общей памяти можно создавать и получать к ним доступ путем вызова функций, предоставляемых операционной системой. Другие языки программирования могут иметь свои собственные способы использования этих операционных средств для достижения аналогичного эффекта. Например, PHP предоставляет API для создания общей памяти, аналогично функциям POSIX . [ 11 ]

См. также

[ редактировать ]
  1. ^ Эль-Ревини, Хешам; Абд-эль-Барр, Мостафа (2005). Усовершенствованная компьютерная архитектура и параллельная обработка . Уайли-Интерсайенс. стр. 77–80. ISBN  978-0-471-46740-3 .
  2. ^ Джеффри С. Чейз; Генри М. Леви; Майкл Дж. Фили; и Эдвард Д. Лазовска. «Совместное использование и защита в операционной системе с единым адресным пространством» . два : 10.1145/195792.195795 1993. стр. 3
  3. ^ Документация shm_open из единой спецификации Unix.
  4. ^ Роббинс, Кей А.; Роббинс, Стивен (2003). Системное программирование Unix: связь, параллелизм и потоки (2-е изд.). Прентис Холл PTR. п. 512 . ISBN  978-0-13-042411-2 . Проверено 13 мая 2011 г. Межпроцессное взаимодействие POSIX (IPC) является частью расширения POSIX:XSI и берет свое начало в межпроцессном взаимодействии Unix System V.
  5. ^ Средство общей памяти из единой спецификации Unix.
  6. ^ «Функции ядра Android» . elinux.org . Проверено 12 декабря 2022 г.
  7. ^ Кристоф Роланд; Хью Дикинс; ЛОЖЬ Мотохиро. "tmpfs.txt " ядро.орг . Проверено 1 марта 2010 г.
  8. ^ Создание именованной общей памяти из MSDN.
  9. ^ Библиотека Boost.Interprocess C++
  10. ^ «Справочник по классу QSharedMemory» .
  11. ^ Функции общей памяти в PHP-API
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: bed4580f93adbf81d7927531d084c82d__1701278280
URL1:https://arc.ask3.ru/arc/aa/be/2d/bed4580f93adbf81d7927531d084c82d.html
Заголовок, (Title) документа по адресу, URL1:
Shared memory - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)