7.3.3 Пам’ять POSIX, що спільно використовується
Програми реального часу часто вимагають швидких, з високою пропускною здатністю механізмів міжпроцесної взаємодії (Interprocess Communication, IPC). У цьому розділі ми обговоримо пам'ять POSIX, що розділяється, яка є найшвидшим і найпростішим механізмом IPC. Загальна пам'ять є найшвидшим механізмом IPC із двох причин:
▪ Немає накладних витрат системного виклику під час читання або запису даних.
▪ Дані копіюються безпосередньо в область спільної пам'яті. Без участі буферів ядра чи інших проміжних буферів.
Функції, які використовуються для створення та видалення спільної пам'яті, наведені в Таблиці 7.4.
Таблиця 7.4 Функції для спільної пам'яті POSIX.1b
Відкриває об'єкт у спільній пам'яті
Видаляє об'єкт із загальної пам'яті
Реалізація у Linux
Підтримка спільної пам'яті POSIX в Linux використовує файлову систему tmpfs, змонтовану в /dev/shm.
none /dev/shm tmpfs defaults 0 0
Об'єкт розділеної пам'яті, створений з допомогою shm_open , представлений у tmpfs як файла. Видаліть у Роздруківці 7.7 виклик shm_unlink та запустіть програму знову. Ви повинні побачити файл /dev/shm my_shm .
-rw-r--r-- 1 root root 1024 Aug 19 18:57 my_shm
Це показує файл my_shm розміром 1024 б, який є розміром нашої спільної пам'яті. Таким чином, ми можемо використовувати для спільної пам'яті всі файлові операції. Наприклад, ми можемо отримати вміст спільної пам'яті, виконавши для цього файлу команду cat . Також ми можемо використовувати для видалення загальної пам'яті команду rm прямо із оболонки.
Що слід пам'ятати
▪ Пам'ятайте про блокування області пам'яті за допомогою mlock .
▪ Для синхронізації доступу до спільно використовуваної області пам'яті використовуйтесемафори POSIX.
▪ Розмір області загальної пам'яті можна отримати за допомогою функції fstat .
▪ Якщо кілька процесів відкривають один і той же регіон пам'яті, що розділяється, цей регіон буде видалений тільки після заключного виклику shm_unlink .
▪ Не викликайте shm_unlink , якщо потрібно зберегти спільну область пам'яті навіть після завершення процесу.