Получают ли регулярные чтения преимущества от mmap?

Если я использую mmap для некоторого файлового дескриптора fd, будут ли регулярные вызовы read () быть «осведомленными» о том, что есть отображение памяти в файл и чтение из памяти напрямую?

Что делать, если mlock () используется после mmap (). Правильно ли утверждать, что никакое последующее чтение () в файле никогда не понадобится для доступа к диску?

Я думаю, это зависит от того, что вы подразумеваете под «осознанием».

Поскольку системный вызов read() является запросом к ядру, чтобы скопировать содержимое файла, начиная с текущей позиции, в указанный буфер памяти программы, read() в обычном файле выполнит эту задачу так же, как или не существует одновременно сопоставление памяти файла. Нет «осознания».

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