Shared Memory Segments

Kategori: Parallel Programming , 21 Ekim 2019 , JanFranco


Shared Memory Segments, iki veya daha fazla process'in bellekte yani Ram'de ortak bir alan oluşturmasıdır. Yani bir process ramde yer açıp oraya bir şey yazabilir ve başka bir process bu yere erişip oraya yazabilir/okuyabilir.

shmget fonksiyonu ile shared memory segment oluşturabilir, eğer var ise bağlanabiliriz. Bu fonksiyon segment için bir identifed, id döner:


shmid = shmget(key_t key, size_t size, int shmflg);
Fonksiyonun parametrelerini açıklamak gerekirse, key_t key, göndereceğimiz key'dir. Message queue'lerde bunu oluşturmayı görmüştük. size_t size parametresi bellekte ne kadar alan açılacağıdır. 1024 yazarak 1k'lık yer açabiliriz. shmflg dosya izinleri ve komuttur. 0666 | IPC_CREAT gibi. Segment'i oluşturduk. Şimdi de bağlanmayı görelim:


data = shmat(int shmid, void *shmaddr, int shmflg);
shmat fonksiyonu ile id'sini bildiğimiz segment'e bağlanabiliriz. Fonksiyonun parametrelerini açıklamak gerekirse, ilk parametre segment'in id'sidir. İkinci parametre için, belli bir adres vermek istiyorsak verebiliriz. Genellikle 0 kullanılır. 0 yazıldığında işletim sistemi otomatik olarak bir yer seçer ve göndereceğimiz/alacağımız datayı orada tutar. shmflg izinlerdir. SHM_RDONLY, SHM_WRONLY gibi. Segment'i oluşturduk ve bağlandık. Bağlantıyı kesmeyi görelim:


shmdt(void *shmaddr);
Bu fonksiyon ile segment ile bağlantıyı kesebiliriz. Hangi adressi vereceğimizi nereden bileceğiz derseniz, shmat() fonksiyonu bir adress döner. Biz bu adresi data değişkeninde sakladık. Şu şekilde bir kullanım yapabiliriz:


shmdt(data);
Bu şekilde bağlantıyı keseriz ancak bağlantıyı kesmek segment'i yok etmez. Segment'i yok etmek için:


shmctl(int shmid, IPC_RMID, NULL);
ID'sini bildiğimiz segment'i bu şekilde destroy edebiliriz.


Sonraki Yazı: Shared Memory Segments Example
Yorumlar

Henüz bir yorum bulunmuyor.
Yorum bırakın