निष्पादन मॉडल

From alpha
Jump to navigation Jump to search

एक प्रोग्रामिंग भाषा में एक व्याकरण/वाक्यविन्यास और एक निष्पादन मॉडल शामिल होता है। निष्पादन मॉडल भाषा के तत्वों के व्यवहार को निर्दिष्ट करता है। निष्पादन मॉडल को लागू करके, उस प्रोग्राम के व्यवहार को प्राप्त कर सकते हैं जो उस प्रोग्रामिंग भाषा के संदर्भ में लिखा गया था। उदाहरण के लिए, जब एक प्रोग्रामर कोड पढ़ता है, तो उनके दिमाग में, वे देखते हैं कि कोड की प्रत्येक पंक्ति क्या करती है। प्रभाव में वे अपने मन के अंदर के व्यवहार का अनुकरण करते हैं। प्रोग्रामर जो कर रहा है वह निष्पादन मॉडल को कोड पर लागू कर रहा है, जिसके परिणामस्वरूप कोड का व्यवहार होता है।

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


एक निष्पादन मॉडल का विवरण

Operational_semantics भाषा के निष्पादन मॉडल को निर्दिष्ट करने की एक विधि है। चल रहे प्रोग्राम का मनाया गया व्यवहार परिचालन शब्दार्थ से प्राप्त व्यवहार से मेल खाना चाहिए (जो भाषा के निष्पादन मॉडल को परिभाषित करता है)।

एक निष्पादन मॉडल में चीजें शामिल होती हैं जैसे कि काम की एक अविभाज्य इकाई क्या है, और उस क्रम में क्या बाधाएं हैं जिसमें काम की इकाइयां हो सकती हैं। उदाहरण के लिए, जोड़ संचालन कई भाषाओं में कार्य की एक अविभाज्य इकाई है, और अनुक्रमिक भाषाओं में कार्य की ऐसी इकाइयाँ एक के बाद एक होने के लिए विवश हैं।

इसे स्पष्ट करने के लिए, C (प्रोग्रामिंग भाषा) पर विचार करें, जैसा कि कर्निघन और रिची की पुस्तक में वर्णित है।[5] C की एक अवधारणा है जिसे कथन कहा जाता है। भाषा विनिर्देश एक कथन को सिंटैक्स के एक हिस्से के रूप में परिभाषित करता है जिसे एक द्वारा समाप्त किया जाता है; . भाषा युक्ति तब कहती है कि कार्यक्रम का निष्पादन क्रम में एक के बाद एक बयान आगे बढ़ता है। वे शब्द: कार्यक्रम का निष्पादन एक के बाद एक कथन आगे बढ़ता है, क्रम में C के निष्पादन मॉडल का एक टुकड़ा है। वे शब्द हमें बताते हैं कि कथन कार्य की अविभाज्य इकाइयाँ हैं और वे उसी क्रम में आगे बढ़ते हैं जैसे कि उनका वाक्य-विन्यास प्रकट होता है कोड (जब कोई नियंत्रण कथन जैसे कि IF या FOR ऑर्डर को संशोधित करता है) को छोड़कर। यह बताते हुए कि प्रोग्राम का निष्पादन एक के बाद एक स्टेटमेंट को क्रम से आगे बढ़ाता है, प्रोग्रामिंग मॉडल ने काम की इकाइयों के प्रदर्शन के क्रम पर बाधाओं को बताया है।

सी भाषा वास्तव में इसके निष्पादन मॉडल के लिए एक अतिरिक्त स्तर है, जो कि प्राथमिकता का क्रम है। पूर्वता का क्रम एकल कथन के भीतर संचालन के क्रम के नियमों को बताता है। पूर्वता के क्रम को एक ही कथन के भीतर काम की इकाइयों को पूरा करने में बाधाओं को बताते हुए देखा जा सकता है। इसलिए,  ; और IF और WHILE कथनों के क्रम पर बाधाओं को कवर करते हैं, जबकि पूर्वता क्रम कथन के भीतर कार्य पर बाधाओं को शामिल करता है। इसलिए, C भाषा विनिर्देश के ये भाग C भाषा के निष्पादन मॉडल का भी हिस्सा हैं।

निष्पादन मॉडल प्रोग्रामिंग भाषाओं से स्वतंत्र रूप से भी मौजूद हो सकते हैं, जिसके उदाहरण POSIX थ्रेड्स लाइब्रेरी और Hadoop का मैप-रिड्यूस प्रोग्रामिंग मॉडल होंगे। निष्पादन मॉडल का कार्यान्वयन कंपाइलर, या इंटरप्रेटर_ (कंप्यूटिंग) के माध्यम से हो सकता है, और इसमें अक्सर एक रनटाइम सिस्टम शामिल होता है।

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

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

