शेयर्ड मेमोरी: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 76: Line 76:
<code>shm_open</code> द्वारा बनाई गई साझा स्मृति लगातार बनी रहती है। यह एक प्रक्रिया द्वारा स्पष्ट रूप से हटाए जाने तक प्रणाली में रहता है। इसमें एक कमी  है कि यदि प्रक्रिया दुर्घटनाग्रस्त हो जाती है और साझा मेमोरी को साफ करने में विफल रहती है तो यह प्रणाली बंद करना  बनी रहेगी; डब किए गए <code>ashmem</code>. एंड्रॉइड-विशिष्ट कार्यान्वयन में यह सीमा उपस्थित नहीं है <ref>{{Cite web|title=Android कर्नेल सुविधाएँ|url=https://elinux.org/Android_Kernel_Features#ashmem |access-date=12 Dec 2022 |website=elinux.org}}</ref>
<code>shm_open</code> द्वारा बनाई गई साझा स्मृति लगातार बनी रहती है। यह एक प्रक्रिया द्वारा स्पष्ट रूप से हटाए जाने तक प्रणाली में रहता है। इसमें एक कमी  है कि यदि प्रक्रिया दुर्घटनाग्रस्त हो जाती है और साझा मेमोरी को साफ करने में विफल रहती है तो यह प्रणाली बंद करना  बनी रहेगी; डब किए गए <code>ashmem</code>. एंड्रॉइड-विशिष्ट कार्यान्वयन में यह सीमा उपस्थित नहीं है <ref>{{Cite web|title=Android कर्नेल सुविधाएँ|url=https://elinux.org/Android_Kernel_Features#ashmem |access-date=12 Dec 2022 |website=elinux.org}}</ref>


पॉज़िक्स  मेमोरी में फ़ाइलों को मैप करने के लिए <code>[[mmap]]</code> एपीआई भी प्रदान करता है; '''स्मृति में फ़ाइलों की मैपिंग के लिए एपीआई;''' मैपिंग को साझा किया जा सकता है, जिससे फ़ाइल की पदार्थ को साझा मेमोरी के रूप में उपयोग करने की अनुमति मिलती है।
पॉज़िक्स  मेमोरी में फ़ाइलों को मैप करने के लिए <code>[[mmap]]</code> एपीआई भी प्रदान करता है; मैपिंग को साझा किया जा सकता है, जिससे फ़ाइल की पदार्थ को साझा मेमोरी के रूप में उपयोग करने की अनुमति मिलती है।


2.6 कर्नेल पर आधारित लिनक्स वितरण और बाद में रैम डिस्क के रूप में साझा मेमोरी के रूप में /dev/shm प्रदान करता है, विशेष रूप से एक विश्व-लेखन योग्य निर्देशिका के रूप में (एक निर्देशिका जिसमें प्रणाली का प्रत्येक उपयोगकर्ता फ़ाइलें बना सकता है) जो संग्रहीत है याद में। [[रेड हैट लिनक्स]] और [[डेबियन]] आधारित वितरण दोनों में इसे डिफ़ॉल्ट रूप से सम्मिलित किया गया है। इस प्रकार की [[रैम डिस्क]] के लिए समर्थन कर्नेल [[विन्यास फाइल]] के अंदर पूरी तरह से वैकल्पिक है।<ref>{{cite web
2.6 कर्नेल पर आधारित लिनक्स वितरण और बाद में रैम डिस्क के रूप में साझा मेमोरी के रूप में /dev/shm प्रदान करता है, विशेष रूप से एक विश्व-लेखन योग्य निर्देशिका के रूप में (एक निर्देशिका जिसमें प्रणाली का प्रत्येक उपयोगकर्ता फ़ाइलें बना सकता है) जो संग्रहीत है याद में। [[रेड हैट लिनक्स]] और [[डेबियन]] आधारित वितरण दोनों में इसे डिफ़ॉल्ट रूप से सम्मिलित किया गया है। इस प्रकार की [[रैम डिस्क]] के लिए समर्थन कर्नेल [[विन्यास फाइल]] के अंदर पूरी तरह से वैकल्पिक है।<ref>{{cite web
Line 86: Line 86:


=== विंडोज़ पर समर्थन ===
=== विंडोज़ पर समर्थन ===
विंडोज पर, एक फ़ाइल के एक क्षेत्र को कई प्रक्रियाओं में मेमोरी में मैप करने के लिए  <code>CreateFileMapping</code> और <code>MapViewOfFile</code> कार्य  का उपयोग कर सकते हैं'''।एक फ़ाइल के एक क्षेत्र को कई प्रक्रियाओं में मेमोरी में मैप करने के लिए कार्य करता है।'''<ref>[http://msdn.microsoft.com/en-us/library/windows/desktop/aa366551%28v=vs.85%29.aspx Creating Named Shared Memory] from MSDN.</ref>
विंडोज पर, एक फ़ाइल के एक क्षेत्र को कई प्रक्रियाओं में मेमोरी में मैप करने के लिए  <code>CreateFileMapping</code> और <code>MapViewOfFile</code> कार्य  का उपयोग कर सकते हैं <ref>[http://msdn.microsoft.com/en-us/library/windows/desktop/aa366551%28v=vs.85%29.aspx Creating Named Shared Memory] from MSDN.</ref>


'''विंडोज पर, एक फ़ाइल के एक क्षेत्र को कई प्रक्रियाओं में मेमोरी में मैप करने के लिए CreateFileMapping और MapViewOfFile कार्य  का उपयोग कर सकते हैं।<br />'''
'''विंडोज पर, एक फ़ाइल के एक क्षेत्र को कई प्रक्रियाओं में मेमोरी में मैप करने के लिए CreateFileMapping और MapViewOfFile कार्य  का उपयोग कर सकते हैं।<br />'''

Revision as of 10:34, 28 April 2023

तीन प्रोसेसरों की एक साझा स्मृति प्रणाली का एक उदाहरण।

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

एक प्रोग्राम के अंदर संचार के लिए मेमोरी का उपयोग करना, उदा। इसके कई थ्रेड्स (कंप्यूटर साइंस) के बीच, इसे साझा मेमोरी भी कहा जाता है।

हार्डवेयर में

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

कंप्यूटर हार्डवेयर में, साझा मेमोरी यादृच्छिक अभिगम स्मृति (रैम) के एक (सामान्यतः बड़े) ब्लॉक को संदर्भित करती है जिसे बहु में कई अलग-अलग केंद्रीय प्रसंस्करण इकाइयों (सीपीयू) द्वारा उपयोग किया जा सकता है।

साझा मेमोरी प्रणाली उपयोग कर सकते हैं:[1]

  • गैर-समान मेमोरी उपयोग (यूएमए): सभी प्रोसेसर भौतिक मेमोरी को समान रूप से साझा करते हैं;
  • गैर-समान मेमोरी उपयोग (नुमा ): मेमोरी उपयोग का समय प्रोसेसर के सापेक्ष मेमोरी लोकेशन पर निर्भर करता है;
  • कैश-ओनली मेमोरी वास्तुकला (कोमा ): प्रत्येक नोड पर प्रोसेसर के लिए स्थानीय मेमोरी का उपयोग वास्तविक मुख्य मेमोरी के अतिरिक्त कैश के रूप में किया जाता है।

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

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

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

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

साझा मेमोरी के विकल्प वितरित मेमोरी और वितरित साझा मेमोरी हैं, प्रत्येक में उद्देश्य का एक समान समूह होता है।

सॉफ्टवेयर में

कंप्यूटर सॉफ्टवेयर में, साझा मेमोरी या तो होती है

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

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

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

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

एकाधिक पता स्थान संचालन प्रणाली की तुलना में,

मेमोरी शेयरिंग -- विशेष रूप से साझा करने की प्रक्रिया या सूचक -आधारित संरचना --

एकल पता स्थान संचालन प्रणाली में सरल है।[2]


यूनिक्स जैसी प्रणालियों पर समर्थन

पॉज़िक्स साझा मेमोरी, पॉज़िक्स साझा मेमोरी का उपयोग करने के लिए एक मानकीकृत एपीआई प्रदान करता है। यह कार्य का उपयोग करता है shm_open sys/mman.h से [3] पॉज़िक्स अंतरप्रक्रिया संचार (पॉज़िक्स का भाग : एक्सएसआई विस्तार ) में साझा-मेमोरी कार्य सम्मिलित हैं shmat, shmctl, shmdt और shmget.[4][5] यूनिक्स प्रणाली V साझा मेमोरी के लिए भी एक एपीआई प्रदान करता है। यह sys/shm.h से shmget का उपयोग करता है। बीएसडी प्रणाली अनाम मैप की गई मेमोरी प्रदान करते हैं जिसका उपयोग कई प्रक्रियाओं द्वारा किया जा सकता है।

shm_open द्वारा बनाई गई साझा स्मृति लगातार बनी रहती है। यह एक प्रक्रिया द्वारा स्पष्ट रूप से हटाए जाने तक प्रणाली में रहता है। इसमें एक कमी है कि यदि प्रक्रिया दुर्घटनाग्रस्त हो जाती है और साझा मेमोरी को साफ करने में विफल रहती है तो यह प्रणाली बंद करना बनी रहेगी; डब किए गए ashmem. एंड्रॉइड-विशिष्ट कार्यान्वयन में यह सीमा उपस्थित नहीं है [6]

पॉज़िक्स मेमोरी में फ़ाइलों को मैप करने के लिए mmap एपीआई भी प्रदान करता है; मैपिंग को साझा किया जा सकता है, जिससे फ़ाइल की पदार्थ को साझा मेमोरी के रूप में उपयोग करने की अनुमति मिलती है।

2.6 कर्नेल पर आधारित लिनक्स वितरण और बाद में रैम डिस्क के रूप में साझा मेमोरी के रूप में /dev/shm प्रदान करता है, विशेष रूप से एक विश्व-लेखन योग्य निर्देशिका के रूप में (एक निर्देशिका जिसमें प्रणाली का प्रत्येक उपयोगकर्ता फ़ाइलें बना सकता है) जो संग्रहीत है याद में। रेड हैट लिनक्स और डेबियन आधारित वितरण दोनों में इसे डिफ़ॉल्ट रूप से सम्मिलित किया गया है। इस प्रकार की रैम डिस्क के लिए समर्थन कर्नेल विन्यास फाइल के अंदर पूरी तरह से वैकल्पिक है।[7]


विंडोज़ पर समर्थन

विंडोज पर, एक फ़ाइल के एक क्षेत्र को कई प्रक्रियाओं में मेमोरी में मैप करने के लिए CreateFileMapping और MapViewOfFile कार्य का उपयोग कर सकते हैं [8]

विंडोज पर, एक फ़ाइल के एक क्षेत्र को कई प्रक्रियाओं में मेमोरी में मैप करने के लिए CreateFileMapping और MapViewOfFile कार्य का उपयोग कर सकते हैं।

क्रॉस-प्लेटफ़ॉर्म समर्थन

कुछ C++ पुस्तकालय साझा स्मृति कार्यक्षमता के लिए एक वहनीय और वस्तु-उन्मुख पहुंच प्रदान करते हैं। उदाहरण के लिए, Boost (C++ पुस्तकालय ) में बूस्ट.अंतरप्रक्रिया C++ पुस्तकालय सम्मिलित है[9] और क्यूटी क्यू शेयर्ड मेमोरी वर्ग प्रदान करता है।[10]


प्रोग्रामिंग भाषा समर्थन

पॉज़िक्स बंधन (कहते हैं, C/C++) के साथ प्रोग्रामिंग भाषाओं के लिए, साझा मेमोरी क्षेत्रों को संचालन प्रणाली द्वारा प्रदान किए गए कार्यों को कॉल करके बनाया और उपयोग किया जा सकता है। समान प्रभाव के लिए इन संचालन सुविधाओं का उपयोग करने के अन्य प्रोग्रामिंग भाषाओं के अपने विधि हो सकते हैं। उदाहरण के लिए, पॉज़िक्स कार्य के समान, पीएचपी साझा मेमोरी बनाने के लिए एक एपीआई प्रदान करता है।[11]

यह भी देखें

संदर्भ

  1. El-Rewini, Hesham; Abd-El-Barr, Mostafa (2005). Advanced Computer Architecture and Parallel Processing. Wiley-Interscience. pp. 77–80. ISBN 978-0-471-46740-3.
  2. Jeffrey S. Chase; Henry M. Levy; Michael J. Feeley; and Edward D. Lazowska. "Sharing and Protection in a Single Address Space Operating System". doi:10.1145/195792.195795 1993. p. 3
  3. Documentation of shm_open from the Single Unix Specification
  4. Robbins, Kay A.; Robbins, Steven (2003). Unix systems programming: communication, concurrency, and threads (2 ed.). Prentice Hall PTR. p. 512. ISBN 978-0-13-042411-2. Retrieved 2011-05-13. The POSIX interprocess communication (IPC) is part of the POSIX:XSI Extension and has its origin in Unix System V interprocess communication.
  5. Shared memory facility from the Single Unix Specification.
  6. "Android कर्नेल सुविधाएँ". elinux.org. Retrieved 12 Dec 2022.
  7. Christoph Rohland; Hugh Dickins; KOSAKI Motohiro. "tmpfs.txt". kernel.org. Retrieved 2010-03-16.
  8. Creating Named Shared Memory from MSDN.
  9. Boost.Interprocess C++ Library
  10. "QSharedMemory Class Reference".
  11. Shared Memory Functions in PHP-API


बाहरी संबंध