फ़ाइलों पर लागू होने पर मूल रूप से चिपचिपा सा क्या हुआ?


65

विभिन्न स्थानों पर आजकल कोई भी "गलत सा" आरोप लगा सकता है कि वह एक पूर्ण मिथ्या नाम है, क्योंकि इसकी कार्यक्षमता आजकल निर्देशिकाओं पर लिखने की अनुमति को प्रभावित करने और प्रतिबंधित विलोपन ध्वज के रूप में कार्य करने के लिए है ।

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

इस सवाल का संकेत दिया:

क्या था एक चिपचिपा सा एक निष्पादन के लिए लागू करते हैं? क्या यह तब सेतुबंध जैसा था?

भूत काल पर ध्यान दें। यह नहीं है कि चिपचिपा बिट कैसे काम करता है? अभी। यह तब काम करता था।


3
मैं यह बताना चाहता हूं कि "मैंने देखा कि वास्तव में आधुनिक प्रणालियां व्यवहार में लगती हैं कि इसे कभी भी फाइलों पर लागू न करें" केवल कुछ प्रणालियों के लिए सही है। चिपचिपे बिट नोटों पर विकिपीडिया का पृष्ठ , "वर्तमान में, यह व्यवहार केवल HP-UX और UnixWare में ऑपरेटिव है।" इसमें विभिन्न कार्यान्वयनों को दर्शाने वाला एक चार्ट है: सामान्य धागा ऑपरेटिंग सिस्टम को अनदेखा कर रहा है, या स्मृति / स्वैप / आदि की पहचान करने के लिए इसका इलाज कर रहा है। संभाला जाना चाहिए। ऑपरेटिंग सिस्टम के बीच किस तरह से उपयोग किया गया था इसका विवरण अलग-अलग है। उदाहरण के लिए, किसी भी लिनक्स सिस्टम ने कभी भी जेडीबीपी के जवाब की तरह चिपचिपा सा प्रयोग नहीं किया।
TOOGAM

जवाबों:


91

नहीं, चिपचिपा बिट सेट-यूआईडी या सेट-जीआईडी ​​झंडे की तरह नहीं था। क्रेडेंशियल्स को संसाधित करने के लिए किसी भी परिवर्तन को प्रभावित नहीं किया।

स्टिकी बिट ने जो किया वह प्रोग्राम टेक्स्ट "स्टिकी" था। यह मूल रूप से एक मिथ्या नाम नहीं था।

बैकग्राउंड: प्रोग्राम इमेज सेक्शन और शेयर्ड टेक्स्ट

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

इन्हें "अनुभाग" के रूप में जाना जाता संग्रह में वर्गीकृत किया गया है और उनके पारंपरिक नाम हैं। मशीन कोड और (कभी-कभी) स्थिरांक एक प्रोग्राम छवि के "टेक्स्ट" खंड के रूप में जाना जाता है। गैर-शून्य-आरंभिक चर, इसी तरह, "डेटा" अनुभाग है; और शून्य-आरंभीकृत और असिंचित चर "bss" (एक ऐसा नाम है जिसका अपने आप में एक पूरा लोककथा इतिहास है)।

जब एक प्रक्रिया में एक प्रोग्राम निष्पादन योग्य छवि फ़ाइल लोड होती है, तो विभिन्न भागों - पाठ, डेटा और bss - को छवि फ़ाइल की सामग्री से आरंभ किया जाता है।

"पाठ" अनुभाग के बारे में विशेष बात यह है कि मशीन कोड (और स्थिरांक) लगभग हमेशा नहीं लिखा जाता है। इसमें सभी निष्पादन प्रक्रिया की आभासी मेमोरी छवियों को साझा करने की क्षमता है जो उस निष्पादन योग्य छवि फ़ाइल को उनमें लोड किया गया था। सटीक परिदृश्य जिसमें प्रोग्राम टेक्स्ट को साझा किया जा सकता है, वह इस उत्तर के दायरे से बाहर है और इसमें लोडर फिक्सअप इडम्पोटेंस और एड्रेस स्पेस लेआउट पहचान जैसी चीजें शामिल हैं। लोग इस विषय के बारे में किताबें भी लिख सकते हैं और लिख भी सकते हैं। ☺

साझा पाठ कर्नेल द्वारा नियोजित एक अनुकूलन है। यह एक एकल रनिंग प्रोग्राम इमेज की प्रत्येक आवृत्ति की अपनी व्यक्तिगत मेमोरी इमेज की आवश्यकता को दूर करता है, सटीक भौतिक मशीन की एक ही कोड (और स्थिरांक) की कई प्रतियों के साथ कीमती भौतिक मेमोरी का उपभोग करता है।

