2010-02-14 3 views
22

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

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

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

Спасибо.

ответ

2

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

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

+2

Несомненно, QSHRMEMCTL является специфичным для iSeries. Об этом не упоминается в http://www.opengroup.org/onlinepubs/007908775/xsh/mmap.html, например. Как и многие вопросы об Unix apis, ответ действительно зависит от того, какой unix. –

+0

@Logan: достаточно справедливо, это выглядело как необоснованное ограничение. –

-1

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

+1

Как MAP_ANONYMOUS ведет к общей памяти? – Flexo

+0

MAP_ANONYMOUS может привести к совместной памяти между связанными процессами (детьми, внуками и т. Д. И процессом, который их разветвлял). –

Смежные вопросы