Этот вопрос может быть забавным (к тому же я очень новичок в гипервизоре). У меня большие сомнения по поводу SLAT (зачем это требуется?). Если я не ошибаюсь, используется SLAT (трансляция адресов второго уровня). сделать преобразование адреса для гостевого виртуального адреса в фактический физический адрес (гостевой виртуальный адрес в физический хост (поправьте меня, если я ошибаюсь, например: guest virt addr --> host virt addr --> host физический адрес < /em>).Если аппаратное обеспечение не поддерживает SLAT, то мы должны использовать теневую таблицу страниц, чтобы сделать то же самое (что увеличивает нагрузку на ЦП для выполнения дополнительной трансляции в ПО).
Но мой вопрос: не можем ли мы пропустить эту обработку таблицы страниц, передав фактическую физическую память гостевой ОС и позволив гостевой ОС обрабатывать то же самое (вместо использования SLAT или теневое пейджинг)? например, несколько банков памяти UNMAP (диапазон адресов физической ОЗУ) из гипервизора и выделить то же самое для гостя и запустить этот конкретный процессор с выключенным mmu и точно перед началом выполнения гостевого кода. Код (может быть, загрузочный код ядра), работающий в гостевой системе, позволяет ему создавать свои собственные таблицы страниц и включать MMU вместо SLAT? Когда нам требуется остановить виртуальную машину (в конце гостевая опция должна снова остановить mmu), мы можем восстановить подкачку HV обратно к этому конкретному ядру ЦП и включить MMU, верно?
Есть ли в этом подходе какая-то дыра/проблема (есть ли в этом смысл?)? Можем ли мы пропустить SLAT в виртуализации?
(Пожалуйста, извините меня, если мой вопрос не имеет смысла, так как я новичок в виртуализации :()