ट्रैम्पोलिन (कम्प्यूटिंग)

From Vigyanwiki

कंप्यूटर प्रोग्रामिंग में, ट्रैम्पोलिन शब्द के कई अर्थ हैं, और सामान्यतः जंप निर्देशों (अर्थात् विभिन्न कोड पथों पर जाना) से जुड़ा होता है।

निम्न-स्तरीय प्रोग्रामिंग

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

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

उच्च स्तरीय प्रोग्रामिंग

  • जैसा कि कुछ लिस्प (प्रोग्रामिंग भाषा) कार्यान्वयन में उपयोग किया जाता है, ट्रैम्पोलिन लूप है जो पुनरावृत्त रूप से थंक (कार्यात्मक प्रोग्रामिंग) -लौटता फलन (निरंतर-गुजरने वाली शैली) को आमंत्रित करता है। एकल ट्रैम्पोलिन कार्यक्रम के सभी नियंत्रण स्थानान्तरण को व्यक्त करने के लिए पर्याप्त है; ऐसा व्यक्त किया गया कार्यक्रम ट्रैम्पोलिन किया गया है, या ट्रैम्पोलिन शैली में है; कार्यक्रम को ट्रैम्पोलिन शैली में परिवर्तित करना ट्रैम्पोलिनिंग है। संग्रह-उन्मुख प्रोग्रामिंग भाषाओं में पूंछ-पुनरावर्ती फ़ंक्शन कॉल को प्रायुक्त करने के लिए प्रोग्रामर ट्रैम्पोलिन किए गए कार्यों का उपयोग कर सकते हैं।[1]

विस्तार-अस्थायी शैली कार्यात्मक भाषाओं के संकलनकर्ता के लिए लोकप्रिय मध्यवर्ती प्रारूप है, क्योंकि कई नियंत्रण प्रवाह निर्माणों को सुंदर रूप से व्यक्त किया जा सकता है और टेल कॉल ऑप्टिमाइज़ेशन आसान है। अनुकूलित पूंछ कॉल के बिना किसी भाषा को संकलित करते समय, ट्रैम्पोलिनिंग नामक तकनीक के माध्यम से ढेर वृद्धि से बचा जा सकता है। विचार फ़ंक्शन के अंदर अंतिम निरंतरता कॉल नहीं करना है, लेकिन बाहर निकलने और निरंतरता को ट्रैम्पोलिन पर वापस करने के लिए है। वह ट्रैम्पोलिन बस लूप है जो लौटी हुई निरंतरता को आमंत्रित करता है। इसलिए, कोई स्थिर फ़ंक्शन कॉल नहीं है और संग्रह नहीं बढ़ेगा।[2]

  • जावा (प्रोग्रामिंग भाषा) में, ट्रैम्पोलिन आंतरिक कक्षाओं का उपयोग करने से बचने के लिए प्रतिबिंब (कंप्यूटर विज्ञान) का उपयोग करने को संदर्भित करता है, उदाहरण के लिए घटना श्रोताओं में। प्रतिबिंब कॉल का समय ओवरहेड आंतरिक वर्ग के स्थान के ऊपरी हिस्से के लिए कारोबार किया जाता है। जावा में ट्रैम्पोलिन में सामान्यतः बाहरी वर्ग में घटनाओं को पास करने के लिए सामान्य श्रोता का निर्माण शामिल होता है।[3]
  • मोनो (सॉफ्टवेयर) में, ट्रैंपोलिन छोटे, हाथ से लिखे असेंबली कोड के टुकड़े होते हैं जिनका उपयोग विभिन्न कार्यों को करने के लिए किया जाता है।[4]
  • असंगत कॉलिंग सम्मेलनों के साथ कोड के टुकड़ों को जोड़ने पर, कॉलर के सम्मेलन को कॉल करने वाले के सम्मेलन में बदलने के लिए ट्रैम्पोलिन का उपयोग किया जाता है।
    • अंतः स्थापित प्रणाली में, ट्रैम्पोलिन कोड के छोटे स्निपेट होते हैं जो कोड के अन्य स्निपेट को प्रारंभ करते हैं। उदाहरण के लिए, पूरी तरह से असेंबली भाषा में इंटरप्ट हैंडलर लिखने के अतिरिक्त, अन्य विकल्प ज्यादातर C में इंटरप्ट हैंडलर लिखना है, और असेंबली-भाषा इंटरप्ट कॉलिंग सम्मेलन को C कॉलिंग सम्मेलन में बदलने के लिए शॉर्ट ट्रैम्पोलिन का उपयोग करना है।[5]
    • किसी सिस्टम को कॉलबैक (कंप्यूटर विज्ञान) पास करते समय, जो C (प्रोग्रामिंग भाषा) फ़ंक्शन को कॉल करने की अपेक्षा करता है, लेकिन कोई चाहता है कि वह C++ में लिखी गई कक्षा के किसी विशेष उदाहरण की विधि को निष्पादित करे, छोटे ट्रैम्पोलिन का उपयोग करता है सी फ़ंक्शन-कॉलिंग सम्मेलन को सी ++ विधि-कॉलिंग सम्मेलन में परिवर्तित करें। इस तरह के ट्रैम्पोलिन को लिखने का विधि थंक (ऑब्जेक्ट-ओरिएंटेड प्रोग्रामिंग) का उपयोग करना है।[6] अन्य विधि सामान्य श्रोता का उपयोग करना है।[3]
    • उद्देश्य सी में, ट्रैम्पोलिन ऐसी विधि द्वारा लौटाई गई वस्तु है जो इसे भेजे गए सभी संदेशों को कैप्चर और संशोधन (कंप्यूटर साइंस) करती है और फिर उन संदेशों को किसी अन्य ऑब्जेक्ट पर बाउंस कर देती है, उदाहरण के लिए उच्च क्रम संदेश में।[7]
    • जीएनयू संकलक संग्रह कंपाइलर में, ट्रैम्पोलिन स्थिर फलन के लिए पॉइंटर्स को प्रायुक्त करने के लिए तकनीक को संदर्भित करता है।[8] ट्रैम्पोलिन कोड का छोटा सा टुकड़ा है जो स्थिर फ़ंक्शन का पता लेने पर संग्रह पर फ्लाई पर बनाया जाता है। ट्रैम्पोलिन स्थिर लिंक पॉइंटर सेट करता है, जो स्थिर फ़ंक्शन को संलग्न फ़ंक्शन के स्थानीय चर तक पहुंचने की अनुमति देता है। फ़ंक्शन पॉइंटर तब केवल ट्रैम्पोलिन का पता होता है। यह फैट पॉइंटर का उपयोग करने से बचता है स्थिर फ़ंक्शंस के लिए फैट फ़ंक्शन पॉइंटर्स जो कोड एड्रेस और स्टेटिक लिंक दोनों को ले जाते हैं।[9][10][11] चूँकि, यह सुरक्षा कारणों से संग्रह को गैर-निष्पादन योग्य बनाने की इच्छा के साथ संघर्ष करता है।
  • गोपनीय प्रोग्रामिंग भाषा बेफंगे में, ट्रैम्पोलिन नियंत्रण प्रवाह में अगले सेल को छोड़ने का निर्देश है।

