GNU/Linux >> Belajar Linux >  >> Linux

Mengapa menggunakan shm_open?

Kedua panggilan pada dasarnya setara pada Linux modern - Pendekatan pertama dapat digunakan untuk mengakses memori bersama POSIX dari bahasa seperti go (lihat https://github.com/fabiokung/shm/blob/master/shm_linux.go ) di mana memori bersama POSIX tidak tersedia secara asli - mungkin berbeda untuk OS/versi lain di mana panggilan pertama akan menyebabkan beberapa pembuatan file atau /dev/shm tidak tersedia dan/atau mungkin kinerja lebih lambat. Aturan penggabungan jalur mungkin juga berkembang dari versi ke versi librt

Pendekatan pertama disebut API file yang dipetakan memori (didukung di std libs)

2 disebut API memori bersama POSIX (membutuhkan librt alias libposix di Linux sebagai ketergantungan Ini secara internal membangun jalur dan panggilan terbuka)


Setelah membaca sumber shm_open , bisa dibilang kedua metode tersebut hampir sama.

tautan:https://code.woboq.org/userspace/glibc/sysdeps/posix/shm_open.c.html

shm_open cukup tambahkan awalan shm_dir lalu panggil open normal syscall, tidak ada yang istimewa.


Jika Anda membuka dan mmap() file biasa, data akan berakhir di file itu.

Jika Anda hanya perlu berbagi wilayah memori, tanpa perlu mempertahankan data, yang menyebabkan overhead I/O tambahan, gunakan shm_open().

Wilayah memori seperti itu juga akan memungkinkan Anda untuk menyimpan objek jenis lain seperti mutex atau semaphore, yang tidak dapat Anda simpan dalam file reguler mmap() pada sebagian besar sistem.


Linux
  1. Mengapa Windows10 VM lambat di OpenStack?

  2. Mengapa Kami Menggunakan "./" (dot Slash) Untuk Mengeksekusi File Di Linux/unix?

  3. Mengapa Saya Tidak Dapat Menggunakan Cd Dalam Skrip Bash??

  1. Gunakan _roff Untuk Menggarisbawahi Kata?

  2. Mengapa kita membutuhkan file .so.1 di Linux?

  3. Mengapa rsync tidak menggunakan delta-transfer untuk file lokal?

  1. Linux – Mengapa Kami Menggunakan Su – Dan Bukan Hanya Su?

  2. Mengapa Linux menggunakan partisi swap daripada file?

  3. Buang memori proses linux ke file