हालाँकि, किसी भी भाषा के लिए एक इंटरप्रेटर_ (कंप्यूटिंग) का निर्माण भी किया जा सकता है, जिस स्थिति में निष्पादन के आदेश पर सभी निर्णय गतिशील होते हैं। एक दुभाषिया_ (कंप्यूटिंग) को आंशिक अनुवादक और आंशिक निष्पादन मॉडल कार्यान्वयन के रूप में देखा जा सकता है।

असेंबली भाषा निष्पादन मॉडल बनाम माइक्रो-आर्किटेक्चर द्वारा कार्यान्वयन

असेम्बली भाषाओं में निष्पादन मॉडल भी होते हैं, किसी भी अन्य भाषा के समान। ऐसा निष्पादन मॉडल एक CPU माइक्रो-आर्किटेक्चर द्वारा कार्यान्वित किया जाता है। उदाहरण के लिए, एक 5-स्टेज इन-ऑर्डर पाइपलाइन और एक बड़ा आउट ऑफ ऑर्डर CPU समान असेंबली भाषा निष्पादन मॉडल को लागू करता है। निष्पादन मॉडल व्यवहार की परिभाषा है, इसलिए सभी कार्यान्वयन, चाहे इन-ऑर्डर या आउट-ऑफ-ऑर्डर या व्याख्या की गई या JIT'd आदि.. सभी को सटीक समान परिणाम देना चाहिए, और वह परिणाम निष्पादन मॉडल द्वारा परिभाषित किया गया है .

समानांतर निष्पादन मॉडल

आधुनिक युग में समानांतर प्रोग्रामिंग एक तेजी से महत्वपूर्ण विषय है। समानांतर निष्पादन मॉडल जटिल होते हैं क्योंकि उनमें कई समयसीमाएं शामिल होती हैं। समानांतर निष्पादन मॉडल में आवश्यक रूप से Synchronization_construct का व्यवहार शामिल होता है। एक तुल्यकालन निर्माण में एक समयरेखा में गतिविधियों के बीच एक अन्य समयरेखा में गतिविधियों के बीच एक क्रम स्थापित करने का प्रभाव होता है।

उदाहरण के लिए, एक सामान्य तुल्यकालन निर्माण ताला है। एक समयरेखा पर विचार करें। टाइमलाइन में एक बिंदु होता है जिस पर यह लॉक सिंक्रोनाइज़ेशन कंस्ट्रक्शन के गेन ओनरशिप को निष्पादित करता है। पॉज़िक्स धागे में यह pthread_mutex_lock(&myMutex) होगा। जावा में यह लॉक.लॉक () होगा। दोनों ही मामलों में, टाइमलाइन को थ्रेड कहा जाता है। सी और जावा निष्पादन मॉडल अनुक्रमिक हैं, और वे कहते हैं कि समयरेखा में ऐसी गतिविधियाँ हैं जो कॉल से पहले लॉक का स्वामित्व प्राप्त करने के लिए आती हैं, और कॉल के बाद आने वाली गतिविधियाँ। इसी तरह लॉक ऑपरेशन का स्वामित्व छोड़ देना है। C में यह pthread_mutex_unlock(&myMutex) होगा। जावा में यह लॉक.अनलॉक () होगा। दोबारा, निष्पादन मॉडल सी और जावा परिभाषित करते हैं कि लॉक के स्वामित्व को छोड़ने से पहले बयानों के एक समूह को निष्पादित किया जाता है, और लॉक के स्वामित्व को छोड़ने के बाद बयानों के दूसरे समूह को निष्पादित किया जाता है।

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

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

अब, हम लॉक के स्वामित्व के समानांतर निष्पादन मॉडल कह सकते हैं और लॉक सिंक्रोनाइज़ेशन निर्माण के स्वामित्व को छोड़ सकते हैं। निष्पादन मॉडल यह है:

यदि लॉक का स्वामित्व थ्रेड ए से थ्रेड बी तक जाता है, तो ए-पोस्ट-गेन-लॉक स्टेटमेंट बी-पोस्ट-गेन-लॉक स्टेटमेंट से पहले आते हैं।

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

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

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

यह भी देखें

  • रनटाइम सिस्टम
  • निष्पादन (कंप्यूटिंग)
  • निर्धारण (कंप्यूटिंग)

संदर्भ

  1. "Python Documentation: Execution Model".
  2. "UPC Language Features".
  3. Cardoso, J.M.P.; Diniz, P.C. (2011). Programming Languages and Execution Models. Springer US. ISBN 9780387096711.
  4. PELLIZZONI, R.; BETTI, E.; BAK, S.; YAO, G.; CRISWELL, J.; CACCAMO, M. & KEGLEY, R (2011). "A Predictable Execution Model for COTS-based Embedded Systems" (PDF). Real-Time and Embedded Technology and Applications Symposium. IEEE.
  5. Kernighan, Brian W.; Dennis M. Ritchie (February 1978). The C Programming Language (1st ed.). Englewood Cliffs, NJ: Prentice Hall. ISBN 0-13-110163-3.