GNU/Linux >> Belajar Linux >  >> Linux

Memori bersama Linux:shmget() vs mmap()?

Banyak dari ini berkaitan dengan sejarah dan arah masa depan.

Sekali waktu ada dua versi unix utama (dan agak bersaing) - sistem V dan BSD. SysV memiliki versi IPC sendiri, termasuk 3 besar - memori bersama, semaphore, dan antrian pesan. POSIX datang untuk mencoba dan menyatukan berbagai hal.

Jadi saat ini kami memiliki dua versi - posix shared memory, MQs, dan semaphore dan versi sysV. Untuk membuatnya sedikit lebih membingungkan, versi sysV juga bagian dari posix.

Jadi pada dasarnya pertanyaan Anda adalah apakah Anda ingin menggunakan memori bersama gaya Posix atau sysV? Secara umum kebanyakan orang mengambil pandangan jangka panjang dan memilih Posix karena tampaknya jalan menuju masa depan. Namun, secara realistis, hal-hal sysV begitu tertanam dalam begitu banyak sistem sehingga Anda pasti ragu bahwa hal itu akan hilang.

Jadi, menghilangkan hal-hal jangka panjang, tergantung pada apa yang masuk akal untuk proyek dan selera Anda. Secara umum versi sysV sebenarnya cenderung agak lebih kuat tetapi mereka memiliki antarmuka kikuk yang bagi kebanyakan orang sedikit membingungkan pada kontak pertama. Ini terutama berlaku untuk sysV semaphore dan antrian pesan. Dalam hal memori bersama, dapat dikatakan sysV dan posix canggung. Versi sysV membawa ftok yang kikuk dan hal-hal penting sementara posix akhirnya menerima banyak panggilan dan beberapa kondisi balapan untuk disiapkan. Dari luar, versi posix memiliki keuntungan karena menggunakan sistem file dan dapat dipertahankan dengan fungsi baris perintah standar seperti 'rm' daripada mengandalkan program utilitas terpisah (mis. ipcs ) yang dibutuhkan sysV.

Jadi mana yang harus Anda gunakan? Sebagai aturan, versi posix. Tetapi Anda harus benar-benar membiasakan diri dengan versi sysV. Mereka memiliki beberapa fitur yang melampaui kemampuan versi posix yang mungkin ingin Anda manfaatkan dalam situasi tertentu.


Kedua metode itu layak. mmap metode ini sedikit lebih ketat daripada shmget , tetapi lebih mudah digunakan. shmget adalah model memori bersama System V lama dan memiliki dukungan terluas. mmap /shm_open adalah cara POSIX baru untuk melakukan memori bersama dan lebih mudah digunakan. Jika OS Anda mengizinkan penggunaan memori bersama POSIX maka saya sarankan untuk melakukannya.

Beberapa petunjuk:

  • Jika Anda membuat anak Anda melalui fork lalu mmap dengan MAP_ANONYMOUS | MAP_SHARED sejauh ini merupakan cara termudah - hanya satu panggilan. MAP_ANONYMOUS namun merupakan ekstensi Linux yang tidak ditentukan oleh POSIX.
  • Jika Anda memulai proses secara mandiri, tetapi dapat menyediakannya dengan nama memori bersama, maka shm_open (+ ftruncate ) + mmap dengan MAP_SHARED adalah dua/tiga panggilan. Membutuhkan librt pada beberapa OS.
  • Jika OS Anda memiliki /dev/shm/ lalu shm_open sama dengan membuka file di /dev/shm/ .

Linux
  1. Rekomendasi Komunikasi Antar Proses

  2. Apakah alokasi memori di linux tidak memblokir?

  3. Memori tidak aktif Linux

  1. Cara Menghapus Cache Memori di Linux

  2. Linux – Penggunaan Memori Nyata?

  3. Manual Programmer Posix Vs Manual Programmer Linux?

  1. Kali Linux 2018.1 Rilis

  2. Contoh Perintah ipcs di Linux

  3. Cara menginisialisasi perpustakaan bersama di Linux