Урок 14: mmap() — отображение файлов в память
mmap() отображает файл или анонимную память напрямую в VAS. Это позволяет читать большой файл, как если бы он был массивом в памяти, без явных вызовов read(). В этом уроке мы изучим API, разницу между MAP_PRIVATE и MAP_SHARED и связь с CUDA IPC.
mmap — это как открыть книгу прямо на столе, вместо того чтобы каждый раз копировать главы. Вы читаете напрямую из источника.
- mmap
- Системный вызов, который отображает файл или анонимную память напрямую в VAS процесса. Возвращает указатель на начало области.
- страничный отказ (page fault)
- Исключение, возникающее, когда процесс обращается к странице памяти, которой нет в RAM. ОС загружает страницу (из файла или swap) и возобновляет выполнение.
- MAP_SHARED
- Записи распространяются обратно в файл и видны другим процессам, отображающим тот же файл. Используется для IPC.
- MAP_PRIVATE
- Copy-on-write: записи приватны для текущего процесса и не записываются обратно в файл. Файлы ELF загружаются с MAP_PRIVATE.
- отображение с файловой поддержкой (file-backed mapping)
- mmap, источником данных которого является файл. Страничные отказы загружают данные из файла. Противопоставляется анонимному mmap, источником которого являются нули.