शेयर्ड मेमोरी दो या अधिक प्रोसेस के बीच शेयर की गई मेमोरी है। हालांकि, हमें मेमोरी शेयर करने या संचार के किसी अन्य साधन की आवश्यकता क्यों है?
दोहराने के लिए, प्रत्येक प्रोसेस का अपना एड्रेस स्पेस होता है, यदि कोई प्रोसेस अपने स्वयं के एड्रेस स्पेस से कुछ जानकारी अन्य प्रोसेस को संवाद करना चाहता है, तो यह केवल 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;
}
आउटपुट
