- mmap
-
mmap — POSIX-совместимый системный вызов Unix, позволяющий выполнить отображение файла или устройства на память. Является методом ввода/вывода через отображение файла на память и естественным образом реализует выделение страниц по запросу, поскольку изначально содержимое файла не читается с диска и не использует физическую память вообще. Реальное считывание с диска производится в «ленивом» режиме, то есть при осуществлении доступа к определённому месту.
В Linux, Mac OS X и BSD mmap может создавать несколько типов отображений.
Анонимные отображения — отображения пространства виртуальной памяти процесса, а не файла в пространстве файловой системы. По этой причине анонимное отображение схоже с функцией malloc и используется в некоторых реализациях malloc для определённых размещений. Следует заметить, что анонимные отображения не являются частью стандарта POSIX, хотя и реализованы почти во всех системах.
Файловые отображения позволяют отобразить файл в виртуальной памяти. Доступ к этим участкам памяти приводит к чтению файла. Если отображение распределено между процессами, запись в это пространство в одном процессе окажет воздействие на другие процессы. Если используется частное (private) отображение, то изменения не будут видны другим процессам и не будут записаны в файл.
Процесс чтения или записи в связанный файл не всегда приводит к ожидаемому результату, поскольку сегменты файла копируются в оперативную память и периодически выгружаются на диск, однако синхронизация может быть форсирована с помощью системного вызова msync.
mmap файлов может значительно уменьшить нагрузку на диск для приложений, осуществляющих доступ к одному файлу. Если файл отображён в памяти, приложения могут разделять участок памяти, заключающей файл, вместо загрузки файла для каждого приложения, желающего осуществить доступ к нему.
К памяти, распределённой с помощью mmap, можно осуществлять доступ из дочерних процессов.
mmap можно использовать для реализации межпроцессного взаимодействия (IPC). В современных операционных системах mmap обычно предпочтительней взаимодействию через распределённую память в System V.
Основное различие между распределённой памятью System V (shmem) и вводом-выводом с распределением памяти (mmap) состоит в том, что распределённая память System V постоянна: не будучи явно удалены, данные будут храниться в памяти и оставаться доступными до тех пор, пока система не будет отключена. Память mmap не является постоянной между запусками приложения (только если отображение не зарезервировано в файле).
См. также
Ссылки
- Brian "Beej" Hall Memory Mapped Files. Beej's Guide to Unix Interprocess Communication. Архивировано из первоисточника 4 мая 2012. Проверено 29 июля 2010.
- Описание в стандарте POSIX
mmap(2)
— страница справки man для разработчика Linux — системные вызовы (англ.)mmap(3)
— страница справки man по библиотечным функциям GNU/Linux (англ.)
- Windows
- MapViewOfFile, функция win32, схожая с mmap.
Межпроцессное взаимодействие в информатике Методы Файл · Memory-mapped file · Обмен сообщениями · Message queue and mailbox · Именованный канал · Anonymous pipe · Pipe · Семафор (критическая секция, мьютекс, фьютекс) · Shared memory · Сигнал · Сокет · Unix domain socket Избранные протоколы
и стандартыApple events · COM+ · CORBA · D-Bus · DCE · DCOP · DIPC · ICE · LINX · ONC RPC · POSIX (различные методы) · SOAP · Thrift · TIPC · XML-RPC Категории:- Межпроцессное взаимодействие
- Стандарты POSIX
- C POSIX library
Wikimedia Foundation. 2010.