Чтение онлайн

на главную - закладки

Жанры

UNIX: взаимодействие процессов

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

Шрифт:
Имя Описание DUnix 4.0B Solaris 2.6
semmni Максимальное количество наборов семафоров в системе 16 10
semmsl Максимальное количество семафоров в наборе 25 25
semmns Максимальное количество семафоров в системе 400 60
semopm Максимальное количество операций за один вызов semop 10 10
semmnu Максимальное количество структур undo в системе 30
semume Максимальное количество записей в структуре undo 10 10
semvmx Максимальное значение семафора 32767 32767
semaem Максимальное значение корректировки при выходе 16384 16384

В Digital Unix 4.0B никакого ограничения на semmnu не существует.

Пример

Программа в листинге 11.7 позволяет определить ограничения, приведенные в табл. 11.1.

Листинг 11.7. Определение системных ограничений на семафоры System V

//svsem/limits.c

1 #include "unpipc.h"

2 /* максимальные величины, выше которых ограничение не проверяется */

3 #define MAX_NIDS 4096 /* максимальное количество идентификаторов семафоров */

4 #define MAX_VALUE 1024*1024 /* максимальное значение семафора */

5 #define MAX_MEMBERS 4096 /* максимальное количество семафоров в наборе */

6 #define MAX_NOPS 4096 /* максимальное количество операций за вызов semop */

7 #define MAX_NPROC Sysconf(_SC_CHILD_MAX)

8 int

9 main(int argc, char **argv)

10 {

11 int i, j, semid, sid[MAX_NIDS], pipefd[2];

12 int semmni, semvmx, semmsl, semmns, semopn, semaem, semume, semmnu;

13 pid_t *child;

14 union semun arg;

15 struct sembuf ops[MAX_NOPS];

16 /* сколько наборов с одним элементом можно создать? */

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

18 sid[i] = semget(IPC_PRIVATE, 1, SVSEM_MODE | IPC_CREAT);

19 if (sid[i] == –1) {

20 semmni = i;

21 printf("%d identifiers open at once\n", semmni);

22 break;

23 }

24 }

25 /* перед удалением находим максимальное значение, используя sid[0] */

26 for (j = 7; j < MAX_VALUE; j += 8) {

27 arg.val = j;

28 if (semctl(sid[0], 0, SETVAL, arg) == –1) {

29 semvmx = j – 8;

30 printf("max semaphore value = %d\n", semvmx);

31 break;

32 }

33 }

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

35 Semctl(sid[j], 0, IPC_RMID);

36 /* определяем максимальное количество семафоров в наборе */

37 for (i = 1; i <= MAX_MEMBERS; i++) {

38 semid = semget(IPC_PRIVATE, i, SVSEM_MODE | IPC_CREAT);

39 if (semid == –1) {

40 semmsl = i-1;

41 printf("max of %d members per set\n", semmsl);

42 break;

43 }

44 Semctl(semid, 0, IPC_RMID);

45 }

46 /* сколько всего семафоров можно создать? */

47 semmns = 0;

48 for (i = 0; i < semmni; i++) {

49 sid[i] = semget(IPC_PRIVATE, semmsl, SVSEM_MODE | IPC_CREAT);

50 if (sid[i] == –1) {

51 /*

52 До этого в наборе было semmsl элементов,

53 но теперь мы уменьшаем количество элементов на 1 и смотрим.

54 не получится ли создать семафор

55 */

56 for (j = semmsl-1; j > 0; j--) {

57 sid[1] = semget(IPC_PRIVATE, j, SVSEM_MODE | IPC_CREAT);

58 if (sid[i] != –1) {

59 semmns += j;

60 printf("max of %d semaphores\n", semmns);

61 Semctl(sid[i], 0, IPC_RMID);

62 goto done;

63 }

64 }

65 err_quit("j reached 0, semmns = %d", semmns);

66 }

67 semmns += semmsl;

68 }

69 printf("max of %d semaphores\n", semns);

70 done:

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

72 Semctl(sid[j], 0, IPC_RMID);

73 /* определяем количество операций за вызов semop */

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

Выйду замуж за спасателя

Рам Янка
1. Спасатели
Любовные романы:
современные любовные романы
7.00
рейтинг книги
Выйду замуж за спасателя

Пушкарь. Пенталогия

Корчевский Юрий Григорьевич
Фантастика:
альтернативная история
8.11
рейтинг книги
Пушкарь. Пенталогия

Газлайтер. Том 5

Володин Григорий
5. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 5

Вперед в прошлое 6

Ратманов Денис
6. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 6

Гримуар темного лорда II

Грехов Тимофей
2. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Гримуар темного лорда II

Вторая жизнь майора. Цикл

Сухинин Владимир Александрович
Вторая жизнь майора
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Вторая жизнь майора. Цикл

На цепи

Уваров
1. На цепи
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
На цепи

Журнал «Если», 2002 № 08

Андерсон Кевин Джей
114. Журнал Если
Фантастика:
научная фантастика
5.00
рейтинг книги
Журнал «Если», 2002 № 08

Проклятье бездны

Трофимов Ерофей
4. Бродяга
Фантастика:
боевая фантастика
5.00
рейтинг книги
Проклятье бездны

Студент из прошлого тысячелетия

Еслер Андрей
2. Соприкосновение миров
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Студент из прошлого тысячелетия

Неучтенный элемент. Том 6

NikL
6. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Неучтенный элемент. Том 6

Родословная. Том 4

Ткачев Андрей Юрьевич
4. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Родословная. Том 4

Адвокат

Константинов Андрей Дмитриевич
1. Бандитский Петербург
Детективы:
боевики
8.00
рейтинг книги
Адвокат

Вперед в прошлое 8

Ратманов Денис
8. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 8