साझा स्मृति दो या दो से अधिक प्रक्रियाओं के बीच साझा की गई स्मृति है। हालाँकि, हमें स्मृति या संचार के किसी अन्य माध्यम को साझा करने की आवश्यकता क्यों है?
दोहराने के लिए, प्रत्येक प्रक्रिया का अपना पता स्थान होता है, यदि कोई प्रक्रिया कुछ सूचनाओं के साथ अपने स्वयं के पता स्थान से अन्य प्रक्रियाओं तक संचार करना चाहती है, तो यह केवल आईपीसी (इंटर प्रोसेस संचार) तकनीकों के साथ संभव है। जैसा कि हम पहले से ही जानते हैं, संचार संबंधित या असंबंधित प्रक्रियाओं के बीच हो सकता है।
आमतौर पर, अंतर-संबंधित प्रक्रिया संचार पाइप्स या नामांकित पाइप्स का उपयोग करके किया जाता है। असंबंधित प्रक्रियाएं (जैसे कि एक प्रक्रिया एक टर्मिनल में चल रही है और दूसरी प्रक्रिया दूसरे टर्मिनल में चल रही है) संचार नामांकित पाइप्स का उपयोग करके या साझा मेमोरी और संदेश कतारों की लोकप्रिय आईपीसी तकनीकों के माध्यम से किया जा सकता है।
हमने पाइप्स और नामांकित पाइपों की आईपीसी तकनीकों को देखा है और अब शेष आईपीसी तकनीकों को जानने का समय आ गया है, जैसे कि साझा मेमोरी, संदेश कतार, सेमाफोर, सिग्नल और मेमोरी मैपिंग।
हम जानते हैं कि दो या दो से अधिक प्रक्रियाओं के बीच संवाद करने के लिए, हम साझा स्मृति का उपयोग करते हैं लेकिन साझा स्मृति का उपयोग करने से पहले सिस्टम कॉल के साथ क्या करने की आवश्यकता है, आइए इसे देखें -
-
साझा मेमोरी सेगमेंट बनाएं या पहले से बनाए गए साझा मेमोरी सेगमेंट का उपयोग करें (shmget ())
-
प्रक्रिया को पहले से बनाए गए साझा मेमोरी सेगमेंट (shmat ()) में संलग्न करें
-
पहले से संलग्न साझा स्मृति खंड (shmdt ()) से प्रक्रिया को अलग करें
-
साझा स्मृति खंड (shmctl ()) पर नियंत्रण संचालन
यहां हम दो प्रोसेस बनाएंगे। एक लिख सकता है और दूसरा पढ़ सकता है। आइए देखें कि साझा स्मृति का उपयोग करके पाठक और लेखक की प्रक्रियाएं कैसे काम कर रही हैं।
उदाहरण कोड
#include <iostream> #include <sys/ipc.h> #include <sys/shm.h> #include <stdio.h> using namespace std; main() { key_t my_key = ftok("shmfile",65); // ftok function is used to generate unique key int shmid = shmget(my_key,1024,0666|IPC_CREAT); // shmget returns an ide in shmid char *str = (char*) shmat(shmid,(void*)0,0); // shmat to join to shared memory cout<<"Write Data : "; fgets(str, 50, stdin); printf("Data written in memory: %s\n",str); //detach from shared memory shmdt(str); }
उदाहरण कोड
#include <iostream> #include <sys/ipc.h> #include <sys/shm.h> #include <stdio.h> using namespace std; main() { key_t my_key = ftok("shmfile",65); // ftok function is used to generate unique key int shmid = shmget(my_key,1024,0666|IPC_CREAT); // shmget returns an ide in shmid char *str = (char*) shmat(shmid,(void*)0,0); // shmat to join to shared memory printf("Data read from memory: %s\n",str); shmdt(str); shmctl(shmid,IPC_RMID,NULL); // destroy the shared memory }
आउटपुट