EMZETT.
Увійти

mmap: відображення файлів у пам’ять

Коротко: За допомогою mmap операційна система відображає файл в адресний простір програми, тож його можна читати й записувати як масив у пам’яті.

Докладніше: Програма більше не викликає read. Під час першого звернення до сторінки сторінкова помилка запускає підвантаження з диска.

Подробиці

  • Виклик: mmap(NULL, довжина, PROT_READ, MAP_SHARED, fd, 0) повертає вказівник. У Python: mmap.mmap(...).
  • Переваги: Немає копіювання між пам’яттю ядра й програми, зручний довільний доступ, кілька процесів ділять ті самі сторінки (спільна пам’ять).
  • Анонімний mmap: Без файлу, так розподільники пам’яті (malloc для великих блоків) запитують пам’ять.
  • Пастки: Звернення до обрізаного файлу викликає сигнали (SIGBUS). За безлічі малих файлів чи послідовного читання звичайне читання часто не повільніше.
  • Застосування: Бази даних (LMDB, раніше MongoDB), виконувані файли й бібліотеки самі завантажуються через mmap, великі файли моделей у ШІ.
  • Сторінковий кеш: Дані лежать у сторінковому кеші ядра й витісняються за браку пам’яті.

Див. також: Copy-on-write