64-बिट लिनक्स सिस्टम 2 ^ 22 में अधिकतम पीआईडी ​​क्यों है?


22

2 ^ 62 या 2 ^ 31 या कुछ और क्यों नहीं?

प्रक्रिया आईडी का अधिकतम मूल्य क्या है?


2
यह है? आपका स्रोत क्या है?
मुरु


यह लिनक्स के लिए बहुत विशिष्ट है। यह सामान्य रूप से यूनिक्स पर लागू नहीं होता है।
मुरु

मैंने पूर्ण 64 बिट पूर्णांक का उपयोग करना पसंद किया होगा, इस तरह से आप गारंटी दे सकते हैं कि वे कभी भी पुन: उपयोग न करें। पुन: उपयोग करने से दौड़ की स्थिति पैदा होती है जहां एक आईडी का अर्थ उस समय के बीच बदल जाता है जब आप इसे प्राप्त करते हैं और इसका उपयोग करते हैं।
कोडइन्चोस

जवाबों:


34

यह एक विशुद्ध रूप से मनमाना विकल्प लगता है। यह कुछ भी हो सकता है, लेकिन किसी को 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))

जीआईटी पर इतिहास केवल 2005 तक वापस जाने के लिए लगता है, और मूल्य यह है कि कम से कम लंबे समय तक।


1 मैनपेज कि कहते हैं /proc/sys/kernel/pid_max2.5.34 में जोड़ा गया है, और को देखकर बदलाव का , यह कैसा दिखता किसी था इंगो मोल्नार :

<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_MAXPID_MAX_LIMITलिनुस टोरवाल्ड्स द्वारा 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

जहां तक ​​मेरे खोज कौशल की बात है, तो मुझे।


@ थॉट्स के लिए धन्यवाद, ऐसा लगता है कि इंगो सभी के बाद कोई है । मैंने जो पैच ऊपर उद्धृत किया था, वह सबसे पहले उसके द्वारा भेजा गया था। इसके साथ LKML पोस्ट से :

नए पीआईडी ​​आवंटनकर्ता की मेमोरी पदचिह्न गतिशील रूप से / proc / sys / k गिरी / pid_max के साथ: डिफ़ॉल्ट 32K PIDs एक 4K आवंटन का कारण बनता है, 1 मिलियन का एक pid_max 128K पदचिह्न का कारण बनता है। Pid_max के लिए वर्तमान पूर्ण सीमा 4 मिलियन PID है - इससे कर्नेल में कोई आवंटन नहीं होता है, बिटमैप मांग-आवंटित रनटाइम हैं। पिडमैप टेबल 512 बाइट्स लेती है।

उच्च सीमा होने के बारे में एक गर्म चर्चा थी, लेकिन ऐसा लगता है कि अंत में इससे कुछ भी नहीं निकला।


2
आप stackoverflow.com/questions/3264283/… पर निर्देशों का उपयोग करके, पुरातत्व के लिए उपयुक्त लिनक्स के गहन इतिहास के साथ एक git रेपो प्राप्त कर सकते हैं । इनेगो मोलनार द्वारा a5b5f6a "[PATCH] जेनेरिक-पीडश-2.5.36-J2, BK-वक्र" को देखा गया, जो LWN पर यहां देखने योग्य है
हॉब्स

@ लबों का कमाल! तो यह इंगो मोलनार से है। मुझे आश्चर्य है कि लिनस ने चैंज में स्वामित्व क्यों लिया।
मुरु

1
@ मुरु: मेरा मानना ​​है कि बिटकाइपर कमिटेटर और लेखक के बीच के अंतर का समर्थन नहीं करता है, यह लिनस द्वारा लागू किए गए पाठों में से एक था जब उन्होंने गिट डिजाइन किया था। IIRC, Ingo ने BitKeeper का उपयोग करने से इनकार कर दिया, इसलिए उसने प्रति मेल पैच भेजे, और वे ऑटो जनरेट किए गए ChangeLogs में कम्यूटेटर के लिए गलत पहचान गए, क्योंकि BitKeeper के पास लेखकों की कोई अलग धारणा नहीं है। वैसे भी मेरा अनुमान है।
जोर्ग डब्ल्यू मित्तग

@ JörgWMittag संभव। अब मैं सोच रहा हूं कि मैं चैंज को गलत बताऊं और वह बिट एक अलग पैच के बारे में हो सकता है।
मुरु

3
इस उत्तर के अंत के पास उद्धरण इंगित करता है कि मनमाने ढंग से बड़े मूल्य नहीं लेने का कारण स्मृति की कमी है। 128 KB रैम प्रति 1M PID पर, यहां तक ​​कि 63 बिट (साइन बिट को छोड़कर) का उपयोग करते हुए, अगर मैंने गणित को बॉट नहीं किया, तो बस PID तालिका के लिए एक लाख TB RAM की आवश्यकता होगी। वर्तमान प्रणालियों के लिए उच्च पक्ष पर थोड़ा।
एक सीवीएन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.