The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги ]

Каталог документации / Раздел "Документация для Linux" / Оглавление документа
next up previous contents index
Next: Создание разделяемых сегментов памяти Up: Разделяемые сегменты памяти Previous: Разделяемые сегменты памяти   Contents   Index

Использование разделяемых сегментов памяти

Прежде чем воспользоваться разделением памяти, нужно создать разделяемый сегмент с уникальным идентификатором и ассоциированную с ним структуру данных. Уникальный идентификатор называется идентификатором разделяемого сегмента памяти (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 Не используется

Состояния, упомянутые в таблице, таковы:

Системный вызов shmget аналогичен вызову semget (разумеется, с заменой слов ``множество семафоров'' на ``разделяемый сегмент памяти''). Он также предназначен для получения нового или опроса существующего идентификатора, а нужное действие определяется значением аргумента key. В аналогичных ситуациях shmget терпит неудачу. Единственное отличие состоит в том, что задается не число семафоров в множестве, а размер сегмента в байтах.

После того, как создан уникальный идентификатор разделяемого сегмента памяти и ассоциированная с ним структура данных, можно использовать системные вызовы семейства shmop (операции над разделяемыми сегментами) и shmctl (управление разделяемыми сегментами).



Alex Otwagin 2002-12-16

  Закладки на сайте
  Проследить за страницей
Created 1996-2017 by Maxim Chirkov  
ДобавитьРекламаВебмастеруГИД  
Hosting by Ihor