चिपचिपा पाठ

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

स्टिकी टेक्स्ट इस विचार को उन छवियों को प्रोग्राम करने के लिए विस्तारित करता है जो वर्तमान में कोई प्रक्रिया नहीं चल रही है । यदि निष्पादन योग्य छवि फ़ाइल को चिपचिपा पाठ के रूप में चिह्नित किया जाता है, तो कर्नेल अपने पाठ खंड को अंतिम प्रक्रिया के बाद उसके बाहर रखने के लिए इधर-उधर रखता है; इस उम्मीद में कि कार्यक्रम का एक और उदाहरण जल्द ही निष्पादित होगा, और सिर्फ खंड में वापस संलग्न कर सकता है।

प्रारंभिक यूनियनों में, लोड किए गए चिपचिपे टेक्स्ट सेगमेंट को स्वैप स्टोरेज के लिए स्वैप किया जाएगा, जब कोई प्रक्रिया उनसे जुड़ी नहीं थी। (बाद में यूनियनों ने इसके लिए स्वैप का उपयोग करना बंद कर दिया।) आपने शायद इसे सहेजे गए नाम से भी सुना होगा ।

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

प्रयोग-हीनता

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

निष्पादन योग्य प्रोग्राम छवियों के लिए चिपचिपा पाठ बिट्स के दिन लंबे चले गए हैं। निष्पादन योग्य कार्यक्रम की छवियों के लिए एक स्पष्ट चिपचिपा पाठ मार्कर ध्वज को 1980 के दशक के मध्य में 4.3BSD के लेखकों द्वारा अप्रचलित माना गया था, उदाहरण के लिए।

आगे की पढाई

  • मौरिस जे। बाख (1986)। UNIX ऑपरेटिंग सिस्टम का डिज़ाइन । शागिर्द कक्ष। आईएसबीएन 9780132017992

1
बहुत अच्छा जवाब! आज मैंने कुछ सीखा। :)
एंड्रियास विसे

मुझे भी :) यह बहुत कुछ लगता है जैसे कि मुझे TSRडॉस दिनों में एक के रूप में क्या पता था - "समाप्त करें और निवास करें"। हालाँकि, यह आमतौर पर डिवाइस ड्राइवर्स जैसी चीजों के लिए होता था, जो अन्य प्रक्रियाओं को चलाने के लिए बाद में कॉल करने की आवश्यकता होती है, और संभवत: अप्रचलित है जब दुनिया मल्टी-थ्रेडेड / मल्टी-प्रोसेस OSes में चली गई।
स्टीव

1
यह एक कमाल का जवाब है। मैं कहाँ की उत्पत्ति के बारे में पढ़ सकता हूँ bss?
बिल्ली

1
TSR वास्तव में अनुरूप नहीं हैं। IBM + Microsoft दुनिया में एनालॉग्स के लिए, मानक मोड में DOS + Windows 3.x देखें और 16-बिट OS / 2 संस्करण 1.x. CODEखंडों (और ओएस / 2 केवल पढ़े जा सकने पर DATAखंडों) व्यय और DLLs का (आमतौर पर) चल रहे सभी कार्यक्रमों के बीच साझा कर रहे हैं। "चिपचिपाहट" का कोई वास्तविक समकक्ष नहीं है, भाग में क्योंकि 32-बिट ओएस / 2 संस्करण 2.x और 386 एन्हांस्ड मोड ने खंड को बदल दिया है जो कि वर्चुअल मेमोरी की मांग के साथ स्वैप हो रहा है, जैसा कि यूनिक्स दुनिया में कई साल पहले था, दोनों एरेनास को प्रभावित कर रहे थे। सेगमेंटेशन स्टिकनेस की जरूरत बहुत ज्यादा है।
JdeBP

3
@JdeBP: सवाल "क्या सेटी की तरह चिपचिपा सा था?" बल्कि व्यापक और अभेद्य है। मेरा तर्क है कि उत्तर "ठीक है, कुछ हद तक; यह जटिल है" क्योंकि कम-क्रम वाले नौ बिट्स समान थे और समान हैं: वे प्रभावित करते हैं कि क्या कुछ उपयोगकर्ता किसी फ़ाइल पर कुछ संचालन कर सकते हैं। और सेट यूआईडी, सेट-GID और चिपचिपा बिट्स है कि वे से संबंधित नहीं था में समान थे कि क्या एक ऑपरेशन अनुमति दी गई थी, लेकिन इसके बजाय के कुछ पहलू संचालित कैसे यह (विशेष रूप से, निष्पादित आपरेशन) किया गया था।
जी-मैन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.