नहीं-निष्पादित ढेर

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

जीसीसी के तहत नो-एक्ज़ीक्यूट संग्रह और स्थिर फ़ंक्शंस परस्पर अनन्य हैं। यदि किसी प्रोग्राम के विकास में स्थिर फ़ंक्शन का उपयोग किया जाता है, तो एनएक्स संग्रह चुपचाप खो जाता है। स्थिति की चेतावनी के लिए जीसीसी -Wtrampolines प्रदान करता है।

सॉफ़्टवेयर विकास सुरक्षा का उपयोग करने वाले सॉफ़्टवेयर इंजीनियर अधिकांश एनएक्स संग्रह के नुकसान के कारण स्थिर फ़ंक्शंस के उपयोग की अनुमति नहीं देते हैं।[12]


यह भी देखें

संदर्भ

  1. 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.
  2. Asynchronous programming and continuation-passing style in JavaScript - 2ality
  3. 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]
  4. "Trampolines". Mono Project. 8 October 2022.
  5. Stangvik, Einar Otto (2006-08-16). "Thunking in Win32 with C++". Archived from the original on 2012-10-15.
  6. Weiher, Marcel (2004). "Higher Order Messaging (HOM)" (PDF). Archived (PDF) from the original on 2018-05-27. Retrieved 2018-05-26.
  7. fuz (2011-11-18). "Implementation of nested functions". StackOverflow. Archived from the original on 2016-03-29. Retrieved 2018-05-26.
  8. "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.
  9. "Nested functions". Using the GNU Compiler Collection (GCC). 2018 [2002]. 6.4. Archived from the original on 2018-05-27. Retrieved 2018-05-26.
  10. Breuel, Thomas M. (2013). "Lexical Closures for C++" (PDF). Archived (PDF) from the original on 2017-12-12. Retrieved 2018-05-26.
  11. 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.