Это очень специфично для Linux. Это не относится к Unix в целом.
Муру
Я бы предпочел использовать полное 64-битное целое число, чтобы вы могли гарантировать, что они никогда не будут использованы повторно. Повторное использование приводит к условиям гонки, когда значение идентификатора меняется между временем, когда вы его получаете и используете.
CodesInChaos,
Ответы:
34
Кажется, это чисто произвольный выбор. Это может быть что угодно, но кто - то один чувствовал 4000000 достаточно. Используйте источник :
/*
* A maximum of 4 million PIDs should be enough for a while.
* [NOTE: PID/TIDs are limited to 2^29 ~= 500+ million, see futex.h.]
*/
#define PID_MAX_LIMIT (CONFIG_BASE_SMALL ? PAGE_SIZE * 8 : \
(sizeof(long) > 4 ? 4 * 1024 * 1024 : PID_MAX_DEFAULT))
История с git, кажется, восходит к 2005 году, и ценность была в том, что, по крайней мере, так долго.
<mingo@elte.hu>
[PATCH] pid-max-2.5.33-A0
This is the pid-max patch, the one i sent for 2.5.31 was botched. I
have removed the 'once' debugging stupidity - now PIDs start at 0 again.
Also, for an unknown reason the previous patch missed the hunk that had
the declaration of 'DEFAULT_PID_MAX' which made it not compile ...
Однако Инго только добавил DEFAULT_PID_MAX. PID_MAX_LIMITбыл добавлен Линусом Торвальдсом в 2.5.37 :
<torvalds@home.transmeta.com>
Make pid_max grow dynamically as needed.
Оказывается, я неправильно прочитал журнал изменений.
diff -Nru a/include/linux/threads.h b/include/linux/threads.h
--- a/include/linux/threads.h Fri Sep 20 08:20:41 2002
+++ b/include/linux/threads.h Fri Sep 20 08:20:41 2002
@@ -17,8 +17,13 @@
#define MIN_THREADS_LEFT_FOR_ROOT 4
/*
- * This controls the maximum pid allocated to a process
+ * This controls the default maximum pid allocated to a process
*/
-#define DEFAULT_PID_MAX 0x8000
+#define PID_MAX_DEFAULT 0x8000
+
+/*
+ * A maximum of 4 million PIDs should be enough for a while:
+ */
+#define PID_MAX_LIMIT (4*1024*1024)
#endif
Это насколько мои навыки поиска получают меня.
Благодаря @hobbs кажется, что Инго - это кто-то, в конце концов. Патч, который я цитировал выше, был впервые отправлен им. Из сопровождающего его поста LKML :
объем памяти нового распределителя PID динамически масштабируется с помощью / proc / sys / kernel / pid_max: 32K PID по умолчанию вызывают выделение 4K, а pid_max, равный 1 миллиону, - 128К. Текущий абсолютный предел для pid_max составляет 4 миллиона PID - это не вызывает какого-либо выделения в ядре, битовые карты являются распределенными по времени выполнения. Таблица pidmap занимает 512 байт.
Была горячая дискуссия о том, чтобы иметь более высокие лимиты, но, похоже, в итоге ничего не вышло.
Вы можете получить git-репо с более глубокой историей Linux, подходящей для археологии, используя инструкции на stackoverflow.com/questions/3264283/… . Это приводит к появлению a5b5f6a "[PATCH] generic-pidhash-2.5.36-J2, BK-curr" Инго Молнара, который можно посмотреть здесь на LWN .
Хоббс
@hobbs потрясающе! Так ведь это от Инго Молнара. Интересно, почему Линус вступил во владение в журнале изменений.
Муру
1
@muru: Я считаю, что BitKeeper не поддерживает различие между коммиттером и автором, это был один из уроков, которые Линус применил при разработке Git. IIRC, Инго отказался использовать BitKeeper, поэтому он отправлял исправления по почте, и они были неправильно распределены в автоматически сгенерированных ChangeLogs для коммиттера, потому что BitKeeper не имеет отдельного понятия авторства. В любом случае, это мое предположение.
Йорг Миттаг,
@ JörgWMittag возможно. Теперь я думаю, что неправильно прочитал журнал изменений, и этот бит может быть о другом патче.
Муру
3
Цитата в конце этого ответа указывает на то, что причиной не выбора произвольно большого значения являются ограничения памяти. При 128 КБ ОЗУ на 1 М PID, использование даже 63 битов (оставляя знак бита), если бы я не испортил математику, потребовало бы миллион ТБ ОЗУ только для таблицы PID. Немного о высокой стороне для современных систем.
Ответы:
Кажется, это чисто произвольный выбор. Это может быть что угодно, но кто - то один чувствовал 4000000 достаточно. Используйте источник :
История с git, кажется, восходит к 2005 году, и ценность была в том, что, по крайней мере, так долго.
1 страница руководство говорит , что
/proc/sys/kernel/pid_max
было добавлено в 2.5.34, и , глядя на список изменений , похоже , что кто - то был Инго Молнар :Однако Инго только добавилDEFAULT_PID_MAX
.PID_MAX_LIMIT
был добавлен Линусом Торвальдсом в 2.5.37 :Оказывается, я неправильно прочитал журнал изменений.
Изменения в наборе патчей 2.5.37 :
Это насколько мои навыки поиска получают меня.
Благодаря @hobbs кажется, что Инго - это кто-то, в конце концов. Патч, который я цитировал выше, был впервые отправлен им. Из сопровождающего его поста LKML :
Была горячая дискуссия о том, чтобы иметь более высокие лимиты, но, похоже, в итоге ничего не вышло.
источник