Shared Memory Kullanımı
POSIX shared memory kullanımı, System V shared memory modeline göre avantajları nedeniyle özellikle yeni uygulamalarda daha fazla tercih edilmektedir.
Linux 2.4 çekirdeği ile birlikte desteklenmeye başlanmıştır.
Semafor kullanımına benzer şekilde, POSIX shared memory objeleri de Linux altında
tmpfs
dosya sistemi ile /dev/shm dizini altına bağlanmış halde tutulur.Bu dizin tmpfs türünde öntanımlı olarak, mevcut sistem belleğinin maksimum yarısını kullanacak şekilde bağlanır ancak
mount
işleminde parametre vererek bu değeri değiştirmek mümkündür.
shm_open
shm_open
shm_open
fonksiyonu, standart kütüphanedekiopen
fonksiyonuyla aynı arayüze sahiptir.Parametre olarak dosya ismi, işleme dair ayarlanan opsiyonlar ve açılacak kaynak üzerindeki erişim yetkilerini alır.
open
fonksiyonundakine benzer şekilde O_CREAT, O_EXCL, O_RDONLY, O_RDRW ve O_TRUNC opsiyonlarının bir veya birkaçı birleştirilerek parametre olarak verilebilir.Geriye dönen file descriptor referansı üzerinden
fstat
fonksiyonuyla yapacağımız kontroller ile, shared memory alanının büyüklüğünü öğrenebiliriz. Yeni açılan shared memory alanlarının boyutu başlangıçta sıfırdır.Memory map işlemini yapmadan önce,
ftruncate
fonksiyonu ile shared memory alanının boyutunu istediğimiz değere ayarlayabiliriz. Bu işlem üretilen alandaki bellek bölgesini'\0'
değerleriyle doldurur.
Örnek: Shared Memory Oluşturma
Örnek: Shared Memory Yazma
Kullanım
İlk örnekteki uygulamayı kullanarak, 4 byte uzunluğunda deneme1 adında bir shared memory alanı oluşturalım:
./shm_create -c deneme1 4
Ardından hexdump ile ilgili dosyaya bakalım:
hexdump -C /dev/shm/deneme1 00000000 00 00 00 00
Şimdi bu shared memory alanını genişleterek başka bir süreçten içerisine veri aktarıp hexdump ile kontrol edelim:
shm_unlink
shm_unlink
Shared memory alanını kaldırmak istediğimizde kullanılır.
shm_unlink
işlemi sonrası, ilgili alanını memory-map yöntemiyle kullanmakta olan diğer süreçlerin mapping bilgilerini etkilemez. İlgili süreçlerde ayrıcamunmap
fonksiyonu çağrılmalıdır.Shared memory alanını kullanan tüm süreçler
shm_unlink
yaptıktan veya sonlandıktan sonra, işletim sistemi tarafından ilgili alan tamamen kaldırılır.
Örnek
Last updated
Was this helpful?