0Pricing
C Academy · Ders

Paylaşılan Bellek

Hızlı IPC

Paylaşılan Bellek, CoddyKit'te ücretsiz bir C Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, C Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C Academy kursu toplamda 4 dersten oluşur.

Paylaşılan Bellekle Hızlı IPC

Paylaşılan bellek, birden çok sürecin aynı fiziksel bellek bölgesini kendi adres alanlarına eşlemesine olanak tanır. Veriler çekirdek üzerinden kopyalanmadığı için IPC'nin en hızlı biçimidir.

Neden Hızlıdır

Pipe'lar ve soketler verileri bir süreçten çekirdeğe, ardından geri kopyalar. Paylaşılan bellek bunu atlar: eşlendikten sonra süreçler her ileti için kopyalama yapmadan aynı baytları doğrudan okur ve yazar.

POSIX ve System V Karşılaştırması

İki API vardır:

  • POSIX: shm_open + mmap, dosya benzeri ve moderndir
  • System V: shmget + shmat, anahtar tabanlı ve daha eskidir

Yeni kodlarda genellikle POSIX tercih edilir.

1. Adım: Nesneyi Oluşturma

shm_open, adlandırılmış bir paylaşılan bellek nesnesi oluşturur veya açar ve bir dosya tanımlayıcısı döndürür. Ad, /myshm örneğinde olduğu gibi eğik çizgiyle başlar.

#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. Adım: Boyutunu Belirleme

Yeni oluşturulan bir paylaşılan nesnenin uzunluğu sıfırdır. Eşlemeden önce boyutunu ayarlamak için ftruncate kullanın.

#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. Adım: Eşleme

mmap, nesneyi sürecin adres alanına eşler ve normal bellek gibi kullanacağınız bir işaretçi döndürür.

#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 */
}

Okuma ve Yazma

Eşleme tamamlandıktan sonra işaretçinin gösterdiği değere doğrudan erişin. Paylaşılan bellekteki bir struct, aynı nesneyi eşleyen her süreç tarafından görülebilir.

#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 Zorunludur

Yazma işlemlerinin diğer süreçler tarafından görülebilmesi için MAP_SHARED iletmelisiniz. MAP_PRIVATE, kopya üzerine yazma kullanan özel bir eşleme oluşturur; diğer süreçler bunu asla göremez.

Eşzamanlama Sizin Sorumluluğunuzdur

Paylaşılan bellek yerleşik eşzamanlama sağlamaz. Eşgüdüm olmadan iki süreç bir yarış durumunda verileri bozabilir. Verileri semaforlar, karşılıklı dışlama kilitleri veya atomik işlemlerle koruyun.

Adlandırılmış Semafor Kullanma

POSIX adlandırılmış semaforu (sem_open) erişimi eşgüdümler. Üretici veri hazır olduğunda bildirim gönderir; tüketici okumadan önce bekler.

#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); */

Temizleme

Kaynakları her zaman serbest bırakın:

  • Bölgenin eşlemesini kaldırmak için munmap
  • Tanımlayıcıyı kapatmak için close
  • Adlandırılmış nesneyi kaldırmak için shm_unlink

Aksi takdirde nesne, süreç sonlandıktan sonra /dev/shm içinde kalır.

#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);
}

Kısa Kontrol

Paylaşılan bellek hakkındaki anlayışınızı sınayın.

Özet

IPC'nin en hızlı biçimi olan paylaşılan belleği öğrendiniz.

  • shm_open, ftruncate, ardından MAP_SHARED ile mmap
  • Paylaşılan verileri okumak ve yazmak için işaretçinin gösterdiği değere erişin
  • Kendi eşzamanlama mekanizmanızı (semaforları) eklemelisiniz
  • munmap, close ve shm_unlink ile temizleyin

Sıkça Sorulan Sorular

“Paylaşılan Bellek” dersi ücretsiz mi?

Evet — “Paylaşılan Bellek” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve C Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C Academy kursu toplamda 4 dersten oluşur.

“Paylaşılan Bellek” dersinde ne öğreneceğim?

Hızlı IPC C Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

C Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te C Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Paylaşılan Bellek” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu C Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her C Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Boru Hatları
  2. Paylaşılan Bellek
  3. İleti Kuyrukları
  4. Sinyaller
← C Academy Sayfasına Dön