Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> C++

शेयर्ड मेमोरी के माध्यम से IPC

शेयर्ड मेमोरी दो या अधिक प्रोसेस के बीच शेयर की गई मेमोरी है। हालांकि, हमें मेमोरी शेयर करने या संचार के किसी अन्य साधन की आवश्यकता क्यों है?

दोहराने के लिए, प्रत्येक प्रोसेस का अपना एड्रेस स्पेस होता है, यदि कोई प्रोसेस अपने स्वयं के एड्रेस स्पेस से कुछ जानकारी अन्य प्रोसेस को संवाद करना चाहता है, तो यह केवल IPC (इंटर-प्रोसेस कम्युनिकेशन) तकनीकों के साथ संभव है। जैसा कि हम पहले से जानते हैं, संचार संबंधित या असंबंधित प्रोसेस के बीच हो सकता है।

आमतौर पर, इंटर-रिलेटेड प्रोसेस कम्युनिकेशन पाइप्स या नेम्ड पाइप्स का उपयोग करके किया जाता है। असंबंधित प्रोसेस (मान लीजिए एक प्रोसेस एक टर्मिनल में चल रहा है और दूसरा प्रोसेस दूसरे टर्मिनल में) संचार नेम्ड पाइप्स या लोकप्रिय IPC तकनीकों शेयर्ड मेमोरी और मैसेज क्यू के माध्यम से किया जा सकता है।

हमने पाइप्स और नेम्ड पाइप्स की IPC तकनीकें देखी हैं और अब शेष IPC तकनीकों यानी शेयर्ड मेमोरी, मैसेज क्यू, सेमाफोर्स, सिग्नल्स, और मेमोरी मैपिंग को जानने का समय है।

शेयर्ड मेमोरी के माध्यम से IPC

हम जानते हैं कि दो या अधिक प्रोसेस के बीच संवाद करने के लिए, हम शेयर्ड मेमोरी का उपयोग करते हैं लेकिन शेयर्ड मेमोरी का उपयोग करने से पहले सिस्टम कॉल के साथ क्या करने की आवश्यकता है, आइए देखते हैं -

  • शेयर्ड मेमोरी सेगमेंट बनाएं या पहले से बने शेयर्ड मेमोरी सेगमेंट का उपयोग करें (shmget())

  • प्रोसेस को पहले से बने शेयर्ड मेमोरी सेगमेंट से अटैच करें (shmat())

  • प्रोसेस को पहले से अटैच्ड शेयर्ड मेमोरी सेगमेंट से डिटैच करें (shmdt())

  • शेयर्ड मेमोरी सेगमेंट पर कंट्रोल ऑपरेशन (shmctl())

यहां हम दो प्रोसेस बनाएंगे। एक लिख सकता है और दूसरा पढ़ सकता है। आइए देखते हैं कि रीडर और राइटर प्रोसेस शेयर्ड मेमोरी का उपयोग करके कैसे काम कर रहे हैं।

उदाहरण कोड (राइटर)

#include <iostream>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
using namespace std;

int main() {
    key_t my_key = ftok("shmfile", 65); // ftok फंक्शन का उपयोग यूनिक की जनरेट करने के लिए
    int shmid = shmget(my_key, 1024, 0666 | IPC_CREAT); // shmget shmid में एक आईडी लौटाता है
    char* str = (char*) shmat(shmid, (void*)0, 0); // शेयर्ड मेमोरी से जुड़ने के लिए shmat
    cout << "Write Data: ";
    fgets(str, 50, stdin);
    printf("Data written in memory: %s\n", str);
    // शेयर्ड मेमोरी से डिटैच करें
    shmdt(str);
    return 0;
}

उदाहरण कोड (रीडर)

#include <iostream>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <stdio.h>
using namespace std;

int main() {
    key_t my_key = ftok("shmfile", 65); // ftok फंक्शन का उपयोग यूनिक की जनरेट करने के लिए
    int shmid = shmget(my_key, 1024, 0666 | IPC_CREAT); // shmget shmid में एक आईडी लौटाता है
    char* str = (char*) shmat(shmid, (void*)0, 0); // शेयर्ड मेमोरी से जुड़ने के लिए shmat
    printf("Data read from memory: %s\n", str);
    shmdt(str);
    shmctl(shmid, IPC_RMID, NULL); // शेयर्ड मेमोरी नष्ट करें
    return 0;
}

आउटपुट

शेयर्ड मेमोरी के माध्यम से IPC

  1. डिस्ट्रिब्यूटेड शेयर्ड मेमोरी लागू करने के लिए एल्गोरिदम डिस्ट्रिब्यूटेड शेयर्ड मेमोरी लागू करने के लिए एल्गोरिदम

    शेयर्ड मेमोरी वह मेमोरी ब्लॉक है जिसे एक से अधिक प्रोग्राम द्वारा एक्सेस किया जा सकता है। शेयर्ड मेमोरी अवधारणा का उपयोग संचार का एक तरीका प्रदान करने और कम रिडंडेंट मेमोरी मैनेजमेंट प्रदान करने के लिए किया जाता है।डिस्ट्रिब्यूटेड शेयर्ड मेमोरी जिसे DSM के रूप में संक्षिप्त किया जाता है, डिस्ट्रिब्य

  1. गूगल क्रोम मेमोरी उपयोग और लीक मुद्दों को समझना और ठीक करना गूगल क्रोम मेमोरी उपयोग और लीक मुद्दों को समझना और ठीक करना

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

  1. IRQL_NOT_LESS_OR_EQUAL (0x0000000A) बग चेक का समाधान – ड्राइवर और मेमोरी फिक्स IRQL_NOT_LESS_OR_EQUAL (0x0000000A) बग चेक का समाधान – ड्राइवर और मेमोरी फिक्स

    IRQL_NOT_LESS_OR_EQUAL एरर को ठीक करें यदि आप बग चेक मान 0x0000000A के साथ उपरोक्त एरर कोड का सामना करते हैं, तो यह इंगित करता है कि एक कर्नेल-मोड ड्राइवर ने उठे हुए इंटरप्ट रिक्वेस्ट लेवल (IRQL) पर एक अमान्य पते पर पेज्ड मेमोरी एक्सेस की। संक्षेप में, ड्राइवर ने उस मेमोरी पते तक पहुंचने का प्रयास क