Непрерывная физическая память с использованием kmalloc на гостевой

Я реализую драйвер устройства в гостевой ОС. Для этого мне нужно выделить буферное пространство, которое требуется для непрерывной физической памяти. Гарантирует ли выделение буфера с помощью kmalloc в гостевой ОС непрерывный физический адрес? Если нет, как я могу этого достичь?

1 ответ

kmalloc() будет гарантировать непрерывную физическую память и предполагается использовать для небольших объектов, как указано в документации по функции:

* kmalloc is the normal method of allocating memory
* for objects smaller than page size in the kernel.

Для больших физически смежных распределений, вы должны использовать alloc_pages() вместо.

Однако, поскольку вы находитесь в гостевой ОС, физическая память, которую вы будете выделять, будет той, которую видит гость, а не гипервизор ("реальный"). Является ли выделенная память фактически физически смежной, зависит от того, как ваш гипервизор предоставляет доступ к памяти гостевой ОС.

Другие вопросы по тегам