Непрерывная физическая память с использованием kmalloc на гостевой
Я реализую драйвер устройства в гостевой ОС. Для этого мне нужно выделить буферное пространство, которое требуется для непрерывной физической памяти. Гарантирует ли выделение буфера с помощью kmalloc в гостевой ОС непрерывный физический адрес? Если нет, как я могу этого достичь?
1 ответ
kmalloc()
будет гарантировать непрерывную физическую память и предполагается использовать для небольших объектов, как указано в документации по функции:
* kmalloc is the normal method of allocating memory
* for objects smaller than page size in the kernel.
Для больших физически смежных распределений, вы должны использовать alloc_pages()
вместо.
Однако, поскольку вы находитесь в гостевой ОС, физическая память, которую вы будете выделять, будет той, которую видит гость, а не гипервизор ("реальный"). Является ли выделенная память фактически физически смежной, зависит от того, как ваш гипервизор предоставляет доступ к памяти гостевой ОС.