Вход/Регистрация
UNIX: взаимодействие процессов
вернуться

Стивенс Уильям Ричард

Шрифт:

solaris % shmget shmget 1234

solaris % ipcs –bmo

IPC status from <running system> as of Thu Jan 8 13:17:06 1998

T ID KEY MODE OWNER GROUP NATTCH SEGSZ

Shared Memory:

m 1 0x0000f12a –rw-r--r-- rstevens other1 0 1234

Программу ipcs мы запускаем для того, чтобы убедиться, что сегмент разделяемой памяти действительно был создан и не был удален по завершении программы shmcreate. Количество подключений (хранящееся в поле shm_nattch структуры shmid_ds) равно нулю, как мы и предполагали.

Теперь запустим пpoгрaммy shmwrite, чтобы заполнить содержимое разделяемой памяти последовательностью значений. Затем проверим содержимое сегмента разделяемой памяти программой shmread и удалим этот сегмент:

solaris % shmwrite shmget

solaris % shmread shmget

solaris % shmrmid shmget

solaris % ipes –bmo

IPC status from <running system> as of Thu Jan 8 13:17:06 1998

T ID KEY MODE OWNER GROUP NATTCH SEGSZ

Shared Memory:

Мы используем программу ipcs, чтобы убедиться, что сегмент разделяемой памяти действительно был удален.

ПРИМЕЧАНИЕ

При использовании имени исполняемого файла сервера в качестве аргумента ftok для идентификации какого-либо вида IPC System V обычно передается полное имя этого файла (например, /usr/bin/myserverd), а не часть имени, как сделано у нас (shmget). У нас не возникло проблем в этом примере, потому что все программы запускались из того же каталога, в котором был расположен исполняемый файл сервера. Вы помните, что функция ftok использует номер i-node файла для формирования ключа IPC и ей безразлично, определяется файл своим полным именем или его частью (относительным именем). 

14.7. Ограничения, накладываемые на разделяемую память

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

Таблица 14.1. Типичные значения ограничений, накладываемых на разделяемую память System V

Имя Описание DUnix 4.0B Solaris 2.6
shmmax Максимальный размер сегмента в байтах 4194304 1048576
shmmnb Минимальный размер сегмента разделяемой памяти в байтах 1 1
shmmni Максимальное количество идентификаторов разделяемой памяти в системе 128 100
shmseg Максимальное количество сегментов, подключенных к процессу 32 6

Пример

Программа в листинге 14.5 определяет значения четырех ограничений, приведенных в табл. 14.1.

Листинг 14.5. Определение системных ограничений на разделяемую память

//svshm/limits.c

1 #include "unpipc.h"

2 #define MAX_NIDS 4096

3 int

4 main(int argc, char **argv)

5 {

6 int i, j, shmid[MAX_NIDS];

7 void *addr[MAX_NIDS];

8 unsigned long size;

9 /* проверка максимального количества открываемых идентификаторов */

10 for (i = 0; i <= MAX_NIDS; i++) {

11 shmid[i] = shmget(IPC_PRIVATE, 1024, SVSHM_MODE | IPC_CREAT);

12 if (shmid[i]== –1) {

13 printf("%d identifiers open at once\n", i);

14 break;

15 }

16 }

17 for (j = 0; j < i; j++)

18 Shmctl(shmid[j], IPC_RMID, NULL);

19 /* определяем максимальное количество подключаемых сегментов */

20 for (i=0;i <= MAX_NIDS; i++) {

21 shmid[i] = Shmget(IPC_PRIVATE, 1024, SVSHM_MODE | IPC_CREAT);

22 addr[i] = shmat(shmid[i], NULL, 0);

23 if (addr[i] == (void *) –1) {

24 printf("%d shared memory segments attached at once\n", i);

  • Читать дальше
  • 1
  • ...
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171
  • 172
  • 173
  • 174
  • ...

Ебукер (ebooker) – онлайн-библиотека на русском языке. Книги доступны онлайн, без утомительной регистрации. Огромный выбор и удобный дизайн, позволяющий читать без проблем. Добавляйте сайт в закладки! Все произведения загружаются пользователями: если считаете, что ваши авторские права нарушены – используйте форму обратной связи.

Полезные ссылки

  • Моя полка

Контакты

  • chitat.ebooker@gmail.com

Подпишитесь на рассылку: