Шрифт:
Файлы, отображаемые в памяти
Системный вызов mmap(2) предоставляет механизм доступа к файлам, альтернативный вызовам read(2) и write(2). С помощью этого вызова процесс имеет возможность отобразить участки файла в собственное адресное пространство. После этого данные файла могут быть получены или записаны путем чтения или записи в память. Функция mmap(2) определяется следующим образом:
Этот вызов задает отображение
Таблица 2.12. Права доступа к области памяти
Значение аргумента prot | Описание | Права доступа к файлу |
---|---|---|
PROT_READ | Область доступна для чтения | r |
PROT_WRITE | Область доступна для записи | w |
PROT_EXEC | Область доступна для исполнения | x |
PROT_NONE | Область недоступна | – |
Обычно значение
Операционная система округляет значение len до следующей страницы виртуальной памяти. [19] Например, если размер файла 96 байтов, а размер страницы 4 Кбайт, то система все равно выделит область памяти размером 4096 байтов. При этом 96 байтов займут собственно данные файла, а остальные 4000 байтов будут заполнены нулями. Процесс может модифицировать и оставшиеся 4000 байтов, но эти изменения не отразятся на содержимом файла. При обращении к участку памяти, лежащему за пределами файла, ядро отправит процессу сигнал
19
Организация виртуальной памяти подробно рассматривается в главе 3.
20
Если быть более точным, сигнал посылается процессу, когда происходит обращение к странице памяти, на которую не отображается ни один из участков файла. Таким образом, в приведенном примере сигнал процессу не будет отправлен.
Использование права на исполнение (
Аргумент
Таблица 2.13. Типы отображения
Значение аргумента flags | Описание |
---|---|
MAP SHARED | Область памяти может совместно использоваться несколькими процессами |
MAP PRIVATE | Область памяти используется только вызывающим процессом |
MAP_FIXED | Требует выделения памяти, начиная точно с адреса addr |
MAP_NORESERVE | He требует резервирования области свопинга |
В случае указания
Не рекомендуется использовать флаг