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

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

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

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

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

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


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

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

यह भी देखें

 * मेमोरी ऑर्डरिंग
 * मेमोरी बैरियर
 * संगति मॉडल
 * शेयर्ड मेमोरी (इंटरप्रोसेस संचार)