मेमोरी मॉडल (प्रोग्रामिंग): Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 3: Line 3:
कंप्यूटिंग में, एक मेमोरी मॉडल [[मेमोरी (कंप्यूटिंग)]] के माध्यम से थ्रेड (कंप्यूटर साइंस) की परस्पर क्रियाओं और [[डेटा (कंप्यूटिंग)]] के उनके साझा उपयोग का वर्णन करता है।
कंप्यूटिंग में, एक मेमोरी मॉडल [[मेमोरी (कंप्यूटिंग)]] के माध्यम से थ्रेड (कंप्यूटर साइंस) की परस्पर क्रियाओं और [[डेटा (कंप्यूटिंग)]] के उनके साझा उपयोग का वर्णन करता है।


'''झा उपयोकी परस्प'''
'''झा उपयोकी परस्परस्पर क्रियाओं और [[डेटा (कंप्यूटिंग)]] के उनके साझा उपयोग का वर्णन करता है।'''


== इतिहास और महत्व ==
== इतिहास और महत्व ==
एक मेमोरी मॉडल परस्पर क्रियाओं कंपाइलर को कई महत्वपूर्ण अनुकूलन करने की अनुमति देता है। प्रोग्राम में [[लूप फ्यूजन]] मूव स्टेटमेंट जैसे [[संकलक अनुकूलन]], जो संभावित साझा [[चर (प्रोग्रामिंग)]] के पढ़ने और लिखने के संचालन के क्रम को प्रभावित कर सकते हैं। पढ़ने और लिखने के क्रम में परिवर्तन [[दौड़ की स्थिति]] उत्पन्न कर सकता है। मेमोरी मॉडल के बिना,परस्पर क्रियाओं कंपाइलर को सामान्य रूप से या केवल विशेष स्थितियों में बहु-थ्रेडेड प्रोग्रामों में ऐसे अनुकूलन लागू करने की अनुमति नहीं है। या कुछ कंपाइलरों के लिए कोई बहु-थ्रेडेड निष्पादन नहीं है (इसलिए श्रेष्ठ अनुकूलित कोड का उत्पादन किया जा सकता है), जिससे अनुकूलन हो सकता है जो बहु-थ्रेडिंग के साथ असंगत हैं - ये अधिकांशतः सूक्ष्म बग का कारण बन सकते हैं, जो प्रारंभिक परीक्षण में दिखाई नहीं देते हैं। .
एक मेमोरी मॉडल परस्पर क्रियाओं कंपाइलर को कई महत्वपूर्ण ऑप्टिमाइज़ेशन करने की अनुमति देता है। प्रोग्राम में [[लूप फ्यूजन]] मूव स्टेटमेंट जैसे [[संकलक अनुकूलन|संकलक ऑप्टिमाइज़ेशन]], जो संभावित साझा [[चर (प्रोग्रामिंग)|वैरिएबल (प्रोग्रामिंग)]] के पढ़ने और लिखने के संचालन के क्रम को प्रभावित कर सकते हैं। पढ़ने और लिखने के क्रम में परिवर्तन [[दौड़ की स्थिति]] उत्पन्न कर सकता है। मेमोरी मॉडल के बिना,परस्पर क्रियाओं कंपाइलर को सामान्य रूप से या केवल विशेष स्थितियों में बहु-थ्रेडेड प्रोग्रामों में ऐसे ऑप्टिमाइज़ेशन लागू करने की अनुमति नहीं है। या कुछ कंपाइलरों के लिए कोई बहु-थ्रेडेड निष्पादन नहीं है (इसलिए श्रेष्ठ अनुकूलित कोड का उत्पादन किया जा सकता है), जिससे ऑप्टिमाइज़ेशन हो सकता है जो बहु-थ्रेडिंग के साथ असंगत हैं - ये अधिकांशतः सूक्ष्म बग का कारण बन सकते हैं, जो प्रारंभिक परीक्षण में दिखाई नहीं देते हैं। .


