Операции с разделяемой памятью позволяют двум и более процессам совместно использовать область физической памяти (общеизвестно, что обычно области данных любых двух программ совершенно отделены друг от друга). Чаще всего разделяемая память является наиболее производительным механизмом межпроцессного взаимодействия.
Для того, чтобы сегмент памяти мог использоваться совместно, он должен быть сначала создан при помощи системного вызова shmget. После создания сегмента разделяемой памяти процесс может подключаться к нему при помощи вызова shmat и затем использовать его для своих частных целей. Когда этот сегмент памяти больше не нужен, процесс может отключиться от него при помощи вызова shmdt.
Системный вызов shmget
Сегменты разделяемой памяти создаются при помощи вызова shmget.
Описание
#include <sys/shm.h>
int shmget(key_t key, size_t size, int permflags);
Этот вызов аналогичен вызовам msgget и semget. Наиболее интересным параметром вызова является size,который задает требуемый минимальный размер (в байтах) сегмента памяти. Параметр key является значением ключа сегмента памяти, параметр permflags задает права доступа к сегменту памяти и, кроме того, может содержать флаги IPC_CREAT и IPC_EXCL.
|
|
Операции с разделяемой памятью: вызовы shmat и shmdt
Сегмент памяти, созданный вызовом shmget, является участком физической памяти и не находится в логическом пространстве данных процесса. Для использования разделяемой памяти текущий процесс, а также все другие процессы, взаимодействующие с этим сегментом, должны явно подключать этот участок памяти к логическому адресному пространству при помощи вызова shmat: