2017-01-04 3 views
-1

Если вы mmap файл, он создает виртуальное отображение некоторого диапазона памяти. Затем, когда вы пытаетесь получить доступ к этому диапазону виртуального адреса, он копирует данные из региона, к которому вы привязываетесь, чтобы у вас были данные.Есть ли инверсия msync?

Предполагается, что Msync синхронизирует любые изменения, внесенные вами в виртуальный диапазон, и скопируйте эти изменения обратно в память, на которую вы указали карту.

Есть ли способ сделать обратное? То есть для переназначения виртуального пространства на тот же диапазон памяти, чтобы любые изменения, внесенные в физическую память с момента первого использования mmap, отражались в вашем виртуальном сопоставлении?

Прямым способом сделать это было бы просто отключить и снова сделать mmap, но я хочу знать, есть ли более эффективный способ сделать это.

Предполагается, что я просто использую mmap для чтения из физической памяти, не внося никаких изменений в него.

ответ

0

Реверсивная операция не работает, так как все изменения в базовом файле сразу же доступны в сопоставленной памяти - они имеют одну и ту же память. То же самое для других сопоставлений одного и того же файла - они относятся к одной и той же физической памяти, поэтому любое изменение сразу доступно во всех других процессах для всех сопоставлений одной и той же области.

Обратите внимание, что с помощью файла, который я имею в виду любого типа файла, в том числе физических устройств, обычные файлов и т.д.

+0

я прочитал в каком-то момент, что данные MMAP копируют в пространстве пользователя доступное место, и если он уже имеет доступные данные, он просто будет использовать это, а не копировать снова. Значит ли это, что ОС знает, чтобы восстановить данные, если они меняются? –

+0

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

Смежные вопросы