64비트 Linux 시스템에서 PID의 최대값이 2^22인 이유는 무엇입니까?

64비트 Linux 시스템에서 PID의 최대값이 2^22인 이유는 무엇입니까?

2^62, 2^31 또는 다른 것이 아닌 이유는 무엇입니까?

프로세스 ID의 최대값은 얼마입니까?

답변1

이는 순전히 임의적인 선택처럼 보입니다. 무엇이든 될 수 있지만 누군가는 4백만이면 충분하다고 느꼈습니다 .소스 코드 사용:

/*
 * 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년으로 거슬러 올라가며 그 가치는 적어도 그만큼 오래되었습니다.


1맨페이지이것이 /proc/sys/kernel/pid_max2.5.34에 추가되었다고 말하고 확인하십시오.변경 로그,처럼 생겼어누구예전에는잉고 몰나르:

<[email protected]>
    [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 ...

그러나 Ingo는 방금 DEFAULT_PID_MAX. PID_MAX_LIMITLinus Torvalds에 의해 추가됨2.5.37:

<[email protected]>
    Make pid_max grow dynamically as needed.

제가 변경 로그를 잘못 읽은 것으로 나타났습니다.

변화는2.5.37 패치 세트:

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님 감사합니다. Ingo가 그런 것 같네요.누구결국. 위에서 인용한 패치는 그가 먼저 보낸 패치였습니다. ~에서LKML 게시물동반하려면:

새로운 PID 할당자의 메모리 공간은 /proc/sys/kernel/pid_max에 따라 동적으로 확장됩니다. 기본 32K PID는 4K 할당이 되고, pid_max가 100만이면 128K 공간이 됩니다. 현재 pid_max의 절대 제한은 400만 PID입니다. 이로 인해 커널에 할당이 발생하지 않으며 비트맵은 런타임 시 요청에 따라 할당됩니다. pidmap 테이블은 512바이트를 차지합니다.

더 높은 한도에 대해 열띤 논의가 있었지만 결국 아무 것도 나오지 않은 것 같습니다.

관련 정보