Light-industry-up.ru

Экосистема промышленности

Mmap

28-06-2023

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. Проверено 29 июля 2010.
  • Описание в стандарте POSIX
  • mmap(2) — страница справки man для разработчика Linux — системные вызовы  (англ.)
  • mmap(3) — страница справки man по библиотечным функциям GNU/Linux  (англ.)
  • Различия:
    • FreeBSD
    • Linux
    • Mac OS X
    • Solaris
    • HP-UX
    • QNX
  • Windows
    • MapViewOfFile, функция win32, схожая с mmap.

Mmap.

© 2014–2023 light-industry-up.ru, Россия, Краснодар, ул. Листопадная 53, +7 (861) 501-67-06