Понимание трансляции адресов Qemu

Это моя установка:

Внутри виртуальной машины в программе пользовательского пространства я храню переменную со значением «8» по адресу bf9ee1a0.

Я получаю физический адрес ff9ee1a0, соответствующий адресу, когда я вызываю функцию virt_to_phys в пространстве ядра внутри vm.

В qemu pte и pte_addr равны a5913865 и bf955f78 соответственно. Я просто использовал функцию x86_cpu_handle_mmu_fault и добавил определенные операторы printf. Насколько я понимаю, сопоставление ОС и qemu должно быть одинаковым. то есть bf9ee1a0 должен быть сопоставлен с a5913865.

Я знаю, что здесь задействовано много уровней перевода. Гость виртуальный — Гость физический — Хост виртуальный.

Вот мои вопросы: 1. Я хотел знать, где на самом деле хранятся данные?

  1. Что тогда означает virt_to_phys()?

  2. Я убедился, что адреса, используемые в управляющих регистрах, одинаковы как в os внутри vm, так и в qemu для пейджинга. Тогда почему такое несоответствие?

  3. Если нужно распечатать содержимое страницы, которую pte имеет в qemu, как использовать операторы printf для их печати?

Любое понимание очень ценится.


person SRKV    schedule 10.04.2015    source источник
comment
Я не знаю ответа на ваш вопрос (иначе я бы предложил его), но мне любопытно, зачем вам эта информация? Если вы пытаетесь общаться с внешним миром, не лучше ли использовать подход, основанный на TCP-сокетах?   -  person user590028    schedule 10.04.2015
comment
Я пытаюсь эмулировать новую инструкцию, используя qemu. И я хотел бы понять, как происходят переводы для хранения данных из пользовательского пространства — пространства ядра — виртуального пространства хоста qemu.   -  person SRKV    schedule 10.04.2015
comment
Возможный дубликат stackoverflow.com/questions/41860920/   -  person garlix    schedule 27.05.2020