आधुनिक प्रोग्रामिंग लैंग्वेज जैसे [[ जावा (प्रोग्रामिंग भाषा) ]] इसलिए एक मेमोरी मॉडल को लागू करते हैं। मेमोरी मॉडल [[तुल्यकालन बाधा|सिंक्रनाइज़ेशन बाधा]]ओं को निर्दिष्ट करता है जो विशेष, अच्छी तरह से परिभाषित सिंक्रनाइज़ेशन ऑपरेशंस के माध्यम से स्थापित होते हैं जैसे सिंक्रनाइज़ ब्लॉक या विधि दर्ज करके लॉक प्राप्त करना। मेमोरी मॉडल निर्धारित करता है कि इस तरह के सिंक्रनाइज़ेशन बाधा तक पहुंचने पर साझा चर के मानों में परिवर्तन केवल अन्य थ्रेड्स के लिए दृश्यमान होने की आवश्यकता होती है। इसके अतिरिक्त, इन स्मृति बाधाओं के संबंध में संचालन के क्रम में दौड़ की स्थिति की संपूर्ण धारणा को परिभाषित किया गया है।<ref>{{cite web
आधुनिक प्रोग्रामिंग लैंग्वेज जैसे [[ जावा (प्रोग्रामिंग भाषा) ]] इसलिए एक मेमोरी मॉडल को लागू करते हैं। मेमोरी मॉडल [[तुल्यकालन बाधा|सिंक्रनाइज़ेशन बैरियर]] को निर्दिष्ट करता है जो विशेष, अच्छी तरह से परिभाषित सिंक्रनाइज़ेशन ऑपरेशंस के माध्यम से स्थापित होते हैं जैसे सिंक्रनाइज़ ब्लॉक या विधि दर्ज करके लॉक प्राप्त करना। मेमोरी मॉडल निर्धारित करता है कि इस तरह के सिंक्रनाइज़ेशन बैरियर तक पहुंचने पर साझा वैरिएबल के मानों में परिवर्तन केवल अन्य थ्रेड्स के लिए दृश्यमान होने की आवश्यकता होती है। इसके अतिरिक्त, इन स्मृति बैरियरं के संबंध में संचालन के क्रम में दौड़ की स्थिति की संपूर्ण धारणा को परिभाषित किया गया है।<ref>{{cite web
| url=http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html
| url=http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html
| title=JSR 133 (Java Memory Model) FAQ
| title=JSR 133 (Java Memory Model) FAQ
Line 16: Line 16:
| access-date=2010-10-18}}</ref>
| access-date=2010-10-18}}</ref>


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


मेमोरी मॉडल के क्षेत्र में अधिकांश शोध इसके इर्द-गिर्द घूमते हैं:
मेमोरी मॉडल के क्षेत्र में अधिकांश शोध इसके चारों ओर घूमते हैं:


* एक मेमोरी मॉडल डिजाइन करना जो रेस-फ्री और (शायद अधिक महत्वपूर्ण रूप से) रेस-युक्त कार्यक्रमों के बारे में पर्याप्त गारंटी देते हुए संकलक अनुकूलन के लिए अधिकतम स्वतंत्रता की अनुमति देता है।
* एक मेमोरी मॉडल डिजाइन करना जो रेस-फ्री और (संभवतः अधिक महत्वपूर्ण रूप से) रेस-युक्त प्रोग्रामों के बारे में पर्याप्त गारंटी देते हुए संकलक ऑप्टिमाइज़ेशन के लिए अधिकतम स्वतंत्रता की अनुमति देता है।
* ऐसे [[कार्यक्रम अनुकूलन]] को साबित करना जो ऐसे मेमोरी मॉडल के संबंध में सही हैं।
* ऐसे [[कार्यक्रम अनुकूलन|प्रोग्राम ऑप्टिमाइज़ेशन]] को सिद्ध करना जो ऐसे मेमोरी मॉडल के संबंध में सही हैं।


