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
рейтинг книги
Вперед в прошлое 6
6. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Гримуар темного лорда II
2. Гримуар темного лорда
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Вторая жизнь майора. Цикл
Вторая жизнь майора
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
На цепи
1. На цепи
Старинная литература:
прочая старинная литература
5.00
рейтинг книги
Журнал «Если», 2002 № 08
114. Журнал Если
Фантастика:
научная фантастика
5.00
рейтинг книги
Проклятье бездны
4. Бродяга
Фантастика:
боевая фантастика
5.00
рейтинг книги
Студент из прошлого тысячелетия
2. Соприкосновение миров
Фантастика:
героическая фантастика
попаданцы
аниме
5.00
рейтинг книги
Неучтенный элемент. Том 6
6. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Родословная. Том 4
4. Линия крови
Фантастика:
городское фэнтези
аниме
фэнтези
5.00
рейтинг книги
Адвокат
1. Бандитский Петербург
Детективы:
боевики
8.00
рейтинг книги
Вперед в прошлое 8
8. Вперед в прошлое
Фантастика:
попаданцы
альтернативная история
5.00