Если я использую mmap на некотором файловом дескрипторе fd, будут ли регулярные вызовы read() "знать", что существует отображение памяти файла и читать из памяти напрямую?
Что если mlock() используется после mmap(). Правильно ли утверждать, что ни один последующий read() файла не будет обращаться к диску?
Думаю, это зависит от того, что вы имеете в виду под словом «осведомленность».
Поскольку системный вызов read ()
является запросом к ядру для копирования содержимого файла, начиная с текущей позиции, в назначенный буфер памяти программы, read ()
для обычного файла выполнит эту задачу таким же образом, независимо от того, существует ли одновременно отображение файла в памяти. Нет никакого «осознания».
Теперь, если файл имеет формат mmap ()
ed и read ()
, вполне может быть достигнута оптимизация производительности. Например, если файл сначала read ()
, то считанные разделы файла, вероятно, уже находятся в кэше страниц, и для последующего доступа к отображению памяти не потребуется снова обращаться к ним с диска. . Или, наоборот, если есть отображение памяти, которое уже было выгружено, последующему read ()
не нужно будет снова переходить на диск. В этом смысле вы могли бы в некотором смысле считать, что mmap ()
и read ()
«осведомлены» друг о друге.