Mmap () - это один из способов управления связью между {адрес, физическая память, дисковые блоки}. Все три члена этой ассоциации являются ресурсами.Ассоциация сохраняется внутри записей таблицы страниц (PTE)
Что фактически делает mmap ():
- [возможно] выделяет диапазон адресов внутри пользовательского процесса.Этот диапазон должен состоять из последовательных адресов (не должен перекрываться с существующими диапазонами)
- создавать PTE для запрошенного диапазона и заставлять их указывать на страницы в пределах диапазона адресов
- заставлять PTE указывать нафайл mmap () ed
- [может быть] выделить и предварительно извлечь (некоторые) страницы
- [возможно] зарезервировать некоторое резервное хранилище.
Многие (3 изиз 5) вышеупомянутые шаги являются необязательными и зависят от фактических аргументов и флагов, предоставленных в вызове mmap ().(fd может быть -1: создание анонимного отображения, начальный адрес может быть NULL: mmap должен выделять (ранее) неиспользованный диапазон памяти)
После вызова mmap (), pagefault-Обработчик внутри ядра должен уметь выяснять, что делать.(прикрепить физический оперативный диск к странице; очистить и отсоединить; выделить и COW, ...)
не резервирование пространства подкачки означает, что вызывающая сторона полагает, что места подкачки будет достаточно в любое время в будущем .Пространство подкачки совместно используется всеми процессами, поэтому никогда не может быть гарантии, что его достаточно.Предварительное распределение (более или менее) дает гарантию, что вызывающему процессу всегда будет достаточно этого.(когда нет: mmap () должен был произойти сбой)