[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
Параметры mmap(2)
addr Если не установлен флаг MAP_FIXED, ненулевой виртуальный адрес
addr используется для указания рекомендуемого адреса (pa), по
которому будет размещено отображение. Каким образом система
располагает pa вблизи от addr, зависит от реализации. Нулевое
значение addr дает системе полную свободу в выборе pa.
len Длина отображаемого участка в байтах. Иными словами, отображение
будет размещено в диапазоне [pa, pa+len-1]. mmap(2) выделяет
память страницами. То есть, при запросе отображения части
страницы, будет отображена вся страница, покрывающая указанные
байты.
prot Параметр prot определяет права доступа на чтение, запись,
исполнение (или их комбинаций с помощью побитового ИЛИ) для
отображаемых страниц. Символьные константы определены в
<sys/mman.h>:
PROT_READ страницу можно читать
PROT_WRITE страницу можно изменять
PROT_EXEC страницу можно исполнять. Динамическая сборка - одно
из применений отображения памяти с флагом PROT_EXEC.
При запуске программы, собранной с динамически
разделяемыми библиотеками, загрузчик отображает
разделяемые библиотеки в память и исполняет.
mprotect(2) можно использовать для изменения защиты доступа
отображаемой памяти
flags Передает информацию об обработке страниц. Символьные
константы для этого параметра определены в <sys/mman.h>:
MAP_SHARED Если определен этот флаг, обращения на запись вызовут
изменение отображенного объекта. Иными словами, если
процесс изменяет файл, отображенный с флагом
MAP_SHARED, эти изменения будут доступны остальным
процессам.
MAP_PRIVATE При указании этого флага, первое изменение
отображенного объекта вызовет создание отдельной копии
объекта и переназначит запись в эту копию. До первой
операции записи эта копия не создается. Следовательно,
процессы, отобразившие объект с флагом MAP_SHARED,
могут делать в нем изменения, а процесс, отобразивший
объект с флагом MAP_PRIVATE, будет иметь доступ к этим
изменениям до своей первой записи в данный объект. Все
изменения объекта, отображенного с флагом MAP_PRIVATE,
производятся не над самим объектом, а над его копией.
Например, если процесс отобразил файл с флагом
MAP_PRIVATE и изменил его, то изменения будут сделаны
в личной копии. Даже если процесс вызовет msync(2) или
munmap(2), на дисковом файле изменения не будут
сделаны.
MAP_FIXED Сообщает системе, что значение pa должно быть равно
addr в точности. Использование этого флага не
рекомендуется, так как может повлечь неэффективное
распределение ресурсов. Когда этот флаг не задан,
система сама выбирает оптимальный путь сопоставления
pa и addr.
Либо MAP_SHARED, либо MAP_PRIVATE - но не оба - должны быть
указаны. Тип отображения сохраняется при fork(2).
fd Файловый дескриптор отображаемого файла/устройства.
off Отступ от начала файла, с которого начинается отображение. Если,
к примеру, off равно нулю, а len 120, то отображена будет часть
файла с начала до 120-го байта. Если off равно 10, а len 20, то
отобразятся байты с 10-го по 30-й.
ПАРАМЕТРЫ mmap(2)
addr адрес отображения. Если 0, система выбирает его сама
len длина отображения
PROT_READ страницу можно читать
prot PROT_WRITE страницу можно писать
PROT_EXEC страницу можно исполнять
MAP_SHARED разделяемые изменения
flags MAP_PRIVATE частные изменения
MAP_FIXED интерпретировать addr буквально
fd дескриптор файла
off отображение начинается с off байтов от начала файла