| |
Прежде чем воспользоваться разделением памяти, нужно создать разделяемый сегмент с уникальным идентификатором и ассоциированную с ним структуру данных. Уникальный идентификатор называется идентификатором разделяемого сегмента памяти (shmid); он используется для обращений к ассоциированной структуре данных, которая определяется следующим образом:
struct shmid_ds { struct ipc_perm shm_perm; /* Структура прав на выполнение операций */ int shm_segsz; /* Размер сегмента */ struct region *shm_reg; /* Указатель на структуру области памяти */ char pad [4]; /* Информация для подкачки */ ushort shm_lpid; /* Ид-р процесса, вып. последнюю операцию */ ushort shm_cpid; /* Ид-р процесса, создавшего сегмент */ ushort shm_nattch; /* Число присоединивших сегмент */ ushort shm_cnattch; /* Число удерживающих сегмент в памяти */ time_t shm_atime; /* Время последнего присоединения */ time_t shm_dtime; /* Время последнего отсоединения */ time_t shm_ctime; /* Время последнего изменения */ };(см. включаемый файл
<sys/shm.h>
).
Следующая таблица содержит информацию о возможных состояниях разделяемых сегментов памяти:
Бит удержания | Бит подкачки | Бит размещения | Состояние |
0 | 0 | 0 | Неразмещенный сегмент |
0 | 0 | 1 | В памяти |
0 | 1 | 0 | Не используется |
0 | 1 | 1 | На диске |
1 | 0 | 0 | Не используется |
1 | 0 | 1 | Удержан в памяти |
1 | 1 | 0 | Не используется |
1 | 1 | 1 | Не используется |
Состояния, упомянутые в таблице, таковы:
После того, как создан уникальный идентификатор разделяемого сегмента памяти и ассоциированная с ним структура данных, можно использовать системные вызовы семейства shmop (операции над разделяемыми сегментами) и shmctl (управление разделяемыми сегментами).
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |