Книга: UNIX: взаимодействие процессов
Почему вообще используется отображение в память?
Почему вообще используется отображение в память?
До сих пор мы всегда говорили об отображении в память содержимого файла, который сначала открывается вызовом open, а затем отображается вызовом mmap. Удобство состоит в том, что все операции ввода-вывода осуществляются ядром и скрыты от программиста, а он просто пишет код, считывающий и записывающий данные в некоторую область памяти. Ему не приходится вызывать read, write или lseek. Часто это заметно упрощает код.
ПРИМЕЧАНИЕ
Вспомните нашу реализацию очередей сообщений Posix с использованием mmap, где значения сохранялись в структуре msg_hdr и считывались из нее же (листинги 5.26 и 5.28).
Следует, однако, иметь в виду, что не все файлы могут быть отображены в память. Попытка отобразить дескриптор, указывающий на терминал или сокет, приведет к возвращению ошибки при вызове mmap. К дескрипторам этих типов доступ осуществляется только с помощью read и write (и аналогичных вызовов).
Другой целью использования mmap может являться разделение памяти между неродственными процессами. В этом случае содержимое файла становится начальным содержимым разделяемой памяти и любые изменения, вносимые в нее процессами, копируются обратно в файл (что дает этому виду IPC живучесть файловой системы). Предполагается, что при вызове mmap указывается флаг MAP_SHARED, необходимый для разделения памяти между процессами.
ПРИМЕЧАНИЕ
Детали реализации mmap и связь этого вызова с механизмами реализации виртуальной памяти описаны в [14] для 4.4BSD и [6] для SVR4.
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Почему необходима миграция
- Почему так важен справедливый процесс?
- Почему потенциальные покупатели лгут?
- Пример применения метода «пять почему»
- Почему я написал эту книгу
- Видеопамять
- 7.3.2. EEPROM и флэш-память
- Что хранит в себе оперативная память
- Глава 14. Почему потребительский опыт играет важную роль в выстраивании клиентских взаимоотношений
- ЧАСТЬ 4 РАЗДЕЛЯЕМАЯ ПАМЯТЬ
- Глава 8 Оперативная память