ядро linux предварительно выделенная не отображенная виртуальная память

У меня следующий сценарий:
qemu-kvm (гость) --- имеет виртуальную память, получить физическую --->
virtio (отправить физический адрес на хост) --- сопоставить физическую виртуальную память хоста - ->
host
Предварительно выделена физическая память. Есть ли способ предварительно выделить не отображенную виртуальную память на хосте, чтобы ему не приходилось искать свободные виртуальные адресные пространства?
Будет ли это оправданной конструктивной проблемой, если буферы довольно большие?
Конец В результате я хочу создать пул виртуальных адресных пространств для сопоставления полученных буферов.
После каждого задания я хочу отключить их и отправить обратно виртуальное адресное пространство в пул.


person Catalin Vasile    schedule 28.11.2014    source источник


Ответы (1)


Чтобы зарезервировать диапазон виртуальной памяти без фактического закрепления в нем каких-либо физических страниц, передайте PROT_NONE в качестве параметра защиты mmap(). Позже вы можете использовать mprotect() в этом диапазоне, чтобы сделать его доступным для чтения / записи, когда это необходимо - ядро ​​зафиксирует физические страницы при первом доступе. Когда вы закончите, вы можете снова использовать mprotect(), чтобы сбросить статус защиты диапазона адресов обратно на PROT_NONE.

person oakad    schedule 28.11.2014
comment
м ... Мой вопрос связан с пространством ядра, где я не могу работать с mmap - person Catalin Vasile; 28.11.2014
comment
Тогда вам нужно переформулировать свой вопрос. Виртуальные адресные пространства в Linux всегда связаны с процессами пользовательского пространства (через объект mm_struct). Чтобы прикрепить к нему отображение, вам нужно выделить объект vm_area_struct, заполнить его, а затем выполнить что-то вроде insert_vm_struct(mm, vma), где mm указывает на виртуальное адресное пространство вашего процесса. Когда процесс пользовательского пространства достигает заданного таким образом диапазона виртуальных адресов, на стороне ядра будет запущен обратный вызов, что позволит вам играть в любые игры с отображением страниц. - person oakad; 28.11.2014