Friday, May 18th

Last update12:13:00 PM GMT

Вы находитесь на: FreeBSD Управление памятью Отображение файлов

Отображение файлов

Системный вызов mmap запрашивает отображение файла в адресное пространство. Системный вызов может запросить либо отображение по определенному адресу, либо позволить ядру выбрать неиспользуемую область. Если это запрос для определенного диапазона адресов, ядро сначала проверяет, не используется ли уже эта часть адресного пространства. Если она используется, ядро сначала вызывает mmap для существующего отображения, затем продолжает с новым отображением.

Ядро реализует системный вызов mmap, проходя по списку структур vm_map_entry для процесса.

Новое отображение является подмножеством существующего. Существующее отображение разделяется на три части (две части, если новое отображение начинается с начала или заканчивается на конце существующего отображения). Существующая структура vmrnapentry увеличивается одной или двумя дополнительными структурами vm_map entry: одной, отображающей оставшуюся часть существующего отображения до нового отображения и другой, отображающей оставшуюся часть существующего отображения, следующего за новым отображением. Его перекрывающийся участок замещается новым отображением, как описано в параграфе, следующем за данным списком.

Новое отображение является надмножеством существующего. Старое отображение освобождается, как описано в разделе 5.9, и создается новое отображение, как описано в абзаце, следующем за данным списком.

Новое отображение частично захватывает и расширяет старое за его концом. Длина существующего отображения уменьшается на размер неотображенной области. Его перекрывающийся участок замещается новым отображением, как описано в абзаце, следующем за данным списком.

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

Кроме этих пяти основных типов перекрывания запрос нового отображения может охватывать несколько существующих отображений. В частности, новый запрос может быть составлен из нуля или одного типа 4, нуля или нескольких типа 3 и нуля или одного типа 5. Когда отображение сокращается, все теневые страницы, связанные с ним, освобождаются, поскольку они больше не нужны.

После заполнения адресного пространства нулями ядро создает новый vmjnapentry для описания нового диапазона адресов. Если отображаемый объект уже отображается другим процессом, новый элемент получает ссылку на существующий объект. Эта ссылка получается тем же способом, как описано в разделе 5.6 при создании нового процесса и необходимости отображения каждой из областей его родителя. Если этот запрос является отображением файла, ядро устанавливает новый vm тар entry для ссылки на его объект.

Если это отображение в анонимную область, тогда должен быть создан новый объект подкачки. Сначала выделяется новый объект с пейджером типа подкачки. Затем устанавливается vmjnap_entry, ссылающийся на объект.


Похожие:
Еще по теме:
Советуем прочитать:

Сейчас 46 гостей онлайн

Реклама на сайте: