Подтвердить что ты не робот

Совместная память Posix и сопоставленные файлы

Узнав немного о предмете, может ли кто-нибудь сказать, какова реальная разница между общей памятью POSIX (shm_open) и сопоставленными файлами POSIX (mmap)?

Оба, похоже, используют подсистему /dev/tmpfs, а не более старый механизм IPC.

Итак, есть ли преимущество использования файла mmap в общей памяти?

Спасибо.

4b9b3361

Ответ 2

Я понимаю, что общая память построена поверх сопоставленных файлов, но Эта страница, по-видимому, указывает на то, что возможность использования памяти сопоставленные файлы как разделяемая память являются условными.

Использование функции mmap() ограничено Системным значением QSHRMEMCTL. Когда это системное значение равно 0, функция mmap() может не создавать общее сопоставление с возможностью PROT_WRITE. По сути, это предотвращает создание карты памяти, которая может изменить содержимое отображаемого файла потока. Если параметр flags указывает MAP_SHARED, параметр prot указывает PROT_WRITE, а системное значение QSHRMEMCTL равно 0, тогда функции mmap() будут терпеть неудачу и число ошибок EACCES.

Ответ 3

В основном разделяемая память - это форма IPC. Общая область создается в /dev/shm, которая создается только в памяти (ОЗУ), и она не требует операций с дисками, следовательно, это более быстрый метод IPC. Хотя IPC может сделайте это с помощью дискового файла, а затем с помощью mmap тоже, но это будет сравнивать медленно. В любом случае вы всегда можете использовать MAP_ANONYMOUS с mmap, который не поддерживает резервное копирование с любым файлом диска.