[[जावा मेमोरी मॉडल]]परस्पर क्रियाओंलोकप्रिय प्रोग्रामिंग भाषा के लिए व्यापक थ्रेडिंग मेमोरी मॉडल प्रदान करने का पहला प्रयास था।<ref>{{cite web
[[जावा मेमोरी मॉडल]] लोकप्रिय प्रोग्रामिंग भाषा के लिए व्यापक थ्रेडिंग मेमोरी मॉडल प्रदान करने का पहला प्रयास था।<ref>{{cite web
| url=http://www.ibm.com/developerworks/library/j-jtp02244.html
| url=http://www.ibm.com/developerworks/library/j-jtp02244.html
| title=Fixing the Java Memory Model, Part 1
| title=Fixing the Java Memory Model, Part 1
Line 29: Line 29:
| last=Goetz|first=Brian
| last=Goetz|first=Brian
| website=[[IBM]]
| website=[[IBM]]
| access-date=2008-02-17}}</ref> यह स्थापित होने के बाद कि कार्यान्वयन पर कुछ प्रतिबंध लगाए बिना और विशेष रूप से [[सी (प्रोग्रामिंग भाषा)]] और [[सी ++]] मानकों (सी 99 और [[सी ++ 03]]) में आवश्यक प्रतिबंधों की कमी के बिना थ्रेड्स को [[ पुस्तकालय (कम्प्यूटिंग) ]] के रूप में सुरक्षित रूप से कार्यान्वित नहीं किया जा सका। ,<ref>{{Cite journal|url = http://plg.uwaterloo.ca/usystem/pub/uSystem/LibraryApproach.pdf|title = Are Safe Concurrency Libraries Possible?|last = Buhr|first = Peter A.|date = September 11, 1995|access-date = 2015-05-12}}</ref><ref>{{Cite web|title = थ्रेड्स को लाइब्रेरी के रूप में लागू नहीं किया जा सकता है|url = http://www.hpl.hp.com/techreports/2004/HPL-2004-209.pdf|access-date = 2015-05-12|last = Boehm|first = Hans-J.|date = November 12, 2004|archive-date = 2017-05-30|archive-url = https://web.archive.org/web/20170530160703/http://www.hpl.hp.com/techreports/2004/HPL-2004-209.pdf|url-status = dead}}</ref> उपयुक्त मेमोरी मॉडल पर काम करने के लिए सी ++ थ्रेडिंग उपसमिति सेट; 2005 में, उन्होंने C वर्किंग डॉक्यूमेंट n1131 जमा किया<ref>{{Cite web|title = C++ मेमोरी मॉडल चर्चाओं का C भाषा पर प्रभाव|url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1131.pdf|website = www.open-std.org|access-date = 2015-05-12|date = 2005-08-26|last1 = Boehm|first1 = Hans|author-link = Hans-J. Boehm|last2 = Lea|first2 = Doug|author-link2 = Doug Lea|last3 = Pugh|first3 = Bill}}</ref> उनके प्रयासों से सी समिति को बोर्ड पर लाने के लिए। प्रस्तावित मेमोरी मॉडल का अंतिम संशोधन, C++ n2429,<ref>{{Cite web|title = WG21/N2429: Concurrency memory model (final revision)|url = http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm|website = www.open-std.org|access-date = 2015-05-12|date = 2007-10-05}}</ref> कोना में अक्टूबर 2007 की बैठक में सी ++ ड्राफ्ट मानक में स्वीकार किया गया था।<ref>{{Cite web|title = N2480: A Less Formal Explanation of the Proposed C++ Concurrency Memory Model|url = http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2480.html|website = www.open-std.org|access-date = 2015-05-12}}</ref> मेमोरी मॉडल को अगले सी ++ और सी मानकों, [[सी ++ 11]] और सी 11 (सी मानक संशोधन) में शामिल किया गया था।<ref>{{cite web
| access-date=2008-02-17}}</ref> यह स्थापित होने के बाद कि कार्यान्वयन पर कुछ प्रतिबंध लगाए बिना और विशेष रूप से [[सी (प्रोग्रामिंग भाषा)]] और [[सी ++]] मानकों (सी 99 और [[सी ++ 03]]) में आवश्यक प्रतिबंधों की कमी के बिना थ्रेड्स को [[ पुस्तकालय (कम्प्यूटिंग) | लाइब्रेरी (कम्प्यूटिंग)]] के रूप में सुरक्षित रूप से कार्यान्वित नहीं किया जा सका,<ref>{{Cite journal|url = http://plg.uwaterloo.ca/usystem/pub/uSystem/LibraryApproach.pdf|title = Are Safe Concurrency Libraries Possible?|last = Buhr|first = Peter A.|date = September 11, 1995|access-date = 2015-05-12}}</ref><ref>{{Cite web|title = थ्रेड्स को लाइब्रेरी के रूप में लागू नहीं किया जा सकता है|url = http://www.hpl.hp.com/techreports/2004/HPL-2004-209.pdf|access-date = 2015-05-12|last = Boehm|first = Hans-J.|date = November 12, 2004|archive-date = 2017-05-30|archive-url = https://web.archive.org/web/20170530160703/http://www.hpl.hp.com/techreports/2004/HPL-2004-209.pdf|url-status = dead}}</ref> उपयुक्त मेमोरी मॉडल पर कार्य करने के लिए सी ++ थ्रेडिंग उपसमिति सेट; 2005 में, उन्होंने सी समिति को बोर्ड पर लाने के लिए C वर्किंग डॉक्यूमेंट n1131 जमा किया<ref>{{Cite web|title = C++ मेमोरी मॉडल चर्चाओं का C भाषा पर प्रभाव|url = http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1131.pdf|website = www.open-std.org|access-date = 2015-05-12|date = 2005-08-26|last1 = Boehm|first1 = Hans|author-link = Hans-J. Boehm|last2 = Lea|first2 = Doug|author-link2 = Doug Lea|last3 = Pugh|first3 = Bill}}</ref> प्रस्तावित मेमोरी मॉडल का अंतिम संशोधन, C++ n2429,<ref>{{Cite web|title = WG21/N2429: Concurrency memory model (final revision)|url = http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2429.htm|website = www.open-std.org|access-date = 2015-05-12|date = 2007-10-05}}</ref> कोना में अक्टूबर 2007 की बैठक में सी ++ ड्राफ्ट मानक में स्वीकार किया गया था।<ref>{{Cite web|title = N2480: A Less Formal Explanation of the Proposed C++ Concurrency Memory Model|url = http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2480.html|website = www.open-std.org|access-date = 2015-05-12}}</ref> मेमोरी मॉडल को अगले सी ++ और सी मानकों, [[सी ++ 11]] और सी 11 (सी मानक संशोधन) में सम्मिलित  किया गया था।<ref>{{cite web
| url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1777.pdf
| url=http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1777.pdf
| title=Memory Model for Multithreaded C++: Issues
| title=Memory Model for Multithreaded C++: Issues

Revision as of 20:30, 28 April 2023

कंप्यूटिंग में, एक मेमोरी मॉडल मेमोरी (कंप्यूटिंग) के माध्यम से थ्रेड (कंप्यूटर साइंस) की परस्पर क्रियाओं और डेटा (कंप्यूटिंग) के उनके साझा उपयोग का वर्णन करता है।

झा उपयोकी परस्परस्पर क्रियाओं और डेटा (कंप्यूटिंग) के उनके साझा उपयोग का वर्णन करता है।

इतिहास और महत्व

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

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

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

मेमोरी मॉडल के क्षेत्र में अधिकांश शोध इसके चारों ओर घूमते हैं:

  • एक मेमोरी मॉडल डिजाइन करना जो रेस-फ्री और (संभवतः अधिक महत्वपूर्ण रूप से) रेस-युक्त प्रोग्रामों के बारे में पर्याप्त गारंटी देते हुए संकलक ऑप्टिमाइज़ेशन के लिए अधिकतम स्वतंत्रता की अनुमति देता है।
  • ऐसे प्रोग्राम ऑप्टिमाइज़ेशन को सिद्ध करना जो ऐसे मेमोरी मॉडल के संबंध में सही हैं।

जावा मेमोरी मॉडल लोकप्रिय प्रोग्रामिंग भाषा के लिए व्यापक थ्रेडिंग मेमोरी मॉडल प्रदान करने का पहला प्रयास था।[2] यह स्थापित होने के बाद कि कार्यान्वयन पर कुछ प्रतिबंध लगाए बिना और विशेष रूप से सी (प्रोग्रामिंग भाषा) और सी ++ मानकों (सी 99 और सी ++ 03) में आवश्यक प्रतिबंधों की कमी के बिना थ्रेड्स को लाइब्रेरी (कम्प्यूटिंग) के रूप में सुरक्षित रूप से कार्यान्वित नहीं किया जा सका,[3][4] उपयुक्त मेमोरी मॉडल पर कार्य करने के लिए सी ++ थ्रेडिंग उपसमिति सेट; 2005 में, उन्होंने सी समिति को बोर्ड पर लाने के लिए C वर्किंग डॉक्यूमेंट n1131 जमा किया[5] प्रस्तावित मेमोरी मॉडल का अंतिम संशोधन, C++ n2429,[6] कोना में अक्टूबर 2007 की बैठक में सी ++ ड्राफ्ट मानक में स्वीकार किया गया था।[7] मेमोरी मॉडल को अगले सी ++ और सी मानकों, सी ++ 11 और सी 11 (सी मानक संशोधन) में सम्मिलित किया गया था।[8][9]


यह भी देखें

संदर्भ

  1. Jeremy Manson and Brian Goetz (February 2004). "JSR 133 (Java Memory Model) FAQ". Retrieved 2010-10-18. The Java Memory Model describes what behaviors are legal in multithreaded code, and how threads may interact through memory. It describes the relationship between variables in a program and the low-level details of storing and retrieving them to and from memory or registers in a real computer system. It does this in a way that can be implemented correctly using a wide variety of hardware and a wide variety of compiler optimizations.
  2. Goetz, Brian (2004-02-24). "Fixing the Java Memory Model, Part 1". IBM. Retrieved 2008-02-17.
  3. Buhr, Peter A. (September 11, 1995). "Are Safe Concurrency Libraries Possible?" (PDF). Retrieved 2015-05-12. {{cite journal}}: Cite journal requires |journal= (help)
  4. Boehm, Hans-J. (November 12, 2004). "थ्रेड्स को लाइब्रेरी के रूप में लागू नहीं किया जा सकता है" (PDF). Archived from the original (PDF) on 2017-05-30. Retrieved 2015-05-12.
  5. Boehm, Hans; Lea, Doug; Pugh, Bill (2005-08-26). "C++ मेमोरी मॉडल चर्चाओं का C भाषा पर प्रभाव" (PDF). www.open-std.org. Retrieved 2015-05-12.
  6. "WG21/N2429: Concurrency memory model (final revision)". www.open-std.org. 2007-10-05. Retrieved 2015-05-12.
  7. "N2480: A Less Formal Explanation of the Proposed C++ Concurrency Memory Model". www.open-std.org. Retrieved 2015-05-12.
  8. Alexandrescu, Andrei; Boehm, Hans; Henney, Kevlin; Hutchings, Ben; Lea, Doug; Pugh, Bill (2005-03-04). "Memory Model for Multithreaded C++: Issues" (PDF). Retrieved 2014-04-24. C++ threading libraries are in the awkward situation of specifying (implicitly or explicitly) an extended memory model for C++ in order to specify program execution.We propose integrating a memory model suitable for multithreaded execution into the C++ Standard.
  9. Boehm, Hans. "Threads and memory model for C++". Retrieved 2014-04-24. This [link farm] provides information related to the effort to clarify the meaning of multi-threaded C++ programs, and to provide some standard thread-related APIs where those are currently missing.