Обработчик не знает имя файла или путь, потому что он не использует их (вы можете сказать, потому что даже если файл удаляется из файловой системы после создания сопоставления, отображение продолжается до работа прекрасна, содержимое файла остается в силе до тех пор, пока все открытые дескрипторы файлов и отображение памяти не будут закрыты).
Он также не использует fd
; вам разрешено использовать close
fd
, переданный mmap
сразу после вызова mmap
, и отображение остается в силе (это действительно необходимо для некоторых систем с низким ulimit
с для открытых файлов файлов, вы можете отображать 10 000 файлов одновременно, но вы не удалось открыть fd
s для всех из них, если ulimit
для fds был 1000).
Случается, что при mmap
время диспетчер виртуальной памяти для ОС настраивает кучу виртуальных таблиц памяти, которые в основном говорят, что «эта память поддерживается следующими секторами диска». Он использует очень похожий процесс при извлечении данных, которые были записаны в файл подкачки, и их необходимо прочитать. Единственные различия в том, насколько агрессивно хранятся память и диск, независимо от того, является ли отображение в конкретный сектор диска статичным или динамическим (хотя даже для «реальных» файлов сектор диска может меняться по мере запуска, например, при записи в файловую систему с копированием на запись), следует ли записывать память (свопировать) или просто удалять (mmap
-ed файл без грязных страниц) под давлением памяти и т. д.
Существует несколько уровней преобразования адресов виртуальной памяти, которые отличаются процессором и ОС, поэтому точная механика отличается, но основная идея заключается в том, что после mmap
ing, вы обходите структуру каталогов и взаимодействуете с базовыми секторами диска таким образом, чтобы игнорировать такие вещи, как имена и пути.
Спасибо, ShadowRanger. В этом случае я был неправ в этой теме, не так ли? http://stackoverflow.com/questions/38850533/how-does-the-page-fault-handler-know-where-to-get-the-4k-bytes/38975619#38975619 Я думал, что нашел ответ. – xiaokaoy