पीआईडी ​​कैसे उत्पन्न होते हैं?


42

* निक्स पर, पीआईडी ​​चलने वाली प्रक्रियाओं के लिए विशिष्ट पहचानकर्ता हैं। पीआईडी ​​कैसे उत्पन्न होते हैं? क्या यह सिर्फ एक पूर्णांक है जो बढ़ जाता है या एक अधिक जटिल संरचना जैसे कि एक सूची? वे कैसे पुनर्नवीनीकरण करते हैं? रीसाइक्लिंग से मेरा मतलब है कि, जब एक प्रक्रिया समाप्त हो जाती है, तो यह पीआईडी ​​अंततः एक अन्य प्रक्रिया द्वारा पुन: उपयोग किया जाएगा।


जवाबों:


39

जैसा कि विकिपीडिया कहता है,

यूनिक्स के तहत, प्रक्रिया आईडी आमतौर पर एक अनुक्रमिक आधार पर आवंटित की जाती है, 0 से शुरू होती है और एक अधिकतम मूल्य तक बढ़ती है जो सिस्टम से सिस्टम में भिन्न होती है। एक बार जब यह सीमा समाप्त हो जाती है, तो आवंटन शून्य पर फिर से शुरू हो जाता है और फिर से बढ़ जाता है। हालाँकि, इसके लिए और बाद में किसी भी पीआईडी ​​को अभी भी प्रक्रियाओं को सौंपा गया है, को छोड़ दिया जाता है।

इसलिए यह वास्तव में "पीढ़ी" के लिए एक बहुत ही सरल नीति है, बस एक वेतन वृद्धि और "पुनर्चक्रण", बस संख्या को अधिकतम मूल्य पर चारों ओर लपेटें और वेतन वृद्धि को तब तक जारी रखें जब तक आपको एक संख्या नहीं मिलती जो एक प्रक्रिया को सौंपा गया था जो समाप्त हो गया है और है प्रक्रिया तालिका से हटा दिया गया है।

कुछ यूनिक्स कार्यान्वयन जैसे कि AIX एक नीति का उपयोग करता है जो कम सरल है, उदाहरण के लिए यह अक्सर पूछे जाने वाले प्रश्न देखें


जवाब के लिए धन्यवाद। वैसे, वास्तव में यह AIX नीति "कम सरल है" क्या है?

1
@ हेल्टोन, मुझे नहीं लगता कि AIX दस्तावेज़ वास्तव में क्या नीति का उपयोग करता है (इसलिए यह किसी भी रिलीज में बदल सकता है), लेकिन आप इसे उपयुक्त रेंज में एक यादृच्छिक संख्या पीढ़ी के रूप में सोच सकते हैं (जो एक पीआईडी ​​उत्पन्न होने तक दोहराया जाता है। वर्तमान में उपयोग में नहीं है)।
एलेक्स मार्टेली

यह एल्गोरिथ्म मुझे थोड़ा समस्याग्रस्त लगता है। आप यह कैसे सुनिश्चित करते हैं कि आप गतिरोध में न चलें? और क्या कोई प्रदर्शन समस्या नहीं है?

1
कर्नेल नियंत्रण में है और उसे कुछ भी लॉक करने की आवश्यकता नहीं है, तो यह गतिरोध कैसे हो सकता है? हां, भुगतान करने के लिए एक छोटा सा प्रदर्शन मूल्य है (कांटा समय पर एक अतिरिक्त अतिरिक्त ओवरहेड - एक बधाई PRNG या / dev / urandom पढ़ने के लिए कुछ दर्जन मशीन निर्देशों का कहना है, बनाम एक काउंटर-वृद्धि के लिए बहुत कम), लेकिन यह हमेशा होता है सुरक्षा में सुधार के इरादे से किए गए उपायों के लिए उदाहरण के लिए सादे HTTP बनाम HTTPS संचार के सीपीयू ओवरहेड की जांच करें;;
एलेक्स मार्टेली

मेरा मतलब लाइवलॉक ( while(true);) था, क्षमा करें, मैं जल्दी जवाब दे रहा था ;-)

11

ये बदलता रहता है।

अधिकांश प्रणालियाँ केवल पिछली PID की एक गणना रखती हैं, एक को जोड़ते हैं (अधिकतम संख्या में जैसे कि ५५५३५ या थोड़ा छोटा - अक्सर रैप ६५००० या ६०००० पर होता है), और जाँच करें कि संख्या वर्तमान में उपयोग में नहीं है ( यदि पीआईडी ​​अभी भी उपयोग में है, तो दोहराते हैं - इसलिए पीआईडी ​​1, कर्नेल, अभी भी है और 'पुनः प्राप्त नहीं होता')।

अन्य सुरक्षा दिमाग सिस्टम यादृच्छिक पर एक संख्या उत्पन्न करते हैं और जांचते हैं कि यह उपयोग में नहीं है।

किसी भी समय, यह गारंटी है कि सभी पीआईडी ​​नंबर अद्वितीय हैं।


9

प्रश्न के पुनर्चक्रण भाग के रूप में, एक बात ध्यान में रखना है कि एक पिड उपलब्ध नहीं होता है जैसे ही उस पिड के साथ प्रक्रिया समाप्त हो जाती है। जब तक उस प्रक्रिया के माता-पिता प्रतीक्षा () सिस्टम कॉल के कुछ फार्म के माध्यम से अपने बच्चे की समाप्ति की स्थिति एकत्र नहीं करते, तब तक पीड़ उपलब्ध नहीं होता है। एक बच्चा जो समाप्त हो गया है, लेकिन जिसके माता-पिता ने प्रतीक्षा जारी नहीं की है, उसे ज़ोंबी कहा जाता है और आमतौर पर पीएस में दोष के रूप में दिखाई देगा। एक बीमार व्यवहार वाले माता-पिता के लिए यह संभव है कि वे बच्चों को लॉन्च करें और इंतजार न करें () उनके लिए, सिस्टम की भूख को शांत करें।

यदि किसी बच्चे की स्थिति जमा करने से पहले प्रक्रिया के माता-पिता की मृत्यु हो जाती है, तो यह ठीक है। बच्चे को init द्वारा विरासत में मिला है जो सुनिश्चित करेगा कि एक प्रतीक्षा () जारी की गई है और पीड को पुनर्नवीनीकरण किया गया है।


यह एक बहुत महत्वपूर्ण विवरण है। इसके बिना भी एक सरल और myprog &उसके बाद wait $!यूबी होगा।
एंड्रियास

3

वे अनुक्रम संख्या और रैप राउंड (OS-विशिष्ट मूल्य पर) हैं यदि सिस्टम काफी लंबे समय तक है। जब तक वे बिंदु पर मुक्त नहीं हो जाते हैं, संख्याओं का पुन: उपयोग नहीं किया जाता है fork()

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.