ट्रैम्पोलिन (कम्प्यूटिंग): Difference between revisions
No edit summary |
No edit summary |
||
Line 5: | Line 5: | ||
* ट्रैम्पोलिन का उपयोग [[सेंट्रल प्रोसेसिंग यूनिट]] (सीपीयू) आर्किटेक्चर द्वारा लगाई गई सीमाओं को दूर करने के लिए किया जा सकता है जो हमेशा निश्चित स्थानों में वैक्टर खोजने की अपेक्षा करता है। | * ट्रैम्पोलिन का उपयोग [[सेंट्रल प्रोसेसिंग यूनिट]] (सीपीयू) आर्किटेक्चर द्वारा लगाई गई सीमाओं को दूर करने के लिए किया जा सकता है जो हमेशा निश्चित स्थानों में वैक्टर खोजने की अपेक्षा करता है। | ||
* जब | * जब [[सममित बहु प्रसंस्करण]] (एसएमपी) मशीन पर [[ऑपरेटिंग सिस्टम]] बूट किया जाता है, तो केवल प्रोसेसर, बूटस्ट्रैप प्रोसेसर सक्रिय होगा। ऑपरेटिंग सिस्टम के खुद को कॉन्फ़िगर करने के बाद, यह अन्य प्रोसेसर को ट्रैम्पोलिन कोड के टुकड़े पर कूदने का निर्देश देगा जो प्रोसेसर को इनिशियलाइज़ करेगा और ऑपरेटिंग सिस्टम के उन पर शेड्यूलिंग थ्रेड्स शुरू करने की प्रतीक्षा करेगा। | ||
== उच्च स्तरीय प्रोग्रामिंग == | == उच्च स्तरीय प्रोग्रामिंग == | ||
* जैसा कि कुछ [[लिस्प (प्रोग्रामिंग भाषा)]] कार्यान्वयन में उपयोग किया जाता है, | * जैसा कि कुछ [[लिस्प (प्रोग्रामिंग भाषा)]] कार्यान्वयन में उपयोग किया जाता है, ट्रैम्पोलिन लूप है जो पुनरावृत्त रूप से [[थंक (कार्यात्मक प्रोग्रामिंग)]] -रिटर्निंग फ़ंक्शंस (निरंतर-गुजरने वाली शैली) को आमंत्रित करता है। एकल ट्रैम्पोलिन कार्यक्रम के सभी नियंत्रण स्थानान्तरण को व्यक्त करने के लिए पर्याप्त है; ऐसा व्यक्त किया गया कार्यक्रम ट्रैम्पोलिन किया गया है, या ट्रैम्पोलिन शैली में है; कार्यक्रम को ट्रैम्पोलिन शैली में परिवर्तित करना ट्रैम्पोलिनिंग है। [[स्टैक-उन्मुख प्रोग्रामिंग भाषा]]ओं में पूंछ-पुनरावर्ती फ़ंक्शन कॉल को लागू करने के लिए प्रोग्रामर ट्रैम्पोलिन किए गए कार्यों का उपयोग कर सकते हैं।<ref name="Baker_1995"/><ब्लॉककोट> | ||
कंटीन्यूएशन-पासिंग स्टाइल कार्यात्मक भाषाओं के कंपाइलरों के लिए | कंटीन्यूएशन-पासिंग स्टाइल कार्यात्मक भाषाओं के कंपाइलरों के लिए लोकप्रिय मध्यवर्ती प्रारूप है, क्योंकि कई नियंत्रण प्रवाह निर्माणों को सुंदर ढंग से व्यक्त किया जा सकता है और टेल कॉल ऑप्टिमाइज़ेशन आसान है। अनुकूलित पूंछ कॉल के बिना किसी भाषा को संकलित करते समय, ट्रैम्पोलिनिंग नामक तकनीक के माध्यम से ढेर वृद्धि से बचा जा सकता है। विचार फ़ंक्शन के अंदर अंतिम निरंतरता कॉल नहीं करना है, लेकिन बाहर निकलने और निरंतरता को ट्रैम्पोलिन पर वापस करने के लिए है। वह ट्रैम्पोलिन बस लूप है जो लौटी हुई निरंतरता को आमंत्रित करता है। इसलिए, कोई नेस्टेड फ़ंक्शन कॉल नहीं है और स्टैक नहीं बढ़ेगा।<ref>[http://2ality.com/2012/06/continuation-passing-style.html Asynchronous programming and continuation-passing style in JavaScript - 2ality]</ref> | ||
</ब्लॉककोट> | </ब्लॉककोट> | ||
* [[जावा (प्रोग्रामिंग भाषा)]] में, ट्रैम्पोलिन आंतरिक कक्षाओं का उपयोग करने से बचने के लिए [[प्रतिबिंब (कंप्यूटर विज्ञान)]] का उपयोग करने को संदर्भित करता है, उदाहरण के लिए ईवेंट श्रोताओं में। | * [[जावा (प्रोग्रामिंग भाषा)]] में, ट्रैम्पोलिन आंतरिक कक्षाओं का उपयोग करने से बचने के लिए [[प्रतिबिंब (कंप्यूटर विज्ञान)]] का उपयोग करने को संदर्भित करता है, उदाहरण के लिए ईवेंट श्रोताओं में। प्रतिबिंब कॉल का समय ओवरहेड आंतरिक वर्ग के स्थान के ऊपरी हिस्से के लिए कारोबार किया जाता है। जावा में ट्रैम्पोलिन में आमतौर पर बाहरी वर्ग में घटनाओं को पास करने के लिए जेनेरिक लिस्टनर का निर्माण शामिल होता है।<ref name="muller"/>* मोनो_ (सॉफ्टवेयर) में, ट्रैंपोलिन छोटे, हाथ से लिखे असेंबली कोड के टुकड़े होते हैं जिनका उपयोग विभिन्न कार्यों को करने के लिए किया जाता है।<ref>{{cite web |title=Trampolines |url=https://github.com/mono/website/blob/b4f3b7ad0413743e35e9cfe009302e57c1cd0c61/docs/advanced/runtime/docs/trampolines.md |publisher=Mono Project |date=8 October 2022}}</ref> | ||
* असंगत कॉलिंग सम्मेलनों के साथ कोड के टुकड़ों को जोड़ने पर, कॉलर के सम्मेलन को कॉल करने वाले के सम्मेलन में बदलने के लिए | * असंगत कॉलिंग सम्मेलनों के साथ कोड के टुकड़ों को जोड़ने पर, कॉलर के सम्मेलन को कॉल करने वाले के सम्मेलन में बदलने के लिए ट्रैम्पोलिन का उपयोग किया जाता है। | ||
** [[अंतः स्थापित प्रणाली]] में, ट्रैम्पोलिन कोड के छोटे स्निपेट होते हैं जो कोड के अन्य स्निपेट को शुरू करते हैं। उदाहरण के लिए, पूरी तरह से असेंबली लैंग्वेज में इंटरप्ट हैंडलर लिखने के बजाय, | ** [[अंतः स्थापित प्रणाली]] में, ट्रैम्पोलिन कोड के छोटे स्निपेट होते हैं जो कोड के अन्य स्निपेट को शुरू करते हैं। उदाहरण के लिए, पूरी तरह से असेंबली लैंग्वेज में इंटरप्ट हैंडलर लिखने के बजाय, अन्य विकल्प ज्यादातर C में इंटरप्ट हैंडलर लिखना है, और असेंबली-लैंग्वेज इंटरप्ट [[कॉलिंग कन्वेंशन]] को C कॉलिंग कन्वेंशन में बदलने के लिए शॉर्ट ट्रैम्पोलिन का उपयोग करना है।<ref name="Link"/>** किसी सिस्टम को [[कॉलबैक (कंप्यूटर विज्ञान)]] पास करते समय, जो C (प्रोग्रामिंग लैंग्वेज) फ़ंक्शन को कॉल करने की अपेक्षा करता है, लेकिन कोई चाहता है कि वह C++ में लिखी गई कक्षा के किसी विशेष उदाहरण की विधि को निष्पादित करे, छोटे ट्रैम्पोलिन का उपयोग करता है सी फ़ंक्शन-कॉलिंग सम्मेलन को [[सी ++]] विधि-कॉलिंग सम्मेलन में परिवर्तित करें। इस तरह के ट्रैम्पोलिन को लिखने का तरीका [[थंक (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग)]] का उपयोग करना है।<ref name="Stangvik"/>अन्य तरीका सामान्य श्रोता का उपयोग करना है।<ref name="muller"/>* [[उद्देश्य सी]] में, ट्रैम्पोलिन ऐसी विधि द्वारा लौटाई गई वस्तु है जो इसे भेजे गए सभी संदेशों को कैप्चर और रीफिकेशन (कंप्यूटर साइंस) करती है और फिर उन संदेशों को किसी अन्य ऑब्जेक्ट पर बाउंस कर देती है, उदाहरण के लिए उच्च क्रम संदेश में।<ref name="Weiher"/>* [[जीएनयू [[संकलक]] संग्रह]] कंपाइलर में, ट्रैम्पोलिन [[नेस्टेड समारोह]] के लिए पॉइंटर्स को लागू करने के लिए तकनीक को संदर्भित करता है।<ref name="Stackoverflow"/>ट्रैम्पोलिन कोड का छोटा सा टुकड़ा है जो नेस्टेड फ़ंक्शन का पता लेने पर स्टैक पर फ्लाई पर बनाया जाता है। ट्रैम्पोलिन स्थिर लिंक पॉइंटर सेट करता है, जो नेस्टेड फ़ंक्शन को संलग्न फ़ंक्शन के स्थानीय चर तक पहुंचने की अनुमति देता है। फ़ंक्शन पॉइंटर तब केवल ट्रैम्पोलिन का पता होता है। यह फैट पॉइंटर का उपयोग करने से बचता है नेस्टेड फ़ंक्शंस के लिए फैट फ़ंक्शन पॉइंटर्स जो कोड एड्रेस और स्टेटिक लिंक दोनों को ले जाते हैं।<ref name="GCC_Trampolines"/><ref name="GCC_Nested"/><ref name="Breuel"/>हालाँकि, यह सुरक्षा कारणों से स्टैक को गैर-निष्पादन योग्य बनाने की इच्छा के साथ संघर्ष करता है। | ||
* [[गूढ़ प्रोग्रामिंग भाषा]] [[Befung]]e में, | * [[गूढ़ प्रोग्रामिंग भाषा]] [[Befung]]e में, ट्रैम्पोलिन नियंत्रण प्रवाह में अगले सेल को छोड़ने का निर्देश है। | ||
== नहीं-निष्पादित ढेर == | == नहीं-निष्पादित ढेर == | ||
ट्रैम्पोलाइन के कुछ कार्यान्वयन से NX बिट | नो-एक्ज़ीक्यूट स्टैक (NX स्टैक) का नुकसान होता है। जीएनयू कंपाइलर संग्रह (जीसीसी) में विशेष रूप से, | ट्रैम्पोलाइन के कुछ कार्यान्वयन से NX बिट | नो-एक्ज़ीक्यूट स्टैक (NX स्टैक) का नुकसान होता है। जीएनयू कंपाइलर संग्रह (जीसीसी) में विशेष रूप से, नेस्टेड फ़ंक्शन रनटाइम पर स्टैक पर ट्रैम्पोलिन बनाता है, और फिर स्टैक पर डेटा के माध्यम से नेस्टेड फ़ंक्शन को कॉल करता है। ट्रैम्पोलिन को निष्पादन योग्य होने के लिए स्टैक की आवश्यकता होती है। | ||
जीसीसी के तहत नो-एक्ज़ीक्यूट स्टैक और नेस्टेड फ़ंक्शंस परस्पर अनन्य हैं। यदि किसी प्रोग्राम के विकास में नेस्टेड फ़ंक्शन का उपयोग किया जाता है, तो एनएक्स स्टैक चुपचाप खो जाता है। जीसीसी प्रदान करता है <code>-Wtrampolines</code> स्थिति के प्रति सचेत करने की चेतावनी। | जीसीसी के तहत नो-एक्ज़ीक्यूट स्टैक और नेस्टेड फ़ंक्शंस परस्पर अनन्य हैं। यदि किसी प्रोग्राम के विकास में नेस्टेड फ़ंक्शन का उपयोग किया जाता है, तो एनएक्स स्टैक चुपचाप खो जाता है। जीसीसी प्रदान करता है <code>-Wtrampolines</code> स्थिति के प्रति सचेत करने की चेतावनी। |
Revision as of 06:20, 3 March 2023
कंप्यूटर प्रोग्रामिंग में, ट्रैम्पोलिन शब्द के कई अर्थ हैं, और आम तौर पर जंप निर्देशों (यानी विभिन्न कोड पथों पर जाने) से जुड़ा होता है।
निम्न-स्तरीय प्रोग्रामिंग
ट्रैम्पोलाइन (कभी-कभी अप्रत्यक्ष जंप वैक्टर के रूप में संदर्भित) स्मृति स्थान होते हैं जो सर्विस रूटीन, I/O रूटीन आदि को बाधित करने की ओर इशारा करते हुए पते रखते हैं। निष्पादन ट्रैम्पोलिन में कूद जाता है और फिर तुरंत बाहर कूद जाता है, या बाउंस हो जाता है, इसलिए ट्रैम्पोलिन शब्द। इनके कई उपयोग हैं:
- ट्रैम्पोलिन का उपयोग सेंट्रल प्रोसेसिंग यूनिट (सीपीयू) आर्किटेक्चर द्वारा लगाई गई सीमाओं को दूर करने के लिए किया जा सकता है जो हमेशा निश्चित स्थानों में वैक्टर खोजने की अपेक्षा करता है।
- जब सममित बहु प्रसंस्करण (एसएमपी) मशीन पर ऑपरेटिंग सिस्टम बूट किया जाता है, तो केवल प्रोसेसर, बूटस्ट्रैप प्रोसेसर सक्रिय होगा। ऑपरेटिंग सिस्टम के खुद को कॉन्फ़िगर करने के बाद, यह अन्य प्रोसेसर को ट्रैम्पोलिन कोड के टुकड़े पर कूदने का निर्देश देगा जो प्रोसेसर को इनिशियलाइज़ करेगा और ऑपरेटिंग सिस्टम के उन पर शेड्यूलिंग थ्रेड्स शुरू करने की प्रतीक्षा करेगा।
उच्च स्तरीय प्रोग्रामिंग
- जैसा कि कुछ लिस्प (प्रोग्रामिंग भाषा) कार्यान्वयन में उपयोग किया जाता है, ट्रैम्पोलिन लूप है जो पुनरावृत्त रूप से थंक (कार्यात्मक प्रोग्रामिंग) -रिटर्निंग फ़ंक्शंस (निरंतर-गुजरने वाली शैली) को आमंत्रित करता है। एकल ट्रैम्पोलिन कार्यक्रम के सभी नियंत्रण स्थानान्तरण को व्यक्त करने के लिए पर्याप्त है; ऐसा व्यक्त किया गया कार्यक्रम ट्रैम्पोलिन किया गया है, या ट्रैम्पोलिन शैली में है; कार्यक्रम को ट्रैम्पोलिन शैली में परिवर्तित करना ट्रैम्पोलिनिंग है। स्टैक-उन्मुख प्रोग्रामिंग भाषाओं में पूंछ-पुनरावर्ती फ़ंक्शन कॉल को लागू करने के लिए प्रोग्रामर ट्रैम्पोलिन किए गए कार्यों का उपयोग कर सकते हैं।[1]<ब्लॉककोट>
कंटीन्यूएशन-पासिंग स्टाइल कार्यात्मक भाषाओं के कंपाइलरों के लिए लोकप्रिय मध्यवर्ती प्रारूप है, क्योंकि कई नियंत्रण प्रवाह निर्माणों को सुंदर ढंग से व्यक्त किया जा सकता है और टेल कॉल ऑप्टिमाइज़ेशन आसान है। अनुकूलित पूंछ कॉल के बिना किसी भाषा को संकलित करते समय, ट्रैम्पोलिनिंग नामक तकनीक के माध्यम से ढेर वृद्धि से बचा जा सकता है। विचार फ़ंक्शन के अंदर अंतिम निरंतरता कॉल नहीं करना है, लेकिन बाहर निकलने और निरंतरता को ट्रैम्पोलिन पर वापस करने के लिए है। वह ट्रैम्पोलिन बस लूप है जो लौटी हुई निरंतरता को आमंत्रित करता है। इसलिए, कोई नेस्टेड फ़ंक्शन कॉल नहीं है और स्टैक नहीं बढ़ेगा।[2] </ब्लॉककोट>
- जावा (प्रोग्रामिंग भाषा) में, ट्रैम्पोलिन आंतरिक कक्षाओं का उपयोग करने से बचने के लिए प्रतिबिंब (कंप्यूटर विज्ञान) का उपयोग करने को संदर्भित करता है, उदाहरण के लिए ईवेंट श्रोताओं में। प्रतिबिंब कॉल का समय ओवरहेड आंतरिक वर्ग के स्थान के ऊपरी हिस्से के लिए कारोबार किया जाता है। जावा में ट्रैम्पोलिन में आमतौर पर बाहरी वर्ग में घटनाओं को पास करने के लिए जेनेरिक लिस्टनर का निर्माण शामिल होता है।[3]* मोनो_ (सॉफ्टवेयर) में, ट्रैंपोलिन छोटे, हाथ से लिखे असेंबली कोड के टुकड़े होते हैं जिनका उपयोग विभिन्न कार्यों को करने के लिए किया जाता है।[4]
- असंगत कॉलिंग सम्मेलनों के साथ कोड के टुकड़ों को जोड़ने पर, कॉलर के सम्मेलन को कॉल करने वाले के सम्मेलन में बदलने के लिए ट्रैम्पोलिन का उपयोग किया जाता है।
- अंतः स्थापित प्रणाली में, ट्रैम्पोलिन कोड के छोटे स्निपेट होते हैं जो कोड के अन्य स्निपेट को शुरू करते हैं। उदाहरण के लिए, पूरी तरह से असेंबली लैंग्वेज में इंटरप्ट हैंडलर लिखने के बजाय, अन्य विकल्प ज्यादातर C में इंटरप्ट हैंडलर लिखना है, और असेंबली-लैंग्वेज इंटरप्ट कॉलिंग कन्वेंशन को C कॉलिंग कन्वेंशन में बदलने के लिए शॉर्ट ट्रैम्पोलिन का उपयोग करना है।[5]** किसी सिस्टम को कॉलबैक (कंप्यूटर विज्ञान) पास करते समय, जो C (प्रोग्रामिंग लैंग्वेज) फ़ंक्शन को कॉल करने की अपेक्षा करता है, लेकिन कोई चाहता है कि वह C++ में लिखी गई कक्षा के किसी विशेष उदाहरण की विधि को निष्पादित करे, छोटे ट्रैम्पोलिन का उपयोग करता है सी फ़ंक्शन-कॉलिंग सम्मेलन को सी ++ विधि-कॉलिंग सम्मेलन में परिवर्तित करें। इस तरह के ट्रैम्पोलिन को लिखने का तरीका थंक (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) का उपयोग करना है।[6]अन्य तरीका सामान्य श्रोता का उपयोग करना है।[3]* उद्देश्य सी में, ट्रैम्पोलिन ऐसी विधि द्वारा लौटाई गई वस्तु है जो इसे भेजे गए सभी संदेशों को कैप्चर और रीफिकेशन (कंप्यूटर साइंस) करती है और फिर उन संदेशों को किसी अन्य ऑब्जेक्ट पर बाउंस कर देती है, उदाहरण के लिए उच्च क्रम संदेश में।[7]* [[जीएनयू संकलक संग्रह]] कंपाइलर में, ट्रैम्पोलिन नेस्टेड समारोह के लिए पॉइंटर्स को लागू करने के लिए तकनीक को संदर्भित करता है।[8]ट्रैम्पोलिन कोड का छोटा सा टुकड़ा है जो नेस्टेड फ़ंक्शन का पता लेने पर स्टैक पर फ्लाई पर बनाया जाता है। ट्रैम्पोलिन स्थिर लिंक पॉइंटर सेट करता है, जो नेस्टेड फ़ंक्शन को संलग्न फ़ंक्शन के स्थानीय चर तक पहुंचने की अनुमति देता है। फ़ंक्शन पॉइंटर तब केवल ट्रैम्पोलिन का पता होता है। यह फैट पॉइंटर का उपयोग करने से बचता है नेस्टेड फ़ंक्शंस के लिए फैट फ़ंक्शन पॉइंटर्स जो कोड एड्रेस और स्टेटिक लिंक दोनों को ले जाते हैं।[9][10][11]हालाँकि, यह सुरक्षा कारणों से स्टैक को गैर-निष्पादन योग्य बनाने की इच्छा के साथ संघर्ष करता है।
- गूढ़ प्रोग्रामिंग भाषा Befunge में, ट्रैम्पोलिन नियंत्रण प्रवाह में अगले सेल को छोड़ने का निर्देश है।
नहीं-निष्पादित ढेर
ट्रैम्पोलाइन के कुछ कार्यान्वयन से NX बिट | नो-एक्ज़ीक्यूट स्टैक (NX स्टैक) का नुकसान होता है। जीएनयू कंपाइलर संग्रह (जीसीसी) में विशेष रूप से, नेस्टेड फ़ंक्शन रनटाइम पर स्टैक पर ट्रैम्पोलिन बनाता है, और फिर स्टैक पर डेटा के माध्यम से नेस्टेड फ़ंक्शन को कॉल करता है। ट्रैम्पोलिन को निष्पादन योग्य होने के लिए स्टैक की आवश्यकता होती है।
जीसीसी के तहत नो-एक्ज़ीक्यूट स्टैक और नेस्टेड फ़ंक्शंस परस्पर अनन्य हैं। यदि किसी प्रोग्राम के विकास में नेस्टेड फ़ंक्शन का उपयोग किया जाता है, तो एनएक्स स्टैक चुपचाप खो जाता है। जीसीसी प्रदान करता है -Wtrampolines
स्थिति के प्रति सचेत करने की चेतावनी।
सॉफ़्टवेयर विकास सुरक्षा का उपयोग करने वाले सॉफ़्टवेयर इंजीनियर अक्सर NX स्टैक के नुकसान के कारण नेस्टेड फ़ंक्शंस के उपयोग की अनुमति नहीं देते हैं।[12]
यह भी देखें
संदर्भ
- ↑ Baker, Henry G. (September 1995). "CONS Should Not CONS Its Arguments, Part II: Cheney on the M.T.A." ACM SIGPLAN Notices. 30 (9): 17–20. doi:10.1145/214448.214454. S2CID 20720831. Archived from the original on 2016-11-11.
- ↑ Asynchronous programming and continuation-passing style in JavaScript - 2ality
- ↑ 3.0 3.1 Muller, Hans (2005-01-31). "Asserting Control Over the GUI: Commands, Defaults, and Resource Bundles". today.java.net. Trampolines. Retrieved 2015-11-06. [1]
- ↑ "Trampolines". Mono Project. 8 October 2022.
- ↑ Link, Joseph M. (2001-09-01). "Trampolines for Embedded Systems: Minimizing interrupt handlers latency". Dr. Dobb's Journal. Archived from the original on 2018-05-27. Retrieved 2018-05-26.
- ↑ Stangvik, Einar Otto (2006-08-16). "Thunking in Win32 with C++". Archived from the original on 2012-10-15.
- ↑ Weiher, Marcel (2004). "Higher Order Messaging (HOM)" (PDF). Archived (PDF) from the original on 2018-05-27. Retrieved 2018-05-26.
- ↑ fuz (2011-11-18). "Implementation of nested functions". StackOverflow. Archived from the original on 2016-03-29. Retrieved 2018-05-26.
- ↑ "Trampolines for Nested Functions". Using the GNU Compiler Collection (GCC). 2018 [2002]. 18.11. Archived from the original on 2018-05-27. Retrieved 2018-05-26.
- ↑ "Nested functions". Using the GNU Compiler Collection (GCC). 2018 [2002]. 6.4. Archived from the original on 2018-05-27. Retrieved 2018-05-26.
- ↑ Breuel, Thomas M. (2013). "Lexical Closures for C++" (PDF). Archived (PDF) from the original on 2017-12-12. Retrieved 2018-05-26.
- ↑ Walton, Jeffrey; Manico, Jim; Wall, Kevin (2018-03-02) [2013]. "C-Based Toolchain Hardening". The Open Web Application Security Project (OWASP). Archived from the original on 2018-05-27. Retrieved 2018-03-02.