Это моя установка:
Внутри виртуальной машины в программе пользовательского пространства я храню переменную со значением «8» по адресу bf9ee1a0.
Я получаю физический адрес ff9ee1a0, соответствующий адресу, когда я вызываю функцию virt_to_phys в пространстве ядра внутри vm.
В qemu pte и pte_addr равны a5913865 и bf955f78 соответственно. Я просто использовал функцию x86_cpu_handle_mmu_fault и добавил определенные операторы printf. Насколько я понимаю, сопоставление ОС и qemu должно быть одинаковым. то есть bf9ee1a0 должен быть сопоставлен с a5913865.
Я знаю, что здесь задействовано много уровней перевода. Гость виртуальный — Гость физический — Хост виртуальный.
Вот мои вопросы: 1. Я хотел знать, где на самом деле хранятся данные?
Что тогда означает virt_to_phys()?
Я убедился, что адреса, используемые в управляющих регистрах, одинаковы как в os внутри vm, так и в qemu для пейджинга. Тогда почему такое несоответствие?
Если нужно распечатать содержимое страницы, которую pte имеет в qemu, как использовать операторы printf для их печати?
Любое понимание очень ценится.