C Academy · पाठ

Shared Memory

तेज़ IPC

पाठ 2, कुल 4 में से13 चरण

Shared Memory, CoddyKit पर C Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह C Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

साझा मेमोरी से तेज़ IPC

साझा मेमोरी कई प्रक्रियाओं को भौतिक मेमोरी के एक ही क्षेत्र को अपने address space में map करने देती है। यह IPC का सबसे तेज़ रूप है, क्योंकि डेटा कर्नेल के माध्यम से कॉपी नहीं किया जाता।

यह तेज़ क्यों है

पाइप और सॉकेट डेटा को एक प्रक्रिया से कर्नेल तक और फिर वापस कॉपी करते हैं। साझा मेमोरी इस चरण को छोड़ देती है: एक बार map हो जाने पर प्रक्रियाएँ प्रत्येक संदेश के लिए कॉपी किए बिना उन्हीं बाइट को सीधे पढ़ती और लिखती हैं।

POSIX बनाम System V

दो API हैं:

  • POSIX: shm_open + mmap, file जैसा और आधुनिक
  • System V: shmget + shmat, पुराना और key-आधारित

नए code के लिए सामान्यतः POSIX को प्राथमिकता दी जाती है।

चरण 1: ऑब्जेक्ट बनाएँ

shm_open नामित साझा-मेमोरी ऑब्जेक्ट बनाता या खोलता है और एक file descriptor लौटाता है। नाम slash से शुरू होता है, जैसे /myshm।

#include <sys/mman.h>
#include <fcntl.h>

int create_shm(const char *name) {
    int fd = shm_open(name, O_CREAT | O_RDWR, 0666);
    return fd; /* -1 on error */
}

चरण 2: आकार निर्धारित करें

नए साझा ऑब्जेक्ट की लंबाई शून्य होती है। map करने से पहले उसका आकार निर्धारित करने के लिए ftruncate का उपयोग करें।

#include <unistd.h>
#include <stddef.h>

int size_shm(int fd, size_t bytes) {
    return ftruncate(fd, (off_t)bytes); /* set the region size */
}

चरण 3: Map करें

mmap ऑब्जेक्ट को प्रक्रिया के address space में map करता है और एक pointer लौटाता है, जिसका उपयोग आप सामान्य मेमोरी की तरह करते हैं।

#include <sys/mman.h>
#include <stddef.h>

void *map_shm(int fd, size_t bytes) {
    void *p = mmap(NULL, bytes, PROT_READ | PROT_WRITE,
                   MAP_SHARED, fd, 0);
    return p; /* MAP_FAILED on error */
}

पढ़ना और लिखना

एक बार map हो जाने पर pointer को dereference करें। साझा मेमोरी में मौजूद struct उस प्रत्येक प्रक्रिया को दिखाई देता है जो उसी ऑब्जेक्ट को map करती है।

#include <string.h>

typedef struct { int counter; char text[64]; } Shared;

void producer(Shared *s) {
    s->counter = 42;
    strcpy(s->text, "hello from producer");
}

MAP_SHARED आवश्यक है

आपको MAP_SHARED देना ही होगा ताकि लिखे गए बदलाव अन्य प्रक्रियाओं को दिखाई दें। MAP_PRIVATE copy-on-write वाली निजी mapping देता है, जिसे अन्य प्रक्रियाएँ कभी नहीं देखतीं।

समन्वय की ज़िम्मेदारी आपकी है

साझा मेमोरी में अंतर्निहित समन्वय की कोई सुविधा नहीं होती। समन्वय के बिना दो प्रक्रियाएँ race की स्थिति में डेटा खराब कर सकती हैं। इसकी सुरक्षा semaphores, mutexes या atomics से करें।

नामित Semaphore का उपयोग

POSIX नामित semaphore (sem_open) पहुँच का समन्वय करता है। producer डेटा तैयार होने पर post करता है; consumer पढ़ने से पहले wait करता है।

#include <semaphore.h>
#include <fcntl.h>

sem_t *open_sem(const char *name) {
    return sem_open(name, O_CREAT, 0666, 0); /* initial value 0 */
}
/* producer: sem_post(s);   consumer: sem_wait(s); */

सफाई

संसाधनों को हमेशा मुक्त करें:

  • क्षेत्र को unmap करने के लिए munmap
  • descriptor पर close
  • नामित ऑब्जेक्ट हटाने के लिए shm_unlink

अन्यथा प्रक्रिया समाप्त होने के बाद भी ऑब्जेक्ट /dev/shm में बना रहता है।

#include <sys/mman.h>
#include <unistd.h>
#include <stddef.h>

void cleanup(void *p, size_t bytes, int fd, const char *name) {
    munmap(p, bytes);
    close(fd);
    shm_unlink(name);
}

त्वरित जाँच

साझा मेमोरी के बारे में अपनी समझ जाँचें।

पुनरावलोकन

आपने साझा मेमोरी, यानी सबसे तेज़ IPC, सीखा।

  • shm_open, ftruncate, फिर MAP_SHARED के साथ mmap
  • साझा डेटा पढ़ने और लिखने के लिए pointer को dereference करें
  • आपको अपना समन्वय स्वयं जोड़ना होगा (semaphores)
  • munmap, close और shm_unlink से सफाई करें
शुरुआत निःशुल्क

एआई शिक्षक के साथ C सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
39
पाठ
144

अक्सर पूछे जाने वाले प्रश्न

क्या “Shared Memory” पाठ निःशुल्क है?

हाँ—“Shared Memory” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और C Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। C Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“Shared Memory” में मैं क्या सीखूँगा?

तेज़ IPC आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“Shared Memory” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Pipes
  2. Shared Memory
  3. Message Queues
  4. Signals
← C Academy पर वापस जाएँ