ทำไมไม่ 2 ^ 62 หรือ 2 ^ 31 หรืออย่างอื่นล่ะ
ทำไมไม่ 2 ^ 62 หรือ 2 ^ 31 หรืออย่างอื่นล่ะ
คำตอบ:
มันดูเหมือนจะเป็นทางเลือกโดยพลการอย่างแท้จริง อาจเป็นอะไรก็ได้ แต่บางคนที่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))
ประวัติศาสตร์เกี่ยวกับคอมไพล์ดูเหมือนจะย้อนกลับไปจนถึงปีพ. ศ. 2548 และคุณค่าก็คืออย่างน้อยก็นาน
1 manpageบอกว่า/proc/sys/kernel/pid_max
ถูกเพิ่มเข้ามาใน 2.5.34 และมองไปที่การเปลี่ยนแปลงจะมีลักษณะเหมือนใครบางคนเป็นIngo Molnár :
<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 ...
อย่างไรก็ตาม Ingo DEFAULT_PID_MAX
เพิ่มเฉพาะ PID_MAX_LIMIT
ถูกเพิ่มโดย Linus Torvalds ใน2.5.37 :
<torvalds@home.transmeta.com>
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 ที่มาพร้อมกับมัน:
footprint หน่วยความจำของตัวจัดสรร PID ใหม่จะปรับขนาดแบบไดนามิกด้วย / proc / sys / kernel / pid_max: ค่าเริ่มต้น 32K PIDs ทำให้เกิดการจัดสรร 4K, pid_max 1 ล้านทำให้เกิดรอย 128K ขีด จำกัด สัมบูรณ์ปัจจุบันสำหรับ pid_max คือ 4 ล้าน PID - นี่ไม่ทำให้เกิดการจัดสรรใด ๆ ในเคอร์เนลบิตแมปเป็นรันไทม์ที่จัดสรรตามความต้องการ ตาราง pidmap ใช้เวลามากถึง 512 ไบต์
มีการถกเถียงกันอย่างดุเดือดเกี่ยวกับการมีขีด จำกัด ที่สูงขึ้น แต่ดูเหมือนว่าไม่มีอะไรออกมาในตอนท้าย