Если вы mmap файл, он создает виртуальное отображение некоторого диапазона памяти. Затем, когда вы пытаетесь получить доступ к этому диапазону виртуального адреса, он копирует данные из региона, к которому вы привязываетесь, чтобы у вас были данные.Есть ли инверсия msync?
Предполагается, что Msync синхронизирует любые изменения, внесенные вами в виртуальный диапазон, и скопируйте эти изменения обратно в память, на которую вы указали карту.
Есть ли способ сделать обратное? То есть для переназначения виртуального пространства на тот же диапазон памяти, чтобы любые изменения, внесенные в физическую память с момента первого использования mmap, отражались в вашем виртуальном сопоставлении?
Прямым способом сделать это было бы просто отключить и снова сделать mmap, но я хочу знать, есть ли более эффективный способ сделать это.
Предполагается, что я просто использую mmap для чтения из физической памяти, не внося никаких изменений в него.
я прочитал в каком-то момент, что данные MMAP копируют в пространстве пользователя доступное место, и если он уже имеет доступные данные, он просто будет использовать это, а не копировать снова. Значит ли это, что ОС знает, чтобы восстановить данные, если они меняются? –
@GraigNelson: он не копирует, он отображает. Таким образом, в ОЗУ есть одно место, где хранятся данные, и он отображается во многих местах в виртуальном адресном пространстве многих процессов. Они по-прежнему указывают на одно и то же физическое местоположение, хотя любое обновление сразу доступно всем остальным, которые отображали одну и ту же область. Примечание: он не должен быть ОЗУ, он может быть файлом (который затем отображается через кеш/буфер), это может быть устройство, такое как графический процессор, сетевая карта и т. Д. –