कोई भी ऑड-ईवन विंडोज प्रोसेस आईडी क्यों नहीं हैं?
यदि आप विंडोज के साथ छेड़छाड़ करना पसंद करते हैं और जाते-जाते सीखते हैं, तो आपने देखा होगा कि विंडोज प्रक्रिया और थ्रेड आईडी भी समान हैं और चार के गुणक हैं। ऐसा क्यों है? आज के SuperUser Q & A पोस्ट में एक जिज्ञासु पाठक के सवालों के जवाब हैं.
आज का प्रश्न और उत्तर सत्र सुपरयूज़र के सौजन्य से आता है-स्टैक एक्सचेंज का एक उपखंड, क्यू एंड ए वेब साइटों का एक समुदाय-संचालित समूह है।.
प्रश्न
सुपरयूजर के पाठक पीटर हैन्डोर्फ जानना चाहते हैं कि कोई विषम संख्या वाली विंडोज प्रक्रिया आईडी क्यों नहीं है:
विंडोज में प्रोसेस आईडी देखने के कई तरीके हैं। PowerShell का उपयोग करना:
मुझे यह परिणाम मिले:
जैसा कि आप देख सकते हैं, सभी प्रक्रिया आईडी समान हैं, यही नहीं, वे सभी चार के गुणक हैं। आप जितना चाहें उतना मुश्किल देख सकते हैं और आपको कभी भी एक विषम-संख्या वाली प्रक्रिया आईडी नहीं मिलेगी, कम से कम किसी भी संस्करण पर नहीं जो कि Windows NT- आधारित है। इसका क्या कारण है?
कोई विषम संख्या वाली Windows प्रक्रिया ID क्यों नहीं हैं?
उत्तर
SuperUser योगदानकर्ता डेविडपोस्टिल का जवाब हमारे लिए है:
कोई विषम संख्या वाली Windows प्रक्रिया ID क्यों नहीं हैं?
समान कोड जो कर्नेल हैंडल आवंटित करता है, का उपयोग प्रक्रिया और थ्रेड आईडी आवंटित करने के लिए भी किया जाता है। चूंकि कर्नेल हैंडल चार में से कई हैं, इसलिए प्रक्रिया और थ्रेड आईडी हैं.
क्यों प्रक्रिया और थ्रेड आईडी चार के गुणक हैं?
विंडोज एनटी-आधारित ऑपरेटिंग सिस्टम पर, प्रक्रिया और थ्रेड आईडी हमेशा चार के कई होते हैं। क्या यह महज एक संयोग है?
हां, यह सिर्फ एक संयोग है, और आपको इस पर भरोसा नहीं करना चाहिए क्योंकि यह प्रोग्रामिंग अनुबंध का हिस्सा नहीं है। उदाहरण के लिए, विंडोज 95 प्रक्रिया और थ्रेड आईडी हमेशा चार के गुणक नहीं थे। तुलना करके, कारण कि कर्नेल हैंडल हमेशा चार में से कई होते हैं, विनिर्देश का हिस्सा होते हैं और भविष्य के लिए गारंटी दी जाएगी.
प्रक्रिया और थ्रेड आईडी कोड पुन: उपयोग के साइड-इफेक्ट के रूप में चार के गुणक हैं। समान कोड जो कर्नेल हैंडल आवंटित करता है, का उपयोग प्रक्रिया और थ्रेड आईडी आवंटित करने के लिए भी किया जाता है। चूंकि कर्नेल हैंडल चार के गुणक हैं, इसलिए प्रक्रिया और थ्रेड आईडी हैं। यह एक कार्यान्वयन विवरण है, इसलिए उस पर निर्भर रहने वाले कोड को न लिखें। मैं आपको केवल अपनी जिज्ञासा को संतुष्ट करने के लिए कह रहा हूं.
स्रोत: क्यों प्रक्रिया और थ्रेड आईडी चार के गुणक हैं?
कर्नेल हैंडल हमेशा चार में से कई क्यों होते हैं?
कुछ ऐसा जो बहुत अच्छी तरह से ज्ञात नहीं है कि कर्नेल हैंडल के नीचे के दो टुकड़े हमेशा शून्य होते हैं; दूसरे शब्दों में, उनका संख्यात्मक मान हमेशा चार का एक गुणक होता है। ध्यान दें कि यह केवल कर्नेल हैंडल पर लागू होता है; यह छद्म हैंडल या किसी अन्य प्रकार के हैंडल (USER हैंडल, GDI हैंडल, मल्टीमीडिया हैंडल, आदि) पर लागू नहीं होता है। कर्नेल हैंडल वे चीजें हैं जिन्हें आप CloseHandle फ़ंक्शन में पास कर सकते हैं.
कि कम से कम कर्नेल हैंडल के नीचे का हिस्सा हमेशा शून्य होता है GetQueuedCompletionStatus फ़ंक्शन द्वारा निहित होता है, जो इंगित करता है कि आप पूरा पोर्ट अधिसूचना को दबाने के लिए इवेंट हैंडल के निचले बिट सेट कर सकते हैं। इसके लिए काम करने के लिए, नीचे की तरफ का हिस्सा सामान्य रूप से शून्य होना चाहिए.
यह जानकारी अधिकांश एप्लिकेशन लेखकों के लिए उपयोगी नहीं है, जिन्हें अपारदर्शी मान के रूप में हैंडल का इलाज करना जारी रखना चाहिए। वे लोग जो टैग बिट्स में रुचि रखते हैं, वे हैं जो निम्न-स्तरीय कक्षा पुस्तकालयों को लागू कर रहे हैं या कर्नेल ऑब्जेक्ट्स को एक बड़े ढांचे के अंदर लपेट रहे हैं.
स्रोत: कर्नेल हैंडल हमेशा चार में से कई क्यों होते हैं?
आगे की पढाई
पुरानी नई बात: रेमंड चेन द्वारा विंडोज के विकास के दौरान व्यावहारिक विकास (Microsoft में प्रिंसिपल सॉफ्टवेयर डिज़ाइन इंजीनियर)
स्पष्टीकरण में कुछ जोड़ना है? टिप्पणियों में विचार व्यक्त करो। अन्य टेक-सेवी स्टैक एक्सचेंज उपयोगकर्ताओं से अधिक उत्तर पढ़ना चाहते हैं? पूरी चर्चा धागा यहाँ देखें.