Справочник от Автор24
Найди эксперта для помощи в учебе
Найти эксперта
+2

Разделяемая память и семафоры

Определение 1

Разделяемая память и семафоры — это участок оперативной памяти, которая выделяется как ресурс, одновременно доступный нескольким процессам.

Введение

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

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

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

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

В течение довольно длительного периода времени проектировщики UNIX полагали, что в той сфере, для которой предназначена система UNIX (разработка программного обеспечения, подготовка и сопровождение технических документов и так далее) этих возможностей должно хватать. Но непрерывное распространение системы в другие сферы и относительная простота увеличения ее возможностей смогли привести к тому, что со временем в различных версиях UNIX в итоге возникла явно избыточная совокупность системных средств, которые предназначены для обеспечения возможности взаимодействия и синхронизации процессов, необязательно связанных отношением родства. В операционных системах UNIX эти средства, как правило, именуются IPC от Inter-Process Communícation Facílities. С выходом в свет UNIX System V Release 4.0 (и более старшей версии 4.2) все эти средства были подтверждены и включены в стандарт операционной системы UNIX современного образца.

«Разделяемая память и семафоры» 👇
Помощь эксперта по теме работы
Найти эксперта
Решение задач от ИИ за 2 минуты
Решить задачу
Найди решение своей задачи среди 1 000 000 ответов
Найти

Разделяемая память и семафоры

Пакет средств IPC имеет в своем составе следующие компоненты:

  1. Средства, которые обеспечивают возможность наличия общей для процессов памяти, то есть, сегментов разделяемой памяти (shared memory segments).
  2. Средства, которые обеспечивают возможность синхронизации процессов при доступе к совместно используемым ресурсам, таким как, разделяемая память, а именно, это семафоры (semaphores).
  3. Средства, которые обеспечивают возможность посылки процессом сообщений другому произвольному процессу, то есть, это очередь сообщений (message queues).

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

  1. Для каждого механизма выполняется поддержка общесистемной таблицы, компоненты которой описывают все существующие в данный момент представители механизма, то есть, конкретные сегменты, семафоры или очереди сообщений.
  2. Компонент таблицы обладает некоторым числовым ключом, который выступает как выбранное пользователем имя представителя соответствующего механизма. Иными словами, чтобы двум или более процессам было доступно использование некоторого механизма, они обязаны заранее договориться о том, какое имя присвоить используемому представителю этого механизма и обеспечить, чтобы тот же представитель не мог быть использован другими процессами.
  3. Процесс, который желает начать использование одного из механизмов, должен обратиться к системе с системным вызовом из семейства «get», основными параметрами которого считается ключ объекта и дополнительные флаги, а ответным параметром должен быть числовой дескриптор, применяемый в последующих системных вызовах подобно тому, как применяется дескриптор файла при работе с файловой системой.
  4. Защита доступа к раньше сформированным компонентам таблицы каждого механизма основана на тех же принципах, что и защита доступа к файлам.

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

  1. Системный вызов shmget, который способен создать новый сегмент разделяемой памяти или найти существующий сегмент, имеющий такой же ключ.
  2. Системный вызов shmat, который способен подключить сегмент с указанным дескриптором к виртуальной памяти обращающегося процесса.
  3. Системный вызов shmdt, который способен отключить от виртуальной памяти подключенный раньше к ней сегмент с указанным виртуальным адресом начала.
  4. Системный вызов shmctl, который предназначен для управления различными параметрами, сопряженными с существующим сегментом.

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

Воспользуйся нейросетью от Автор24
Не понимаешь, как писать работу?
Попробовать ИИ
Дата написания статьи: 16.08.2022
Найди решение своей задачи среди 1 000 000 ответов
Крупнейшая русскоязычная библиотека студенческих решенных задач
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot