শেয়ার করা মেমরি হল দুই বা ততোধিক প্রক্রিয়ার মধ্যে ভাগ করা মেমরি। যাইহোক, কেন আমাদের মেমরি বা যোগাযোগের অন্য কোনো মাধ্যম শেয়ার করতে হবে?
পুনরাবৃত্ত করার জন্য, প্রতিটি প্রক্রিয়ার নিজস্ব ঠিকানার স্থান রয়েছে, যদি কোনো প্রক্রিয়া তার নিজস্ব ঠিকানা স্থান থেকে অন্য প্রক্রিয়াগুলিতে কিছু তথ্যের সাথে যোগাযোগ করতে চায়, তবে তা শুধুমাত্র আইপিসি (আন্তঃপ্রক্রিয়া যোগাযোগ) কৌশল দ্বারা সম্ভব। যেহেতু আমরা ইতিমধ্যেই সচেতন, যোগাযোগ সম্পর্কিত বা সম্পর্কহীন প্রক্রিয়াগুলির মধ্যে হতে পারে৷
সাধারণত, আন্তঃসম্পর্কিত প্রক্রিয়া যোগাযোগ পাইপ বা নামযুক্ত পাইপ ব্যবহার করে সঞ্চালিত হয়। অসম্পর্কিত প্রক্রিয়াগুলি (একটি টার্মিনালে একটি প্রক্রিয়া চলছে এবং অন্য একটি টার্মিনালে অন্য প্রক্রিয়া) যোগাযোগ নামযুক্ত পাইপ ব্যবহার করে বা শেয়ার্ড মেমরি এবং মেসেজ সারিগুলির জনপ্রিয় আইপিসি কৌশলগুলির মাধ্যমে সম্পাদিত হতে পারে৷
আমরা পাইপ এবং নামযুক্ত পাইপের IPC কৌশলগুলি দেখেছি এবং এখন বাকি IPC কৌশলগুলি যেমন, শেয়ার্ড মেমরি, মেসেজ কিউ, সেমাফোরস, সিগন্যাল এবং মেমরি ম্যাপিং জানার সময় এসেছে৷
আমরা জানি যে দুই বা ততোধিক প্রক্রিয়ার মধ্যে যোগাযোগ করার জন্য, আমরা শেয়ার্ড মেমরি ব্যবহার করি কিন্তু শেয়ার্ড মেমরি ব্যবহার করার আগে সিস্টেম কলের সাথে কি করা দরকার, আসুন এটি দেখি −
-
শেয়ার্ড মেমরি সেগমেন্ট তৈরি করুন বা ইতিমধ্যে তৈরি করা শেয়ার্ড মেমরি সেগমেন্ট ব্যবহার করুন (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 }
আউটপুট