Что именно делают таблицы теневых страниц (для VMM)? - программирование
Подтвердить что ты не робот

Что именно делают таблицы теневых страниц (для VMM)?

Я понимаю, что таблицы теневой страницы устраняют необходимость эмуляции физической памяти внутри виртуальной машины.

т.

вместо: guest os → vmm + виртуальная физическая память → хост OS → аппаратное обеспечение хоста

это просто: guest os → vmm → host OS → аппаратное обеспечение хоста

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

(по домашнему заданию я имею в виду, что я изучаю тест, и нам нужно понять эту концепцию).

4b9b3361

Ответ 1

Таблицы теневой страницы используются гипервизором для отслеживания состояния, в котором гость "думает" о своих таблицах страниц. Гост не может быть разрешен доступ к таблицам страниц оборудования, поскольку тогда он будет по существу управлять машиной. Таким образом, гипервизор хранит "реальные" сопоставления (гостевой виртуальный → хост физический) в аппаратном обеспечении, когда соответствующий гость выполняет, и сохраняет представление таблиц страниц, которые гость считает, что он использует "в тени" или в что мне нравится думать об этом.

Обратите внимание, что это исключает шаг перевода GVA- > GPA.

Что касается ошибок страниц, ничего не меняется с точки зрения аппаратного обеспечения (помните, что гипервизор делает так, чтобы таблицы страниц, используемые аппаратным обеспечением, содержали GVA- > HPA-сопоставления), ошибка страницы просто генерирует исключение и перенаправлять на соответствующий обработчик исключений. Однако при возникновении ошибки страницы во время работы виртуальной машины это исключение может быть перенаправлено на гипервизор, который затем может обрабатывать его соответствующим образом.

Гипервизор должен создавать эти таблицы теневой страницы, поскольку он видит ошибки страницы, созданные гостем. Когда гость пишет сопоставление в одну из своих таблиц страниц, гипервизор не будет знать сразу, поэтому таблицы теневой страницы не будут мгновенно "синхронизироваться" с тем, что хочет гость. Таким образом, гипервизор будет создавать таблицы теневой страницы, например, следующим образом:

  • Гость пишет сопоставление для VA 0xdeadbeef в его таблицах страниц (местоположение в памяти), но помните, что это сопоставление не используется аппаратным обеспечением.
  • Доступ гостей к 0xdeadbeef, что вызывает ошибку страницы, потому что реальные таблицы страниц не были обновлены, чтобы добавить отображение
  • Ошибка страницы отправляется гипервизору
  • Hypervisor просматривает таблицы гостевой страницы и замечает, что они отличаются от таблиц теневых страниц, говорит: "Эй, я еще не создал реальное сопоставление для 0xdeadbeef"
  • Таким образом, он обновляет свои таблицы теневой страницы и создает соответствующее сопоставление 0xdeadbeef → HPA для используемого оборудования.

Предыдущий случай называется ошибкой теневой страницы, поскольку он вызван исключительно внедрением виртуализации памяти. Таким образом, обработка ошибки страницы остановится на гипервизоре, и гостевая ОС не будет знать, что это даже произошло. Обратите внимание, что гость также может генерировать неподдельные ошибки страницы из-за сопоставлений, которые он еще не пытался создать, и гипервизор будет перенаправлять их обратно в гостя. Также понимайте, что весь этот процесс подразумевает, что каждая ошибка страницы, возникающая во время выполнения гостевой программы, должна вызывать выход из VMM, чтобы таблицы теневой страницы могли быть свежими. Это дорого, и одна из причин, почему аппаратная поддержка была введена для виртуализации памяти. (здесь является одним быстрым введением вложенных или расширенных таблиц страниц)

Хорошей ссылкой для этого является эта книга

Ответ 2

Когда гость пишет сопоставление в одну из своих таблиц страниц, гипервизор не будет знать сразу, поэтому таблицы теневой страницы не будут мгновенно "синхронизироваться" с тем, что хочет гость.

Не точно. Таблицы гостевых страниц доступны только для чтения. Всякий раз, когда в таблице гостевой страницы добавляется обновление (например, добавление нового сопоставления), оно ловушки к гипервизору, и гипервизор обновляет таблицу теневой страницы, соответственно, "синхронно" с гостем.

Ссылки: