Разделяемая память

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

Для того, чтобы сегмент памяти мог использоваться совместно, он должен быть сначала создан при помощи системного вызова 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:


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: